shell脚本写的一个数据库备份还原的程序
首页 > Linux学习   作者:皮皮华  2021年8月3日 11:52 星期二  热度:744°  字号:   评论:0 条
时间:2021-8-3 11:52   热度:744°  评论:0 条 
#!/bin/bash
#备份保存路径
backup_dir=/root/backup
#数据库用户名
username=root
#数据库密码
password=12345
#将要备份的数据库名
database_name=access
#备份数据来源 backNetDb 1 指定IP端口数据库网络备份 0 本地数据库备份
backNetDb=0
#网络备份数据库IP地址 backNetDb为1时有效
database_IP=120.25.102.158
#网络备份数据库端口  backNetDb为1时有效
database_Port=3306

#备份的sql文件名中的日期格式
dd=`date +%Y-%m-%d_%H-%M`
#最多保存备份个数
number=7
#获取mysql工具路径
MYSQL=$(which mysql)
#获取mysqldump工具路径
MYSQLDUMP=$(which mysqldump)
#获取awk路径
AWK=$(which awk)
#获取grep路径
GREP=$(which grep)
#echo $MYSQL"_"$AWK"_"$GREP"_"$Mysqldump
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
    mkdir -p $backup_dir;
fi
if [ "$1" = "back" ];then
    if [ $backNetDb -eq 1 ];then
        echo ">>>开始网络备份,请耐心等待"
        $MYSQLDUMP -u$username -h$database_IP -p$password -P$database_Port $database_name > $backup_dir/$database_name-$dd.sql
        echo ">>>网络备份成功至"$backup_dir/$database_name-$dd".sql"
    else
        echo ">>>开始本地备份,请耐心等待备份完成"
        $MYSQLDUMP -u$username -p$password $database_name > $backup_dir/$database_name-$dd.sql
        echo ">>>本地备份成功至"$backup_dir/$database_name-$dd".sql"
    fi
    #写创建备份日志
    echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
    #找出需要删除的备份
    delfile=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | head -1`
    #判断现在的备份数量是否大于$number
    count=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | wc -l`
    if [ $count -gt $number ];then
        #删除最早生成的备份,只保留number数量的备份
        rm $delfile
        #写删除文件日志
        echo "delete $delfile" >> $backup_dir/log.txt
    fi
elif [ "$1" = "new" ];then
    #参数输入空判断
    if [ "$2" == "" ];then
        echo "》》》》请输入要新建表的名称,如:$0 new acs_backup_task"
        exit
    fi
    TablesExist=$($MYSQL -u$username -h$database_IP -p$password -P$database_Port $database_name -e 'show tables' |grep $2)
    if [ "$TablesExist" == ""  ];then  
        if [ -e "$backup_dir/$2.sql" ];then
            echo ">>>开始还原$backup_dir/$2.sql"
            #从指定sql文件导入数据
            $MYSQL -u$username -p$password $database_name < $backup_dir/$2.sql
            echo ">>>还原$backup_dir/$2.sql成功"
        else
            echo "》》》》$backup_dir/$2.sql不存在此文件"
            exit
        fi
    else
        echo "》》》》数据库$database_name中已存在表$2"
    fi
else
    #输入非空且存在此文件
    if [ -n "$1" ];then
    if [ -e $1 ];then
        if [ $backNetDb -eq 1 ];then
            echo ">>>开始网络还原数据库,请耐心等待"
            #$MYSQL -u$username -h$database_IP -p$password -P$database_Port $database_name  < $1
            TABLES=$($MYSQL -u$username -h$database_IP -p$password -P$database_Port $database_name -e 'show tables' | $AWK '{ print $1}' | $GREP -v '^Tables' )
            if [ "$TABLES" == "" ];then
                echo "Error - 在数据库【$database_name】中未发现相关表"
                #exit 1
            fi
            #设置外键约束检查关闭
            $MYSQL -u$username -h$database_IP -p$password -P$database_Port $database_name -e "SET foreign_key_checks=0;"
            for t in $TABLES
            do
                echo "Deleting 【$t】 table from $database_name database..."
                #删除数据,表或者视图
                $MYSQL -u$username -h$database_IP -p$password -P$database_Port $database_name -e "drop table $t"
                #重建表,保持原表的结构 
                #$MYSQL -u$username -h$database_IP -p$password -P$database_Port $database_name -e "truncate table $t"
            done
            #从指定sql文件导入数据
            $MYSQL -u$username -h$database_IP -p$password -P$database_Port $database_name < $1
            #设置外键约束检查开启
            $MYSQL -u$username -h$database_IP -p$password -P$database_Port $database_name -e "SET foreign_key_checks=1;"
            echo ">>>网络还原成功至$1"
        else
            echo ">>>开始本地还原数据库,请耐心等待"
            TABLES=$($MYSQL -u$username -p$password $database_name -e 'show tables' | $AWK '{ print $1}' | $GREP -v '^Tables' )
            if [ "$TABLES" == "" ];then
                echo "Error - 在数据库【$database_name】中未发现相关表"
                #exit 1
            fi
            #设置外键约束检查关闭
            $MYSQL -u$username -p$password $database_name -e "SET foreign_key_checks=0;"
            for t in $TABLES
            do
                echo "Deleting 【$t】 table from $database_name database..."
                #删除数据,表或者视图
                $MYSQL -u$username -p$password $database_name -e "drop table $t"
                #重建表,保持原表的结构 
                #$MYSQL -u$username -p$password $database_name -e "truncate table $t"
            done
            #从指定sql文件导入数据
            $MYSQL -u$username -p$password $database_name < $1
            #设置外键约束检查开启
            $MYSQL -u$username -p$password $database_name -e "SET foreign_key_checks=1;"
            echo ">>>本地还原成功$1"
        fi
    fi
    else
        echo "

》》》》请合法的输入参数
        备份数据库:"$0" back                 即可备份到设定的目录中
        还原数据库:"$0" $backup_dir/123.sql 即可还原指定目录数据库
        新建数据表:"$0" new acs_backup_task 如果表不存在则还原新建表结构,需确保$backup_dir/acs_backup_task.sql有此文件
        
》》》》当前配置信息如下:
        备份保存路径:$backup_dir
        数据库用户名:$username
        数据库密码:$password
        将要备份的数据库名:$database_name
        备份数据来源:$backNetDb (其中1为网络备份、0为本地备份)
        网络备份数据库IP地址:$database_IP
        网络备份数据库端口:$database_Port
        最多保存备份个数:$number
"
    fi
fi
 您阅读这篇文章共花了: 
捐赠支持:如果觉得这篇文章对您有帮助,请“扫一扫”鼓励作者!
 本文无需标签!
二维码加载中...
本文作者:皮皮华      文章标题: shell脚本写的一个数据库备份还原的程序
本文地址:http://huazai.eleuu.com/?post=42
版权声明:若无注明,本文皆为“皮皮华博客”原创,转载请保留文章出处。

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗

评论信息框


既然没有吐槽,那就赶紧抢沙发吧!