当前位置: 首页 > 科技观察

MySQL数据库主从同步延时分析及解决方法

时间:2023-03-13 21:37:53 科技观察

一、MySQL数据库主从复制原理MySQL主从复制实际上是基于二进制日志的。原理可以用一张图来表示:MySQL数据库主从同步延时分析及解决方案方案分为四步:1.主库将DDL和DML产生的日志全部写入binlog;2、主库生成logdump线程读取binlog,供从库I/O线程使用;3、从库从库的I/OThread请求主库的binlog,并将获取到的binlog日志写入relaylog文件。DDL和DML操作事件重放。关于DDL和DMLSQL语言分为四类:查询语言DQL、控制语言DCL、操作语言DML、定义语言DDL。DQL:可以简单理解为SELECT语句;DCL:GRANT、ROLLBACK、COMMIT等语句;DML:可以理解为CREATE等语句;DDL:INSERT、UPDATE、DELETE语句都是;二、主从复制的问题1、主库宕机后数据可能丢失;2、主从同步延迟。3、MySQL数据库主从同步延迟原因分析:MySQL主从复制是单线程操作。主库将DDL和DML产生的所有日志写入binlog。由于binlog是顺序写入的,所以效率很高。从库的SQLThread在从库中重放主库的DDL和DML操作事件。DML和DDL的IO操作是随机的,不是顺序的,成本要高很多。另一方面,由于SQLThread也是单线程的,当主库的并发量很高时,产生的DML量超过了从库的SQLThread能够处理的速度,或者查询语句比较大的时候在生成锁等待延迟的slave中诞生了。常见原因:Master负载过高、Slave负载过高、网络延迟、机器性能太低、MySQL配置不合理。4、主从延迟检查方式通过监控showslavestatus命令输出的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=1sync_binlog默认值为0,MySQL不会将binlog同步到磁盘,该值表示每次写入多少binlog就同步磁盘。innodb_flush_log_at_trx_commit为1,表示每一次事务提交或者事务外的命令都需要将日志flush到磁盘。注意:当以上两个值同时设置为1时,写入性能会受到限制。只推荐用于对数据安全性要求高的场景,比如涉及金钱的订单支付业务,系统I/O能力必须能够支持!解决从库复制延迟问题:1.优化网络2.升级Slave硬件配置3.调整Slave参数,关闭binlog,修改innodb_flush_log_at_trx_commit参数值4.升级MySQL版本到5.7并使用并行复制

猜你喜欢