如何添加新數(shù)據(jù)庫到MySQL主從復(fù)制環(huán)境?
今天,一名讀者反饋說:自己出去面試,被面試官一頓虐??!為什么呢?因?yàn)檫@名讀者面試的是某大廠的研發(fā)工程師,偏技術(shù)型的。所以,在面試過程中,面試官比較偏向于問技術(shù)型的問題。不過,技術(shù)終歸還是要服務(wù)于業(yè)務(wù)的,光會技術(shù)可不行,還要將技術(shù)應(yīng)用于項(xiàng)目中才行。結(jié)果,最后問了一連串的項(xiàng)目實(shí)戰(zhàn)問題,其中一個問題就是:如何在不重新復(fù)制整個庫的情況下,添加新數(shù)據(jù)庫到MySQL主從復(fù)制環(huán)境?結(jié)果。。。
問題闡述
明確問題
面試官的問題比較明確:如何在不重新復(fù)制整個庫的情況下,添加新數(shù)據(jù)庫到MySQL主從復(fù)制環(huán)境?
首先,我們要理解面試官的意思,不能在未理解題目的前提下,就開始回答,這樣就會答非所問,面試結(jié)果自然也就涼涼了。

接下來,我們先來分析下這個問題。面試官問的是 如何添加新數(shù)據(jù)庫到MySQL主從復(fù)制環(huán)境,注意:這里說的是數(shù)據(jù)庫,而不是MySQL實(shí)例。添加數(shù)據(jù)庫和MySQL實(shí)例是兩種完全不同的方式,所以,一定要先理解面試官的意思,再進(jìn)行回答。
分析問題
MySQL主從復(fù)制一般情況下我們會設(shè)置需要同步的數(shù)據(jù)庫,使用參數(shù)配置選項(xiàng),binlog-do-db,可以在master上指定需要同步的數(shù)據(jù)庫,replicate-do-db在從數(shù)據(jù)看上指定需要同步的數(shù)據(jù)庫。(一般只設(shè)定master上的binlog-do-db即可,不需要兩個同時設(shè)定。以防萬一,在slave也可以加上replicate-ignore-db)。
問題解決
主從復(fù)制基本步驟
首先,我們列舉一下主從復(fù)制的基本步驟,(MySQL主從首先需要在各自服務(wù)器配置好)。
(1)復(fù)制數(shù)據(jù)庫
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)啟動slave數(shù)據(jù)庫
slave?start
注意:切換到主的語句已經(jīng)在導(dǎo)出的sql語句里面了,注意查看下面的代碼片段。
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)中,如何增加一個新的數(shù)據(jù)庫進(jìn)去?我們繼續(xù)往下看。
添加數(shù)據(jù)庫
比如我們要增加一個數(shù)據(jù)庫在master服務(wù)器上,比如,名為newdb的數(shù)據(jù)庫。具體操作如下:
(1)從服務(wù)上,停掉slave數(shù)據(jù)庫。
stop?slave;
(2)主服務(wù)器上,導(dǎo)出新數(shù)據(jù)庫
mysqldump?--master-data?--single-transaction?-R?--databases?newdb?>?newdb.sql
(3)修改主服務(wù)器my.cnf文件
主服務(wù)器上,修改my.cnf文件,添加新庫到binlog-do-db參數(shù),重啟mysql。
(4)查找當(dāng)前的日志文件以及位置
在導(dǎo)出的newdb.sql里面查找當(dāng)前的日志文件以及位置(change master to …)
然后讓slave服務(wù)器執(zhí)行到這個位置。
start?slave?until?MASTER_LOG_FILE="mysql-bin.000001",?MASTER_LOG_POS=1222220;
其中MASTER_LOG_FILE以及MASTER_LOG_POS在導(dǎo)出的數(shù)據(jù)庫newdb.sql頂部位置查找。
(5)導(dǎo)入新庫到從服務(wù)器上
mysql?< newdb.sql
(6)啟動從服務(wù)器
start?slave
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!