Mysql
MariaDB / MySQL 單主多從的奇怪行為
我正在嘗試設置從單個主伺服器到多個從伺服器的複制。我按照傳統的步驟…
在大師:
更新了 my.cnf 文件:
log-bin = /var/log/mysql/master-bin log-bin-index = /var/log/mysql/master-bin.index binlog_format = mixed server-id = 01 replicate-do-db = database_name
使用以下命令為每個從站創建一個使用者:
create user 'replicant'@'%' identified by 'replicant_password'; grant replication slave on *.* to replicant; flush privileges;
在奴隸上,我做了以下事情:
將 my.cnf 更新為:
server-id = 02 [and 03,04 for the other slaves] relay-log-index = /var/log/mysql/slave-relay-bin.index relay-log = /var/log/mysql/slave-relay-bin replicate-do-db = database_name sudo systemctl restart mariadb
我把桌子鎖在主人身上。我執行了一個 show master status 來獲取日誌文件和位置。我將數據庫轉儲為 .sql 文件,將其傳輸到從伺服器並導入。這是我遇到問題的地方…
在第一個從屬伺服器上,我能夠執行以下命令,啟動從屬伺服器,複製工作完美。
MariaDB [(none)]> change master 'master01' to -> master_host='master_IP_address', -> master_user='replicant', -> master_password='replicant_password', -> master_port=3306, -> master_log_file='master-bin.000001', -> master_log_pos=62307428, -> master_connect_retry=10, -> master_use_gtid=slave_pos;
但是當我在第二個和第三個從屬伺服器上執行相同的步驟時,我會收到各種錯誤,表明它無法插入表、行等,因為數據已經存在。這幾乎就像它忽略了主人的日誌位置並試圖再次覆蓋一切。我嘗試過重置奴隸,並多次執行該過程。
唯一可行的方法是從從站 2 和 3 中完全刪除數據庫,然後在不導入數據庫的情況下啟動從站服務。此時,數據庫已創建並處理了所有事務。這是正常的行為嗎?我只是想確保我沒有遺漏任何東西。
我正在執行帶有 Maria DB 10.4.7 的 Ubuntu 18.04.3 LTS。
對於後續的 Slave,複製一個現有的從 Slave:
SLAVE STOP
- 複製所有與 MySQL/MariaDB 相關的文件。
- 進行一項更改:
server_id
.SLAVE START
在兩個奴隸上。使用它作為添加新從屬設備(或替換當機)的程序。