mysql全库备份恢复某个表

Posted 爱夜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql全库备份恢复某个表相关的知识,希望对你有一定的参考价值。

早上小红过来问我说网站的一个功能没了,看了下数据库,少了个表。好吧,心里mmp,开始恢复数据

环境: 全库备份 恢复某一个表

1.1 查看备份数据

[[email protected] mysql_backup]$ ls -lh
total 16G
-rw-r--r-- 1 root root 5.4G May 21 00:58 2018_05_21_00_30_01.all.sql.zip     ##找到了备份数据

1.2  查看备份文件类型

[[email protected] mysql_backup]$ file 2018_05_21_00_30_01.all.sql.zip   ##查看文件类型

2018_05_21_00_30_01.all.sql.zip: Zip archive data, at least v3.0 to extract

1.3  解压

将压缩文件“2018_05_21_00_30_01.all.sql.zip”在当前目录下解压缩。

[[email protected] mysql_backup]$ unzip 2018_05_21_00_30_01.all.sql.zip

将压缩文件“2018_05_21_00_30_01.all.sql.zip”在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件

[[email protected] mysql_backup]$ unzip -n  2018_05_21_00_30_01.all.sql.zip -d /tmp 

1.4 恢复数据

如何从全库备份中抽取某张表呢,全库恢复,再恢复某张表小库还可以,大库就很麻烦了,那我们可以利用正则表达式来进行快速抽取,具体实现方法如下:

1.从全库备份中抽取出t表的表结构    sed -e‘/./{H;$!d;}‘ -e ‘x;/CREATE TABLE `domain`/!d;q‘

查找到了domain表的结构

[[email protected] mysql_backup]$ sed -e‘/./{H;$!d;}‘ -e ‘x;/CREATE TABLE `domain`/!d;q‘ 2018_05_22_00_30_01.all.sql    
DROP TABLE IF EXISTS `domain`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `domain` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘主键id‘,
  `domain_name` varchar(255) NOT NULL DEFAULT ‘‘ COMMENT ‘域名‘,
  `create_time` int(11) unsigned DEFAULT ‘0‘ COMMENT ‘创建时间‘,
  `status` tinyint(1) NOT NULL DEFAULT ‘0‘ COMMENT ‘域名状态(0- 正常 1-封禁 -1 删除)‘,
  PRIMARY KEY (`id`)
) ENGINE=MEMORY AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
2.从全库备份中抽取出t表的内容

[[email protected] ~]$ grep‘INSERT INTO `domain`‘  2018_05_22_00_30_01.all.sql

INSERT INTO `domain`
VALUES
    (
        1,
        www.baidu.com‘,
        1523781065 ,- 1
    ),
 
 

 

以上是关于mysql全库备份恢复某个表的主要内容,如果未能解决你的问题,请参考以下文章

从MySQL全库备份中恢复某个库和某张表

MySQL用全库备份数据恢复单表数据

如何使用MySQL中的全库备份数据恢复单表数据

xtrabackup全库还原+binlog日志还原

mysql中怎么单独备份一个表

通过Xtrabackup实现MySQL实例的全库备份与按需单库恢复