目錄
一、運行環(huán)境
二、需求說明
三、思路分析
五、具體方案
六、恢復(fù)表數(shù)據(jù)
一、運行環(huán)境
系統(tǒng):CentOS7.3
數(shù)據(jù)庫:MySQL 8.0.21
二、需求說明
線上有個表的數(shù)據(jù)被誤操作了很多,無法通過bin-log進(jìn)行具體的恢復(fù)。所以當(dāng)前我們需要從全庫備份文件(mysqldump導(dǎo)出的64GB文件)中恢復(fù)指定表的數(shù)據(jù)。
三、思路分析
備份文件是整個數(shù)據(jù)庫備份的,但是我只想要那一個表。最粗暴的辦法,就是把這個sql文件,導(dǎo)入一個庫,這樣導(dǎo)就是把所有表都導(dǎo)進(jìn)來,然后再對需要的表進(jìn)行操作,但是費時費力。
我們現(xiàn)在想的就是從整個sql文件中只拿一個表,我們可以利用linux命令的優(yōu)勢對文件進(jìn)行操作,然后生成一個新的文件(就是我們想要的)。
五、具體方案
? 先定位到備份sql文件所在目錄,用cat grep方法把指定表拿出來,然后寫入一個本地文件中。 ?
cat MySQL-FULL-20230726.sql | grep userinfo > userinfo.sql
MySQL-FULL-20230726.sql 是數(shù)據(jù)庫全備文件
userinfo 是指定的表名
> userinfo.sql 是查找處理后生成的新文件
打開新的sql文件,其實我們只需要INSERT INTO `userinfo` VALUES ( 這一行的語句就行,這行是插入全部數(shù)據(jù)到表(表需要存在)。
六、恢復(fù)表數(shù)據(jù)
1.先通過下面sql語句備份當(dāng)前的表
create table userinfo-bak select * from userinfo;
userinfo-bak是新表
userinfo是當(dāng)前表(舊表)
2.清空當(dāng)前表數(shù)據(jù)(注意該操作,刪除后不可rollback)
truncate userinfo;
3.插入數(shù)據(jù)
復(fù)制剛剛的insert into語句,執(zhí)行完成就可以了。文章來源:http://www.zghlxwxcb.cn/news/detail-611203.html
題外話:linux與windows:有時用linux來處理windows文件也是一種不錯的選擇,反之也一樣。搞運維就要,靈活運用,提高效率。文章來源地址http://www.zghlxwxcb.cn/news/detail-611203.html
到了這里,關(guān)于MySQL運維:從全備sql文件中提取指定表的數(shù)據(jù)并恢復(fù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!