Mysql使用percona-xtrabackup进行数据备份还原

场景:当mysql数据库数据量很大(1T-10T),在不影响正常使用的情况下,进行数据热备迁移还原。
本文档主要介绍:Xtrabackup 全量备份与全量恢复

一、XtraBackup是什么

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)。
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表;
2、innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

二、XtraBackup有什么作用

1、在线(热)备份整个库的InnoDB、 XtraDB表
2、在xtrabackup的上一次整库备份基础上做增量备份(innodb only)以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)
3、MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。
4、Xtrabackup工具支持对InnoDB存储引擎的增量备份。

三、Xtrabackup备份原理

 XtraBackup基于InnoDB的crash-recovery功能。它会复制innodb 的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致

InnoDB维护了一个redo log,又称为 transaction log,事务日志,它包含了innodb数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:
1.It applies committed transaction log entries to the data files
2.it performs an undo operation on any transactions that modified data but did not commit.
XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走。
在prepare过程中,XtraBackup使用复制到的transactions log 对备份出来的innodb data file 进行crash recovery。

四、XtraBackup使用方法

1、下载并安装percona-xtrabackup工具
wget https://www.percona.com/download ... .7-1.el6.x86_64.rpm

yum localinstall -y percona-xtrabackup-24-2.4.7-1.el6.x86_64.rpm

2、将mysql数据库整个备份到/tmp目录下,并查看master位置

innobackupex --defaults-file="/etc/my.cnf" --user=root -p --socket=/usr/local/mysql/mysql.sock /tmp

查看master位置(后续进行同步需要,请记录)

cat /tmp/2020-11-24_07-34-50/xtrabackup_binlog_info

master-bin.000002 211 4c6237f8-a7da-11e6-1010-000c29f333f8:1-2
3、把备份到的文件进行迁移到从库上
#scp -r /tmp/2020-11-24_07-34-50/ 192.168.1.12:/tmp
4、在从库上把备份文件进行预处理,进行事务检查

innobackupex --defaults-file="/etc/my.cnf" --user=root -p --socket=/usr/local/mysql/mysql.sock --apply-log --use-memory=3G /tmp/2020-11-24_07-34-50/

5、清理从库数据(建议关闭服务后清理),恢复数据
#/etc/init.d/mysqld stop
#rm -rf /data/mysql/data/
#rm –rf /data/binlogs/

#rm –rf /data/relaylogs/*
恢复数据

innobackupex --defaults-file="/etc/my.cnf" --user=root --socket=/usr/local/mysql/mysql.sock --move-back /tmp/2020-11-24_07-34-50/

6、授权、启动从库
#chown mysql:mysql /data/mysql –R
#/etc/init.d/mysqld start
7、创建同步账号
mysql> grant replication slave,reload,super on . to repl@192.168.1.13 identified by ‘repl@1233‘;
mysql> FLUSH PRIVILEGES;
8、从库执行同步(master 位置请查看步骤2)
mysql>change master to master_host=‘192.168.1.12‘,master_user=‘repl‘,master_password=‘ repl@1233‘,master_log_file=‘master-bin.000002‘,master_log_pos=211;
mysql>start slave;
mysql> show slave status\G
Slave_IO_Running: Yes # 表示配置成功
Slave_SQL_Running: Yes # 表示配置成功
致此,全备还原已完成,xtraBackup备份会把文件进行压缩,还原后文件会消失

Mysql使用percona-xtrabackup进行数据备份还原

上一篇:mysql中事务的并发问题与隔离级别


下一篇:Apache Flink文件包含(CVE-2020-17519)