MySQL在線更改relay

設置多源複製時報錯

<code>ERROR 3077 (HY000): To have multiple channels, repository cannot be of type FILE; Please check the repository configuration and convert them to TABLE./<code>

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

<code>把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 = TABLEmaster_info_repository    = TABLErelay_log_recovery        = on(這個沒有添加)4.restart mysql5.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; /<code>


分享到:


相關文章: