星期四, 七月 17, 2008

MySQL 快速為線上運作的 Master 增加 SLAVE(設定 Replication)

已經在線上運作的 MySQL Master, 希望能在最短的時間內做 mysqldump, 然後馬上就讓他還原上線, 所以主要就是利用 --master-data, 然後短暫的 READ LOCK, mysqldump, UNLOCK 的動作, 希望把時間降到最短囉~ :)

註: 如果有完整的 mysql bin log 的話, 可以直接設好 replication 即可, 就會自動開始從 binlog 最前面開始抓, 連停機都不用了. :P

操作步驟

  1. ssh master.hostname # 先設 MASTER
  2. $ mysql -u root
  3. mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl_password'; # 先假設 帳號 repl, 密碼 repl_password
  4. mysql> FLUSH TABLES WITH READ LOCK;
  5. mysql> quit
  6. $ mysqldump -u root DATABASE_NAME --master-data > DATABASE_NAME.sql
    # 若不加 --master-data, 就需要用 show master status 來記下要組合出下述語法:
    # CHANGE MASTER TO MASTER_HOST='MASTER_HOSTNAME', MASTER_USER='repl', MASTER_PASSWORD='repl_passord', MASTER_LOG_FILE='mysql-bin.000014', MASTER_LOG_POS=232;
  7. $ mysql -u root
  8. mysql> UNLOCK TABLES;
  9. mysql> quit
  10. # 到此 MASTER 設定就算完工, 也已經恢復上線了, 再下來就是 SLAVE 囉~
  11. ssh slave.hostname
  12. $ scp master.hostname:DATABASE_NAME.sql
  13. $ mysql -u root
  14. mysql> CREATE DATABASE DATABASE_NAME;
  15. mysql> use DATABASE_NAME;
  16. mysql> source DATABASE_NAME.sql;
    # 因為上述有加入 --master-data 的命令, 所以 CHANGE MASTER 等, 已經有自動加在檔案的開頭, 不過此 CHANGE MASTER 並沒有寫 MASTER 主機的資訊, 所以可於下述 /etc/my.cnf 設定, 或者去修改 DATABASE_NAME.sql, 將 CHANGE MASTER 加入主機資訊. (在此採用修改 /etc/my.cnf 的作法)
  17. mysql> quit
  18. $ vim /etc/my.cnf
    log-bin=mysql-bin
    server-id   = 3
    master-host     =   MASTER_DB.HOSTNAME
    master-user     =   repl
    master-password =   repl_password
    master-port     =  3306
  19. $ sudo /usr/local/etc/rc.d/mysql-server restart # BSD 預設路徑
  20. $ mysql -u root
  21. mysql> start slave;
  22. mysql> show slave status \G

會看到若 MASTER 有增加資料, Exec_Master_Log_Pos 這個值就會跟著增加. (Exec_Master_Log_Pos: 執行 MASTER LOG 的 POSITION), 在此任何 MASTER 的 新增/修改 都應該會自動 replication 過來 SLAVE 囉~ (中間中斷的時間, 資料也會自動補上, 因為 --master-data 已經將當時的 POSITION 記下來了, 只要倒回去, 就會自動將資料補回來)

相關標籤
Add this page to del.icio.us Add this page to Yahoo Taiwan's bookmark Add this page to MyShare

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)