前言

我们都知道MySQL用server-id来唯一的标识某个数据库实例,并在链式或双主复制结构中用它来避免sql语句的无限循环。

5.7需要同时设置server_id参数,8.0开始server_id默认值为1

MySQL搭建复制环境的时候,需要设置每个server的server_id不一致,如果主库与从库的server_id一致,那么复制会失败。

server_id的用途

简单说来,server_id有两个用途:

1. 用来标记 binlog event的源产地,就是SQL语句最开始源自于哪里。

2. 用于IO_thread对主库binlog的过滤。如果没有设置replicate-same-server-id=1,那么当从库的io_thread发现event的源与自己的server-id相同时,就会跳过该event,不把该event写入到relay log中。从库的sql_thread自然就不会执行该event。这在链式或双主结构中可以避免sql语句的无限循环。

注意:
相同server-id的event在io_thread这一层就过滤了;而对于replicate-(do|ignore)-等规则,则是在sql_thread这一层过滤的。io_thread和sql_thread都有过滤的功能。


server_id为何不能重复?

在同一个集群中,server-id一旦重复,可能引发一些诡异问题。

看看下面两种情况:

主库与从库的server-id不同,但是两个或多个从库的server-id相同

这种情况下复制会左右摇摆。当两个从库的server-id相同时,如果从库1已经连接上主库,此时从库2也需要连接到主库,发现之前有server-id相同的连接,就会先注销该连接,然后重新注册。

最新文章

  1. SQL Server的各种聚合函数
  2. Delphi Excel 操作大全
  3. 【转】C# 解析JSON格式数据
  4. Highcharts的基本属性和方法详解
  5. liferay MVCActionCommand的用法及例子
  6. IPFS如何挖矿<Filecoin系统>?(一)
  7. iOS日历中给一个事件添加多个提醒
  8. Thinkphp3.2.3加载外部类并调用类里面的方法 获取token
  9. R-shiny服务器安装及配置
  10. LwIP Application Developers Manual11---Initializing lwIP
  11. usermod - linux修改用户帐户信息
  12. 串口USB单一映射及重命名
  13. Android NetworkInterface 的 name
  14. Github和Git上fork指南
  15. djkstra nlogn
  16. 接口测试Case之面向页面对象编写规范
  17. 在SELECT DISTINCT 状况下使用 Order BY Newid() 随机数选出记录
  18. 彻底卸载sql2008后重新安装
  19. 面试-默认参数(传值)、var(传址)、out(输出)、const(常数)
  20. CSS美化自己的完美网页

热门文章

  1. ArcMap操作随记(6)
  2. 不带头结点的单链表(基于c语言)
  3. ansible 四常用模块
  4. 4月10日 python学习总结 模块和面向对象
  5. bzoj3144 [HNOI2013]切糕(最小割)
  6. 羽夏看Win系统内核——异常篇
  7. 【推理引擎】ONNXRuntime 的架构设计
  8. jQuery--筛选【查找函数】
  9. MariaDB数据库设置用户密码
  10. C++11最常用的新特性如下