shell脚本写的一个数据库备份还原的程序
时间:2021-8-3 11:52
热度:1004°
评论: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
版权声明:若无注明,本文皆为“皮皮华博客”原创,转载请保留文章出处。
本文地址:http://huazai.eleuu.com/?post=42
版权声明:若无注明,本文皆为“皮皮华博客”原创,转载请保留文章出处。
发表吐槽
你肿么看?
既然没有吐槽,那就赶紧抢沙发吧!