在 MySQL Replication 的實作方式有很多種,這篇是實作 CentOS 6.7 - MySQL 5.6 單向複寫
Master:
接收執行指令(SELECT、UPDATE、INSERT ... )
Slave:
僅查詢指令(SELECT)
由 Slave 主動向 Master 取得同步更新資料(由此規則所以 Slave 可以擁有多台,並且非同步複寫,即使中斷連線再恢復也可以回復資料庫同步的狀況。
資料庫複寫在以往通常使用廣泛用於:資料庫備份、分析
本篇範例至少需要兩台資料庫伺服器:
Master 伺服器:192.168.10.10
Slave 伺服器:192.168.10.11
MySQL 5.6 單向複寫資料庫實作
Master 設定
Step.1 在 Master 的 my.cnf 中 [mysqld] 加入以下複寫全部資料庫
[mysqld]
#bind-address = 127.0.0.1
server-id=1
log-bin=mysql-bin
- 預設 mysql 僅會繫結本機網路,所以必須註解
- server-id 與你的 slave 不可以重複
- log-bin 是要用來提供 slave restore 的 log
如果你只想複寫其中幾個資料庫可以使用 binlog-do-db 來指定資料庫
[mysqld]
#bind-address = 127.0.0.1
server-id=1
log-bin=mysql-bin
binlog-do-db = db1
binlog-do-db = db2
Step.2 重新啟動 Mysql 檢測 Master 運作並確認有產生 mysql-bin 的 log
$ service mysql restart
$ mysql -uroot -p
mysql> SHOW MASTER STATUS \G;
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 7016
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.01 sec)
Step.3 建立 Replication 使用者
mysql> GRANT replication slave ON *.* TO repluser@192.168.10.11 identified BY 'replpass';
mysql> flush privileges;
在這邊請僅允許 SLAVE IP 即可。
Step.4 將 Master 的資料庫匯出,準備提供給 SLAVE 初始化資料庫使用
$ mysqldump -u root -p --master-data --all-databases > repl_db.sql
請注意 --master-data 是提供給 Master 匯出資料給 SLAVE 用的。
SLAVE 設定
Step.1 將 Master 匯出的 repl_db.sql 匯入
$ mysql -u root -p --default-character-set=utf8 < repl_db.sql
Step.2 設定 my.cnf,重啟 Mysql
$ vim /etc/my.cnf
[mysqld]
server-id=2
$ service mysqld restart
如果你的 SLAVE 也需要複寫至其他 SLAVE 也可將 log-bin 參數加入
Step.3 SLAVE 的複寫設定
填入 Master 所設定的複寫帳號、主機
$ mysql -uroot -p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.10.10', MASTER_PORT=3306, MASTER_USER='repluser', MASTER_PASSWORD='replpass';
Step.4 啟動 SLAVE 複寫機制
mysql> START SLAVE;
Step.5 檢測 SLAVE 複寫狀況
mysql> SHOW SLAVE STATUS \G;
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
確認沒有錯誤就可以在 Master 上建立資料庫或者 UPDATE、INSERT 的動作,通通都會立即在 SLAVE 上同步!
參考資料:
如何在 MySQL 5.5 設定單向資料庫複寫機制 (Replication)
Orignal From: MySQL 5.6 單向複寫資料庫實作 (Replication)
沒有留言:
張貼留言