Mysql

MariaDB / MySQL 單主多從的奇怪行為

  • September 4, 2019

我正在嘗試設置從單個主伺服器到多個從伺服器的複制。我按照傳統的步驟…

在大師:

更新了 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在兩個奴隸上。

使用它作為添加新從屬設備(或替換當機)的程序。

引用自:https://serverfault.com/questions/981902