今天無聊實做了 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;
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;參考網站:
How To Set Up Database Replication In MySQL MySQL Master Master Replication MySQL Master-Master Replication Manager(2) – 環境建置、架設
See also
- [SQL] 如何從單一資料表取得每個 key 前 n 筆資料
- 在 Docker 偵測 MySQL 或 Postgres 是否啟動
- OpenSSH 安全性漏洞 CVE-2016-0777 and CVE-2016-0778
- Laravel 50 個小技巧 + Laravel 5.2 新功能
- 優化 Percona XtraDB Cluster for write hotspots
- 在 Debian 安裝 Percona Xtradb Cluster 5.5.34 注意事項
- 免費下載 Percona MySQL eBooks
- OSDC 2014 Talk: Introduction to Percona XtraDB Cluster and HAProxy
- Percona Cloud Tools for MySQL 介紹及安裝
- Percona XtraDB Cluster 5.6 找合適 IST Donor