安装Xtrabackup工具包
-
percona官方yum源
-
下载yum源
我这里的环境是centos7.9,下载
percona-release-1.0-27.noarch.rpm -
安装yum源
rpm -ivh percona-release-1.0-27.noarch.rpmyum clean allyum makecache fast
-
测试并安装
yum list percona-xtrabackup*yum install percona-xtrabackup-80.x86_64
- 24 - MySQL5.6 | 7x
- 80 - MySQL8.x
工具介绍
-
xtrabackup 备份恢复过程
原理:InnoDB内部会维护一个redo日志文件,我们也称为事务日志文件,事务日志会记录每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行前滚和回滚操作。(已提交的事务应用到数据文件叫前滚,已修改但未提交的事务执行回滚)**
备份
Xtrabackup 在启动时会记住log sequence number(LSN,简单理解为一个发票号,每增开一个发票,LSN就会增加),并复制所有的数据文件,复制过程需要一些时间,所以这期间如果有数据变更,Xtrabackup 会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改,这个过程是持续进行。
准备
xtrabackup 使用上一步复制的事务日志,对各个数据文件执行灾难恢复。确保数据一致,恢复完成后会重做redo
恢复
将数据文件拷贝回数据目录
举例
innobackupex的常用选项:
--host:指定数据库服务器地址
--port:指定连接到数据库服务器的哪个端口
--socket:连接本地数据库时使用的套接字路径
--no-timestamp:在使用innobackupex进行备份时,可使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据
--defaults-file:可通过此选项指定其它的配置文件;但是使用时必须放于所有选项的最前面
--incremental:指定创建增量备份
--incremental-basedir:指定基于哪个备份做增量备份
--apply-log:应用xtrabackup_logfile文件,重做已提交的事务,回滚未提交的事务
--redo-only:只重做已提交的事务,不准加滚
--use-memory:在“准备”阶段可提供多少内存以加速处理,默认是100M
--copy-back:恢复备份至数据库服务器的数据目录
--compact:压缩备份
--stream={tar|xbstream}:对备份的数据流式化处理
--target-dir: 备份文件存储的路径
使用xtrabackup进行完全备份
-
创建一个备份用户用于执行备份操作
create user 'backuser'@'localhost' identified by '123456';GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT, BACKUP_ADMIN, SELECT ON *.* TO 'backuser'@'localhost';FLUSH PRIVILEGES;
-
进行全库备份
xtrabackup --defaults-file=/usr/local/mysql/etc/my.cnf --socket=/tmp/mysql.sock --user=backuser --password=123456 --backup --target-dir=/data/backup
-
模拟数据库异常
systemctl stop mysqlrm -rf /usr/local/mysql/data/*
-
进行全库恢复操作
prepare应用增量的事务日志
xtrabackup --host=localhost --user=backuser --password=123456 --port=3306 --prepare --target-dir=/data/backupxtrabackup --host=localhost --user=backuser --password=123456 --port=3306 --datadir=/usr/local/mysql/data --copy-back --target-dir=/data/backup
-
测试mysql是否正常。
chown -R mysql:mysql /usr/local/mysql/data
使用xtrabackup针对海量数据进行备份
- 使用流特性,需要指定--stream选项,使用xbstream备份:(推荐方式)
xtrbackup --defaults-file=/etc/my.cnf --user=root --password=root --compress-threads=8 --backup --stream=xbstream --parallel=4|gzip > /data/xtrabackup/mysqlbak1.xb.gz
- 备份到远程主机
xtrbackup --defaults-file=/etc/my.cnf --user=root --password=root --compress-threads=8 --backup --stream=xbstream --parallel=4|ssh 172.20.1.1 "gzip > /data/xtrabackup/mysqlbak1.xb.gz"
--parallel=4: 加速备份参数,这个选项会指定xtrabackup备份文件的IO线程数。
--compress-threads 备份压缩的并行线程,默认为1
/mnt/mysqlbak1.xb.gz是远程主机1.1上面的路径。
- 提取xbstream流,解压文件方式如下:
gzip -d -c mysqlbak2.xb.gz| xbstream -x -v -C xtrabackup_backupfiles其中xtrabackup_backupfiles表示将压缩包解压到这个目录下。