一、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 即可。
