MySQL的從庫復(fù)制是一種常見的數(shù)據(jù)庫復(fù)制方式,使用從庫可以實(shí)現(xiàn)數(shù)據(jù)備份、讀寫分離等功能。然而,一般情況下在從庫創(chuàng)建備份時,都需要鎖住表,這可能會對業(yè)務(wù)造成一定的影響。針對這個問題,我們可以采用不鎖表的方式來創(chuàng)建 MySQL 從庫。
在 MySQL 5.6 版本之后,從庫支持了并行復(fù)制,可以讓數(shù)據(jù)從主庫到從庫的同步更快、更可靠。并行復(fù)制的核心思想是將一個大的事務(wù)分解成許多小的事務(wù),然后并行執(zhí)行,這樣就可以避免大事務(wù)對表的鎖定。
# 啟用并行復(fù)制 slave_parallel_workers = 4 # 設(shè)置至少有2個并行復(fù)制線程 slave_parallel_type = 'LOGICAL_CLOCK' slave_preserve_commit_order = OFF
由于并行復(fù)制是在從庫上使用,因此主庫上并無并行復(fù)制的設(shè)置。但需要注意的是,啟用并行復(fù)制后,可能會導(dǎo)致從庫復(fù)制的數(shù)據(jù)出現(xiàn)問題。例如,如果從庫上的表有外鍵約束,那么執(zhí)行并行復(fù)制時,數(shù)據(jù)可能會按不同的順序應(yīng)用到從庫,這會導(dǎo)致外鍵約束的錯誤。
另外一個不鎖表的方法是使用在線熱備份工具 Percona XtraBackup 來創(chuàng)建從庫備份。Percona XtraBackup 支持在運(yùn)行中備份 MySQL 數(shù)據(jù)庫,不需要對數(shù)據(jù)庫的表進(jìn)行鎖定。具體使用方法可參考官方文檔。
# 備份數(shù)據(jù)庫 innobackupex --user=root --password=secret /path/to/backupdir # 恢復(fù)數(shù)據(jù)庫 innobackupex --copy-back /path/to/backupdir
總之,不鎖表做從庫有多種方法,其中并行復(fù)制和使用 Percona XtraBackup 工具是比較常用的兩種方式。如果您在使用時遇到問題,建議您查看 MySQL 官方文檔或向社區(qū)尋求幫助。