沃趣科技 沈刚
简介
我们都知道在MySQL搭建复制环境的时候,需要设置每个server的server_id不一致,如果主库与从库的server_id一致,那么复制会失败。但是最近在解决一个客户的问题的时候,遇到一个有意思的现象,客户环境有三台数据库服务器,一主两从,客户的两台从库设置了相同server_id,在排查问题的过程中,查看MySQL错误日志,发现有很多奇怪的信息。
我们模拟了客户的环境,并进行测试、分析,最终在代码中找到了我们想要的答案。下面就是我们测试、分析、总结的步骤以及内容。
测试步骤
环境介绍
主库
IP:192.168.1.130
server_id:3656
从库A
IP:192.168.1.36
server_id:56
从库B
IP:192.168.1.57
server_id:56
三台主机除server_id之外,其余配置如下:
server_id = 123
[client]
socket = /home/mysql/data/mysqldata5.5/sock/mysql.sock
[mysqld]
#server_id = 3655
server_id = 123
port = 3306
skip_name_resolve = 1
binlog_format = ROW
#binlog_format = STATEMENT
basedir = /home/mysql/program/mysql5.5.36
datadir = /home/mysql/data/mysqldata5.5/mydata
socket = /home/mysql/data/mysqldata5.5/sock/mysql.sock
pid-file = /home/mysql/data/mysqldata5.5/sock/mysql.pid
tmpdir = /home/mysql/data/mysqldata5.5/tmpdir
log-error = /home/mysql/data/mysqldata5.5/log/error.log
slow_query_log
slow_query_log_file = /home/mysql/data/mysqldata5.5/slowlog/slow-query.log
log-bin = /home/mysql/data/mysqldata5.5/binlog/mysql-bin
relay-log = /home/mysql/data/mysqldata5.5/relaylog/mysql-relay-bin
innodb_data_home_dir = /home/mysql/data/mysqldata5.5/innodb_ts
innodb_log_group_home_dir = /home/mysql/data/mysqldata5.5/innodb_log
#innodb_undo_directory = /home/mysql/data/mysqldata5.5/undo/
sync_binlog=1
innodb_file_per_table=1
#skip_grant_tables
expire_logs_days = 1
log_slave_updates = ON
#replicate-same-server-id=1
skip_slave_start
#innodb_undo_tablespaces=1
5.5.36版本现象
初始搭建环境之后,查看各主机状态。搭建环境的步骤就省略。
主库(192.168.1.130)
主库通过show
processlist语句查看&#