MySQL/MariaDB Master Slave 設定步驟

MySQL Master / Slave 設定步驟,網路文章很多,教學文也很多,

今天實做下來,卡在一個很多網友都不會發生的問題上,

這裡就簡單的做一下記錄,不然會搞很久 (可能是我的方式不對吧XD)

環境:
CentOS 7.8
Master: Mariadb 10.1.44 (用yum rpm安裝)
Slave: Mariadb 10.5.3 (用source code來compile)

 

Master 步驟 (略過安裝步驟):

1. 修改 my.cnf (依照實際環境位置修改)
# vim /etc/my.cnf
server_id=1 #(Master設定為1)
log-bin=mysql-bin #(開啟binlog,並指定存檔名稱為mysql-bin.xxxxxx)
binlog-do-db=replica_db #(要同步的資料庫名稱,有指定多個db就重覆多行binlog-do-db=dbname,若這行沒有,就是全部同步)

2. 重啟 MySQL
# systemctl restart mariadb

3. 建立 replcation 帳號
> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl';

4. 設定Table Read Lock
> FLUSH PRIVILEGES;
> FLUSH TABLES WITH READ LOCK;

5. 備份資料庫
# mysqldump --all-databases --user=root --password --master-data > masterdatabase.sql

6. 傳送備份檔至Slave主機
# scp masterdatabase.sql user@ip:~

7. 解除 Table Read Lock
> UNLOCK TABLES;

Slave 步驟 (略過安裝步驟):

1. 修改 my.cnf (依照實際環境位置修改)
# vim /mysql/3306/my.cnf
server-id = 2 #(Slave設定2之後)
relay-log = /binlog/3306/relay-bin #(接收Master傳送來的binary內容)
replicate-do-db=replica_db #(要同步的資料庫名稱,有指定多個db就重覆多行replicate-do-db=dbname,若這行沒有,就是全部同步)

2. 資料庫還原 (登入進去後,再執行備份檔)
# mysql -u root -p
> source masterdatabase.sql

注意:
這步我有卡住,如果是用該方式還原 mysql -u root -p < /home/masterdatabase.sql
會出現 ERROR 1050 (42S01) at line 816: Table 'user' already exists

3. 重啟 MySQL
# /usr/local/mysql/bin/mysqladmin -u root -S /mysql/3306/socket/mysql.sock shutdown
# /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/mysql/3306/my.cnf 2>&1 > /dev/null &

4. 檢查備份檔的 master_log_file & master_log_pos
# cat masterdatabase.sql | grep MASTER_LOG_FILE
或是用vim看,它會出現在最前面
# vim masterdatabase.sql 

5. 修改 Master 指向
> change master to master_host='MasterIP', master_port=3306, master_user='repl', master_password='repl', master_log_file='mysql-bin.000005', master_log_pos=440;

6. 啟動 slave
> start slave;

7. 檢查同步狀態 Slave_IO_Running & Slave_SQL_Running 需要為 Yes
> show slave status \G;

 

補充: Slave Reset 設定 (刪除資料)

1. Slave 主機設定清空
> stop slave;
> reset slave all;

2. 刪除資料庫
> DROP DATATBASE DBNAME;

3. 備份 Master 並指定資料庫
# mysqldump -uusername -ppassword --set-gtid-purged=OFF --single-transaction --master-data=1 dbname > dbname.sql

4. 重建資料庫與匯入
> create database dbname;
> source dbname.sql

5. 檢查備份檔的 master_log_file & master_log_pos
# cat masterdatabase.sql | grep MASTER_LOG_FILE
或是用vim看,它會出現在最前面
# vim masterdatabase.sql 

6. 修改 Master 指向
> change master to master_host='MasterIP', master_port=3306, master_user='repl', master_password='repl', master_log_file='mysql-bin.000005', master_log_pos=440;

7. 啟動 slave
> start slave;

8. 檢查同步狀態 Slave_IO_Running & Slave_SQL_Running 需要為 Yes
> show slave status \G;

 

參考資料:

mysql从库故障恢复步骤(删除数据重新同步)

How to set up MariaDB Master-Slave replication on CentOS 7

MySQL Replication(Master Slave負載平衡)