暂无图片
MYSQL的主从延迟,你怎么解决?
我来答
分享
小林同学
2023-12-25
MYSQL的主从延迟,你怎么解决?

MYSQL的主从延迟,你怎么解决?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
yBmZlQzJ

主从复制分了五个步骤进行:

步骤一:主库的更新事件(update、insert、delete)被写到binlog
步骤二:从库发起连接,连接到主库。
步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库。
步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db

主从同步延迟的原因

一个服务器开放N个链接给客户端来连接的,这样有会有大并发的更新操作, 但是从服务器的里面读取binlog的线程仅有一个,当某个SQL在从服务器上执行的时间稍长 或者由于某个SQL要进行锁表就会导致,主服务器的SQL大量积压,未被同步到从服务器里。这就导致了主从不一致, 也就是主从延迟。
主从同步延迟的解决办法

主服务器要负责更新操作,对安全性的要求比从服务器要高,所以有些设置参数可以修改,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置等。
选择更好的硬件设备作为slave。
把一台从服务器当度作为备份使用, 而不提供查询, 那边他的负载下来了, 执行relay log 里面的SQL效率自然就高了。
增加从服务器喽,这个目的还是分散读的压力,从而降低服务器负载。

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
请教一下各位:用ogg把表从oracle同步到mysql,如果在初始化完成之后,表数据就发生变化了,而此时用于捕获增量数据的ext进程还没有启动,那这部分变化数据岂不是没抓取到?……
回答 1
已采纳
都是先配置好抽取进程再初始化吧?
mysql 8.0.22 查询group by 以外的字段不会报错(GROUP BY clause and contains nonaggregated column)吗?
回答 1
取决于sqlmode如果sqlmode含ONLYFULLGROUPBY,则会报错,如下sql均会报错:(groupby必须包含所有未聚合字段)selectid,namefromdb1.t1groupb
mysql如何远程查询oracle数据库的表
回答 1
oracle可以通过odbc连接到mysql反过来可能还没尝试过
mysql为什么默认auto commit?
回答 1
MySQL默认采用自动提交的原因是为了保证数据的一致性和可靠性。在多用户环境下,如果不采用自动提交,就会出现多个用户同时修改同一条记录的情况,从而导致数据的不一致性。而自动提交可以避免这种情况的发生,
如何加强MySQL安全,请给出可行的具体措施?
回答 5
已采纳
1、删除数据库不使用的默认用户2、配置相应的权限(包括远程连接)3、不可在命令行界面下输入数据库密码4、定期修改密码与加强密码的复杂度
MySQL 用于产品环境,应该如何选用版本?
回答 1
目前来说8出来2年多了,可以使用8.毕竟还没有9.其他的已经或者马上没有支持了。
在MySQL数据库中,对于以下索引类型的描述,哪些是正确的?
回答 2
已采纳
ADBTree索引中包含空值,因此可以实现isnull、isnotnull的查询;HASH索引只可用于或<>操作符的等式比较。由于数据不是按顺序存储的,范围查询时无法应用HASH索引。全文
MySQL只保留10天数据怎么操作?
回答 2
已采纳
1、写一个shell脚本,利用crontab每天定时启动清理10天前的数据,分批提交。2、写一个procedure,利用mysql的event做定时,清理10天谴的数据,分批提交。以上两个方案逻辑都一
mysql中通过哪个系统表能标识出哪些表是普通表,哪些表是视图,哪些是分区表?
回答 1
selectfrominformationschema.tables;tabletype字段就可以区分。
请问一下MySQL有实例名不?如何获取?通过SQL语句方式
回答 2
已采纳
1、MySQL与Oracle数据库不同,MySQL没有实例名的概念;2、MySQL的数据库名,对应Oracle的Schema,也就是一个用户下的所有对象;3、在MySQL中通过以下命令查看可以操作的数