
新建文件 mysql_backup.sh将文件放到home目录下具体位置可以自己选择文件内容如下#!/bin/bash #备份目录 BACKUP/mnt/mysql_backup #当前时间 DATETIME$(date %Y-%m-%d_%H%M%S) #数据库地址 视情况而定如果是在数据库服务器备份到自己服务器可以不要HOST #HOSTlocalhost #数据库用户名 DB_USERroot #数据库密码 DB_PW123456 #备份的数据库名称 DATABASEdb_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 ux /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_NAMEmysql8 # 数据库用户名 DB_USERroot # 数据库密码如果有特殊字符建议用环境变量或配置文件 DB_PW123456 # 备份的数据库名称 DATABASEsales_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