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;
參考資料:
How to set up MariaDB Master-Slave replication on CentOS 7
MySQL Replication(Master Slave負載平衡)
0 留言