xtrabackup 对pxc节点进行备份恢复

时间:2021-03-17 19:50:16

xtrabackup 对pxc节点进行备份恢复

全量备份一个节点的数据,当节点挂掉时,使用备份恢复到最近状态,再启动节点加入集群。

备份

xtrabackup 命令小解释:

  • --defaults-file=/etc/my.cnf : 指定pxc配置文件,默认/etc/my.cnf,手动指定该参数需要置于第一位,此配置文件里必须指定datadir

  • --user=root : 用户

  • --password=*** : 密码

  • --socket=/tmp/mysql-pxc.sock : sock 文件

  • --target-dir=/data/backup/ : 指定备份路径,不存在会自动创建

  • --backup : 进行备份时使用的参数

  • --stream=tar : 指定压缩模式,tar、xbstream

  • --prepare : 执行数据文件拷贝前的动作,同innobackup 的 --apply-log。一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。该参数的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。

  • --copy-back : 拷贝数据文件到datadir中,你开心用mv、cp、rsync都行

  • --galera-info : 记录集群的uuid和最后提交的事物seqno

实际环境中,可能很多参数都不需要。

本地备份:

/usr/bin/xtrabackup --defaults-file=/etc/my.cnf --user=root --password=**** --socket=/tmp/mysql-pxc.sock --backup  --galera-info --target-dir=/data/backup/all_db_backup

本地压缩备份:

/usr/bin/xtrabackup --defaults-file=/etc/my.cnf --user=root --password=**** --socket=/tmp/mysql-pxc.sock --backup  --galera-info  --target-dir=/data/backup/ --stream=tar > all_db_backup.tar.gz

远程备份:

/usr/bin/xtrabackup  --defaults-file=/etc/my.cnf --user=root --password=**** --socket=/tmp/mysql-pxc.sock --backup  --galera-info  --target-dir=/data/backup/ --stream=tar | ssh -p 22 -o StrictHostKeyChecking=no 172.16.11.216 "cat -> /data/backup/all_db_backup.tar.gz"

# 或者

/usr/bin/xtrabackup  --defaults-file=/etc/my.cnf --user=root --password=`cat /data/save/mysql_root` --socket=/tmp/mysql-pxc.sock --backup  --galera-info  --target-dir=/data/backup/ --stream=xbstream | ssh -p 22 -o StrictHostKeyChecking=no 172.16.11.216 "/usr/bin/xbstream -x -C  /data/backup/"

恢复

我们假设节点已经down了,那就直接把节点datadir清空吧。

rm -rf /data/database/mysql/*

# 如果是压缩备份,解压前加个 -i 参数
tar -ixf all_db_backup.tar.gz -C /data/backup/all_db_backup # 先prepare
/usr/bin/xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup/all_db_backup # 再copyback
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/all_db_backup

需要借助xtrabackup_galera_info 中的uuid和seqno来实现以IST的方式加入集群:

#配置grastate.dat
cat /data/database/pxc3306/xtrabackup_galera_info
bf26341f-43cb-11e8-a863-62c0eb4d9e79:728[ vim /data/database/pxc3306/grastate.dat
LERA saved state
# GALERA saved state
version: 2.1
uuid: bf26341f-43cb-11e8-a863-62c0eb4d9e79
seqno: 728
safe_to_bootstrap: 0 # 授权
chown mysql:mysql -R /data/database/mysql # 查看其它节点中,gcacche缓存的最小seqno
(root@localhost) [(none)]> show status like 'wsrep_local_cached_downto';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| wsrep_local_cached_downto | 693 |
+---------------------------+-------+
1 row in set (0.01 sec)

其它节点的gcache缓存的最小seqno为693,而宕机节点的为728,可以直接启动以ist的方式加入集群:

/etc/init.d/mysql  start

这样就可以使用备份数据恢复节点,启动后集群会选举一个节点作为Donor,以IST的方式同步新增的数据。