实际上关于数据库的备份,我们通常使用的是全备或者是对重要的数据库进行备份。但是,当我们因为某些情况,要对数据库执行恢复时,并不一定是要对数据库恢复全部内容,更多的是只恢复某个库或某张表的数据即可。
下面要介绍的就是如何从mysqldump备份出的sql文件,恢复单个库或者单个表
本文关于mysqldump的备份就不介绍了,mysqldump备份请参考下列链接:
https://blog.csdn.net/GX_1_11_real/article/details/81062074
all.2018-12.sql为mysqldump全备出的sql文件
当要恢复的单个数据库仍存在于运行中的数据库时,可用下列方法恢复;
如该库已被删除,需先进入数据库中建立该库,再进行如下操作
示例:恢复test库
<1>从全备中直接导入单个库
格式:
mysql -u用户 -p密码 单个数据库名 --one-database < 全备的sql文件
命令:
mysql -uroot -p'@#¥vse12' test -o < all.2018-12.sql
备注:
-o 为 --one-database的缩写,也可使用 --one-database
示例:恢复zabbix库
<1>从全备中直接导出zabbix库数据到新的sql文件
格式:
sed -n '/^-- Current Database: `表名`/,/^-- Current Database: `/p' 全备sql文件 > 新sql文件
命令:
sed -n '/^-- Current Database: `zabbix`/,/^-- Current Database: `/p' all.2018-12.sql > zabbix.sql
备注:
要注意空格,注意符号
Current Database:后必有一个空格
<2>将提取出的新的sql数据导入数据库
格式:
mysql -u用户 -p密码 < 单个库sql文件
命令:
mysql -uroot -p'@#¥vse12' < zabbix.sql
all.2018-12.sql为mysqldump全备出的sql文件
示例:恢复zabbix库的users表
<1>从全备份中导出该表的建表语句到新的sql文件中
格式:
sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `表名`/!d;q' 全备sql文件 > 新sql文件
命令:
sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `users`/!d;q' all.2018-12.sql > users.sql
<2>从全备份中导出该表的insert into语句追加到上一个sql文件中
格式:
grep -i 'INSERT INTO `表名`' 全备sql文件 >> 含建表语句的sql文件
命令:
grep -i 'INSERT INTO `users`' all.2018-12.sql >> users.sql
<3>导入到对应的库中
格式:
use 对应的库名;
source 导出的sql文件;
命令:
use zabbix;
source /root/users.sql;
备注:source时,也可使用相对路径