sync-master-info 参数困惑

zjcxc 2016-06-23 05:40:33
sync-master-info 这个参数控制从属服务器更新 master info 的间隔,这个 master info 在哪些时候有用呢?同步本身似乎不关心这个 show slave status 始终看到的是最新状态

不知道更新这个有什么意义,我看网上有人写的是为了防止同步不丢失数据,把这个设置为1,但如果设置为1,这个就会严重影响同步速度了
...全文
812 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
生命沉思者 2016-06-24
  • 打赏
  • 举报
回复
master-info-repository = TABLE sync_master_info = 1 你确定延迟严重?master-info-repository 的默认值是FILE,改成表后就和数据库写表的事务一样的,是先保存到日志的,不太可能会引起性能问题。
生命沉思者 2016-06-24
  • 打赏
  • 举报
回复
当mysql启动时,它必须知道从主库哪里开始复制,master.info就是记载这样的信息。
生命沉思者 2016-06-24
  • 打赏
  • 举报
回复
master.info 是为当mysql关闭时保存信息使用的
zjcxc 2016-06-24
  • 打赏
  • 举报
回复
我主要是想知道这个 master info 有什么用,因为 show slave status 中也基本上可以看到 master info 所有的信息了,单独弄个 master info 有什么用? 而且这个建议的配置下,同步的延迟非常严重的 master-info-repository = TABLE sync_master_info = 1
生命沉思者 2016-06-24
  • 打赏
  • 举报
回复
mysql> select @@sync_master_info;
+--------------------+
| @@sync_master_info |
+--------------------+
|              10000 |
+--------------------+
在MySQL 5.6.2之前,slave记录的master信息以及slave应用binlog的信息存放在文件中,即master.info与relay-log.info。在5.6.2版本之后,允许记录到table中,参数设置如下: master-info-repository = TABLE relay-log-info-repository = TABLE 对应的表分别为mysql.slave_master_info与mysql.slave_relay_log_info,且这两个表均为innodb引擎表。 master info与relay info还有3个参数控制刷新: sync_relay_log:默认为10000,即每10000次sync_relay_log事件会刷新到磁盘。为0则表示不刷新,交由OS的cache控制。 sync_master_info:若master-info-repository为FILE,当设置为0,则每次sync_master_info事件都会刷新到磁盘,默认为10000次刷新到磁盘;若master-info-repository为TABLE,当设置为0,则表不做任何更新,设置为1,则每次事件会更新表 #默认为10000 sync_relay_log_info:若relay_log_info_repository为FILE,当设置为0,交由OS刷新磁盘,默认为10000次刷新到磁盘;若relay_log_info_repository为TABLE,且为INNODB存储,则无论为任何值,则都每次evnet都会更新表。 建议参数设置如下: sync_relay_log = 1 sync_master_info = 1 sync_relay_log_info = 1 master-info-repository = TABLE relay-log-info-repository = TABLE
zjcxc 2016-06-24
  • 打赏
  • 举报
回复
删除了不行可以理解,连接的信息在里面,问题是更新的意义在哪里?因为会经常变化而且可能跟同步相关的主要就两个值吧? Master_log_name, Master_log_pos 这两个值似乎不只保存在 master info,不然强行中止程序的情况下,为什么 show slave status 的值不会丢失(始终是最新值,而不是取自 slave_master_info 中的那个未更新值) 而 chante master 的结果,便是会直接更新,不会受 sync_master_info 的影响 从测试结果来看,既然最可能影响同步的两个值在这个 master info 中没有什么意义(因为同步根本就不用这两个),那么 sync_master_info 设置为高频率更新的意义又何在呢?
生命沉思者 2016-06-24
  • 打赏
  • 举报
回复
引用 8 楼 zjcxc 的回复:
[quote=引用 5 楼 kxjrzyk 的回复:] 当mysql启动时,它必须知道从主库哪里开始复制,master.info就是记载这样的信息。
至于这个作用,严重怀疑这个真有用么? 正常关闭重新启动 mysql 的情况下,就算关闭前 mysql.slave_master_info 里面的 Master_log_pos 没有更新为最新值,启动后发现它也更新了,也 show slave status 里面的 Exec_Master_Log_Pos 一样 但如果我强制把 mysql 的进程给 kill 掉,mysql 起来后 mysql.slave_master_info 里面的 Master_log_pos 值仍然是我中止程序前的值,按照你的说法,它需要从这个位置开始复制? 但实际结果是它并没有从这个位置,如果从这个位置复制,会复制之前的数据,但实际上并没有,slhow slave status 的显示的 Read_Master_Log_Pos 和 Exec_Master_Log_Pos 仍然是正确的,我 insert 一条数据仍然能够正常同步 所以这个东东到底是用来干嘛的?[/quote]你可以改成FILE,然后关闭数据库,然后把从库这个文件删除了,再启动从库,看会出现什么情况?或者你把文件一些信息修改了也行。
zjcxc 2016-06-24
  • 打赏
  • 举报
回复
引用 5 楼 kxjrzyk 的回复:
当mysql启动时,它必须知道从主库哪里开始复制,master.info就是记载这样的信息。
至于这个作用,严重怀疑这个真有用么? 正常关闭重新启动 mysql 的情况下,就算关闭前 mysql.slave_master_info 里面的 Master_log_pos 没有更新为最新值,启动后发现它也更新了,也 show slave status 里面的 Exec_Master_Log_Pos 一样 但如果我强制把 mysql 的进程给 kill 掉,mysql 起来后 mysql.slave_master_info 里面的 Master_log_pos 值仍然是我中止程序前的值,按照你的说法,它需要从这个位置开始复制? 但实际结果是它并没有从这个位置,如果从这个位置复制,会复制之前的数据,但实际上并没有,slhow slave status 的显示的 Read_Master_Log_Pos 和 Exec_Master_Log_Pos 仍然是正确的,我 insert 一条数据仍然能够正常同步 所以这个东东到底是用来干嘛的?
zjcxc 2016-06-24
  • 打赏
  • 举报
回复
引用 6 楼 kxjrzyk 的回复:
master-info-repository = TABLE sync_master_info = 1 你确定延迟严重?master-info-repository 的默认值是FILE,改成表后就和数据库写表的事务一样的,是先保存到日志的,不太可能会引起性能问题。
这个多线程测试一下马上就能够反馈出来 mysql> select @@sync_master_info, @@master_info_repository; +--------------------+--------------------------+ | @@sync_master_info | @@master_info_repository | +--------------------+--------------------------+ | 1 | TABLE | +--------------------+--------------------------+ 用 25 个线程并发写入主库的一个表,每秒写入大概能够达到 1400条,几秒之后查同步 show slave status\G Read_Master_Log_Pos: 546594628 Exec_Master_Log_Pos: 546582955 这个明显差很多,count(*) 查表记录数,一样差异明显,设置为0或者保持默认值都没有问题,尽改成2都好很多
zjcxc 2016-06-23
  • 打赏
  • 举报
回复
而且这个的单位是事件数,一条 INSERT/UPDATE/DELETE 通过 show binlog events 可以看到 5 个事件,如果真那么重要要设置为1,那一条记录操作不就多5个更新 master info 的操作出来,想不产生严重影响都难啊

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧