记录一次数据库备份脚本问题
脚本文件
#!/bin/bash1
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
# Database info
DB_USER="root" #mysql login name
DB_PASS="xxx" #password
DB_HOST="xxx" #db_address
DB_PORT="3306"
MYSQL=mysql
DB_ZFBM="--default-character-set=utf8" #character
#DB_TABLE="exam_quest_bank" #table name
# Others vars
BIN_DIR="/usr/bin" #the mysql bin path
BCK_DIR="/data/mysql/mysqlDataBackup" #the backup file directory
DATE=`date +%F`
#sql back
# 因为我想对数据库所有库备份,所以我要先去查有哪些数据库, -N -s 就是去省略掉 |
command="show databases"
declare DBS=`$MYSQL -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASS} -N -s -e "${command}" `
#echo "$DBS"
for i in $DBS
do
# 我现在拿到所有库了,但是系统库或者一些我不想备份的库可以在此处省略掉
if [ "$i" != "information_schema" ] && [ "$i" != "mysql" ] && [ "$i" != "performance_schema" ] && [ "$i" != "sys" ]
then
mysqldump --opt -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASS} ${DB_ZFBM} ${i} | gzip >$BCK_DIR/${i}_${DATE}.sql.gz
echo $i
fi
done
#
#-type f 表示查找普通类型的文件,f表示普通文件。
#-mtime +7 按照文件的更改时间来查找文件,+7表示文件更改时间距现在7天以前;如果是 -
# mmin +5 表示文件更改时间距现在5分钟以前。
# -exec rm {} \; 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个,最后是一个分号。
# /dev/null 2>&1 把标准出错重定向到标准输出
find $BCK_DIR -name "db_*.sql" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
对上面参数进行一个说明
- DB_USER:数据库用户名
- DB_PASS: 数据库密码
- DB_HOST:数据库服务器地址
- DB_PORT:端口
- MYSQL:mysql
- DB_ZFBM:字符集编码
- DB_TABLE:表名,如果是对整个库备份,省略
- BIN_DIR:mysqldump地址,默认centos7好像是/usr/bin
- BCK_DIR: 备份存放的路径
编写好脚本后,需要给这个脚本我文件授权
chmod +x bakmysql.sh
然后执行该文件
sh bakmysql.sh
最后自己加一个加一个crontab定时任务就行了