十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇文章為大家展示了MySQL中怎么實(shí)現(xiàn)全備份,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
目前創(chuàng)新互聯(lián)已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、東營區(qū)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
一、利用全備恢復(fù)一個(gè)庫(database)的數(shù)據(jù)
案例:朋友在群里問, MySQL全庫備份。如何只恢復(fù)一個(gè)庫?
1、采用--one-database 選項(xiàng)。不建議使用該方式,經(jīng)常出現(xiàn)問題。
# mysql -uroot -pxx -D db1 -o
2、從全備份文件中將需要的庫的建表語句和INSERT數(shù)據(jù)拿出來,然后再導(dǎo)入
# sed -n '/^-- Current Database: `db1`/,/^-- Current Database: `/p' all.dmp > db1.sql # mysql -uroot -pxx -D db1
二、利用全備恢復(fù)一張表(table)的數(shù)據(jù)
生產(chǎn)中遇到開發(fā)同事更新表時(shí)未加上where條件,造稱 order_status 列所有數(shù)據(jù)都被更新為0.
通常,mysqldump對(duì)全庫進(jìn)行備份。恢復(fù)時(shí)如果恢復(fù)全庫,太耗時(shí)間又沒有必要。所以,我們只恢復(fù)想要的表即可。
mysqldump備份中,既有表結(jié)構(gòu),又有INSERT INTO語句包含數(shù)據(jù)。所以獲得者兩部分內(nèi)容即可。
1、獲得表結(jié)構(gòu)
# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `ecs_ugo_order_info`/!d;q' mysqldump_2017-05-23.sql
2、獲得INSERT INTO 語句,用于數(shù)據(jù)的恢復(fù)
# grep -i 'INSERT INTO `ecs_ugo_order_info`' mysqldump_2017-05-23.sql >data.sql &
3、根據(jù)得到的表結(jié)構(gòu)創(chuàng)建表,并導(dǎo)入數(shù)據(jù)
mysql -uroot -pxxx xx
4、拼接update語句
mysql> select concat('update xx.ecs_ugo_order_info set order_status=',order_status,' where order_id=',order_id,';') from ecs_ugo_order_info into outfile '/tmp/ecs_ugo_order_info_rercovery.sql';
結(jié)果如下:
update xx.ecs_ugo_order_info set order_status=6 where order_id=3254778; update xx.ecs_ugo_order_info set order_status=6 where order_id=3254824; update xx.ecs_ugo_order_info set order_status=6 where order_id=3254870;
5、在生產(chǎn)庫中將order_status恢復(fù)成正常值
# mysql -uroot -pxxx xx < /tmp/ecs_ugo_order_info_rercovery.sql
上述內(nèi)容就是MySQL中怎么實(shí)現(xiàn)全備份,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。