2008年3月15日 星期六

MySQL 設定 Replication (Master - Slave)

MySQL 設定寫入 Master 後, 自動 Replication 到 Slave 去, 運作基本原理是:



  1. INSERT/UPDATE/DELETE 語法, 自動寫入 Master 的 binlog file.

  2. 由 GRANT REPLICATION 授權的帳號, 自動將 SQL 語法 repl 到 Slave 的 DB 執行.

  3. 因而完成 Replication 的動作.


下述詳細可見: MySQL 5.0 Reference Manual :: 15 Replication


設定 Replication 的操作 (Master)



  1. $ 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


  2. $ sudo /etc/init.d/mysql restart

  3. $ mysql -u root -p # 進入 mysql

  4. 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!)

  5. mysql> FLUSH TABLES WITH READ LOCK; # 先讓 DB 不要再寫資料進去

  6. mysql> SHOW MASTER STATUS; # 這邊資料都要記好, 等一下設定 Slave 要用

    +----------------------+------------+------------------+----------------------+

    | File                     | Position   | Binlog_Do_DB | Binlog_Ignore_DB  |

    +----------------------+------------+------------------+----------------------+

    | mysql-bin.000014  |      232   |                      |                          |

    +----------------------+------------+------------------+----------------------+


  7. mysql> quit # 離開, 準備倒資料

  8. 倒資料, 可以由下述的方法倒, 此次採用步驟 1


    1. $ mysqldump -u root -p DB > dbdump.sql

    2. $ mysqldump --all-databases --lock-all-tables >dbdump.sql

    3. $ mysqldump --all-databases --master-data >dbdump.sql # --master-data: 會自動將CHANGE MASTER 的語法帶在裡面





  9. $ mysql -u root -p # 進入 mysql


  10. mysql> UNLOCK TABLES; # dump 完資料後, 進去 mysql 解除唯讀

  11. 再來就是將 dbdump.sql scp 到 Slave 去即可.


  12. Master 就到此為止.


設定 Replication 的操作 (Slave)



  1. $ sudo vim /etc/mysql/my.cnf
    server-id               = 2  # server-id 不能與其它機器相同

    log_bin                 = /var/log/mysql/mysql-bin.log


  2. $ mysql -u root -p # 進入 mysql

  3. mysql> create database DBNAME;

  4. mysql> use DBNAME; source dbdump.sql; 或 $ mysql -u root -p DBNAME < dbdump.sql

  5. mysql> CHANGE MASTER TO

        
    MASTER_HOST='MASTER_HOSTNAME',

        
    MASTER_USER='repl',

        
    MASTER_PASSWORD='repl_pass',

        
    MASTER_LOG_FILE='mysql-bin.000014',

        
    MASTER_LOG_POS=1319669; # 這邊就要用到之前 Master 抄下來的值.

  6. mysql> START SLAVE; # 這樣子就會開始 Replication 了, 會將 LOG_POS 之後新的資料開始 sync 回來.

  7. mysql> show master status; # 檢查一下設定

  8. mysql> show slave status; # 檢查一下設定, 看是不是有異常狀況.


測試



  1. 在 master: mysql> create database test2;

  2. 在 slave: mysql> show database; # 應該會看到 test2

  3. 在 master 上的任何操作應該都會馬上 replication 到 slave 去.


其它相關網頁




摘自:http://plog.longwin.com.tw/my_note-app-setting/2008/03/11/mysql_replication_master_slave_set_2008

沒有留言:

wibiya widget