mysql主从~延时复制

主从延时原因

1)主库方面原因:binlog写入不及时,sync_binlog=1
2)默认情况下dump_t是串行传输binlog,在并发事务量大时或者大事物情况下,由于dump_thread是串行工作的,导致日志传输较慢。
3)如果从库是单sql线程导致,不管日志有多少,只能一次执行一个事务

解决方案gtid使用group commit方式,可以支持dump_thread并行

4)慢语句
5)从库的个数,每个从库都要对应一个dump_thread
6)网络延时

从库方面原因

1)5.6有了gtid,可以实现多sql_thread,但是只能基于不同的库的事务进行并发回放(database)
2)5.7有了增强gtid,增加了seq_no,增加了新型的并发sql线程模式(logical_clock),Mts技术
3)主从硬件差异太大
4)从库和主库的索引不一致
5) 版本差异
6)SQL线程导致的主从延时
6.1:从库默认只有一个sql线程,只能串行回放事务
6.2:如果主库发生了大事务,会阻塞后续所有的事务的运行

2.3.4主从延时监控
在这里插入图片描述
在这里插入图片描述

从库抓取的binlog:

Master_Log_File: logbin.000005
Read_Master_Log_Pos: 154
从库回放的realylog
Relay_Log_File: mysql_s1-relay-bin.000004
Relay_Log_Pos: 361
Exec_Master_Log_Pos: 154
Relay_Log_Space: 778
查看从库和主库的日志对应关系
mysql> show relaylog events in ‘mysql_s1-relay-bin.000004’;

在这里插入图片描述
group_commit
mysql> show variables like “%group_commit%”;
在这里插入图片描述

binlog_group_commit_sync_delay: 等待多少微妙后才进行组提交
binlog_group_commit_sync_no_delay_count: 如果队列中的事务数达到N个,就忽视binlog_group_commit_sync_delay的设置,直接开始刷盘

延时复制

在传统复制的基础上
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_delay=60;
Query OK, 0 rows affected (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;

在这里插入图片描述

延时从库应用场景

1)延时从库能处理逻辑故障

##延时从库的恢复思路

1)监控到数据库的逻辑故障
2)停止从库sql线程,记录已经回放的位置点(截取日志七点)
mysql> stop slave sql_thread;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
在这里插入图片描述

截取reaylog,起点

Show slave status\G;
Relay_Log_File, Relay_Log_Pos
终点:错误之前的位置点
Show relaylog events in ‘’

进行截取

4)模拟sql线程回访日志
从库source
恢复业务:
一. 就一个从库的话,从库替代主库
二. 导出故障库,还原到主库

演练

从库:
mysql> change master to master_delay=3600;
Query OK, 0 rows affected (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
主库:
mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> create database delay;
Query OK, 1 row affected (0.00 sec)

mysql> use delay;
Database changed
mysql> create table t1(id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1 values (1),(2);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> drop database delay;
Query OK, 1 row affected (0.05 sec)
从库:
mysql> stop slave sql_thread;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;
在这里插入图片描述
找到relay的截取终点
mysql> show relaylog events in ‘mysql_s1-relay-bin.000002’;

在这里插入图片描述
[root@mysql_s1 data]# mysqlbinlog --start-position=317 --stop-position=968 mysql_s1-relay-bin.000002 > /tmp/relay.sql
从库:
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.01 sec)

mysql> source /tmp/relay.sql
mysql> set sql_log_bin=1;
在这里插入图片描述
数据回来了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韶博雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值