MySQL作為開(kāi)源免費(fèi)數(shù)據(jù)庫(kù)的主流,應(yīng)用非常廣,而MySQL主從也是高性能網(wǎng)站架構(gòu)中必要的環(huán)節(jié),特別是一些開(kāi)源的CMS如drupal、Wordpress,本文就MySQL主從的復(fù)制同步講解一下,以及過(guò)程會(huì)出現(xiàn)的問(wèn)題.
MySQL主從復(fù)制一般情況下我們會(huì)設(shè)置需要同步的數(shù)據(jù)庫(kù),使用參數(shù)配置選項(xiàng),binlog-do-db,可以在master上指定需要同步的數(shù)據(jù)庫(kù),replicate-do-db在從數(shù)據(jù)看上指定需要同步的數(shù)據(jù)庫(kù),一般只設(shè)定master上的binlog-do-db即可,不需要兩個(gè)同時(shí)設(shè)定,以防萬(wàn)一,在slave也可以加上replicate-ignore-db.
我們遇到的問(wèn)題是,在master上面新增了一個(gè)數(shù)據(jù)庫(kù),這個(gè)時(shí)候如何把新加的這個(gè)數(shù)據(jù)庫(kù)添加到MySQL的主從復(fù)制鏈里?即不重新復(fù)制整個(gè)庫(kù)的情況下,重新設(shè)置主從復(fù)制.
首先,我們大概羅列一下主從復(fù)制的基本步驟,MySQL主從首先需要在各自服務(wù)器配置好.
1.復(fù)制數(shù)據(jù)庫(kù).
mysqldump --master-data --single-transaction -R --databases [db_name] | gzip -9 - | pv > all-db-with-master-data.sql.gz
注意:innodb用 –single-transaction, myisam需要用 –lock-all-tables.
2.復(fù)制,導(dǎo)入數(shù)據(jù).
pv < all-db-with-master-data.sql.gz | zcat | mysql
3.啟動(dòng)slave數(shù)據(jù)庫(kù).
slave start
注意:切換到主的語(yǔ)句已經(jīng)在導(dǎo)出的sql語(yǔ)句里面了,注意查看,change master to master_log_file=’(binlog name in relay_master_log_file)’,master_log_pos=(exec_master_log_pos number).
那么,在現(xiàn)有的主從復(fù)制結(jié)構(gòu)中,如何增加一個(gè)新的數(shù)據(jù)庫(kù)進(jìn)去?比如我們要增加一個(gè)數(shù)據(jù)庫(kù)在master服務(wù)器上,比如名為newdb的數(shù)據(jù)庫(kù).
具體操作如下:
1.從服務(wù)上,停掉slave數(shù)據(jù)庫(kù).
stop slave;
2.主服務(wù)器上,導(dǎo)出新數(shù)據(jù)庫(kù).
mysqldump --master-data --single-transaction -R --databases newdb > newdb.sql --Vevb.com
3.主服務(wù)器上,修改my.cnf文件,添加新庫(kù)到binlog-do-db參數(shù),重啟mysql.
4.在導(dǎo)出的newdb.sql里面查找當(dāng)前的日志文件以及位置(change master to …),然后讓slave服務(wù)器執(zhí)行到這個(gè)位置.
start slave until MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=1222220;
其中MASTER_LOG_FILE以及MASTER_LOG_POS在導(dǎo)出的數(shù)據(jù)庫(kù)newdb.sql頂部位置查找.
5.導(dǎo)入新庫(kù)到從服務(wù)器上.
mysql < newdb.sql
6.start slave
其中比較重要的是在主服務(wù)器上導(dǎo)出新庫(kù)時(shí)的日志位置(position A),這個(gè)點(diǎn)很重要,以這個(gè)點(diǎn)做為分界線,導(dǎo)入新庫(kù).
這種方法也同樣適用于某個(gè)數(shù)據(jù)庫(kù)或者某個(gè)數(shù)據(jù)表不同步的情況,比如主從數(shù)據(jù)庫(kù)有一個(gè)表由于某些原因數(shù)據(jù)不一致,那么上面的方法只需要去掉重啟數(shù)據(jù)庫(kù)一步,其他的操作基本一致.
新聞熱點(diǎn)
疑難解答
圖片精選