設置多源復制時報錯
ERROR 3077 (HY000): To have multiple channels, repository cannot be of type FILE; Please check the repository configuration and convert them to TABLE.
MySQL在5.7之后才支持多源復制,之前介紹過MariaDB 多主一從 搭建測試說明,現在介紹如何在MySQL上做多主一從,具體的方法說明可以查看官方文檔。
原理:多源復制加入了一個叫做Channel的概念, 每一個Channel都是一個獨立的Slave,都有一個IO_THREAD和SQL_THREAD。原理和普通復制一樣。我們只需要對每一個Master執行Change Master 語句,只需要在每個語句最后使用For Channel來進行區分。由於復制的原理沒有改變,在沒有開啟GTID的時候Master的版本可以是MySQL5.5、5.6、5.7。並且從庫需要master-info-repository、relay-log-info-repository設置為table,否則會報錯。
在線更改relay_log_info_repository,master_info_repository
把relay.info記錄在slave_relay_log_info表里有兩個好處: 1.relay.info明文存儲不安全,把relay.info中的信息記錄在table中相對安全。 2.可以避免relay.info更新不及時,SLAVE 重啟后導致的主從復制出錯。 執行下述查詢,檢查relay_log_info_repository,master_info_repository值是否為table, relay_log_recovery 是否開啟。 SHOW VARIABLES WHERE variable_name IN ('relay_log_recovery','relay_log_info_repository','master_info_repository'); relay_log_info_repository,master_info_repository值如果為FILE,建議將其修改為TABLE. 修改步驟如下: 1. stop slave; 2.
set global master_info_repository='table';
set global relay_log_info_repository='table'; 3.在my.cnf中設置 relay_log_info_repository = TABLE master_info_repository = TABLE relay_log_recovery = on(這個沒有添加) 4.restart mysql 5.start slave; 6. 檢查relay_log_info_repository是否修改成功。 show variables where variable_name in ('relay_log_info_repository','master_info_repository'); relay_log_info_repository,master_info_repository值設置為TABLE后,可以利用如下SQL查詢主從同步的信息: select * from mysql.slave_master_info; select * from mysql.slave_relay_log_info;