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

如何使用mysqldump還原單個MySQL表?

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

0

237

0

mysqldump 還原 MySQL

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

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

物理備份通常是全部備份或不備份。盡管可以使用Xtrabackup創(chuàng)建部分備份(我們在以前的博客文章之一中對此進(jìn)行了描述),但是還原這種備份既棘手又費(fèi)時。 

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

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

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

使用mysqldump還原單個MySQL表

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

我們有一個主人和一個奴隸:

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

{xunruicms_img_title}

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

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

1個

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

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

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

{xunruicms_img_title}

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

1個

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

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

如何使用ClusterControl還原單個MySQL表?

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

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

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

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

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