社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

利用 MySQL 全备份,如何只恢复一个库或者一个表?

数据库开发 • 7 年前 • 677 次点击  

(点击上方公众号,可快速关注)


来源:十字螺丝钉

blog.chinaunix.net/uid-23284114-id-5766712.html

如有好文章投稿,请点击 → 这里了解详情


在实际工作中,一个MySQL实例中可能有多个database。而我们备份时,通常采用完全备份,将所有database都备份到一个文件中。


但是,偶尔会遇到只恢复一个database或者一个表的情况。怎么解决呢?


一、利用全备恢复一个库(database)的数据


案例:朋友在群里问, MySQL全库备份。如何只恢复一个库?


1、采用--one-database 选项。不建议使用该方式,经常出现问题。


# mysql -uroot -pxx -D db1 -o 


2、从全备份文件中将需要的库的建表语句和INSERT数据拿出来,然后再导入


# sed -n '/^-- Current Database: `db1`/,/^-- Current Database: `/p' all.dmp > db1.sql  

# mysql -uroot -pxx -D db1 


二、利用全备恢复一张表(table)的数据


生产中遇到开发同事更新表时未加上where条件,造称 order_status 列所有数据都被更新为0.


通常,mysqldump对全库进行备份。恢复时如果恢复全库,太耗时间又没有必要。所以,我们只恢复想要的表即可。


mysqldump备份中,既有表结构,又有INSERT INTO语句包含数据。所以获得者两部分内容即可。


1、获得表结构


# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `ecs_ugo_order_info`/!d;q' mysqldump_2017-05-23.sql 


2、获得INSERT INTO 语句,用于数据的恢复


# grep -i 'INSERT INTO `ecs_ugo_order_info`' mysqldump_2017-05-23.sql >data.sql & 


3、根据得到的表结构创建表,并导入数据


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'; 


结果如下:


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、在生产库中将order_status恢复成正常值


# mysql -uroot -pxxx xx < /tmp/ecs_ugo_order_info_rercovery.sql



看完本文有收获?请转发分享给更多人

关注「数据库开发」,提升 DB 技能


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/Qsg8k7zIVt
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4129
 
677 次点击