mysql start until_mysql 利用relay log 使用 start slave until 恢复方法

1结构

eca29c6d131b1bf693e14c24027cd9a4.png

注意: server-id 必须不相同

2. slave2 使用 screen 备份主库 binlog 到/data/backup/目录下, 实时备份mysqlbinlog

(1). 安装 screen

yum-y install screen

screen-S mysqlbinlogsbackup

cd/data/backup/; mysqlbinlog --raw --read-from-remote-server --stop-never --host 172.17.0.2 --port 3306 -u replication -p123456 mybinlog.000003ctrl+a d

暂时离开当前session,将目前的 screen session 丢到后台.

74178a9c7fb9536f728eef3177f178e0.png

screen-S screenname ->新建一个session

screen-ls ->列出所有的session

screen-r screenname ->回到screenname 这个session

screen-d screenname ->远程detach某个session

screen-d -r screenname -> 结束当前session并回到screenname 这个session

3. mysql master 上 创建数据库, sysbench 写一些数据

create database T100

sysbench /usr/local/share/sysbench/oltp_read_write.lua --mysql-host=172.17.0.2 --mysql-port=3306 --mysql-user=fengjian --mysql-password=123456 --mysql-db=T100 --tables=10 --table_size=10000 --mysql_storage_engine=Innodb prepare

4. 使用innobackup 进行全备

innobackupex --defaults-file=/etc/my.cnf -S /data/mysql/mysql3306/mysql.sock -u fengjian -p123456 /data/backup/

5. 删除master T100库的表, 模拟误删除操作

mysql -u root -p

use T100;

drop table sbtest1 ;

#发生误操作,切换binlogs

flush logs;

查看binlog

show binary logs;

+-----------------+-----------+

| Log_name | File_size |

+-----------------+-----------+

| mybinlog.000001 | 177 |

| mybinlog.000002 | 177 |

| mybinlog.000003 | 200 |

| mybinlog.000004 | 200 |

| mybinlog.000005 | 200 |

| mybinlog.000006 | 200 |

| mybinlog.000007 | 200 |

| mybinlog.000008 | 19097126 |

| mybinlog.000009 | 19097508 |

| mybinlog.000010 | 194 |

+-----------------+-----------+

6. 打包全备数据 到 slave 从库上

cd /data/backup

tar-zcvf 2020.tar.gz 2020-02-29_05-36-06scp172.17.0.2:/data/backup/2020.tar.gz root@172.17.0.4:/data/backup/

7. slave2 上解压缩,恢复数据库

cd /data/backup/tar-zxvf 2020.tar.gz

cd2020-02-29_05-36-06# innobackup 应用日志

innobackupex--apply-log -u root -p123456 /data/backup/2020-02-29_05-36-06

#slave2 上新建的mysql 存储目录不需要初始化

mkdir -R /data/mysqld/mysql3306/{data,logs,tmp,undolog}

chown -R mysql.mysql /data/mysqld

#拷贝 /data/backup/2020-02-29_05-36-06/ 备份文件到 mysql 存储目录

mv /data/backup/2020-02-29_05-36-06/undo* /data/mysql/mysql3306/undolog/

mv /data/backup/2020-02-29_05-36-06/* /data/mysql/mysql/mysql3306/data/

chown -R mysql.mysql /data/mysql

# 启动mysql

mysqld --defaults-file=/etc/mysql.cnf &

由于mysql master 和 slave2 都是开启gtid的,所以恢复全量备份数据到slave2实例上,如果启动slave2实例 Gtid和 master xtrabackup全量备份结束的Gtid号是不一致

登录slave2 实例,reset master  清空 Gtid 信息, 然后再set global gtid_purged='bde7b592-b966-11e9-8c64-000c294f3e61:1-10296'; 让slave2 实例的Gtid号执行到全量备份结束时的这个Gtid号

查看 xtrabackup_binlog_info 信息

mybinlog.000009 19097277 0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404,

3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605,

b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-123

slave2 设置 gtid purged值

reset master;

# 设置gtid purgedset global gtid_purged='0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404,3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605,b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-123'

#查看gtid信息

show global variables like '%gtid%';

+----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+

| Variable_name | Value |

+----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+

| binlog_gtid_simple_recovery | ON |

| enforce_gtid_consistency | ON |

| gtid_executed | 0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404,3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605,b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-61 |

| gtid_executed_compression_period | 1000 |

| gtid_mode | ON |

| gtid_owned | |

| gtid_purged | 0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404,3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605,b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-61 |

| session_track_gtids | OFF |

+----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+

8. 开始MySQL relaylog + SQL_Thread 增量恢复binlog演示

change命令,是为了告诉MySQL自己为一个slave实例:通过change命令,是为了告诉MySQL自己为一个slave实例,因为无需用到IO_Thread,故host,password,user等可以随意填写。

并且通过该步骤,生成relay.info文件。

root@localhost 08:06: [(none)]> change master to master_host='172.17.0.2';

查看 relay log 的名字为,slave2-relay-bin 开头

root@localhost 08:06: [(none)]> show global variables like '%relay%';

+---------------------------+---------------------------------------------------+

| Variable_name | Value |

+---------------------------+---------------------------------------------------+

| max_relay_log_size        | 0 |

| relay_log             | |

| relay_log_basename        | /data/mysql/mysql3306/data/slave2-relay-bin |

| relay_log_index          | /data/mysql/mysql3306/data/slave2-relay-bin.index |

| relay_log_info_file       | relay-log.info |

| relay_log_info_repository    | TABLE |

| relay_log_purge          | ON |

| relay_log_recovery        | ON |

| relay_log_space_limit      | 0 |

| sync_relay_log           | 10000 |

| sync_relay_log_info       | 10000 |

+---------------------------+---------------------------------------------------+

关闭3308实例,将需要增量的binlog文件伪装成relay log:

mysqladmin -u root -p shutdown

cd/data/mysql/mysql3306/data/# 查看目录里生成了 relay log日志 和索引 slave2-relay-bin.000001 slave2-relay-bin.index

ls

107009848435c988eadd2ba7115139e8.png

# 拷贝mysqlbinlog server备份的 binlog到 data目录。

cp/data/backup/mysqlbin* /data/mysql/mysql3306/data/

# 删除原有 relay log 和 index 文件,使用binlog 生成

rm slave2-relay-bin.*  -rf

for i in `ls mybinlog.00*` ; do lastnum=`echo $i |cut -d '.' -f2`; mv mybinlog.$lastnum slave2-relay-bin.$lastnum ; done

ls ./slave2-relay-bin.0000* > slave2-relay-bin.index

启动slave2 mysql

mysqld --defaults-file=/etc/my.cnf &

使用 change master to语句, 让 slave2 的sql_thread 执行  relay log文件到 xtrabackup_binlog_info 记录的位置

[root@slave2 2020-03-11_06-02-09]# cat xtrabackup_binlog_info

mybinlog.000009 19097277 0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404, 3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605, b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-123

slave2 上执行 change master to,  注意 replay_log_file 文件变成了 slave2-relay-bin.000009

change master to RELAY_LOG_FILE='slave2-relay-bin.000009', RELAY_LOG_POS=19097277;

解析mysqlbinlogs 查看删除表的 gtid位置

f319201317ca17b852c0bf0ad793c9a9.png

使用 start slave until  恢复到删除的 gtid 或者

START SLAVE SQL_THREAD UNTIL MASTER_LOG_FILE = 'slave2-relay-bin.000009', MASTER_LOG_POS =19097277 ; ##此处的Gtid是drop table test1_event 前的最近的一个binlog的文件的pos位置点

或者是:

START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS='b9d7ea3f-62b0-11ea-b3d0-0242ac110002:124' ##此处的Gtid是drop table test1_event 前的最近的一个Gtid

利用SQL_thread快速恢复增量过程总结:

1.不能使用master_auto_position=1

2.先要让mysql知道他是一个Slave

3.关掉mysql,构建relay-log

4.利用change master to relay_log_file=... ,

relay_log_pos=...;

5.START SLAVE SQL_THREAD UNTIL MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxxxx

或者START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS='xxx--xx-x';

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值