2008年9月9日 星期二

21 )MySQL 單向 Replication 成功步驟紀錄

標  題:MySQL 5.0.37 Replication Master to Slave
記錄時間:2008.09.07

---------------------------------------------------------

以下指令顏色標記

語法:藍色 註解:綠色 預設環境/指定名稱:橙色
---------------------------------------------------------
預設環境:(依個人設定環境不同)

 MySQL版本:5.0.37
 Master IP:125.224.35.17
 Slave IP:114.46.0.31
 要進行同步的資料庫名稱:dblogtest
 Mysql安裝位置:/var/lib/mysql 
 啟動檔位置:/etc/rc.d/init.d/mysqld

 
 註:(1) 查詢MySQL版本指令
    進入mysql後,鍵入
 # select version();
   (2) Host IP查詢指令 ,鍵入 # ifconfig
---------------------------------------------------------

安裝流程

1. Master上開一個帳號給Slave

2. 關閉 Master MySQL

3. 備份要同步化的資料庫

4. 編輯 /etc/my.cnf

5. 啟動 Master MySQL

6. 查看Master 是否有設定正確

7. 將備份的資料庫檔 scp Slave

8. 關閉 Slave MySQL

9. 編輯 /etc/my.cnf

10. 解開備份資料庫檔案

11. 啟動 Slave MySQL

12. 測試同步化是否成功

---------------------------------------------------------
一、Master的設定:

1. 開放一個帳號給Slave使用連結使用
 確定啟動MySQL  # /etc/rc.d/init.d/mysqld start
 進入MySQL  # mysql -u root –p

 開放Slave帳號、密碼 

 # GRANT REPLICATION SLAVE on *.* to dbslave@114.46.0.31 identified by 'dbslave123'

 # quit

 :(1) dbslave為Master開放給slave的帳號
   (2) 114.46.0.31為slave的IP
   (3) dbslave123為Master開放給slave的密碼

2. 將MySQL關閉
 # /etc/rc.d/init.d/mysqld stop

3. 備份要同步化的資料庫
 到MySQL的目錄下 # cd /var/lib/mysql
 將資料庫資料打包 # tar –zcpf dblogtest.tar.gz dblogtest/
 註:(1) dblogtest.tar.gz為所要壓縮成的檔案名稱
   (2) dblogtest為要壓縮的目錄名稱
   (3) tar中的p是指連同權限設定一起打包

4. 編輯/etc/my.cnf
 註:如果/etc沒有底下my.cnf檔,
   可以從/usr/local/mysql/share/mysql下複製*.cnf到/etc/my.cnf

   語法如下:

    # cp /usr/local/mysql/share/mysql/my-small.cnf/etc/my.cnf

 # vi /etc/my.cnf
 在[mysqld]區段下加入:
  server-id=1
  log-bin=mysql-bin
  binlog-do-db=
dblogtest
 
 註:(1) server-id=為主機編號,一般習慣來說優先設1
   (2) mysql-bin=為將儲存紀錄檔的目錄名稱
   (3) binlog-do-db=為指定要同步化的資料庫名稱


5. 啟動MySQL:
 # /etc/rc.d/init.d/mysqld start

6. 檢視Master是否設定成功:
 進入MySQL # mysql –u root –p
 顯示Master設定狀態表 # show master status;

 註:若Binlog-do-db有出現指定的資料庫名稱dblogtest

   表示Master正在同步化此資料庫

7. 將備份的dblogtest資料庫,傳送到Slave server
 到MySQL的目錄下 # cd /var/lib/mysql
 # scp dblogtest.tar.gz root@114.46.0.31/tmp
 註:(1) scp為透過一個安全且加密的連線在主機間傳輸檔案的語法
   (2) dblogtest.tar.gz 為欲傳送的檔案
   (3) root為接受端電腦(Slave server)的使用者帳號
   (4) /tmp 為指定傳送到的目錄
   (5) 輸入scp指令後,需要輸入密碼,
    請輸入Slave server端的Linux使用者密碼

二、Slave的設定:

1. 將Mysql關閉
 #/etc/rc.d/init.d/mysqld stop

2. 編輯/etc/my.cnf
 在[mysqld]區段下加入:
  server-id=3
  log-bin=mysql-bin
  relay-log=mysql-relay-bin
  replicate-do-db=dblogtest
  replicate-same-server-id
  binlog-do-db=dblogtest
  master-host=125.224.35.17
  master-user=dbslave
  master-password=dbslave123
  master-port=3306
  master-connect-retry=30

 註:(1) server-id=主機編號(須避免與Master server-id相同)
   (2) log-bin=將儲存紀錄檔的目錄名稱
   (3) relay-log=將儲存替代紀錄檔的目錄名稱
   (4) replicate-do-db=指定同步化的資料庫名稱
   (5) replicate-same-server-id

    為若遇相同的server-id則以預設0值來取代,

    避免忽略其中一個server

   (6) binlog-do-db=指定要記錄的同步化資料庫
   (7) master-host=Master主機位址
   (8) master-user=Master開放給Slave的帳號
   (9) master-password= Master開放給Slave帳號的密碼
   (10) master-port 設定傳輸的阜號
   (11) master-connect-retry=若連線失敗,要重試的間隔秒數

3. 解開Master備份傳輸過來檔案

 MySQL目錄底下 # cd /var/lib/mysql

 解壓縮在tmp目錄下Mastern傳送的檔案 

 # tar zxvf /tmp/dblogtest.tar.gz



4.啟動mysql
 #/etc/rc.d/init.d/mysqld start

三、檢測是否同步成功:

進入mysql後,鍵入# show slave staus \g;
若slave-IO-Running:yes,slave-SQL-Running:yes則表示成功
接下來則可以在Master新增資料表,然後確認Slaver是否同步更新。

---------------------------------------------------
參考:http://blog.shian.tw/mysql-5122-replication-master-to-slave.html
---------------------------------------------------

(補充)同步的原理:

  
  MySQL同步的執行方式,其實是藉由
Master在MySQL下新增修改所記錄的log-bin檔案當媒介,說明如下:
  
  當Master開放一個帳號給Slave使用時,Slave就藉由此帳號連線到Master主機,而Slave會持續讀取Master主機的
log-bin檔案,當Master新增修改資料庫時,log-bin檔案會即時記錄步驟,而當Slave發現Master主機的log-bin檔案有更動時,Slave會在本機執行Master's log-bin目錄內新紀錄的步驟檔案,藉此達到同步的功能。

沒有留言: