中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

如何使用mysqldump還原單個(gè)MySQL表?

發(fā)布于:2020-12-19 17:52:54

0

235

0

mysqldump 還原 MySQL

Mysqldump是MySQL最流行的邏輯備份工具。它包含在MySQL發(fā)行版中,因此可以在所有MySQL實(shí)例上使用。 

但是,邏輯備份不是備份MySQL數(shù)據(jù)庫(kù)的最快也是最節(jié)省空間的方法,但是與物理備份相比,它們具有巨大的優(yōu)勢(shì)。 

物理備份通常是全部備份或不備份。盡管可以使用Xtrabackup創(chuàng)建部分備份(我們?cè)谝郧暗牟┛臀恼轮恢袑?duì)此進(jìn)行了描述),但是還原這種備份既棘手又費(fèi)時(shí)。 

基本上,如果要還原單個(gè)表,則必須停止整個(gè)復(fù)制鏈,并立即在所有節(jié)點(diǎn)上執(zhí)行恢復(fù)。這是一個(gè)主要問(wèn)題-如今,您很少負(fù)擔(dān)停止所有數(shù)據(jù)庫(kù)的費(fèi)用。 

另一個(gè)問(wèn)題是表級(jí)別是Xtrabackup可以實(shí)現(xiàn)的最低粒度級(jí)別:您可以還原單個(gè)表,但不能還原其中的一部分。但是,可以通過(guò)運(yùn)行SQL語(yǔ)句的方式來(lái)恢復(fù)邏輯備份,因此可以在正在運(yùn)行的群集上輕松地執(zhí)行邏輯備份,并且您可以(雖然我們不容易稱呼它,但仍然可以)選擇要運(yùn)行的SQL語(yǔ)句,因此您可以對(duì)表進(jìn)行部分還原。 

讓我們看一下如何在現(xiàn)實(shí)世界中做到這一點(diǎn)。

使用mysqldump還原單個(gè)MySQL表

剛開始時(shí),請(qǐng)記住,部分備份不能提供一致的數(shù)據(jù)視圖。當(dāng)您備份單獨(dú)的表時(shí),即使您要從備份中還原所有數(shù)據(jù),也無(wú)法及時(shí)將這種備份還原到已知位置(例如,配置復(fù)制從屬)。有了這些,讓我們繼續(xù)吧。

我們有一個(gè)主人和一個(gè)奴隸:

數(shù)據(jù)集包含一個(gè)模式和幾個(gè)表:

{xunruicms_img_title}

現(xiàn)在,我們必須備份。有幾種方法可以解決此問(wèn)題。我們可以對(duì)整個(gè)數(shù)據(jù)集進(jìn)行一致的備份,但這將生成一個(gè)包含所有數(shù)據(jù)的大型單個(gè)文件。要恢復(fù)單個(gè)表,我們將不得不從該文件中提取表的數(shù)據(jù)。當(dāng)然可以,但是這很耗時(shí),可以手動(dòng)編寫腳本,但是如果沒(méi)有適當(dāng)?shù)哪_本,那么當(dāng)數(shù)據(jù)庫(kù)宕機(jī)并且承受沉重壓力時(shí)編寫臨時(shí)代碼是非常困難的。不一定是最安全的主意。

取而代之的是,我們可以通過(guò)將每個(gè)表存儲(chǔ)在單獨(dú)文件中的方式來(lái)準(zhǔn)備備份:

1個(gè)

root@vagrant:~/backup# d=$(date +%Y%m%d) ; db='sbtest'; for tab in $(mysql -uroot -ppass -h127.0.0.1 -e "SHOW TABLES FROM ${db}" | grep -v Tables_in_${db}) ; do mysqldump --set-gtid-purged=OFF --routines --events --triggers ${db} ${tab} > $2vdpv8kmu_${db}.${tab}.sql ; done

請(qǐng)注意,我們?cè)O(shè)置--set-gtid-purged = OFF。如果以后要將此數(shù)據(jù)加載到數(shù)據(jù)庫(kù)中,則需要它。否則,MySQL將嘗試設(shè)置@@ GLOBAL.GTID_PURGED,這很可能會(huì)失敗。MySQL最好將SET @@ SESSION.SQL_LOG_BIN = 0設(shè)置為; 這絕對(duì)不是我們想要的。如果我們要對(duì)整個(gè)數(shù)據(jù)集進(jìn)行一致的備份,并且我們想使用它來(lái)設(shè)置新節(jié)點(diǎn),則需要這些設(shè)置。在我們的案例中,我們知道這不是一致的備份,因此我們無(wú)法從中重建任何內(nèi)容。我們只需要生成一個(gè)轉(zhuǎn)儲(chǔ)文件,然后將其加載到主服務(wù)器上,然后將其復(fù)制到從服務(wù)器上即可。

該命令生成了一個(gè)不錯(cuò)的sql文件列表,可以將其上傳到生產(chǎn)集群:

{xunruicms_img_title}

當(dāng)您想要還原數(shù)據(jù)時(shí),您所需要做的就是將SQL文件加載到主節(jié)點(diǎn)中:

1個(gè)

root@vagrant:~/backup# mysql -uroot -ppass sbtest < 20200318_sbtest.sbtest11.sql

數(shù)據(jù)將被加載到數(shù)據(jù)庫(kù)中并復(fù)制到所有從站。

如何使用ClusterControl還原單個(gè)MySQL表?

當(dāng)前,ClusterControl不能提供一種簡(jiǎn)單的方法來(lái)恢復(fù)單個(gè)表,但是仍然可以通過(guò)一些手動(dòng)操作來(lái)恢復(fù)它。您可以使用兩個(gè)選項(xiàng)。首先,適用于少量表,基本上可以創(chuàng)建計(jì)劃,在該計(jì)劃中對(duì)一個(gè)單獨(dú)的表進(jìn)行部分備份:

在這里,我們正在備份sbtest.sbtest1表。我們可以輕松地為sbtest2表安排另一個(gè)備份:

或者,我們可以執(zhí)行備份并將數(shù)據(jù)從單個(gè)模式放入單獨(dú)的文件中:

現(xiàn)在,您可以在文件中手動(dòng)找到丟失的數(shù)據(jù),將此備份還原到單獨(dú)的服務(wù)器,或者讓ClusterControl進(jìn)行:

您可以保持服務(wù)器正常運(yùn)行,并且可以使用mysqldump或SELECT…INTO OUTFILE提取要還原的數(shù)據(jù)。這樣提取的數(shù)據(jù)將準(zhǔn)備好應(yīng)用于生產(chǎn)集群。