從已經(jīng)運(yùn)行了一段時間的主庫,然后用一臺新安裝的備庫與之同步腮敌,此時這臺備庫還沒有數(shù)據(jù)阱当。
有幾種辦法來初始化備庫或者從其他服務(wù)器克隆數(shù)據(jù)到備庫弊添。包括從主庫復(fù)制數(shù)據(jù)、從另外一臺備庫克隆數(shù)據(jù)油坝,以及使用最近的一次備份來啟動備庫刨裆,需要有三個條件來讓主庫和備庫保持同步:
- 在某個時間點(diǎn)的主庫的數(shù)據(jù)快照
- 主庫當(dāng)前的二進(jìn)制日志文件,和獲取數(shù)據(jù)快照時在該二進(jìn)制日志文件中的偏移量帆啃,我們把這兩個值稱為日志文件坐標(biāo)(log file coordinates)。通過這兩個值可以確定二進(jìn)制日志的位置努潘》掏担可以通過show master status命令來獲取這些值报慕。
- 從快照時間到現(xiàn)在二進(jìn)制日志
下面是一些從別的數(shù)據(jù)庫克隆備庫的方法:
- 使用冷備份
最基本的方式是關(guān)閉主庫,把數(shù)據(jù)復(fù)制到備庫眠冈。重啟主庫后,會使用一個新的二進(jìn)制日志文件刑峡,我們在備庫通過修改執(zhí)行change master to指向這個文件的起始處。這個方法的缺點(diǎn)很明顯:在復(fù)制數(shù)據(jù)時需要關(guān)閉主庫诫舅。 - 使用熱備份
如果僅使用了MyISAM表,可以在主庫運(yùn)行時使用mysqlhotcopy或rsync來復(fù)制數(shù)據(jù) - 使用mysqldump
如果只包含InnoDB表刊懈,那么可以使用以下命令來轉(zhuǎn)儲主庫數(shù)據(jù)并將其加載到備庫娃闲,然后設(shè)置相應(yīng)的二進(jìn)制日志坐標(biāo):
mysqldump --sigle-transaction --all-databases --master-data=1 --host=server1 | mysql --host=server2
--single-transaction: 使得轉(zhuǎn)儲的數(shù)據(jù)為事務(wù)開始前的數(shù)據(jù)。如果使用的是非事務(wù)型表皇帮,可以使用--lock-all-tables選項(xiàng)來獲得所有表的一致性轉(zhuǎn)儲 - 使用快照或備份
只要知道對應(yīng)的二進(jìn)制日志坐標(biāo),就可以使用主庫的快照或備份來初始化備庫(如果使用備份将谊,需要確保從備份的時間點(diǎn)開始的主庫二進(jìn)制日志都要存在)冷溶。只需要把備份或快照恢復(fù)到備庫逞频,然后使用change master to指定二進(jìn)制日志的坐標(biāo)。 - 使用Percona Xtrabackup
Percona Xtrabackupshiite一款開源的熱備份工具苗胀。它能夠在備份時不阻塞服務(wù)器的操作瓦堵,因此可以在不影響備庫的情況下設(shè)置備庫」韧瑁可以克隆主庫或另一個已存在的備份的方式來建立備庫。 - 使用另外的備庫
注意:不要使用load data from master或者load table from master刨疼!這些命令過時揩慕、緩慢、非常危險迎卤,并且只適用于MyISAM存儲引擎玷坠。