|
Linux下的MySQL主從同步(2010-05-07 11:34:51)
網(wǎng)上一些關(guān)于Linux下的MySQL主從同步教程非常之多,有些很簡(jiǎn)單的配置卻弄的非常復(fù)雜,有些根本無(wú)法配通,下面是我通過(guò)簡(jiǎn)單的配置完成的主從同步過(guò)程,大家可以參考,此文章更適用于新手。 一、測(cè)試環(huán)境: 主庫(kù)(Master):Red Hat Enterprise Linux Server release 5.2 MySQL-server-community-5.1.28-0.rhel4.i386.rpm MySQL-client-community-5.1.28-0.rhel4.i386.rpm IP:192.168.1.2 從庫(kù)(Slave):Red Hat Enterprise Linux Server release 5.4 MySQL-server-community-5.1.28-0.rhel4.i386.rpm MySQL-client-community-5.1.28-0.rhel4.i386.rpm IP:192.168.1.3 查詢版本號(hào)命令: #cat /etc/issue或rpm -q redhat-release #mysql -V或rpm -qa |grep MySQL(mysql大小寫由安裝包信息決定) 建議:新手配置時(shí)盡量使用同版本的MySQL版本 二、主庫(kù)的操作 MySQL安裝包、版本不同,數(shù)據(jù)庫(kù)相關(guān)路徑和使用的命令也有所不同,不過(guò)區(qū)別并不大,此版本的數(shù)據(jù)庫(kù)存放路徑/var/lib/mysql,數(shù)據(jù)庫(kù)配置文件路徑/usr/share/mysql,數(shù)據(jù)庫(kù)相關(guān)命令/usr/bin 根據(jù)本機(jī)的內(nèi)存復(fù)制相應(yīng)的配置文件,如果你對(duì)數(shù)據(jù)庫(kù)的應(yīng)用比較了解選哪個(gè)文件都可以,自己再進(jìn)行參數(shù)修改。 查看主庫(kù)服務(wù)器/usr/share/mysql目錄下的cnf文件 #ll /usr/share/mysql/*.cnf 其中.cnf文檔如下: my-small.cnf my-medium.cnf my-large.cnf my-huge.cnf my-innodb-heavy-4G.cnf 【1】復(fù)制文件到/etc下并更名為my.cnf #cp /usr/share/mysql/my-innodb-heavy-4G.cnf /etc/my.cnf 【2】修改my.cnf #vi /etc/my.cnf my.cnf內(nèi)容比較多,這里只介紹一些重要參數(shù) server-id = 1 這是數(shù)據(jù)庫(kù)ID,此ID唯一,主庫(kù)用默認(rèn)的1即可,從庫(kù)調(diào)整為2,多個(gè)從庫(kù)的ID依次類推,切不可有相同ID出現(xiàn),這樣會(huì)造成同步出錯(cuò)。 log-bin=mysql-bin 二進(jìn)制日志文件,此項(xiàng)必須啟用,從庫(kù)需要通過(guò)它進(jìn)行數(shù)據(jù)同步。 配置主庫(kù)其實(shí)就檢查這2個(gè)選項(xiàng),如果你同步的數(shù)據(jù)庫(kù)不是全部的,只是同步個(gè)別庫(kù),或個(gè)別的不需要同步,需要繼續(xù)往下看 binlog-do-db=test 需要同步的數(shù)據(jù)庫(kù),如果同步多個(gè)庫(kù),需要另行重寫,如 binlog-do-db=test1 binlog-do-db=test2 (數(shù)據(jù)庫(kù)安裝包不同這個(gè)選項(xiàng)有的配置文件里沒(méi)有,需要加上) binlog-ignore-db=mysql 不需要同步的數(shù)據(jù)庫(kù),與binlog-do-db正好相反,如果你有100個(gè)庫(kù),只想同步其中幾個(gè),那么你應(yīng)該使用binlog-do-db,如果不想同步其中的幾個(gè),就使用binlog-ignore-db (數(shù)據(jù)庫(kù)安裝包不同這個(gè)選項(xiàng)有的配置文件里沒(méi)有,需要加上) 配置完成后重啟mysql服務(wù),如果服務(wù)未能正常啟動(dòng),說(shuō)明my.cnf配置有誤,請(qǐng)?jiān)俅螜z查。 #service mysql restart 【3】建立同步用的數(shù)據(jù)庫(kù)賬戶 主庫(kù)必須提供一個(gè)賬戶讓從庫(kù)通過(guò)此賬戶進(jìn)行連接并進(jìn)行同步,進(jìn)入mysql后輸入下面命令 mysql>grant replication slave on *.* to 'testuser'@'192.168.1.3' identified by 'testpwd_123'; 【4】鎖住主庫(kù)表,停止數(shù)據(jù)更新。 進(jìn)入到mysql后輸入 mysql> flush tables with read lock; 此時(shí)所有數(shù)據(jù)庫(kù)內(nèi)的表只提供讀的操作,不能再寫入。 【5】顯示主庫(kù)信息并記錄 mysql> show master status; +------------------+----------+--------------+------------------+ | File +------------------+----------+--------------+------------------+ | mysql-bin.000085 | 19319814 | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) 將上面的日志名mysql-bin.000085和偏移量19319814記錄下來(lái) 【6】備份所有庫(kù)文件并復(fù)制到從庫(kù)服務(wù)器上 備份有很多種方法,如果在同一局域網(wǎng)內(nèi)可直接將主庫(kù)上的數(shù)據(jù)庫(kù)復(fù)制到從庫(kù)服務(wù)器上,如果不同網(wǎng)段可先將主庫(kù)上的數(shù)據(jù)庫(kù)打包壓縮,然后傳到從庫(kù)上再解壓,測(cè)試環(huán)境是局域網(wǎng),那么就使用下面方法進(jìn)行: #mount 192.168.1.3:/var/lib/mysql /mnt 將從庫(kù)的/var/lib/mysql掛載到主庫(kù)的/mnt目錄上 #cp -r /var/lib/mysql mount過(guò)程中可能會(huì)出現(xiàn)報(bào)錯(cuò)信息,原因最多的因?yàn)闆](méi)有權(quán)限掛載從庫(kù)服務(wù)器上的路徑,需要到從庫(kù)上找到/etc/export進(jìn)行編輯,加入共享路徑,關(guān)于export文件的配置可參考一些文章或書箱,這里不再贅述。 #vi /etc/exports /var/lib/mysql 編輯完成后重啟NFS服務(wù) #service nfs restart 【7解鎖】 數(shù)據(jù)庫(kù)復(fù)制完成后對(duì)主庫(kù)所有表解鎖 #unlock tables; 三、從庫(kù)的操作 與主庫(kù)一樣,需要先復(fù)制一個(gè)配置文件到/etc下并進(jìn)行編輯,復(fù)制操作可參考主庫(kù)的,這里跳過(guò) 【1】修改my.cnf #vi /etc/my.cnf server-id = 2 將這個(gè)ID號(hào)改為2 log-bin=mysql-bin 此項(xiàng)如果開(kāi)啟建議關(guān)閉 master-host = 192.168.1.2 配置主庫(kù)的IP master-user = testuser 同步用的賬戶 master-password = testpwd_123 同步用的賬戶密碼 master-port = 3306 同步數(shù)據(jù)庫(kù)的端口號(hào) 【2】調(diào)整權(quán)限 主庫(kù)復(fù)制過(guò)來(lái)的數(shù)據(jù)庫(kù)全部都是root權(quán)限,需要修改為mysql權(quán)限 #chown -R mysql:mysql /var/lib/mysql 【3】重啟mysql服務(wù) 權(quán)限調(diào)整完成后重啟服務(wù),之前重啟會(huì)出現(xiàn)啟動(dòng)報(bào)錯(cuò) #service mysql restart 個(gè)別版本可能出現(xiàn)即使權(quán)限調(diào)整后也無(wú)法啟動(dòng),可以使用下面的方式啟動(dòng) #mysqld_safe --skipp-slave-start& 【4】手動(dòng)同步 與主庫(kù)進(jìn)行同步,可將下面內(nèi)容調(diào)整好后直接復(fù)制到mysql命令行下,這樣不容易出錯(cuò) 設(shè)置連接MASTER MASTER_LOG_FILE為主庫(kù)的File,MASTER_LOG_POS為主庫(kù)的Position,就是在鎖主庫(kù)后要記錄的那2個(gè)值 mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.2', MASTER_USER='testuser', MASTER_PASSWORD='testpwd_123', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000085', MASTER_LOG_POS=19319814, MASTER_CONNECT_RETRY=60; 【5】啟動(dòng)Slave服務(wù) mysql>slave start; 所有配置工作完成 【6】檢查從庫(kù)是否正常同步 mysql>show slave status \G; *************************** 1. row *************************** |