一、mysql point in time recovery using sql_thread SQL_Thread增量恢复binlog,网上有很多类似文章,这里把我实验的要点记录下来:
二、
1)重新初始化一个实例,
恢复全量备份文件。
2)找到第一个binlog文件的position,和剩下所有的binlog。
3)将binlog伪装成relaylog,通过sql thread增量恢复。
三、将relay log info的repository改到file中,并生成这个文件。
SET GLOBAL relay_log_info_repository='FILE';
CHANGE MASTER TO master_host='1';
并且通过该步骤,生成
relay.info
文件。
假如不想生成relay_log.info文件可以使用如下语句:
CHANGE MASTER TO RELAY_LOG_FILE='mysql-relay-bin.000001', RELAY_LOG_POS=1, MASTER_HOST='dummy';
四、关闭实例,将需要增量的binlog文件伪装成relaylog。
[root@mysql1 mysql]# for i in $(ls /tmp/binlogs/*.0*)
do
ext=$(echo $i | cut -d'.' -f2);
cp $i mysql-relay-bin.$ext;
done
chown mysql:mysql -R .
五、修改relay.info文件和relay-log.index文件
如果没有生成relay_log.info文件,本步骤可以忽略
将relay.info的第二三行改成需要执行的第一个binlog(现在是relaylog)的文件名和position:
/data/mysql57/relaylog/mysql
-
relay
.
000003
1276895
第二三行对应Relay_log_name和Relay_log_pos,等同于:
mysqlbinlog mysql-relay.000003 --start-position=1276895 | mysql -u -p -S
修改该文件是为了告诉SQL_Thread从哪一个文件和哪一个position开
始执行事务
再修改relay-log.index,清空原有信息,添加以下信息,为的是告诉SQL_Thread还有哪些
relaylog是需要执行的。
/data/mysql57/relaylog/mysql-relay.000003
/data/mysql57/relaylog/mysql-relay.000004
/data/mysql57/relaylog/mysql-relay.000005
/data/mysql57/relaylog/mysql-relay.000006
/data/mysql57/relaylog/mysql-relay.000007
/data/mysql57/relaylog/mysql-relay.000008
/data/mysql57/relaylog/mysql-relay.000009
/data/mysql57/relaylog/mysql-relay.000010
六、 启动实例,开启SQL_Thread:
START SLAVE sql_thread ;
只需要开启SQL_Thread即可
mysql> CHANGE MASTER TO RELAY_LOG_FILE='mysql1-relay-bin.000001', RELAY_LOG_POS=1, MASTER_HOST='dummy'; mysql> set global slave_parallel_type='LOGICAL_CLOCK'; mysql> SET GLOBAL SLAVE_PARALLEL_WORKERS=8; mysql> START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS = '7766037d-4d1e-11e7-8a51-08002718d305:25076';
该测试使用的版本为
:MySQL 5.7.22
如果没有使用gtid模式,请使用如下语句:将START SLAVE sql_thread后添加一个
UNTIL RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos 即可。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30393770/viewspace-2168905/ ,如需转载,请注明出处,否则将追究法律责任。