在实际工作中,一个MySQL实例中可能有多个database。而我们备份时,通常采用完全备份,将所有database都备份到一个文件中。
但是,偶尔会遇到只恢复一个database或者一个表的情况。怎么解决呢?
一、利用全备恢复一个库(database)的数据
案例:朋友在群里问, MySQL全库备份。如何只恢复一个库?
1、采用--one-database 选项。使用该命令前提是 all_db.sql 中的所有数据库都在Mysql数据库中有存在。不建议使用该方式,经常出现问题。
mysql -uroot -pxx -D db1 -o < all_db.sql
2、从全备份文件中将需要的库的建表语句和INSERT数据拿出来,然后再导入
sed -n '/^-- Current Database: `db1`/,/^-- Current Database: `/p' all.dmp > db1.sql
mysql -uroot -pxx -D db1 < db1.sql
二、利用全备恢复一个表(table)的数据
那么如何从全库备份中抽取某张表呢,全库恢复,再恢复某张表小库还可以,大库就很麻烦了,那我们可以利用正则表达式来进行快速抽取,具体实现方法如下:
从全库备份中抽取出t表的表结构
sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `t