【mysql】dump
dump文件用于恢复数据
mysql进行dump
定时任务
脚本文件
文件 mysqldump.sh.
#!/bin/bash
#################################################################
# 1. 与该脚本同级目录下,需存在.sql.cnf文件(用于数据库备份)、.back.cnf文件(用于读取配置)
# 2. 需配置ssh-keygen支持免密登录
#################################################################
# 保存备份个数,备份31天数据
NUMBER=15
# 备份保存路径,当前路径
BACKUP_DIR=$(dirname $(readlink -f "$0"))
# 日期,用于备份文件名后缀
NOW=$(date +"%Y-%m-%d-%H-%M-%S")
##############################################
# 以下配置从.back.cnf文件中读取
# 将要备份的数据库
DATABASE_NAME=
# SCP配置
SCP_FLAG=no
SCP_HOST=
SCP_PORT=
SCP_USER=
##############################################
# 从.back.cnf读取配置
loadConfig() {
while read line; do
eval "$line"
done < .back.cnf
}
# 根据.sql.cnf配置备份数据库
backup() {
# 当前备份的文件名
backup_file=$BACKUP_DIR/$DATABASE_NAME-$NOW.sql
echo "create $backup_file begin..."
# mysqldump
mysqldump --defaults-extra-file=.sql.cnf "$DATABASE_NAME" > "$backup_file"
#写创建备份日志
echo "create $backup_file" >> "$BACKUP_DIR"/log.txt
# SCP至远端
if [ "$SCP_FLAG" == 'yes' ]; then
scp -pq -P "$SCP_PORT" "$backup_file" "$SCP_USER"@"$SCP_HOST":"$backup_file"
fi
}
# 删除最早生成的备份,只保留NUMBER数量的备份
delete() {
# 判断现在的备份数量是否大于$NUMBER
count=`ls -l -crt "$BACKUP_DIR"/*.sql | awk '{print $9 }' | wc -l`
while [ "$count" -gt $NUMBER ]
do
# 找出需要删除的备份
delete_files=`ls -l -crt "$BACKUP_DIR"/*.sql | awk '{print $9 }' | head -1`
# 判断现在的备份数量是否大于$NUMBER
count=`ls -l -crt "$BACKUP_DIR"/*.sql | awk '{print $9 }' | wc -l`
# 删除最早生成的备份,只保留NUMBER数量的备份
rm "$delete_files"
# 写删除文件日志
echo "delete $delete_files" >> "$BACKUP_DIR"/log.txt
done
}
# 校验配置文件是否存在
sql_config=".sql.cnf"
if [ ! -f "$sql_config" ]; then
# .sql.cnf文件不存在
echo "BACKUP FAILED: Missing $sql_config"
exit
fi
backup_config=".back.cnf"
if [ ! -f "$backup_config" ]; then
# .back.cnf文件不存在
echo "BACKUP FAILED: Missing $backup_config"
exit
fi
loadConfig
backup
delete
exit
.sql.cnf
[mysqldump]
host=
port=
user=
password=
.back.cnf
DATABASE_NAME=
SCP_FLAG=no
SCP_HOST=
SCP_PORT=22
SCP_USER=root