zoukankan      html  css  js  c++  java
  • 在大备份文件里抽取单个库或单个表的脚本

    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"

    抽取单个表:

    [root@meizuDB 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;

     抽取单个库

    [root@meizuDB 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`
  • 相关阅读:
    烂泥:KVM虚拟机windows系统增加硬盘
    烂泥:KVM虚拟机克隆
    烂泥:KVM快照的创建与恢复
    烂泥:【解决】word复制windows live writer没有图片
    烂泥:ubuntu中使用virt-manager图形化新建虚拟机
    烂泥:ubuntu安装KVM虚拟机管理virt-manager
    烂泥:【解决】ubuntu使用远程NFS报错
    烂泥:kvm安装windows系统蓝屏
    烂泥:ubuntu安装vmtools
    烂泥: KVM虚拟机Linux系统增加硬盘
  • 原文地址:https://www.cnblogs.com/zuoxingyu/p/3757748.html
Copyright © 2011-2022 走看看