建议:在业务量较少的情况下做备份还原比较好,或者能设置只读那就更好了。因为一边备份一遍对数据进行更改替换,会出现各种奇葩的问题的。

主库备份

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