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