Xtrabackup流备份恢复MySQL从库
来自Linux78|wiki
目录
背景
从库出问题,需要重做从库,一般的恢复方法是在主库上xtrabackup物理热备,然后拷贝备份文件到从库恢复。但主库数据目录有300G,而磁盘剩余空间只有100G,可以采用xtrabackup的流备份恢复从库。流备份可以边备份边压缩边传输,不会占用本地空间。
服务器 角色 192.168.199.198 master 192.168.199.199 slave
xtrabackup的流备份恢复MySQL从库步骤
从库关闭MySQL,并移除数据目录
kill -9 $MYSQLD_PID cd /database/mysql/3306/ rm -rf data
主库上授权 (如果无授权)
grant reload,lock tables,replication client,process on *.* to backup@'%' identified by 'fanderpassword'; grant replication slave,replication client on *.* to repl@'%' identified by 'fanderpassword';
主库和从库上分别安装xtrabackup
# wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.14/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.14-1.el6.x86_64.rpm
主、从库分别建备份目录
mkdir -p /data/backups/2019061
主库上发起流备份,并通过管道传输到从库解包
xtrabackup -ubackup -pfanderpassword -H127.0.0.1 -P3306 \ --backup \ --stream=xbstream \ --compress \ --target-dir=/data/backups/20190618 | ssh root@192.168.199.199 "xbstream -x -C /data/backups/20190618"
!!虽然设置了主库本地备份的路径/data/backups/20190618,但观察可以发现其不会占用空间。
从库上解压,解压后删除原压缩文件
xtrabackup --decompress --parallel=4 --remove-original --target-dir=/data/backups/20190618
从库上prepare阶段,应用redo log
xtrabackup --prepare --use-memory=1GB --target-dir=/data/backups/20190618
从库采用move-back方法,把应用好的数据恢复到数据目录
xtrabackup --defaults-file=/data/mysql/mysql3306/my.cnf --move-back --parallel=4 --target-dir=/data/backups/20190618 注意:这里有一个坑,不要设置innodb_log_group_home_dir =./ ,xtrabackup会读错路径,导致无法拷贝,解决办法是注释掉这条参数。
从库修改数据目录权限
chown -R mysql:mysql /database/mysql/3306
从库启动数据库
service mysqld start
从库修改gtid编号
[root@192-168-199-199 data]# cat /data/mysql/mysql3306/data/xtrabackup_info |grep binlog_pos
binlog_pos = filename 'mysql-bin.000009', position '190', GTID of the last change 'c0900221-709b-11e9-b8ea-000c29abbade:1-1539006'
mysql> reset master; mysql> set global gtid_purged="c0900221-709b-11e9-b8ea-000c29abbade:1-1539006"
从库启动复制
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.199.198',
MASTER_USER='repl',
MASTER_PASSWORD='fanderpassword',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;
mysql> start slave;