大家好,我是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.sql7.恢复备份到主库
mysql -uroot -proot -e "set sql_log_bin=0;source /tmp/delay.sql;"验证数据
use delay;
select * from tmp;
此时主库与从库数据状态一致,
8.恢复业务

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




