新建文件 mysql_backup.sh,将文件放到home目录下(具体位置可以自己选择),文件内容如下:
#!/bin/bash #备份目录 BACKUP=/mnt/mysql_backup #当前时间 DATETIME=$(date +%Y-%m-%d_%H%M%S) #数据库地址 视情况而定,如果是在数据库服务器备份到自己服务器,可以不要HOST #HOST=localhost #数据库用户名 DB_USER=root #数据库密码 DB_PW=123456 #备份的数据库名称 DATABASE=db_test echo "开始备份数据库${DATABASE},当前时间${DATETIME}" #创建备份目录,如果不存在就创建 [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" #备份数据库 --host可以不要,如果是本分到本服务器 /mysql/MySQL5.7.28/bin/mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz cd ${BACKUP} #将日期文件夹打包压缩,处理成tar.gz tar -zcvf $DATETIME.tar.gz ${DATETIME} #删除原日期文件夹 rm -rf ${BACKUP}/${DATETIME} #删除N天前的备份文件 find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "备份数据库${DATABASE}完成"根据实际情况修改相关的参数值。
将文件上传至数据库服务器,为文件添加执行权限:
chmod u+x /home/mysql_backup.sh如果在服务器上执行脚本报错,可能是因为文件中换行符的问题,解决方法是把文件上传到linux服务器后,进入到脚本所在的目录下面,执行下面的命令,把换行符换成linux的,而不是windows的。
# 进入脚本所在目录
cd /xxx
# 使用sed命令移除Windows换行符
sed -i 's/\r$//' mysql_backup.sh
利用crond服务定时执行备份脚本,crond的常用命令:
crontab -e 编辑crontab定时任务
crontab -l 查询crontab任务
crontab -r 删除当前用户所有的crontab任务(终止任务调度)
service crond restart 重启任务调动,一般在设置完成后重启
例如,每日凌晨5点执行数据库备份,则crond服务的配置如下:
crontab -e 打开编辑窗口
0 5 * * * /home/mysql_backup.sh 设置定时执行参数
cron表达式中5个占位符的说明:
特殊符号说明:
特殊时间执行案例:
docker部署的MySQL,做数据备份
#!/bin/bash # 备份目录 BACKUP=/opt/mysql_backup # 当前时间 DATETIME=$(date +%Y-%m-%d_%H%M%S) # Docker 容器名称 DOCKER_NAME=mysql8 # 数据库用户名 DB_USER=root # 数据库密码(如果有特殊字符建议用环境变量或配置文件) DB_PW='123456' # 备份的数据库名称 DATABASE=sales_report echo "开始备份数据库 ${DATABASE},当前时间 ${DATETIME}" # 创建备份目录 [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" # ========== 使用 docker exec 执行 mysqldump docker exec ${DOCKER_NAME} mysqldump -u${DB_USER} -p${DB_PW} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/${DATETIME}.sql.gz cd ${BACKUP} # 打包压缩 tar -zcvf ${DATETIME}.tar.gz ${DATETIME} # 删除原文件夹 rm -rf ${BACKUP}/${DATETIME} # 删除 10 天前的备份 find ${BACKUP} -mtime +10 -name "*.tar.gz" -delete echo "备份数据库 ${DATABASE} 完成,文件:${DATETIME}.tar.gz"