场景:当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备份会把文件进行压缩,还原后文件会消失