场景
现误删某一张表的数据,手上有一个数据库整库备份。备份内容为文本格式。
文本格式备份:包含了数据库的所有表、字段和数据的SQL语句。
问题
理论上是可以整库还原,但是备份文件又非常大,执行比较耗时。文本格式的备份导出的是DDL语句和insert语句,有没有办法只做单表还原。
文件已经9G了
[root@cs temp]# ll --block-size=M
-rw-r--r-- 1 root root 9932M Apr 12 10:15 xt_2024040201.sql
方案
在linux上拆分备份文件,只把需要还原的数据拿出来,然后在执行备份语句。
第一步:
在linux上将单表数据过滤出来(例如:表名为test输出到test_data.sql)
grep "INSERT INTO \`test\` VALUES" xt_2024040201.sql > test_data.sql
第二步:
使用mysql命令进行导入(root:用户名,mrk为库名,tmp后面是第一步输出的文件)
mysql -uroot -p --verbose mrk < /tmp/test_data.sql
回车后输入密码即可。
总结:
熟练了一个命令就ok,只是本人一般比较保守。
sed -n '/CREATE TABLE `test`/,/UNLOCK TABLES;/p' /tmp/text_data.sql | mysql -u root -p mrk
(包含DDL语句,从CREATE TABLE `text`开始,到UNLOCK TABLES结束导入到mrk库)
本次算是一个小窍门,分享下。数据库操作还是谨慎些,及时备份。