同事搭建主從復制,從庫報錯:
Got fatal error 1236 from master when reading data from binary log: 'Misconfigured master - server id was not set'
SHOW VARIABLES LIKE 'server_id'; 顯示 1 (配置文件未顯式設置)。server_id = 2 (配置文件顯式設置)。查閱 MySQL Bug 列表發現:**若配置文件中未顯式設置 server-id,MySQL 會默認將其置為 1,但內部標記為「未設置」**,導致啟用 Binlog 時不寫入真實 Server ID 到事件中,從庫讀取到 Server ID = 0 拒絕復制。
關鍵點:
SHOW VARIABLES顯示 1 **≠** 實際已正確設置。必須在my.cnf中顯式寫入server-id = 1(或任意非 0 唯一值)。
my.cnf [mysqld] 區塊添加:server-id = 1 (或其他唯一正整數)。CHANGE MASTER TO ...; START SLAVE;。SHOW SLAVE STATUS\G 確認 Slave_IO_Running: Yes, Slave_SQL_Running: Yes。server-id = 機房ID * 1000 + 機架ID * 10 + 節點序號,如 1001, 1002, 2001。my.cnf 必須由 Ansible/Puppet/Chef/SaltStack 下發,禁止手工修改。SHOW VARIABLES LIKE 'server_id'; 並對照 my.cnf 確認顯式配置。