2009-11-26

MySQL Replication

這兩天主管分配了一個工作給我,是將兩台不同Server的MySQL做資料單向同步。其實這個技術我在今年年初好像有做過,不過我竟然全忘光光了,這此特別將他紀錄下來!下次就不會忘了  .....


首先先找到my.ini這個配置檔,以我本機所裝的mysql5.0.45來說是放在安裝目錄下,一點進去就可以看到了。
如果沒有看到這個配置檔的話,在同樣的位置有my-small.ini、my-medium.ini 、my-large.ini 、my-huge.ini、my-innodb-heavy-4G.ini 五個檔案,
內容的設定項目都大同小異,主要差別是針對主機配置記憶體的大小。如果是在本機先測試的話,選擇 my-medium.ini 就可以了,配置記憶體是 32M - 64M。
將所選擇的檔案copy並更名為my.ini,並先將Master及Slave資料庫都先關閉。

Master設置

何謂Master?
     ex : Server A的DB要同步 Server B的DB資料,也就是B的DB資料會複製至A的DB,所以B即為Master,A為Slave。

1.打開my.ini,在[mysqld]底下增加 

   server-id=1      

         此id不能重覆,確認檔案裡沒有再設定其他一樣的server-id
         也不能與其他機器相同

   log-bin          
        
開啟 Binary Log
         MySQL 的 Binary Log 會將所有對於資料庫的修改操作全部記錄起來,而 Slave 與 Master 之間進行資料同步的方式很簡單,
         就是 Slave 會把 Master Server 的 Binary Log 拿過來執行,也就是說 Slave Server 會 "重做" 在 Master Server 上發生的各種修改操作。
         因此 Master Server 勿必要開啟 Binary Log 功能,否則 Master/Slave 架構無法運作。
  
   *補充的變數(變數還挺多的 只補充我所了解的)
    
binlog-do-db=db name  //設定可同步的db
    
binlog-ignore-db=db name  //設定不同步的db
2.開啟資料庫後,建立
Replication Slave 權限的帳號 :
   GRANT REPLICATION SLAVE ON *.* TO 'user'@'slaver_ip' IDENTIFIED BY 'PASSWORD';
   此帳號主要是給Slave來做資料同步用,給予REPLICATION的權限,
slaver_ip為該server的ip,如不限定ip的話,可以改為%。

3.以剛建立的使用者來登入試試,登入完成後輸入show master status;指令,會出現下面畫面 :
  

   將File及Position記下來,設定Slave時會用到。

Slave設置

1.一樣打開my.ini,
在[mysqld]底下增加 

   server-id=2      

       不能與其它機器相同


   log-bin

  
*補充的變數(變數還挺多的 只補充我所了解的)     replicate-do-db=db name //預作同步資料庫
     replicate-do-table=table name  //預作同步的資料表


2.啟動資料庫並用root登入後,輸入
     CHANGE MASTER TO
     MASTER_HOST='192.168.11.123',
     MASTER_USER='max',
     MASTER_PASSWORD='12345',
     MASTER_LOG_FILE='mysql-bin.000009',
     MASTER_LOG_POS=98;
     藍色部分就要用到剛才 Master 抄下來的值

     然後再輸入start slave;來讓資料的同步開始執行。

     最後輸入show slave status;來看看運行的狀況如何,
     Slave_IO_Running: Yes
     Slave_SQL_Running: Yes
     這兩個屬性如為Yes則表示同步正常的在運作。


3.接下來所有在Master所執行的動作,全都會被同步至Slave,可以利用工具來測試一下。                        

0 意見:

張貼留言