明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

當(dāng)mysqldump --single-transaction遇到alter table怎么辦?

[摘要]測試環(huán)境:MySQL 5.5.14在數(shù)據(jù)庫testdb01下有表tb1001,當(dāng)前表中存有兩條數(shù)據(jù):##===============================================...
測試環(huán)境:

MySQL 5.5.14

在數(shù)據(jù)庫testdb01下有表tb1001,當(dāng)前表中存有兩條數(shù)據(jù):

當(dāng)mysqldump --single-transaction遇到alter table怎么辦?

##=========================================================##

當(dāng)mysqldump --single-transaction遇到alter table怎么辦?

發(fā)現(xiàn)竟然返回的是空集,沒有任何報(bào)錯(cuò)。

這也就合理解釋我同事操作的現(xiàn)象:在mysqldump過程中,修改表結(jié)構(gòu),修改操作沒有被阻塞,mysqldump操作也”正常完成“。

由于SELECT /*!40001 SQL_NO_CACHE */ * FROM `tb1001`操作沒有返回錯(cuò)誤也沒有返回?cái)?shù)據(jù),mysqldump進(jìn)程會(huì)將tb1001當(dāng)做一個(gè)空表來處理,然后繼續(xù)導(dǎo)出后面的表直至導(dǎo)出所有的表然后返回執(zhí)行成功的狀態(tài)。但導(dǎo)出的備份已經(jīng)缺失tb1001的數(shù)據(jù),如果恰好采用該備份去恢復(fù)數(shù)據(jù),那么必然最終導(dǎo)致“數(shù)據(jù)丟失”。

解決辦法:

在對(duì)MySQL 5.5版本進(jìn)行修改表操作前,先檢查當(dāng)前服務(wù)器是否在進(jìn)行mysqldump操作,避免兩者并行執(zhí)行。

如果對(duì)mysqldump已經(jīng)導(dǎo)出過的表進(jìn)行修改操作,修改操作會(huì)被阻塞,直到mysqldump結(jié)束,該情況與MySQL 5.6版本一致。

總結(jié):

對(duì)于MySQL 5.5版本,mysqldump與表修改操作同時(shí)執(zhí)行:

如果修改表操作在 ”mysqldump開啟后但還未導(dǎo)出修改表數(shù)據(jù)前“ 的時(shí)間段內(nèi)開始,則修改表操作成功完成,而mysqldump不會(huì)執(zhí)行失敗,但是無法正常導(dǎo)出修改表的數(shù)據(jù);

如果修改表操作在 “mysqldum已導(dǎo)出修改表數(shù)據(jù)但還未結(jié)束mysqldump操作前”的時(shí)間段內(nèi)開始,則修改表操作被阻塞,mysqldum能成功完成,在mysqldump操作完成后修改表操作方可正常執(zhí)行。

對(duì)于MySQL 5.5版本,應(yīng)該避免mysqldump和修改表操作同時(shí)進(jìn)行,以避免備份丟失修改表的數(shù)據(jù),造成數(shù)據(jù)不一致!

以上就是當(dāng)mysqldump --single-transaction遇到alter table怎么辦?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。