新聞中心
MySQL是一種開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛應(yīng)用于企業(yè)級(jí)應(yīng)用中。然而,由于各種原因,MySQL表中的數(shù)據(jù)有時(shí)會(huì)被誤刪除或損壞。在這種情況下,恢復(fù)數(shù)據(jù)是至關(guān)重要的。

盤州網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
本文將介紹如何使用Linux系統(tǒng)來(lái)恢復(fù)MySQL表中的數(shù)據(jù)。以下是具體步驟:
步驟一:查看MySQL的重要文件
在Linux系統(tǒng)中,MySQL的文件存儲(chǔ)在“/var/lib/mysql/”目錄下。檢查該目錄中的“ibdata1”,“ib_logfile0”和“ib_logfile1”三個(gè)文件是否存在。這些文件保存了MySQL表的數(shù)據(jù)和日志信息。
步驟二:停止MySQL服務(wù)
在恢復(fù)數(shù)據(jù)之前,需先停止MySQL服務(wù)。使用以下命令來(lái)停止MySQL服務(wù):
sudo systemctl stop mysql
步驟三:備份MySQL表
在恢復(fù)數(shù)據(jù)之前,更好先備份MySQL表以防止數(shù)據(jù)丟失。使用以下命令來(lái)備份MySQL表:
sudo mysqldump -u username -p database_name table_name > table_name.sql
上述命令將備份指定的表并將其保存到“table_name.sql”文件中。其中,“username”是MySQL用戶的用戶名,“database_name”是要備份的數(shù)據(jù)庫(kù)名稱,“table_name”是要備份的表名稱。
步驟四:刪除損壞的數(shù)據(jù)文件
在“/var/lib/mysql/”目錄中,先將損壞的文件備份一下,然后將其刪除。
步驟五:恢復(fù)數(shù)據(jù)
MySQL的數(shù)據(jù)會(huì)保存在“/var/lib/mysql/”目錄下的“ibdata1”,“ib_logfile0”和“ib_logfile1”文件中。通過以下步驟,可以嘗試使用這些文件來(lái)恢復(fù)MySQL表的數(shù)據(jù):
1. 使用以下命令啟動(dòng)MySQL服務(wù):
sudo systemctl start mysql
2. 使用以下命令進(jìn)入MySQL:
mysql -u username -p
3. 創(chuàng)建一個(gè)空白數(shù)據(jù)庫(kù):
create database new_database_name;
4. 選擇新數(shù)據(jù)庫(kù):
use new_database_name;
5. 導(dǎo)入備份的數(shù)據(jù):
source /path/to/table_name.sql;
6. 導(dǎo)入數(shù)據(jù)后,使用以下命令恢復(fù)表數(shù)據(jù):
REPR TABLE table_name USE_FRM;
7. 退出MySQL:
exit;
恢復(fù)MySQL表中的數(shù)據(jù)可能需要一些時(shí)間,因此請(qǐng)耐心等待。
步驟六:驗(yàn)證數(shù)據(jù)恢復(fù)
在恢復(fù)數(shù)據(jù)后,請(qǐng)使用以下命令驗(yàn)證數(shù)據(jù)是否正確:
sudo mysql -u username -p database_name -e “SELECT * FROM table_name;”
該命令將顯示表中的所有數(shù)據(jù)。
結(jié)論
MySQL表中的數(shù)據(jù)很重要,因此在任何時(shí)候都應(yīng)定期備份并確保其安全。但是,如果數(shù)據(jù)不幸丟失或損壞,使用上述步驟可以使用Linux系統(tǒng)來(lái)恢復(fù)MySQL表中的數(shù)據(jù)。但請(qǐng)注意,在使用這些步驟之前,請(qǐng)確保備份了數(shù)據(jù),以防止丟失數(shù)據(jù)。
相關(guān)問題拓展閱讀:
- 怎樣備份/還原MySQL數(shù)據(jù)庫(kù) 之 MySQL Workbench
- 我用的是阿里云linux服務(wù)器,數(shù)據(jù)庫(kù)是MySQL,怎樣用備份數(shù)據(jù),恢復(fù)數(shù)據(jù)庫(kù)呢備份文件里有frm myd myi
怎樣備份/還原MySQL數(shù)據(jù)庫(kù) 之 MySQL Workbench
恢復(fù)整個(gè)數(shù)據(jù)庫(kù)首先,如果要恢復(fù)的數(shù)據(jù)庫(kù)是含有授權(quán)表的mysql數(shù)據(jù)庫(kù),將需要使用–skip-grant-tables選項(xiàng)運(yùn)行服務(wù)器。否則,服務(wù)器將抱怨無(wú)法找到授權(quán)表。在恢復(fù)表之后,執(zhí)行mysqladmin flush-privileges 來(lái)告訴服務(wù)器加載授權(quán)表,并用它們啟動(dòng)。將原數(shù)據(jù)庫(kù)目錄的內(nèi)容拷貝到其他的地方。例如,您可能會(huì)在稍后用它們進(jìn)行崩潰表的事后分析檢查(post-mortem examination)。用最新的備份文件重新加載數(shù)據(jù)庫(kù)。如果您打算使用由mysqldump 加載的文件,則需要將它們作為mysql的輸入。如果打算使用從數(shù)據(jù)庫(kù)中直接拷貝的文件(如,用tar 或c p),則將它們直接拷貝回到該數(shù)據(jù)庫(kù)目錄中。但是,在這種情況下,應(yīng)該在拷貝這些文件之前關(guān)閉服務(wù)器,然后再重新啟動(dòng)它。用更新日志重做在進(jìn)行備份后又修改了數(shù)據(jù)庫(kù)表的查詢。對(duì)于所有可用的更新日志,可使用它作為mysql的輸入。指定–one-database 選項(xiàng),使mysql只對(duì)想要恢復(fù)的數(shù)據(jù)庫(kù)執(zhí)行查詢。如果您知道需要使用所有的更新日志文件,可在包含日志的目錄中使用下列命令:% ls-t-r-l update.(0-9)* | xargs cat | mysql–one-database db_namels 命令產(chǎn)生更新日志文件的單列列表,更新日志文件根據(jù)服務(wù)器生成的順序進(jìn)行排序(要知道,如果您修改了其中的任何文件,排序的順序都將改變,這將導(dǎo)致更新日志按錯(cuò)誤的順序使用)。您很可能必須使用某些更新日志。例如,如果自備份以來(lái)所產(chǎn)生的日志命名為update.392、pdate.393 等等,可以重新運(yùn)行它們中的命令:% mysql–one-database db_name
個(gè)人建議,mysql 備份和還原 我一般 用Navicat 快速 簡(jiǎn)單, 定時(shí)備份的話 采用 linux 定時(shí)器
前言
MySQL 5.6引入了GTID,每個(gè)事務(wù)都會(huì)產(chǎn)生一個(gè)GTID,我們可以通過驗(yàn)證主從GTID來(lái)驗(yàn)證主從數(shù)據(jù)的一致性。
為了敘述簡(jiǎn)便,定義一個(gè)量ALL_GTID: 表示某個(gè)數(shù)據(jù)庫(kù)實(shí)例上 所有存在過的 或 將要存在的事務(wù) 的GTID(包括已經(jīng)被purge掉的事務(wù))。
在討論數(shù)據(jù)庫(kù)可用性的場(chǎng)景中, 當(dāng)發(fā)生主備切換時(shí), 需要進(jìn)行數(shù)據(jù)補(bǔ)償。通過比較主備的ALL_GTID,可以確定需要補(bǔ)償多少數(shù)據(jù):
在實(shí)例存活的情況,可以在實(shí)例狀態(tài)中查詢ALL_GTID。
在實(shí)例崩潰的情況,無(wú)法在實(shí)例狀態(tài)中查詢ALL_GTID。可以通過查詢BINLOG中的Previous-GTIDs計(jì)算來(lái)獲得ALL_GTID。
下面列舉與ALL_GTID相關(guān)的變量。
與ALL_GTID相關(guān)的變量
Previous-GTIDs
Previous-GTIDs格式如下(環(huán)境為MySQL5.7,日志手動(dòng)flush binary logs獲得):
查看新輪轉(zhuǎn)出的BINLOG:
下面為mysql-bin.00001中包含的GTID:
請(qǐng)點(diǎn)擊輸入圖片描述
然后再次flush binary logs:
請(qǐng)點(diǎn)擊輸入圖片描述
mysql-bin.00002中是沒有任何GTID的。
請(qǐng)點(diǎn)擊輸入圖片描述
綜上Previous-GTIDs是本身這個(gè)BINLOG文件前面的所有BINLOG的。
請(qǐng)點(diǎn)擊輸入圖片描述
全局變量中的GTID相關(guān)的變量
請(qǐng)點(diǎn)擊輸入圖片描述
變量解釋:
gtid_executed 代表著server上所有事務(wù)執(zhí)行產(chǎn)生的GTID(包含已經(jīng)被purge的BINLOG中的GTID或者是手動(dòng)set gtid_purged的GTID)。
gtid_purged 代表著已經(jīng)被purge到的GTID。gtid_purged是gtid_executed的子集。
gtid_retrieved 是從機(jī)上relay_log中的GTID。
ALL_GTID 的計(jì)算
了解了GTID相關(guān)的變量之后,可以得到獲得實(shí)例的All_GTID的的方法:
對(duì)象
方法
存活的Master實(shí)例 gtid_executed
存活的Slave實(shí)例 gtid_executed和gtid_retrieved的并集
非存活Master實(shí)例 最后一個(gè)BINLOG文件的Previous-GTIDs + 最后一個(gè)BINLOG文件中所有的GTID
非存活Slave實(shí)例 最后一個(gè)BINLOG文件的Previous-GTIDs + 最后一個(gè)BINLOG文件中所有的GTID
在獲得非存活實(shí)例中的ALL_GTID時(shí),最后一個(gè)BINLOG文件中的GTID可能不連續(xù)(比如事務(wù)同時(shí)來(lái)自于本實(shí)例客戶端和復(fù)制回放),所以需要掃描最后一個(gè)BINLOG文件。
生產(chǎn)中我們使用Xtrabackup來(lái)產(chǎn)生一個(gè) 從實(shí)例 的流程如下:
拉取備份,進(jìn)行還原
change master to
set @@global.gtid_purged=’xxx’;
set @@global.gtid_purged=’xxx’; 的影響:
將 從實(shí)例 的ALL_GTID手工置為xxx, 在通過GTID方式建立復(fù)制時(shí)不會(huì)出錯(cuò).
將更新Binlog中記錄的Previous-GTIDs (由于Binlog不可改變, 將產(chǎn)生新的Binlog, 記錄新的Previous-GTIDs).
MySQL 5.7中set gtid_purged的行為變更
問題描述
回顧一下備份恢復(fù)的流程:
拉取備份,進(jìn)行還原
change master to
set @@global.gtid_purged=’xxx’;
現(xiàn)象: 發(fā)現(xiàn)有一臺(tái)MySQL 5.7的Slave服務(wù)器恢復(fù)后沒有產(chǎn)生 正確的Previous-GTIDs。
分析
分析整個(gè)過程,解決問題應(yīng)該分階段進(jìn)行手動(dòng)模擬發(fā)現(xiàn)問題。以下為詳細(xì)步驟:
手工還原備份
環(huán)境
BINLOG數(shù)量,Previous-GTIDs狀態(tài)
Xtrabackup 2.4.2 & MySQL 5.6 1,空
Xtrabackup 2.4.2 & MySQL 5.7 1,空
Xtrabackup 2.2.9 & MySQL 5.6 1,空
Xtrabackup 2.2.9 & MySQL 5.7 1,空
可見: 恢復(fù)過程不會(huì)輪轉(zhuǎn)BINLOG。
驗(yàn)證change master和set gtid_purged在不同的MySQL版本中執(zhí)行的差異
環(huán)境
BINLOG數(shù)量,Previous-GTIDs狀態(tài)
change master & MySQL 5.6 1,空
change master & MySQL 5.7 1,空
set gtid_purged & MySQL 5.6 2,正常
set gtid_purged & MySQL 5.7 1,空
可見: 執(zhí)行set gtid_purged時(shí)不同版本的MySQL產(chǎn)生了差異
驗(yàn)證
對(duì)不同版本MySQL單獨(dú)執(zhí)行set @@global.gtid_purged=”;語(yǔ)句。檢查結(jié)果
環(huán)境
進(jìn)行的操作
BINLOG數(shù)量,Previous-GTIDs狀態(tài)
MySQL 5.7 reset master; set @@global.gtid_purged=”; 1,空
MySQL 5.6 reset master; set @@global.gtid_purged=”; 2,正常
結(jié)論
參考:
官方解釋: 在5.7版本中,執(zhí)行SET GTID_PURGED語(yǔ)句后binlog_simple_gtid_recovery會(huì)給GTID_PURGED計(jì)算出一個(gè)錯(cuò)誤的值。
由于5.7中新增了存儲(chǔ)GTID的表。所以5.7版本中set @@global.gtid_purged=”;語(yǔ)句被改成只修改存放GTID的表。
而5.6版本中會(huì)進(jìn)行BINLOG輪轉(zhuǎn)和向Previous_gtids_log_event中添加GTID。如果5.7需要產(chǎn)生和5.6相同結(jié)果的話,可以在SET GTID_PURGED語(yǔ)句后手動(dòng)執(zhí)行flush binary logs語(yǔ)句。
我用的是阿里云linux服務(wù)器,數(shù)據(jù)庫(kù)是MySQL,怎樣用備份數(shù)據(jù),恢復(fù)數(shù)據(jù)庫(kù)呢備份文件里有frm myd myi
使用MYSQ的備份程序和shell編凳茄程, 能做到完美的數(shù)據(jù)伍喊備份和還原的哦, 能否看看wo 的網(wǎng)名的 ???—–>一定腔粗野能解決的 !!
linux mysql表內(nèi)容恢復(fù)數(shù)據(jù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux mysql表內(nèi)容恢復(fù)數(shù)據(jù),如何使用Linux恢復(fù)MySQL表中的數(shù)據(jù),怎樣備份/還原MySQL數(shù)據(jù)庫(kù) 之 MySQL Workbench,我用的是阿里云linux服務(wù)器,數(shù)據(jù)庫(kù)是MySQL,怎樣用備份數(shù)據(jù),恢復(fù)數(shù)據(jù)庫(kù)呢備份文件里有frm myd myi的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站題目:如何使用Linux恢復(fù)MySQL表中的數(shù)據(jù)(linuxmysql表內(nèi)容恢復(fù)數(shù)據(jù))
轉(zhuǎn)載來(lái)源:http://m.fisionsoft.com.cn/article/dhhgpig.html


咨詢
建站咨詢
