【MySQL】面試官:如何添加新資料庫到MySQL主從複製環境?
寫在前面
今天,一名讀者回饋說:自己出去面試,被面試官一頓虐啊!為什麼呢?因為這名讀者面試的是某大廠的研發工程師,偏技術型的。所以,在面試過程中,面試官比較偏向於問技術型的問題。不過,技術終歸還是要服務於業務的,光會技術可不行,還要將技術應用於項目中才行。結果,最後問了一連串的項目實戰問題,其中一個問題就是:如何在不重新複製整個庫的情況下,添加新資料庫到MySQL主從複製環境?結果。。。
問題闡述
明確問題
面試官的問題比較明確:如何在不重新複製整個庫的情況下,添加新資料庫到MySQL主從複製環境?
首先,我們要理解面試官的意思,不能在未理解題目的前提下,就開始回答,這樣就會答非所問,面試結果自然也就涼涼了。
接下來,我們先來分析下這個問題。面試官問的是 如何添加新資料庫到MySQL主從複製環境,注意:這裡說的是資料庫,而不是MySQL實例。添加資料庫和MySQL實例是兩種完全不同的方式,所以,一定要先理解面試官的意思,再進行回答。
分析問題
MySQL主從複製一般情況下我們會設置需要同步的資料庫,使用參數配置選項,binlog-do-db,可以在master上指定需要同步的資料庫,replicate-do-db在從數據看上指定需要同步的資料庫。(一般只設定master上的binlog-do-db即可,不需要兩個同時設定。以防萬一,在slave也可以加上replicate-ignore-db)。
問題解決
主從複製基本步驟
首先,我們列舉一下主從複製的基本步驟,(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文件
主伺服器上,修改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頂部位置查找。
(5)導入新庫到從伺服器上
mysql < newdb.sql
(6)啟動從伺服器
start slave
重磅福利
微信搜一搜【冰河技術】微信公眾號,關注這個有深度的程式設計師,每天閱讀超硬核技術乾貨,公眾號內回復【PDF】有我準備的一線大廠面試資料和我原創的超硬核PDF技術文檔,以及我為大家精心準備的多套簡歷模板(不斷更新中),希望大家都能找到心儀的工作,學習是一條時而鬱鬱寡歡,時而開懷大笑的路,加油。如果你通過努力成功進入到了心儀的公司,一定不要懈怠放鬆,職場成長和新技術學習一樣,不進則退。如果有幸我們江湖再見!
另外,我開源的各個PDF,後續我都會持續更新和維護,感謝大家長期以來對冰河的支援!!
寫在最後
如果你覺得冰河寫的還不錯,請微信搜索並關注「 冰河技術 」微信公眾號,跟冰河學習高並發、分散式、微服務、大數據、互聯網和雲原生技術,「 冰河技術 」微信公眾號更新了大量技術專題,每一篇技術文章乾貨滿滿!不少讀者已經通過閱讀「 冰河技術 」微信公眾號文章,吊打面試官,成功跳槽到大廠;也有不少讀者實現了技術上的飛躍,成為公司的技術骨幹!如果你也想像他們一樣提升自己的能力,實現技術能力的飛躍,進大廠,升職加薪,那就關注「 冰河技術 」微信公眾號吧,每天更新超硬核技術乾貨,讓你對如何提升技術能力不再迷茫!