Linux中MySQL資料單向&雙向同步筆記

來源:互聯網
上載者:User

最近因項目要求,在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 (重啟正常,表示配置沒錯誤)

  • 1
  • 2
  • 3
  • 4
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.