建议:在业务量较少的情况下做备份还原比较好,或者能设置只读那就更好了。因为一边备份一遍对数据进行更改替换,会出现各种奇葩的问题的。
主库备份
cd /sqlback
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 ./ (记得--defaults-file要放在前面,不然会报错)
cpoy到要恢复的目标主机
innobackupex --apply-log --user=root --password='1234568' /sqlback/back/2020-04-04_10-21-32/ (在数据库开启的状态下做,因为他要找socket,最好要账户和密码)
停数据库 stop mysql
删除数据目录下面的所有文件,删除binlog目录下面的所有文件。建议最好备份一下,打个tar包这样。避免还原不成功导致数据库报废。
innobackupex --copy-back --user=root --password='1234568' /sqlback/back/2020-04-04_10-21-32/ (在数据库关闭的状态下做,拷贝数据回来,最好要账户和密码)
chown -R mysql:mysql 数据库目录所有文件
chown mysql:mysql binlog目录下所有文件
开启数据库 start mysql
查看备份的日志文件及位置
[root@fu-db02 sqlback]# cat 2020-04-04_13-35-58/xtrabackup_info |grep binlog_pos
binlog_pos = filename 'mysql01-bin.000004', position '194', GTID of the last change '0f719dfd-7583-11ea-bc48-00505697d068:1-223377'
mysql> SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; (记录状态)
mysql> SET @@SESSION.SQL_LOG_BIN= 0; (接下来的操作不记录锦二进制日志)
mysql> SET @@GLOBAL.GTID_PURGED='0f719dfd-7583-11ea-bc48-00505697d068:1-223377'; (设置gtid,这一步有可能会master有值,导致设置报错。可以用:show variables like'%gtid_purged%'; 来查看。用reset master;来清0)
mysql> SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN; (还原最初状态)
重新配置主备
CHANGE MASTER TO MASTER_HOST='192.168.126.12',MASTER_USER='repl',MASTER_PASSWORD='dtet123',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
有一些是会读很老的二进制日志的,用下面这个来解决。
CHANGE MASTER TO MASTER_HOST='192.168.131.243',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE=mysql01-bin.000004', Master_Log_Pos=194;
start slave
show slave status\G