您的位置:首页 > 运维架构 > Shell

mysql备份恢复shell脚本

2011-11-24 19:53 495 查看
#####数据库备份脚本##############################

#参数说明########################

#参数1:数据库名称

#参数2:数据库服务器

#参数3:用户

#参数4:密码

################################

#数据库备份路径

bakDir=/opt/data/modules/mysql_back/;

cd $bakDir;

if [ $1 ] # 如果没有参数

then

echo database $1;

else

echo 'backup database tables to gzip files

sh bak_db_table.sh db [db_host] [db_user] [db_passwd]

'; exit;

fi

# 参数赋值

[ $1 ] && db=$1

[ $2 ] && dbh=$2

[ $3 ] && dbu=$3

[ $4 ] && dbp=$4

# 配置数据库参数

[ $dbh ] && dbh="-h"$dbh

[ $dbu ] && dbu="-u"$dbu

[ $dbp ] && dbp="-p"$dbp

day=`date +%Y%m%d`

#如果不存在 以db命名的目录 则创建

db_dir=$bakDir$db'_'$day

[ -a $db_dir ] || mkdir $db_dir; echo "mkdir $db_dir"

# 获取数据库中的表列表

echo 'list=(`echo "show tables;"|mysql -h$dbh -u$dbu -p$dbp $db`)'

list=(`echo "show tables;"|mysql $dbh $dbu $dbp $db`)

# 获取表个数

tbcount=$((${#list[@]}-2))

if [ $tbcount = -2 ] # 如果表不存在 或数据库连接失败

then

echo empty tables in $db or connent failed! ; exit 1;

fi

echo table count: $tbcount

# 对每个表进行备份 并压缩

# 使用gzip -d $file 进行解压

# 使用 mysql $database < $bakfile 进行恢复

for (( i = 1 ; i < ($tbcount+1) ; i ++ ))

do

table=${list[$i]}

echo back table $table

mysqldump $dbh $dbu $dbp $db $table | gzip -c > $db_dir/$db.$table.gz

# $? 前一命令的返回值, 0 为成功 1为失败 但mysqldump没有遵守这个约定

echo back table $table $?

sleep 10

done

#删除10天前备份

del_day=`date -d'10 days ago' +%Y%m%d`;

del_dir=$bakDir$db'_'$del_day;

echo "delete dir :".$del_dir;

rm -rf $del_dir;

#####数据库恢复脚本##############################

#!/bin/bash

#参数1:数据库备份路径

#参数2:数据库名称

#check param

if [ $# != 2 ]

then

echo "param error!";

exit;

else

if [ ! -d "$1" ]

then

echo "dir : $1 is not exist!";

exit;

fi

fi

[ $1 ] && rootPath=$1;

[ $2 ] && db=$2;

cd $rootPath;

#insert db

for i in $rootPath/*

do

if [ -f "$i" ]

then

echo $i;

gunzip $i;

/opt/modules/mysql/bin/mysql -uroot -p223238 $db < ${i%%.gz};

gzip ${i%.*};

fi

done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: