业务场景
开发测试环境数据库权限完全开放给研发,数据库被误删除,同时mysql也没有开启binlog日志,就想着可不可以定时备份数据,也就是今天写这篇文章的原因
技术点
mysqldump
crontab
备份目录
# mysql备份目录
mkdir /home/mysql
# mysql备份脚本
mkdir /home/mysql/scripts
# mysql备份文件
mkdir /home/mysql/files
# mysql备份日志
mkdir /home/mysql/logs
备份脚本[backup_full.sh]
#!/bin/bash
# 备份目录
BACKUP_ROOT=/home/mysql
# 备份数据目录
BACKUP_FILEDIR=$BACKUP_ROOT/files
# 备份日志目录
BACKUP_LOGDIR=$BACKUP_ROOT/logs
# mysql账号
USER=
# mysql密码
PASSWORD=
# 备份指定数据库wedding和community
DATABASES=(wedding community)
# 当前日期
DATE=$(date +%Y%m%d)
echo "备份数据库开始 DATABASES:"${DATABASES[@]}
# 循环数据库进行备份
for db in ${DATABASES[@]}
do
echo
echo "$BACKUP_FILEDIR/${db}_$DATE.sql.gz 开始"
mysqldump -u${USER} -p${PASSWORD} --default-character-set=utf8mb4 -q --lock-all-tables --flush-logs --skip-triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
echo "$BACKUP_FILEDIR/${db}_$DATE.sql.gz 结束"
echo
done
echo "备份数据库结束"
备份只保留最近3天
#!/bin/bash
echo "清理开始"
find /home/mysql/files -mtime +3 -name "*.gz" -exec rm -rf {} \;
echo "清理结束"
crontab配置定时任务[每天凌晨3点执行备份]
00 3 * * * sh /home/mysql/scripts/backup_full.sh