1.建立备份文件夹data和日志文件夹logs
mkdir /home/docker/mysql/backup/data
mkdir /home/docker/mysql/backup/logs
2.在/home/docker/mysql/backup下建立backup.sh脚本
#/bin/bash
BACKUP_ROOT=/home/docker/mysql
BACKUP_FILEDIR=$BACKUP_ROOT/backup/data
DATE=$(date +%Y%m%d)
#查询所有数据库
DATABASES=("user" "system")
#循环数据库进行备份
for db in ${DATABASES[@]}
do
echo [$(date +%Y-%m-%d#%H:%M:%S)]----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
docker exec -i "mysql镜像名称" mysqldump -uroot -pXXXX --default-character-set=utf8 -q -R -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
echo [$(date +%Y-%m-%d#%H:%M:%S)]----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
echo [$(date +%Y-%m-%d#%H:%M:%S)]----------删除历史备份---------------------------
rm -f $BACKUP_FILEDIR/${db}_$(date -d -7day +%Y%m%d).sql.gz
echo [$(date +%Y-%m-%d#%H:%M:%S)]----------删除成功-------------------------------
done
echo "done"
3.参数说明
- BACKUP_ROOT:备份根路径
- BACKUP_FILEDIR:存放备份路径
- DATE:当前时间
- DATABASES:数据库名称数组 多个数据库以空格分隔
- mysql镜像名称:docker ps 查看mysql的镜像名称
- -pXXXX:数据库密码
- rm -f $BACKUP_FILEDIR/${db}_$(date -d -7day +%Y%m%d).sql.gz: -7day删除七天前的备份历史数据
4.通过chmod命令赋予该脚本的执行权限
chmod 755 backup.sh
5.手动执行脚本 在/home/docker/mysql/backup/data文件下生成【数据库名称_日期.sql】.tar则说明备份成功。
sh /home/docker/mysql/backup/backup.sh>> /home/docker/mysql/backup/logs/backup.log
或
sh /home/docker/mysql/backup/backup.sh> /home/docker/mysql/backup/logs/backup.log
其中“>> ”符号表示打印执行日志到backup.log文件,如果目录下存在该文件,不会覆盖原来存在的backup.log文件,其中“> ”符号表示覆盖打印执行日志到backup.log文件,如果目录下存在该文件,则覆盖打印最新的日志。
5.建立定时任务脚本 每天凌晨1:30备份数据库 填写之后 shift+i 输入wq保存并退出
[root@ ~]# vi /etc/crontab
vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#凌晨1:30执行数据库备份
30 1 * * * root sh /home/docker/mysql/backup/backup.sh> /home/docker/mysql/backup/logs/backup.log
6.执行定时任务命令
service crond reload