【MySQL】 数据库定期备份
目录
一、数据库备份方案
二、相关脚本
2.1 数据库备份脚本
2.2 Cron 循环脚本及使用
2.2.1 循环脚本
2.2.2 启动和相关命令
三、增量备份及其他
一、数据库备份方案
数据库定期备份通常是使用备份脚本 + Cron 定期自动循环实现的,一般为每天一次的全量备份
二、相关脚本
2.1 数据库备份脚本
#!/bin/bash
# 全备方式,一般在从机上执行,适用于小中型mysql数据库:
source /etc/profile # 加载系统环境变量
source ~/.bash_profile # 加载用户环境变量
# 定义全局变量
#登录数据库用户名
user="root"
#访问数据库密码
password="root"
#访问地址
host="localhost"
#访问数据库端口
port="3306"
#备份数据库名称,多个数据库用空格进行间隔
db=("test" "tom")
local="--single-transaction"
#数据库位置
mysql_path="/opt/mysql"
#备份地址
backup_path="/opt/mysqldump"
date=$(date +%Y%m%d_%H:%M:%S)
day=30
#日志路径
backup_log="/opt/mysqldump/mysql-backlog.log"
# 判断是否存在目录,不存在则创建目录
if [ ! -e $backup_path ];then
mkdir -p $backup_path
fi
# 删除30天以前备份
#find $backup_path -type f -mtime +$day -exec rm -rf {} \; > /dev/null 2>&1
echo "开始备份数据库: ${db[*]}"
# 备份数据库后压缩
backup_sql(){
dbname=$1
#保存的文件名称
backup_name="${dbname}_${date}.sql"
mysqldump -h $host -P $port -u $user -p$password $lock --default-character-set=utf8 --flush-logs -R $dbname > $backup_path/$backup_name
if [[ $? == 0 ]];then
cd $backup_path
# tar --force-local参数压缩带有冒号的压缩包
tar czvf $backup_name.tar.gz $backup_name --force-local
size=$(du $backup_name.tar.gz -sh | awk '{print $1}')
rm -rf $backup_name
echo "$date 备份 $dbname($size) 成功"
else
cd $backup_path
rm -rf $backup_name
echo "$date 备份 $dbname 失败"
fi
}
# 多个库循环备份
length=${#db[@]}
for ((i=0;i<$length;i++));do
backup_sql ${db[i]} >> $backup_log 2>&1
done
echo "备份结束,结果查看 $backup_log"
du $backup_path/*$date* -sh | awk '{print "文件:" $2 ",大小:" $1}'
2.2 Cron 循环脚本及使用
2.2.1 循环脚本
语句的意思为每天凌晨一点开始触发,自动运行脚本
0 1 * * * /opt/mysql/mysql_dump.sh > /dev/null 2>&1
其他相关操作:
https://blog.csdn.net/djrm11/article/details/96634703
2.2.2 启动和相关命令
# 新建脚本文件,复制脚本进入
# 编辑crontab服务文件
crontab -e
# 复制脚本内容到文件中,每周日凌晨一点自动执行
0 1 * * * /opt/mysql/mysql_dump.sh > /dev/null 2>&1
# 加入定时任务
crontab mysql_cron_back.cron
# 查看当前运行的定时任务
crontab -l
# 删除运行的定时任务
crontab -r
三、增量备份及其他
转载自大佬博客:https://blog.csdn.net/qq_40732354/article/details/107186874
还没有评论,来说两句吧...