mysql主从从库延迟_10 : mysql 主从复制 - 延时从库

延时从库

主从复制很好的解决了物理损坏,但是如果主库有个误删除写入的操作怎么办?

正常情况下从库也会同步这个错误的,企业中应该怎么避免这个情况?

这个时候就需要使用延时同步来解决:

延时从库?delay(延时)从节点同步数据。

对SQL线程进行延时设置。IO线程正常的执行。

企业中一般延迟3-6小时

延时从库的配置过程:

mysql>stop slave;

mysql>CHANGE MASTER TO MASTER_DELAY = 60; (延时60s)

mysql>start slave;

mysql> show slave status \G

Master_UUID: c1bc62f5-e643-11e9-8060-000c29d5441f

Master_Info_File: /data/3308/data/master.info

SQL_Delay: 60

SQL_Remaining_Delay: NULL (没有数据的时候显示NULL)

主库执行个插入数据,会发现开始倒计时。倒计时结束sql线程才会把数据同步到从库里面

... ...

SQL_Delay: 60

SQL_Remaining_Delay: 56 (倒计时秒速)

... ...

停止延时:

mysql> stop slave;

mysql> CHANGE MASTER TO MASTER_DELAY = 0;

mysql> start slave;

--------------------------------------------

模拟故障,思考:

0、总数据量级500G,正常备份去恢复需要1.5-2小时

1、配置延时3600秒

mysql>CHANGE MASTER TO MASTER_DELAY = 3600;

2、主库做了drop database db;

3、怎么利用延时从库,恢复数据?

-------------------------------------------

提示:

1、从库relaylog存放在/data/3308/data

2、mysqlbinlog 可以截取relaylog内容

3、show relay log events in 'db01-relay-bin.000001';

处理的思路:

1、停止SQL线程

mysql> stop slave sql_thread;

2、截取relaylog到误删除之前点

(1)relay-log.info 获取到上次运行到的位置点,作为恢复起点

(2)分析relay-log的文件内容。,获取到误删除之前position

----------------------------------------

****** 模拟故障处理过程,并利用延时从库处理故障

0、关闭延时

mysql -S /data/3308/mysql.sock

mysql> stop slave;

mysql> CHANGE MASTER TO MASTER_DELAY = 0;

mysql> start slave;

模拟数据:

mysql -S /data/3307/mysql.sock

source /root/world.sql

use world;

create table c1 select * from city;

create table c2 select * from city;

1、开启从库延时5分钟(这里是模拟,所以时间短。企业是3-6小时)

mysql -S /data/3308/mysql.sock

show slave status \G

mysql>stop slave;

mysql>CHANGE MASTER TO MASTER_DELAY = 300;

mysql>start slave;

主库:

mysql -S /data/3307/mysql.sock

use world;

create table c3 select * from city;(把word库的city表数据给c3)

create table c4 select * from mysql.user;(把mysql库的user表数据给c4)

2、破坏,模拟删库故障。(以下步骤在5分钟内操作完成。)

mysql -S /data/3307/mysql.sock

drop database world;

3、从库,关闭SQL线程(从库这时候会倒计时,在倒计时之前关闭sql线程)

mysql -S /data/3308/mysql.sock

stop slave sql_thread; (在5分钟内停掉sql线程,不然超过5分就同步到从库 了。)

4、截取relay-log

起点:(relaylog 的起始位置)

cd /data/3308/data/

cat relay-log.info

./db01-relay-bin.000002

283

终点:(执行drop那条语句的前一条位置)

mysql -S /data/3308/mysql.sock

show relaylog events in 'db01-relay-bin.000002' (找到drop语句的前一位置点条。)

db01-relay-bin.000002 | 268047 | Query | 3307 | 1781140 | drop database word

从relaylog里面导出这一段数据。

mysqlbinlog --start-position=283 --stop-position=268047 /data/3308/data/db01-relay-bin.000002 >/tmp/relay.sql

5、恢复relay.sql

(1)取消从库身份:

mysql> stop slave;

mysql> reset slave all;

(2)恢复数据(从库执行,这样从库就是一个完成的数据了,从变成主,)

mysql> set sql_log_bin=0;

mysql> source /tmp/relay.sql

mysql> use world

mysql> show tables;

6 . 可以把从当做主库,就可以了。

mysql -uroot -p123 -S /data/3308/mysql.sock

mysql>stop slave;

mysql>reset slave all;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值