MySQL使用全库备份数据恢复单表数据的方法

前言

备份数据库时,采用了全库备份,但是因为某些原因需要回滚一个表的数据到备份数据库上,如果回滚整个库就比较费时间,因为可能这个表只有几十M,但是其它表可能有十几上百G,这时候就需要将需要恢复的表提取出来了

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

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

现在有备份库fdcsqlmysql-2018_11_30-03_00_01.sql,里面有多张表,现在需要恢复其中fdc_document这张表的数据

提取建表语句

sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `表名`/!d;q' mysqldump.sql(备份文件的文件名)

sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `fdc_document`/!d;q' fdcsqlmysql-2018_11_30-03_00_01.sql

DROP TABLE IF EXISTS `fdc_document`;
/*!40101 SET @saved_cs_client  = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fdc_document` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '文档ID',
 `uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
 `name` char(40) NOT NULL DEFAULT '' COMMENT '标识',
 ...
 ...
 ...
 `entrust_rule` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT ' 经纪人点击是否和用户签委托协议:1为有;0为没有',
 `audit` tinyint(3) NOT NULL DEFAULT '0' COMMENT '审核:0为未审核;1为图片已审核;2为描述已审核;3为图片和描述都已审核',
 PRIMARY KEY (`id`),
 KEY `idx_area_house` (`partition`,`category_id`,`status`,`is_off`) USING BTREE,
 KEY `idx_model_house` (`model_id`,`status`,`is_off`) USING BTREE,
 KEY `idx_community_house` (`community_id`,`estate`,`status`,`is_off`) USING BTREE,
 KEY `idx_uid_house` (`uid`,`model_id`,`is_off`) USING BTREE,
 KEY `idx_pid_house` (`id`,`pid`,`status`,`is_off`) USING BTREE,
 KEY `is_video` (`is_video`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=211138 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

提取表数据

grep 'INSERT INTO表名' mysqldump.sql(备份文件的文件名) > table_data.sql

这里应该执行grep 'INSERT INTOfdc_document' fdcsqlmysql-2018_11_30-03_00_01.sql > document.sql

执行完后会得到文件document.sql,这就是需要的单独的表文件,就可以正常恢复表数据了

建库建表

先创建数据库,再根据上面的SQL语句创建表fdc_document

导入表数据

MySQL [document]> souce /data/backup/mysql/document.sql

OK,完工!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 为什么说MySQL单表数据不要超过500万行

    今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个说法:MySQL 单表数据量大于 2000 万行,性能会明显下降.事实上,这个传闻据说最早起源于百度.具体情况大概是这样的,当年的 DBA 测试 MySQL性能时发现,当单表的量在 2000 万行量级的时候,SQL 操作的性能急剧下降,因此,结论由此而来.然后又据说百度的工程师流动到业界的其它公司,

  • MySQL使用全库备份数据恢复单表数据的方法

    前言 备份数据库时,采用了全库备份,但是因为某些原因需要回滚一个表的数据到备份数据库上,如果回滚整个库就比较费时间,因为可能这个表只有几十M,但是其它表可能有十几上百G,这时候就需要将需要恢复的表提取出来了 我们在实际工作中都遇到过这种情况,一个MySQL实例中可能有多个database.而我们备份时,通常采用完全备份,将所有database都备份到一个文件中. 但是,偶尔会遇到只恢复一个database或者一个表的情况.怎么解决呢? 现在有备份库fdcsqlmysql-2018_11_30-0

  • MySQL 从全库备份中恢复指定的表和库示例

    MySQL 从备份数据库中恢复指定的表和库示例 在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-data=2 >dump.sql 只还原erp库的内容 [root@HE1 ~]# mysql -uroot -pMANAGER erp --one-database <dump.sql 可以看出这里主要用到的参数是--one-database简写-o

  • MySQL定时全库备份数据库

    目录 一.MySQL数据备份 1.1. mysqldump命令备份数据 1.2. mysqldump常用操作示例 1.3. 还原mysql备份内容 二. 编写脚本维护备份的数据库文件 2.1. 编写BASH维护固定数量备份文件 2.2. 使用crontab定期执行备份脚本 三.创建cron脚本 三.执行效果截图 本文参考: 一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实

  • 从MySQL全库备份中恢复某个库和某张表的方法

    在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-data=2 >dump.sql 只还原erp库的内容 [root@HE1 ~]# mysql -uroot -pMANAGER erp --one-database <dump.sql 可以看出这里主要用到的参数是--one-database简写-o的参数,极大方便了我们的恢复灵活性. 那么如何从

  • MySQL定时备份数据库(全库备份)的实现

    目录 一.MySQL数据备份 1.1. mysqldump命令备份数据 1.2. mysqldump常用操作示例 1.3. 还原mysql备份内容 二. 编写脚本维护备份的数据库文件 2.1. 编写BASH维护固定数量备份文件 2.2. 使用crontab定期执行备份脚本 一.cron服务 二.crontab语法 三.创建cron脚本 三.执行效果截图 本文参考: 一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具m

  • MongoDB单表数据的导出和恢复实例讲解

    MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoDB 工作在收集和文件的概念. 数据库 数据库是一个物理容器集合.每个数据库都有自己的一套文件系统上的文件.一个单一的MongoDB服务器通常有多个数据库. 集合 集合是一组MongoDB的文档.它相当于一个RDBMS表.收集存在于一个单一的数据库.集合不执行模式.集合内的文档可以有不同的领域.通常情况下,一个集合中的所有文件是相同或相关的目的. 文档 文档是一组键 - 值对.文件动态模式.动态模式

  • Codeigniter检测表单post数据的方法

    本文实例讲述了Codeigniter检测表单post数据的方法.分享给大家供大家参考.具体如下: $name = $this->input->post(' name' ) ; $email = $this- >input->post( ' email' ) ; $subj ect = $this->input->post( ' subject' ) ; $message = $this->input->post( ' message' ) ; if(empt

  • MySQL删除有外键约束的表数据方法介绍

    在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...) 这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. 禁用外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=0; 然后再删除数据 启动外键约束,我们可以使用: SETFOREIG

  • MySQL删除表数据的方法

    在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句.DELETE语句可以通过WHERE对要删除的记录进行选择.而使用TRUNCATE TABLE将删除表中的所有记录.因此,DELETE语句更灵活. 如果要清空表中的所有记录,可以使用下面的两种方法:       DELETE FROM table1       TRUNCATE TABLE table1 其中第二条记录中的TABLE是可选的. 如果要删除表中的部分记录,只能使用DELETE语句.

随机推荐