mysqldump全备文件中恢复单表内容

介绍

每次代码更新前都会mysqldump全备一次数据库,SQL执行错误时进行回滚操作需要提取某张表的数据,直接在系统上操作,执行单表的数据的SQL文件,加快回滚速度。

一、全库备份

mysqldump基本操作参考mysqldump使用方法(MySQL数据库的备份与恢复)

[root@centos6 ~]# mysqldump -uroot -p -B --lock-tables --flush-logs dbname > /backup/dbname.sql

二、从全备份中恢复某张表

1. 从备份恢复表的表结构

[root@centos6 ~]# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `t_order`/!d;q' /backup/dbname.sql

DROP TABLE IF EXISTS `t_order`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_order` (
  `c_date` varchar(30) DEFAULT NULL,
  `order_no` varchar(40) DEFAULT NULL,
  `key_info` varchar(200) DEFAULT NULL,
  `flag` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

其中t_order为选定的表名,输出的内容即为t_order表的数据结构。

我们可以利用输出重定向来获取表结构的SQL文件:

[root@centos6 ~]# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `t_order`/!d;q' /backup/dbname.sql > t_order_create.sql

2.从备份查询出表的表数据

[root@centos6 ~]# grep 'INSERT INTO `t_order`' /backup/dbname.sql > t_order_data.sql

3.还原数据库操作

mysql> use dbname;

mysql> source t_order_data.sql;

也可以使用Navicat等连接工具进行恢复表数据。

你可能感兴趣的:(MySQL)