萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 添加新數據庫到MySQL主從復制列表

添加新數據庫到MySQL主從復制列表

有時我們配置好了MySQL主從復制,但又有新的項目與數據庫進來我們也希望這些數據也可以讓mysql實現主從復制了,下面我來介紹添加新數據庫到MySQL主從復制列表方法。

MySQL主從復制一般情況下我們會設置需要同步的數據庫,使用參數配置選項,binlog-do-db,可以在master上指定需要同步的數據庫,replicate-do-db在從數據看上指定需要同步的數據庫。(一般只設定master上的binlog-do-db即可,不需要兩個同時設定。以防萬一,在slave也可以加上replicate-ignore-db)。
我們遇到的問題是,在master上面新增了一個數據庫,這個時候如何把新加的這個數據庫添加到MySQL的主從復制鏈裡?(即不重新復制整個庫的情況下,重新設置主從復制)。


首先,我們大概羅列一下主從復制的基本步驟,(MySQL主從首先需要在各自服務器配置好)。

1. 復制數據庫。

 代碼如下 復制代碼

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. 復制,導入數據。

 代碼如下 復制代碼

pv < all-db-with-master-data.sql.gz | zcat | mysql

3. 啟動slave數據庫。

slave start注意:切換到主的語句已經在導出的sql語句裡面了,注意查看。change master to master_log_file=’(binlog name in relay_master_log_file)’, master_log_pos=(exec_master_log_pos number)。

那麼,在現有的主從復制結構中,如何增加一個新的數據庫進去?比如我們要增加一個數據庫在master服務器上,比如,名為newdb的數據庫。
具體操作如下:

1. 從服務上,停掉slave數據庫。

 代碼如下 復制代碼

stop slave;

2. 主服務器上,導出新數據庫。

 代碼如下 復制代碼

mysqldump --master-data --single-transaction -R --databases newdb > newdb.sql

3. 主服務器上,修改my.cnf文件,添加新庫到binlog-do-db參數,重啟mysql。

4. 在導出的newdb.sql裡面查找當前的日志文件以及位置(change master to …)
然後讓slave服務器執行到這個位置。

 代碼如下 復制代碼 start slave until MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=1222220;

其中MASTER_LOG_FILE

以及MASTER_LOG_POS在導出的數據庫newdb.sql頂部位置查找。

4. 導入新庫到從服務器上。

 代碼如下 復制代碼

mysql < newdb.sql5. start slave

其中比較重要的是在主服務器上導出新庫時的日志位置(position A),這個點很重要,以這個點做為分界線,導入新庫。

這種方法也同樣適用於某個數據庫或者某個數據表不同步的情況,比如主從數據庫有一個表由於某些原因數據不一致,那麼上面的方法只需要去掉重啟數據庫一步,其他的操作基本

copyright © 萬盛學電腦網 all rights reserved