数据库同步工具
sqlserver,Mysql数据同步软件

[数据库主从同步延迟]谈谈Mysql主从同步延迟分析及解决方案

购买事宜请联系QQ:1793040

MySQL主从复制实际上是基于二进制日志的,其原理可以用图片表示:

 MySQL数据库主从同步延迟分析和解决方案

共有四个步骤:

1.主库将DDL和DML生成的所有日志写入binlog;

2.主库生成一个日志转储线程,该线程用于将binlog读取到从库的I/O线程;

3.从库的I/O线程请求主库的binlog,并将获得的binlog日志写入中继日志文件;

4.从属库的SQL线程将读取中继日志文件中的日志,并将其解析为特定操作,然后重播主库的DDL和DML操作事件。

关于DDL和DML

SQL语言分为四类:查询语言DQL,控制语言DCL,操纵语言DML,定义语言DDL。

DQL:可以简单地理解为SELECT语句;

DCL:GRANT,ROLLBACK和COMMIT语句;

DML:可以理解为CREATE语句;

DDL:INSERT,UPDATE和DELETE语句全部;

1.主库关闭后,数据可能会丢失;

2.主从同步延迟。

原因分析

MySQL的主-从复制是单线程操作。主库将DDL和DML生成的所有日志写入binlog。由于binlog是顺序写入的,因此效率非常高。 Slave的SQL Thread线程在从属服务器中重播主库的DDL和DML操作事件。DML和DDL的IO操作是随机的,不是顺序的,并且成本要高得多。另一方面,由于SQL Thread也是单线程,当主库的并发性很高时,生成的DML数量超过从属SQL线程可以处理的速度,或者当从属中有大查询语句时,锁等待被延迟。

常见原因:主控负载太高,从属负载太高,网络延迟,机器性能太低,MySQL配置不合理。

通过监视show slave status命令输出的Seconds_Behind_Master参数的值来判断:

NULL表示io_thread或sql_thread失败;

0,该值为零,表示主从复制良好;

正值,表明已发生主从延迟,该数字越大,从延迟就越严重。

解决数据丢失的问题:

1.半同步复制

从MySQL5.5开始,MySQL支持半同步复制。半同步复制介于异步复制和同步复制之间。在执行事务后,主库不会立即将结果返回给客户端。您需要等待至少一个从属服务器。在将结果返回给客户端之前,库将其接收并写入中继日志。与异步复制相比,半同步复制提高了数据安全性,并且还导致TCP/IP往返过程中的耗时延迟。

2.主库配置sync_binlog = 1,innodb_flush_log_at_trx_commit = 1

sync_binlog的默认值为0。MySQL不会将binlog同步到磁盘。该值指示要写入多少二进制日志以同步磁盘。

innodb_flush_log_at_trx_commit为1表示每个事务提交或事务结束指令都需要将日志刷新到磁盘。

注意:当上述两个值设置为1,将限制写入性能,建议仅在要求高数据安全性的情况下使用,例如涉及金钱的订单支付服务和系统必须支持I/O能力!

解决从库中复制延迟的问题:

1.优化网络

2.升级从站硬件配置

3.从属调整参数,关闭binlog,修改innodb_flush_log_at_trx_commit参数值

4.将MySQL版本升级到5.7,使用并行复制

欢迎博客作者添加和更正更多优化措施…

未经允许不得转载:数据库同步软件|Mysql数据同步软件|sqlserver数据库同步工具|异构同步 » [数据库主从同步延迟]谈谈Mysql主从同步延迟分析及解决方案

分享到:更多 ()

syncnavigator 8.6.2 企业版

联系我们联系我们