mysql server_id的用途(主从等结构中)
前言
我们都知道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相同的连接,就会先注销该连接,然后重新注册。
最新文章
- SQL Server的各种聚合函数
- Delphi Excel 操作大全
- 【转】C# 解析JSON格式数据
- Highcharts的基本属性和方法详解
- liferay MVCActionCommand的用法及例子
- IPFS如何挖矿<;Filecoin系统>;?(一)
- iOS日历中给一个事件添加多个提醒
- Thinkphp3.2.3加载外部类并调用类里面的方法 获取token
- R-shiny服务器安装及配置
- LwIP Application Developers Manual11---Initializing lwIP
- usermod - linux修改用户帐户信息
- 串口USB单一映射及重命名
- Android NetworkInterface 的 name
- Github和Git上fork指南
- djkstra nlogn
- 接口测试Case之面向页面对象编写规范
- 在SELECT DISTINCT 状况下使用 Order BY Newid() 随机数选出记录
- 彻底卸载sql2008后重新安装
- 面试-默认参数(传值)、var(传址)、out(输出)、const(常数)
- CSS美化自己的完美网页