參考資料:
- MySQL設定Replication (Master - Slave) http://blog.longwin.com.tw/2008/03/mysql_replication_master_slave_set_2008/
- How to Set Up Replicationhttp://dev.mysql.com/doc/refman/5.0/en/replication-howto.html
流程:
1. 設定Master主機,找到 /etc/my.cnf,找到[[mysqld]加入以下兩行
log-bin=mysql-bin
server-id=1
並且重啟資料庫。
2. mysql -u root -p # 進入 mysql
加入連線主機的使用者,可利用以下指令去做
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'140.129.X.X' IDENTIFIED BY '123456';
#這段指令是說要加入一個user叫做repl,來源的IP為140.129.X.X,密碼為 123456
如果有安裝phpMyAdmin,可以在資料庫中的資料庫 mysql - 資料表 user 發現新增了一個user 叫repl
3. FLUSH TABLES WITH READ LOCK; # 先讓 DB 不要再寫資料進去
4.SHOW MASTER STATUS; 記好框起來的資料
5. 至此大致上Master的資料庫設定完畢,接下來把Master的資料庫的資料倒出來,因為我是測試用的,所以我透過phpMyAdmin的介面把資料倒出來,如果資料量比較大我才考慮用Command Line的方式來做
接下來是設定Slave資料庫
6. 設定Slave DB,找到 /etc/my.cnf,找到[[mysqld]加入 server-id=2
加入後記得重新啟動MySQL
倒完資料後,記得把Master 主機唯讀的Table解除唯讀
在Master的資料庫中下以下命令: UNLOCK TABLES;
8.資料寫入完畢後,再下Command,
CHANGE MASTER TO
MASTER_HOST='140.129.X.X', //Master IP
MASTER_USER='repl', //剛剛新增的USER
MASTER_PORT=3306, //MySQL的阜號,如果沒改阜號的話此參數不用加
MASTER_PASSWORD='123456', //密碼
MASTER_LOG_FILE='mysql-bin.000001', //用剛剛抄下的資料
MASTER_LOG_POS=3518; //用剛剛抄下的資料
9. START SLAVE; # 開始 Replication
10.注意!!如果Master主機有開啟防火牆, 請記得開放Mysql連接阜 3306 ,否則Slave 主機連線時會被防火牆擋住...
附註說明:
1. 兩部資料庫的版本最好一樣,上述測試的過程都是透過MySQL version 5.1.73,而我在工作上的主機卻是 4.0.23,
兩者差異太大會出現以下的問題而無法進行同步..
2.如果發現無法同步,可以在/var/log/mysqld.log 去查詢原因