MySQL多源復制報錯,在線更改relay_log_info_repository,master_info_repository參數【轉】


設置多源復制時報錯

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-repositoryrelay-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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM