在主庫與從庫上建立專用的復制賬號
MariaDB [employees]> create user 'repl'@'172.%' identified by '123456';注意在生產上的密碼必須依照相關規(guī)范以達到一定的密碼強度, 并且規(guī)定在從庫上的特定網段上才能訪問主庫
在主庫與從庫上授予復制權限
MariaDB [employees]> grant replication slave on *.* to 'repl'@'172.%';配置主庫
注意啟用二進制日志需要重啟服務, 而server_id是一個動態(tài)參數, 可以結合命令行與配置文件以達到免重啟的持久化配置. 注意server_id在集群中是唯一的.
[mysqld]log_bin = /var/log/mysql/mariadb-binlog_bin_index = /var/log/mysql/mariadb-bin.indexbinlog_format = rowserver_id = 101NOTE: 把日志與數據分開是個好習慣, 最好能放到不同的數據分區(qū)
配置從庫
選項log_slave_update決定是否把中繼日志relay_log存放到本機的binlog中, 如果是配置鏈路復制, 那么該選項必填. 注意server_id在集群中是唯一的.
初始化從庫的數據
此處使用mysqldump在主庫上進行備份, 在生產上建議大家用xtrabackup進行無鎖的熱備(基于innodb引擎).
備份主庫上的employees數據庫的數據
mysqldump --single-transaction --master-data=1 --triggers --routines --databases employees -u root -p >> backup.sql將備份文件backup.sql通過scp或者docker volume卷掛載到從服務器上, 并且導入至從庫中
啟動復制鏈路
現有master@172.20.0.2和slave@172.20.0.3, 并且已經通過mysqldump將數據同步至從庫slave中. 現在在從服務器slave上配置復制鏈路
在從庫上啟動復制鏈路
MariaDB [(none)]> start slave;Query OK, 0 rows affected (0.01 sec)在從庫上檢查slave狀態(tài)
Slave_IO_Running與Slave_SQL_Running必須為YES, 如果出現錯誤須詳細閱讀Last_IO_Error或Last_SQL_Error的提示信息
在主庫檢查dump線程
檢測是否已經正確啟動binlog dump線程
MariaDB [(none)]> show PRocesslist /G*************************** 1. row *************************** Id: 7 User: root Host: 172.20.0.1:41868 db: employeesCommand: Sleep Time: 56 State: Info: NULLProgress: 0.000*************************** 2. row *************************** Id: 10 User: repl Host: 172.20.0.3:45974 db: NULLCommand: Binlog Dump Time: 246 State: Master has sent all binlog to slave; waiting for binlog to be updated Info: NULLProgress: 0.000可以看到row 2上有Command為Binlog Dump的命令被啟動, 證明復制線程已經被成功啟動
總結
優(yōu)點
技術成熟, BUG相對較少對SQL查詢沒有任何限制, 如基于GTID復制時不是所有SQL都可以使用缺點
故障轉移時重新獲取新主的日志偏移量較為困難在一主多從環(huán)境下, 若舊master宕機后在集群中選舉出新master, 其他的從庫要對這個新的master進行重新同步, 由于每個DB的binlog都是獨立存在, 所以很難找出開始同步的日志點
基于Docker Compose構建的MySQL MHA集群
新聞熱點
疑難解答
圖片精選