MySQL备份之mysqldump工具--lock-all-tables
在使用mysqldump(或者mysqlpump)備份mysql數(shù)據(jù)庫(kù)時(shí),有如下三個(gè)參數(shù)值得研究:
--lock-all-tables
保證整個(gè)數(shù)據(jù)庫(kù)(所有schema)的數(shù)據(jù)具有一致性快照。
在mysqldump導(dǎo)出的整個(gè)過程中以read方式鎖住所有表(鎖住方式類似 flush tables with read lock 的全局鎖)。
比如當(dāng)前數(shù)據(jù)庫(kù)有如下schema:
information_schema(不會(huì)導(dǎo)出)
mysql
performance_schema(不會(huì)導(dǎo)出)
sys(不會(huì)導(dǎo)出)
test
test1
test2
那么我們?cè)谑褂胢ysqldump導(dǎo)出時(shí):
C:\Users\Administrator>mysqldump?--lock-all-tables?--set-gtid-purged=on -AER > d:\temp\mysql.2016-4-1.dump
指定--lock-all-tables參數(shù),那么從一開始就對(duì)整個(gè)mysql實(shí)例加global read lock鎖。
這整個(gè)全局讀鎖會(huì)一直持續(xù)到導(dǎo)出結(jié)束。
所以在這個(gè)過程中,數(shù)據(jù)庫(kù)實(shí)際嚴(yán)格處于read only狀態(tài)。
所以導(dǎo)出的數(shù)據(jù)庫(kù)在數(shù)據(jù)一致性上是被嚴(yán)格保證的,也就是數(shù)據(jù)是一致性的。
由于這個(gè)參數(shù)會(huì)將數(shù)據(jù)庫(kù)置于read only狀態(tài)(也相當(dāng)于不可使用狀態(tài)),所以默認(rèn)不加該參數(shù)。
這相當(dāng)于脫機(jī)備份的感覺,所以生產(chǎn)數(shù)據(jù)庫(kù)的備份策略上,也很少使用該參數(shù)。
使用該參數(shù)的話,也會(huì)自動(dòng)將?--single-transaction 及?--lock-tables 參數(shù)置于 off 狀態(tài)。
該參數(shù)默認(rèn)off。
--single-transaction
保證各個(gè)表具有數(shù)據(jù)一致性快照。
指定?--single-transaction 參數(shù),那么導(dǎo)出過程中只能保證每個(gè)表的數(shù)據(jù)一致性(利用多版本特性實(shí)現(xiàn),目前只能針對(duì)InnoDB事務(wù)表)。
比如有一個(gè)大表,mysqldump對(duì)該表的導(dǎo)出需要1分鐘,那么在這1分鐘的過程中,該表時(shí)可以被正常訪問的。
(正常訪問包括增刪改查,但是alter table等對(duì)表結(jié)構(gòu)發(fā)生更改的語句要被掛起。)
mysqldump能夠保證從開始對(duì)該表進(jìn)行導(dǎo)出,一直到對(duì)該表的導(dǎo)出結(jié)束,該表的數(shù)據(jù)都是開始的一致性數(shù)據(jù)快照狀態(tài)。
所以該參數(shù)明顯不能保證各個(gè)表之間的數(shù)據(jù)一致性(特別是外鍵約束的父表和子表之間)。
但是該參數(shù)能夠讓數(shù)據(jù)庫(kù)處于可使用(就是應(yīng)用感覺數(shù)據(jù)庫(kù)可用)狀態(tài),相當(dāng)于聯(lián)機(jī)備份,所以被經(jīng)常使用。
該參數(shù)默認(rèn)off。
--lock-tables
保證各個(gè)schema具有數(shù)據(jù)一致性快照。
指定?--lock-tables 參數(shù),那么在導(dǎo)出過程中能夠保證各個(gè)schema的數(shù)據(jù)一致性。
比如導(dǎo)出 cms 庫(kù)(該庫(kù)有155張表)時(shí):
C:\Users\Administrator>mysqldump --lock-tables --set-gtid-purged=off -ER -B cms> d:\temp\mysql.cms.2016-4-1.dump
從命令開始,就對(duì) cms 庫(kù)的155張表加類似 lock table xxx read 的讀鎖。
這會(huì)導(dǎo)致在導(dǎo)出整個(gè)cms庫(kù)的過程中,cms庫(kù)實(shí)際上整體處于read only狀態(tài)。
但是如果我們指定如下命令:
C:\Users\Administrator>mysqldump --lock-tables --set-gtid-purged=on -AER > d:\temp\mysql.2016-4-1.dump
來導(dǎo)出全部mysql庫(kù),那么當(dāng)導(dǎo)出cms庫(kù)的過程中,其他 schema 實(shí)際上是可以被正常訪問的。
這個(gè)正常訪問就是可以接受所有合法的sql語句。
所以該參數(shù)只能保證各個(gè)schema自己的數(shù)據(jù)一致性快照。
該參數(shù)默認(rèn)on。
總結(jié)
以上是生活随笔為你收集整理的MySQL备份之mysqldump工具--lock-all-tables的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL主从复制性能优化
- 下一篇: ORA-29786: SIHA attr