最近因項目要求,在Linux伺服器上設定mysql的資料同步,幸好網路資源多啊,google一下全有了,不過實際操作起來,就麻煩了,遇到很多問題,不過多google一下也解決了,
同時學習了很多相關方面的知識,現將總結於此,以備後用,希望對有此需要的JE們有所協助;
一、準備環境
自己做練習硬體資源少,只能在虛擬器上操作了哈哈!
Linux 版本:Red Hat Enterprise Linux Server release 5.1
MySQL 版本:MySQL-server-community-5.0.67-0.rhel5.i386.rpm
MySQL-client-community-5.0.67-0.rhel5.i386.rpm
(PS:mysql的同步機制是基於二進位日誌binlog,不同的mysql版本會導致其格式的不同,從而導致不能實現資料同步,因此最好的搭配組合是Master的MySQL版本和Slave的
版本相同或者Slave的版本高於Master的版本,因為mysql是向下相容的,為此Master的版本不能高於Slave版本,否則有可能不能實現功能;如果要實現雙向同步,最好mysql是同
一版本)
虛擬機器版本:VMware6.0
在虛擬機器上安裝兩個Linux系統,並分別安裝上mysql(mysql安裝在俺部落格的mysql安裝有詳細說明)
mysql預設安裝的檔案分別為:
/var/lib/mysql/ (資料庫目錄,其所建立的資料庫檔案都在該目錄下)
/usr/share/mysql (mysql相關設定檔)
/usr/bin (mysql相關命令,如mysql mysqladmin等)
為了區分系統,給系統命名一下,便於後面的說名:
LinuxA 系統: Ip:192.168.59.123 (Master)
LinuxB 系統: Ip:192.168.59.124 (Slave)
關閉LinuxA 和 LinuxB 的防火牆 #service iptables stop (保證系統互相可以ping的通)
二、設定單向mysql資料同步(LinuxA(Master)->LinuxB(Slave))
1、 LinuxA 為 master
LinuxB 為 slave (同步LinuxA 上mysql上指定的test資料庫中的資料);
由於剛安裝的mysql,因此分別在LinuxA 和 LinuxB 的 mysql 上建立相同的資料庫如 test(表有 stu , class,teacher),保證兩個mysql上的資料庫名一致其表名及表的
結構一致,若有一個不同,將導致無法實現同步;
(PS: 要使資料同步,必須保證資料庫名一致其表名及表的結構一致)
2、在作為master(即LinuxA)的mysql上建立一個賬戶專門用於slave(即LinuxB)來進行資料同步
# mysql (預設使用者,如設定了root密碼,使用mysql -u root -p 登入mysql)
mysql>grant file on *.* to backa@'192.168.59.124' identified by 'backa'
mysql>flush privileges;
(PS:此backa賬戶只能通過ip為192.168.59.124的訪問)
在LinuxB上測試賬戶backa是否可以訪問LinxuA上的mysql:
#mysql -u backa -p -h 192.168.59.123(輸入密碼backa,可以訪問說明設定正確)
3、修改 my.cnf 檔案
由於剛安裝的mysql ,在/etc目錄下可能無my.cnf檔案,從/user/share/mysql目錄中拷貝my-medium.cnf 到/etc並修改成my.cnf (LinuxA 和LinuxB 上一樣)
如 # cp /user/share/mysql/my-medium.cnf /etc/my.cnf
修改在LinuxA(Master)上的/etc/my.cnf
log-bin=mysql-bin (記錄檔,預設存在/var/lib/mysql下記錄檔以mysql-bin為開頭)
#log_bin= /var/log/mysql/mysql-bin.log(也可以自己指定,在此用# 表示注釋掉了)
binlog-do-db =test(需要同步的資料庫名,如需同步多個資料庫,可以另起行如binlog-do-db =test1 )
server-id= 1 (mysql標示)
修改完後儲存退出,並重啟mysql 如#service mysql restart (重啟正常,表示配置沒錯誤)
修改在LinxuB(Slave)上的/etc/my.cnf
server-id= 2 (mysql標示,唯一否則啟動會出錯誤)
master-host=192.168.59.123 (同步Master的ip地址)
master-user=backa (同步所需的帳號)
master-password=backa (同步帳號的密碼)
master-port=3306 (LinuxA 中mysql的訪問連接埠)
replicate-do-db=test (所需同步的資料庫名,如果是同步多個資料庫,可以另起一行如 replicate-do-db=test1)
#replicate-do-table=test.stu (如果只需同步test資料庫中的stu表)
#replicate-do-table=test.teacher(如果只需同步test資料庫中的stu表)
master-connect-retry=60 (主伺服器(Master)宕機或串連丟失的情況下,從伺服器(slave)線程重新嘗試串連主伺服器之前睡眠的秒數)
修改完後儲存退出,並重啟mysql 如#service mysql restart (重啟正常,表示配置沒錯誤)