sh 拟与cron一起使用。此脚本将备份指定用户在给定数据库服务器上具有访问权限的所有(或特定)数据库,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sh 拟与cron一起使用。此脚本将备份指定用户在给定数据库服务器上具有访问权限的所有(或特定)数据库,相关的知识,希望对你有一定的参考价值。
#!/bin/bash
USAGE="$0 [-u <user> -p <password> -h <host> -P <PORT> -d <database> -D <destination/directory/without/trailing/slash>]"
DESTINATION=`pwd`
USER=root
PASS=root
HOST=localhost
PORT=3306
# SPECIFY HOW LONG TO RETAIN BACKUPS
# Note, the format is OS dependent.
#
# On Linux, specify value like this:
# 6 hours
# 1 week
# 1 month
# 3 months
#
# On mac, specify value like this (Same examples as above):
# 6h
# 1w
# 1m
# 3m
KEEP_FOR="3 days"
while getopts ':u:p:P:h:d:D:' opt
do
case $opt in
u) USER=$OPTARG;;
p) PASS=$OPTARG;;
h) HOST=$OPTARG;;
P) PORT=$OPTARG;;
d) DB=$OPTARG;;
D) DESTINATION=$OPTARG;;
\?) echo "ERROR: Invalid option: $USAGE"
exit 1;;
esac
done
if [ -z "$DB" ]; then
for i in `mysql -u $USER -p$PASS -h $HOST -P $PORT -e "show databases;" | grep -Ev "^(Database|mysql|performance_schema|information_schema)$"`; do
if [ ! -d "$DESTINATION/${i}" ]; then
mkdir $DESTINATION/${i}
fi
mysqldump -c -u $USER -p$PASS -h $HOST -P $PORT ${i} | gzip > $DESTINATION/${i}/$(date "+%Y%m%d%H%M").sql.gz
done
else
if [ ! -d "$DESTINATION/$DB" ]; then
mkdir $DESTINATION/$DB
fi
mysqldump -c -u $USER -p$PASS -h $HOST -P $PORT $DB | gzip > $DESTINATION/${DB}/$(date "+%Y%m%d%H%M").sql.gz
fi
###
# Delete old backups
###
if [ "$(uname)" = Darwin ]
then
THRESHOLD=$(date -v-$KEEP_FOR "+%Y%m%d%H%M")
else
THRESHOLD=$(date -d "${KEEP_FOR} ago" "+%Y%m%d%H%M")
fi
find ${DESTINATION} -maxdepth 2 -type f -print0 | while IFS= read -d '' -r file
do
## Test filename pattern
if [[ "$(basename "$file")" =~ ^[0-9]{12}.sql.gz$ ]]
then
## Delete if older than threshold
[ "$(basename "$file" .sql.gz)" -le "$THRESHOLD" ] && rm -v -- "$file"
fi
done
以上是关于sh 拟与cron一起使用。此脚本将备份指定用户在给定数据库服务器上具有访问权限的所有(或特定)数据库,的主要内容,如果未能解决你的问题,请参考以下文章
自动备份远程机器的脚本
使用 Cron Job 进行每日数据库备份
如何使用shell脚本每天自动备份mysql数据库
mysql单表备份和恢复
MySQL数据库备份Shell脚本
基于 mysql 镜像的定时自动备份数据和清除过期备份