今天無聊實做了 MySQL 資料庫同步化,那可以先看看 MySQL Master Slave Replication,中文網站可以上 google 查詢或者是看看這一篇:MySQL 設定 Replication (Master – Slave),基本上設定還蠻容易的,如果會 Master 同步到 Slave 的話,那 MySQL Master-Master 只是在用相同的方法在做一遍,如果不懂 MMM 的可以先參考這一篇:MySQL Master-Master Replication Manager(1) – 簡介,這篇寫的很清楚,今天看了文章,我實做起來,遇到一些問題,其實還蠻奇怪的,所以底下就來紀錄一下步驟,順便也說明一下。
實做兩台 Ubuntu 機器:
db1:192.168.1.1
db2:192.168.1.2
先設定 db1:
目前我都是在 Ubuntu 7.10 底下實做的,那基本上只要有支援 MySQL 的 Linux 或者 FreeBSD 機器都可以實做這個方法:
步驟一:先修改 my.cnf 這個檔案:FreeBSD 的話在:/var/db/mysql/my.cnf
Ubuntu:/etc/mysql/my.cnf
有的版本是在 /etc/my.cnf 所以不太一定,請依照自己的作業系統
修改:
#
# bind-address 請 mark 起來,因為我們必須讓 MySQL Listen 各個不同的 IP Address
#bind-address = 127.0.0.1
#
# server id 請記得每台機器都設定不同喔
#
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
步驟一的部份也請先在 db2 的機器先設定一次,然後重新啟動 mysql
步驟二:設定 mysql 權限mysql -u root -p
#
# 先設定 replication 這個帳號密碼是 slave 這個可以自己改掉
#
mysql> GRANT replication slave ON *.* TO 'replication'@'%' IDENTIFIED BY 'slave';
#
# 這個是官方的寫法,可以按照這底下去寫就可以了
#
mysql> CHANGE master TO master_host='192.168.1.2', master_port=3306, master_user='replication', master_password='slave';
#
# 底下是 Master 機器的 bin log file
# master_log_file='mysql-bin.000004',
# master_log_pos=98;
# 可以利用 SHOW MASTER STATUS; 來取得這兩個的值
mysql> CHANGE master TO master_host='192.168.1.2', master_port=3306, master_user='replication', master_password='slave', master_log_file='mysql-bin.000004', master_log_pos=98;
先到 db2 執行 SHOW MASTER STATUS; 會得到底下結果
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 189 | | |
+------------------+----------+--------------+------------------+
那這樣就可以知道
master_log_file=’mysql-bin.000001′,
master_log_pos=189;
步驟三:測試觀看 mysql slave重新啟動 mysql
/etc/init.d/mysql restart
#
# 啟動 slave
#
mysql> START slave;
#
# 觀看 slave 狀態
#
mysql> show slave status \G;
請注意下面這兩行必須為 YES
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
這樣才算代表成功了,不然就是失敗的。
先設定 db2:
步驟一:先修改 my.cnf 這個檔案:FreeBSD 的話在:/var/db/mysql/my.cnf
Ubuntu:/etc/mysql/my.cnf
有的版本是在 /etc/my.cnf 所以不太一定,請依照自己的作業系統
修改:
#
# bind-address 請 mark 起來,因為我們必須讓 MySQL Listen 各個不同的 IP Address
#bind-address = 127.0.0.1
#
# server id 請記得每台機器都設定不同喔
#
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
步驟二:設定 mysql 權限mysql -u root -p
#
# 先設定 replication 這個帳號密碼是 slave 這個可以自己改掉
#
mysql> GRANT replication slave ON *.* TO 'replication'@'%' IDENTIFIED BY 'slave';
#
# 這個是官方的寫法,可以按照這底下去寫就可以了
#
mysql> CHANGE master TO master_host='192.168.1.1', master_port=3306, master_user='replication', master_password='slave';
#
# 底下是 Master 機器的 bin log file
# master_log_file='mysql-bin.000004',
# master_log_pos=98;
# 可以利用 SHOW MASTER STATUS; 來取得這兩個的值
mysql> CHANGE master TO master_host='192.168.1.1', master_port=3306, master_user='replication', master_password='slave', master_log_file='mysql-bin.000004', master_log_pos=98;
步驟三:測試觀看 mysql slave重新啟動 mysql
/etc/init.d/mysql restart
#
# 啟動 slave
#
mysql> START slave;
#
# 觀看 slave 狀態
#
mysql> show slave status \G;
如果遇到
Slave_IO_Running: no
Slave_SQL_Running: no
這樣的話請依照下面步驟:
#
# 停止跟清除 SLAVE
#
mysql> STOP SLAVE;
mysql> RESET SLAVE;
#
# 停止 mysql
#
/etc/init.d/mysql stop
#
# 刪除 bin log 檔案
#
rm -rf /var/log/mysql/mysql-bin.*
#
# 啟動 mysql
#
/etc/init.d/mysql start
#
# 在設定一次 master ip 資訊
#
mysql> change master to master_host='192.168.1.1', master_port=3306, master_user='replication', master_password='slave';
#
# 啟動 slave
#
mysql> START SLAVE;