2015年12月5日 星期六

MySQL 5.6 單向複寫資料庫實作 (Replication)

在實作 MySQL 的複寫(Replication) 的時候必須注意 MySQL 5.5 之後所使用的設定方式並不相同,必須分清楚這一塊

 

在 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


  1. 預設 mysql 僅會繫結本機網路,所以必須註解

  2. server-id 與你的 slave 不可以重複

  3. 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)

沒有留言:

張貼留言