1、每日备份,按日期生成文件名。
2、通过SCP远程备份,并只保留最近7天内的副本。
3、crontab定时任务。
4、SCP远程备份需要配置SSH免密码登录,详见:《SSH免密码登录》
一、新建mysql_back.sh脚本,存放在/home/XXX/mysql_backup/目录,具体内容如下:
!/bin/bash
# 当前日期,格式:年月日
date_str=$(date +%Y-%m-%d)
# 备份并压缩
echo
echo$(date +%Y-%m-%d\ %H:%M:%S)'备份并压缩MySQL……'
# 设置XXX用户目录下的mysql_backup为工作目录
cd /home/XXX/mysql_backup
# 备份192.168.10.163主机上的某个数据库并用gzip压缩成.gz的文件,用户名、密码、数据库、IP等请自行替换
mysqldump -h192.168.10.163 -u用户名 -p密码 -R -E -e \数据库名 \
| gzip > /home/XXX/mysql_backup/MySQL_DB_$date_str.sql.gz
echo$(date +%Y-%m-%d\ %H:%M:%S)'备份完成。'
# 冗余备份
echo
echo$(date +%Y-%m-%d\ %H:%M:%S)'上传到服务端……'
# 通过SCP上传到远程服务器的root用户的mysql_backup文件夹下,远程主机请自行替换为IP或域名
scp MySQL_DB_$date_str.sql.gz root@远程主机:~/mysql_backup/
echo$(date +%Y-%m-%d\ %H:%M:%S)'上传完成。'
echo
echo$(date +%Y-%m-%d\ %H:%M:%S)'删除过期的备份……'
# 删除100天前的本地备份
find /home/XXX/mysql_backup -name"MySQL_DB_*"-type f -mtime+100-execrm{} \;
# 删除远程主机上10天前的备份
ssh root@远程主机 "find ~/mysql_backup -name 'MySQL_DB_*' -type f -mtime +10 -exec rm {} \;"
echo$(date +%Y-%m-%d\ %H:%M:%S)'删除完成。'
echo
echo$(date +%Y-%m-%d\ %H:%M:%S)'备份完成。'
二、crontab定时任务
1、$ sudo crontab -e
2、在最后一行加入:
30 2 * * * /home/XXX/mysql_backup/mysql_backup.sh >> /home/XXX/mysql_backup/mysql_backup.log
3、此行包含两部分:
a) 30 2 * * *:每天凌晨2点半执行,30分,2时,后面的3个*对应日、月、年;每两小时执行的cron表达式为:0 */2 * * *
b) /home/XXX/mysql_backup/mysql_backup.sh >> /home/XXX/mysql_backup/mysql_backup.log ,执行mysql_backup.sh脚本,并将日志输出到mysql_backup.log
4、启动cron服务
$ sudo service cron restart
静等执行……
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于