星期二, 三月 11, 2008
MySQL 設定 Replication (Master - Slave)
MySQL 設定寫入 Master 後, 自動 Replication 到 Slave 去, 運作基本原理是:
- INSERT/UPDATE/DELETE 語法, 自動寫入 Master 的 binlog file.
- 由 GRANT REPLICATION 授權的帳號, 自動將 SQL 語法 repl 到 Slave 的 DB 執行.
- 因而完成 Replication 的動作.
下述詳細可見: MySQL 5.0 Reference Manual :: 15 Replication
設定 Replication 的操作 (Master)
- $ sudo vim /etc/mysql/my.cnf # 下面是 Debian Linux 的設定, 找到下面的設定, 新增/修改 成下面這樣子.
#bind-address = 127.0.0.1
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
# 若是 innodb, 且有用 transaction 的話, 需再加入下面兩行
innodb_flush_log_at_trx_commit=1
sync_binlog=1 - $ sudo /etc/init.d/mysql restart
- $ mysql -u root -p # 進入 mysql
- mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl_pass'; # 先假設 帳號 repl, 密碼 repl_pass, 此步驟是 設定 repl 的帳號/密碼, 格式: GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%.mydomain.com' IDENTIFIED BY 'repl_password'; (Replace <some_password>with a real password!)
- mysql> FLUSH TABLES WITH READ LOCK; # 先讓 DB 不要再寫資料進去
- mysql> SHOW MASTER STATUS; # 這邊資料都要記好, 等一下設定 Slave 要用
+----------------------+------------+------------------+----------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+------------+------------------+----------------------+
| mysql-bin.000014 | 232 | | |
+----------------------+------------+------------------+----------------------+ - mysql> quit # 離開, 準備倒資料
- 倒資料, 可以由下述的方法倒, 此次採用步驟 1
- $ mysqldump -u root -p DB > dbdump.sql
- $ mysqldump --all-databases --lock-all-tables >dbdump.sql
- $ mysqldump --all-databases --master-data >dbdump.sql # --master-data: 會自動將CHANGE MASTER 的語法帶在裡面
- $ mysql -u root -p # 進入 mysql
- mysql> UNLOCK TABLES; # dump 完資料後, 進去 mysql 解除唯讀
- 再來就是將 dbdump.sql scp 到 Slave 去即可.
- Master 就到此為止.
設定 Replication 的操作 (Slave)
- $ sudo vim /etc/mysql/my.cnf
server-id = 2 # server-id 不能與其它機器相同
log_bin = /var/log/mysql/mysql-bin.log - $ mysql -u root -p # 進入 mysql
- mysql> create database DBNAME;
- mysql> use DBNAME; source dbdump.sql; 或 $ mysql -u root -p DBNAME < dbdump.sql
- mysql> CHANGE MASTER TO
MASTER_HOST='MASTER_HOSTNAME',
MASTER_USER='repl',
MASTER_PASSWORD='repl_pass',
MASTER_LOG_FILE='mysql-bin.000014',
MASTER_LOG_POS=232; # 這邊就要用到之前 Master 抄下來的值. - mysql> START SLAVE; # 這樣子就會開始 Replication 了, 會將 LOG_POS 之後新的資料開始 sync 回來.
- mysql> show master status; # 檢查一下設定
- mysql> show slave status; # 檢查一下設定, 看是不是有異常狀況.
測試
- 在 master: mysql> create database test2;
- 在 slave: mysql> show database; # 應該會看到 test2
- 在 master 上的任何操作應該都會馬上 replication 到 slave 去.
其它相關網頁
多台master/slave
我有一台主要機房(master/slave),其下有多個中繼點(master/slave)六個
主要點要和中繼點可以做雙向replicate, 中繼點彼此不能做replicate..
想請問你有設過一台master/slave中的master ip可以多個IP嗎
Comment by
阿祥
(08/28/2008 21:49)
回 阿祥
有點小問題, 我不太懂您說的中繼點是指什麼.
然後一台 master/slave 的 master ip 是多個? 指的是一台 Slave 有多台 Master?
還是一台 Slave 跑多個 MySQL, 然後多個 MySQL 分別是多個 Master 的 Slave?
Comment by
Tsung
(08/29/2008 01:44)
發表迴響
PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~



