暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL延时从库处理演练

anyux 2020-03-23
325

大家好,我是anyux。本文介绍MySQL延时从库处理演练。


演示前请确保主从数据库运行正常,pos点保持一致,如果出现错误,请与主库保持一致

 mysql -uroot -proot -S /data/3307/mysql.sock -e "CHANGE MASTER TO
 MASTER_HOST='192.168.255.113',
 MASTER_USER='repl',
 MASTER_PASSWORD='repl',
 MASTER_PORT=3306,
 MASTER_LOG_FILE='log-bin.xxx',
 MASTER_LOG_POS=xxx,
 MASTER_CONNECT_RETRY=10;"


1.设置从库延时为300秒

 stop slave;
 change master to master_delay=300;
 start slave;


主库创建业务数据

 create database delay charset utf8mb4;
 use delay;
 create table tmp(id int);
 insert into tmp values (1),(2),(3);
 commit;
 drop database delay;

从库操作

2.停止从库sql线程,获取relay的位置点

 stop slave sql_thread;

查看从库状态

主要看sql线程是否关闭

 show slave status\G


查看Relay_Log_File和Relay_Log_Pos,它们分别对应中继日志和sql线程读取点

sed命令直接定位relaylog日志起点信息

 cd /data/3307/data
 sed -n '3p' relay-log.info

grep命令配合mysql过滤起点信息

 mysql -uroot -proot -S /data/3307/mysql.sock -e "show slave status\G" | grep "Relay_Log"

下面的Relay_Log_pos:496表示为起点

3.找到relay的截取终点

mysqlbinlog 查看drop语句前的倒数第二个at数值,就是终点

 cd /data/3307/data
 mysqlbinlog --base64-output=decode-rows db01-relay-bin.000003 | grep -B 10 "drop"

可以看到第二列Pos数值为927,此数值为截取的终点

show relaylog查看drop语句前一行,就是终点

 show relaylog events in 'db01-relay-bin.000003';


4.截取relaylog

截取后,打开relay.sql查看是否有drop语句,小心不要截错

 cd /data/3307/data
 mysqlbinlog  --start-position=496 --stop-position=927 db01-relay-bin.000002 > /tmp/relay.sql

5.恢复relay到从库

登录从库

 mysql -uroot -proot -S /data/3307/mysql.sock

关闭日志记录功能

 set sql_log_bin=0;

恢复数据

 source /tmp/slave.sql;

验证数据

 use delay;
 select * from tmp;



6.全备数据库

 mysqldump -uroot -proot -S /data/3307/mysql.sock --databases delay >/tmp/delay.sql


7.恢复备份到主库

 mysql -uroot -proot -e "set sql_log_bin=0;source /tmp/delay.sql;"

验证数据

 use delay;
 select * from tmp;

此时主库与从库数据状态一致,

8.恢复业务


文章转载自anyux,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论