注意:此步骤只适应于基于备份文件恢复MySQL主从,恢复前停掉proxysql (mysql+xenon+proxysql 架构)
一、恢复主库
1、用xbcloud获取S3上的备份文件
#下载全量备份
xbcloud get --storage=s3 --s3-endpoint='XXXXXXX' --s3-access-key='XXXXXX' --s3-secret-key='XXXXXX' --s3-bucket='backup-common' --parallel=4 --insecure --s3-bucket-lookup=PATH 20220701/XXXXXXX_3306/full_2022-07-01_01-20-01 2>/data/backup/download.log | xbstream -x -C /data/mysql3306/backuptmp/full_2022-07-01_01-20-01 --parallel=4
#下载增量备份(如有,有几次增量备份,就下载几次)
xbcloud get --storage=s3 --s3-endpoint='XXXXXXX' --s3-access-key='XXXXXX' --s3-secret-key='XXXXXXXX' --s3-bucket='backup-common' --parallel=4 --insecure --s3-bucket-lookup=PATH 20220701/ XXXXXXX_3306/inc_2022-07-02_01-20-01 2>/data/backup/download.log | xbstream -x -C /data/mysql3306/backuptmp/inc_2022-07-02_01-20-01 --parallel=4
参数说明:
--s3-endpoint:S3地址
--s3-access-key:S3 Access key/用户名
--s3-secret-key:S3 Secret key/密码
--s3-bucket:S3 存储桶
20220701/ XXXXXXX_3306/full_2022-07-01_01-20-01:拉取S3上备份文件路径
/data/backup/download.log :拉取文件产生的日志
/data/mysql3306/backuptmp/full_2022-07-01_01-20-01:拉取到本地服务器的存储路径
2、准备下载的备份文件
#准备下载的完整备份(如无增量备份,去掉 --apply-log-only)
xtrabackup --defaults-file=/data/mysql3306/mysql57/mysql3306.cnf --user=root --password='XXXXX' --prepare --apply-log-only --target-dir=/data/mysql3306/backuptmp/full_2022-07-01_01-20-01
#准备增量备份(有几次增量备份就准备几次)
xtrabackup --defaults-file=/data/mysql3306/mysql57/mysql3306.cnf --user=root --password='XXXXXX' --prepare --apply-log-only --target-dir=/data/mysql3306/backuptmp/full_2022-07-01_01-20-01 --incremental-dir=/data/mysql3306/backuptmp/inc_2022-07-02_01-20-01
。。。
(注意:最后一个增量合并可以不用--apply-log-only参数,这样就不需要下一步的准备全量备份了)
#准备增量备份可以都加--apply-log-only,最后在准备一次全量即可
#注意,这里没有--apply-log-only参数
xtrabackup --defaults-file=/data/mysql3306/mysql57/mysql3306.cnf --user=root --password='XXXXXX' --prepare --target-dir=/data/mysql3306/backuptmp/full_2022-07-01_01-20-01
#参数说明
--defaults-file:待恢复MySQL实例配置文件
--user:MySQL实例用户
--password:MySQL实例用户密码
--apply-log-only:prepare时,只执行redo,不回滚事务日志,用于增量备份()
--target-dir:下载的全量文件路径
--incremental-dir:下载的增量备份文件路径
3、恢复MySQL实例(主库)
# --copy-back或者--move-back(空间充足用--copy-back,备份文件可以重复使用)
xtrabackup --defaults-file=/data/mysql3306/mysql57/mysql3306.cnf --copy-back --user=root --password='XXXXXX' --target-dir=/data/mysql3306/backuptmp
4、连接恢复好的数据库
#执行reset master,清理掉gtid(注意,此操作只适应于基于备份文件恢复MySQL主从)
二、恢复从库
#方案一:
1)启动xenon(先启动主库,再启动从库的)
$ cd /data/mysql3306/xenon
$ bin/xenon -c /data/mysql3306/xenon/conf/xenon.json >> /data/mysql3306/xenon/log/xenon.log 2>&1 &
2)用xenon的rebuildme重建从库
$ cd /data/xenon_mysql/xenon/bin/
$ ./xenoncli mysql rebuildme --force
输出日志参考:xenon_rebuildme日志
$ ./xenoncli cluster mysql #查看恢复状态
$ ./xenoncli cluster gtid
#方案二:
1)把主库上prepare好的备份文件scp到从库
可以直接scp到从库的数据目录
scp -r /data/mysql3306/backuptmp/full_2022-07-01_01-20-01 apps@x.x.x.x:/data/mysql3306/mysqldata_3306/data
2)启动从库实例
$ /data/mysql3306/mysql57/bin/mysqld_safe --defaults-file=/data/mysql3306/mysql57/mysql3306.cnf&
3)连接从MySQL,主从配置
reset master;
reset slave all;
change master to master_host='XXXXX',master_port=3306,master_user='repl',master_password='XXXXXXX',master_auto_position=1;
start slave;
show slave status\G
4)启动xenon(先启动主库,再启动从库的)
$ cd /data/mysql3306/xenon
$ bin/xenon -c /data/mysql3306/xenon/conf/xenon.json >> /data/mysql3306/xenon/log/xenon.log 2>&1 &