在大备份文件里抽取单个库或单个表的脚本

MYSQL通常单机单实例,每个实例下面有很多不同的库,备份时带上--all-databases,有时候会需要从备份文件里面抽取单个库,或者某个库下的某个表。

如果还原全部数据库,肯定是可以做到的,但是时间代价非常大。下面这个脚本就是实现快速提取单个库,单个表


#/bin/bash
#author :zuoxingyu
#create_date:2014-05-28
#usage :./single_table_restore.sh back.sql DB1
#usage :./single_table_restore.sh back.sql DB1 T1

BACKUP_FILE=$1
DB_NAME=$2
TB_NAME=$3

#至少有2个参数,第一个参数是备份文件名称,第二个参数是库名称,第三个参数是表名称,第三个参数不存在时,恢复库
if [ "-$1" = "-" ];then
echo "you must privide backup file."
exit 0
fi

if [ "-$2" = "-" ];then
echo "you must provide database name or table name."
exit 0
fi

echo "restore DB_NAME:" $DB_NAME "restore TB_NAME:" $TB_NAME

echo "generate restore file start" `date "+%Y-%m-%d %H:%M:%S"`
if [ "-$3" != "-" ];then
sed -n "/^-- Current Database: \`$DB_NAME\`/,/^-- Current Database:/p" $BACKUP_FILE|sed -n "/^-- Table structure for table \`$TB_NAME\`/,/^UNLOCK TABLES/p" >restore.sql
else
sed -n "/^-- Current Database: \`$DB_NAME\`/,/^-- Current Database:/p" $BACKUP_FILE>restore.sql
fi
echo "generate restore file end" `date "+%Y-%m-%d %H:%M:%S"`
echo "filename:./restore.sql"

抽取单个表:


[[email protected] data]# ./single_table_restore.sh back.sql DB1 T1
restore DB_NAME: DB1 restore TB_NAME: T1
generate restore file start 2014-05-28 19:25:22
generate restore file end 2014-05-28 19:25:22
filename:./restore.sql
[root@meizuDB data]# cat restore.sql
-- Table structure for table `T1`
--

DROP TABLE IF EXISTS `T1`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `T1` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `T1`
--

LOCK TABLES `T1` WRITE;
/*!40000 ALTER TABLE `T1` DISABLE KEYS */;
INSERT INTO `T1` VALUES (1),(2),(3);
/*!40000 ALTER TABLE `T1` ENABLE KEYS */;
UNLOCK TABLES;

抽取单个库


[[email protected] data]# ./single_table_restore.sh back.sql DB1
restore DB_NAME: DB1 restore TB_NAME:
generate restore file start 2014-05-28 19:29:43
generate restore file end 2014-05-28 19:29:43
filename:./restore.sql
[root@meizuDB data]# cat restore.sql
-- Current Database: `DB1`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `DB1` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `DB1`;

--
-- Table structure for table `T1`
--

DROP TABLE IF EXISTS `T1`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `T1` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `T1`
--

LOCK TABLES `T1` WRITE;
/*!40000 ALTER TABLE `T1` DISABLE KEYS */;
INSERT INTO `T1` VALUES (1),(2),(3);
/*!40000 ALTER TABLE `T1` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Current Database: `DB2`

在大备份文件里抽取单个库或单个表的脚本

时间: 2024-10-16 10:24:44

在大备份文件里抽取单个库或单个表的脚本的相关文章

MySQL中查询所有数据库占用磁盘空间大小和单个库中所有表的大小的sql语句

查询所有数据库占用磁盘空间大小的SQL语句: select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size, concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size from information_schema.tables group by TABLE_SCHEMA order by data_lengt

统计大文件里单词

转载统计大文件里,频数最高的10个单词,(C# TPL DataFlow版) 最近公司搞了一个写程序的比赛,要求从2G的文件里统计出出现频率最高的10个单词. 最开始的想法是使用字典树,后来发现字典树更适合用在找前缀上,在查找没有hash表效率高. 之后使用Hash表+DataFlow完成了功能,2G的文件处理在20秒以内(其实我有信心优化到10秒以内,但是太折腾了). 这是我的设计图: 为什么要形成那么多结果?因为我不想写锁,写锁会降低很多效率,而且也失去了线程的意义,每个线程做自己的工作,

MySQL实例多库某张表数据文件损坏导致xxx库无法访问故障恢复

一.问题发现 命令行进入数据库实例手动给某张表进行alter操作,发现如下报错. mysql> use xx_xxx; No connection. Trying to reconnect... Connection id: 5 Current database: *** NONE *** Reading table information for completion of table and column names You can turn off this feature to get

重大发现Discuz DB层跨库映射关系表名前缀BUG

场景: 在Discuz中创建Table模型,但该Table所在库与Discuz不在同一个库. Discuz好像是在3之后提供跨库映射的机制. 映射没问题,主要是发现表名前缀没有相应的映射过来.当然,其实也不算bug.因为他只考虑discuz自己的系统,一般来说,表名前缀是相同的. 在db驱动类里,db_driver_mysql(i): function table_name中 if(!empty($this->config[$id]['tablepre'])){ $this->tablepre

MySQL - 建库、建表、查询

本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门教程.mysql(有时称为“终端监视器”或只是“监视”)是一个交互式程序,允许你连接一个MySQL服务器,运行查询并察看结果.mysql可以用于批模式:你预先把查询放在一个文件中,然后告诉mysql执行文件的内容.使用mysql的两个方法都在这里涉及. 为了看清由mysql提供的一个选择项目表了,用--help选项调用它: shell> mysql --help 本章假定mysql已经被安装在你的机器上,并

mysqldum全库数据压备通用脚本

随着业务的不断增长,在mysqld上的数据势必会越来越多,那么只有备份单个库的备份脚本就不再适用实际的生产环境,因此就对以前写的备份脚本重新写了下(http://jim123.blog.51cto.com/4763600/1846301),当然因为数据量的增大,磁盘空间也要节约使用,那么就可以通过压缩效率极高bzip2来对备份的数据进行进一步的压缩数据,当然如果系统中没有bzip2的话,需要安装,这个安装可以通过rpm的前端工具yum或者apt-get等安装或者是直接安装源码包都可以,这个比较简

SQL语法精讲(包括建库、建表、建视图、查询、增加、删除、)

SQL语法精讲(包括建库.建表.建视图.查询.增加.删除.修改) SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:

据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sharding缺少基本的了解,请参考我另一篇从基础理论全面介绍sharding的文章:数据库Sharding的基本思想和切分策略 第一部分:实施策略 图1.数据库分库分表(sharding)实施策略图解(点击查看大图) 1.准备阶段 对 数据库进行分库分表(Sharding化)前,需要开发人员充分了解

如何用Percona XtraBackup进行MySQL从库的单表备份和恢复【转】

前提 应该确定采用的是单表一个表空间,否则不支持单表的备份与恢复. 在配置文件里边的mysqld段加上 innodb_file_per_table = 1 环境说明: 主库:192.168.0.1 从库1:192.168.0.2 从库2:192.168.0.3 备份工具 : Percona xtrabackup version 2.4.8 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 97330f7) 在主库上创建chenfe