zoukankan      html  css  js  c++  java
  • 导出MySQL数据库模式及数据的Bash脚本

    Bash脚本文件:export_db.sh

    #!/bin/sh

    # export_db.sh
    # 导出数据库模式及数据
    # codingstandards@gmail.com
    # v1: 2010-05-23
    # v2: 2011-10-08/09

    # 命令使用说明
    # 从标准输入读取数据库名称和表名称
    # usage: export_db.sh
    # usage: export_db.sh -
    # 从指定文件读取数据库名称和表名称
    # usage: export_db.sh db_and_tables.txt
    # 通过here string指定数据库名称和表名称
    # usage: export_db.sh <<<"dbname"
    # usage: export_db.sh <<<"dbname tablename"

    # 输入格式说明
    # 由一行或多行组成,可以是下列之一:
    # (1) 空行:将被忽略
    # (2) 注释:以#开头的行,将被忽略
    # (3) db_name:只指定数据库名字,该数据库中的所有表都将被导出
    # (4) db_name table_name:指定数据库名称和表名称,只导出该表

    # 数据库连接参数
    # TODO: 修改下面的参数以适应数据库的设置
    DBOPTS="-pxxx --default-character-set=gbk"怪蜀黍


    # 保存到目录
    # TODO: 可设置为本脚本所在目录,也可以设置在别的目录
    SAVETO=$(dirname "$0")


    # 如果在crontab中执行,需加上下面这行,以保证环境变量正确设置
    . /etc/profile

    # 进入到保存目录
    cd "$SAVETO" || exit 1

    # 导出目录,格式为:dbYYYYmmddHHMMSS,比如 db20111008100923
    DIR=db$(date +%Y%m%d%H%M%S)
    mkdir -p "$DIR"

    # 打印当前时间
    now()
    {
            date "+%F %T.%N"
    }

    # 执行SQL语句,输出执行结果
    # usage: db_exec <db> <sql>
    db_exec()
    {
            mysql $DBOPTS -s "$1" -e "$2"
    }

    # 导出数据库到文件,分目录保存数据库,分文件保存数据表
    # usage: db_dump <db> <table>
    db_dump()
    {
            #echo -n "$1 $2   "
            #db_exec "$1" "select count(*) from $2"
            local count=$(db_exec "$1" "select count(*) from $2")
            printf "$(now)  %-32s%16s\n" "$1.$2" "$count"
            mkdir -p "$DIR/$1"
            mysqldump $DBOPTS --quick --add-drop-table "$1" "$2" >"$DIR/$1/$2.sql"
            echo "$(now)  ok."
    }

    # 从命令行的第一个参数指定的文件读取需要导出的数据库和表的名称,然后导出
    #cat "${1:-export_db.txt}" |
    #cat "$1" |
    cat $1 |
    while read db_name table_name;
    do
            #echo "$db_name $table_name"
            if [ "$db_name" -a "${db_name:0:1}" != "#" ]; then      # 忽略空行和注释
                    if [ ! "$table_name" ]; then    # 如果没有指定表的名称,就认为是导出整个数据库
                            db_exec "$db_name" "show tables" |
                                    while read table_name;
                                    do
                                            db_dump "$db_name" "$table_name";
                                    done
                    else    # 导出指定的数据库中的表
                            db_dump "$db_name" "$table_name"
                    fi
            fi
    #done &> $DIR/export_db.log
    done 2>&1 | tee $DIR/export_db.log

    # 如果没有任何表导出,就把$DIR目录删除
    if [ ! "$(ls $DIR/*/*.sql 2>/dev/null)" ]; then
            echo "$(now)  no tables dumped!"
            rm -rf $DIR
            exit 2
    fi

    # 将导出的文件压缩
    tar zcf $DIR.tar.gz $DIR
    echo "$(now)  $DIR.tar.gz generated." | tee -a $DIR/export_db.log

    # END.

  • 相关阅读:
    selenium学习笔记05-selenium操作from表单
    selenium学习笔记04-webdriver核心方法的属性和使用
    selenium学习笔记03-selenium webdriver工作原理
    selenium学习笔记02-selenium定位的八大方法
    selenium学习笔记01
    微服务质量保证学习笔记(一)
    pytest,setup和teardown
    pytest用例编写规则、执行测试
    速耀达账套备份与恢复(速达二次开发)
    速耀达系统权限设置(速达二次开发)
  • 原文地址:https://www.cnblogs.com/sky7034/p/2206957.html
Copyright © 2011-2022 走看看