1.普通的数据库备份
#!/bin/bash
mysqldump -uusername -ppassword DatabaseName > /home/dbback/DatabaseName_$(date +%Y%m%d_%H%M%S).sql
对备份进行压缩:
#!/bin/bash
mysqldump -uusername -ppassword DatabaseName | gzip > /home/dbback/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz
2.docker下备份mysql
docker exec -it mysql mysqldump -uuser -ppassword databasename| gzip > /your/bak/file/path/databasename_$(date +%Y%m%d_%H%M%S).sql.gz
3.删除7天外 的数据
find $path -name "*.sql.gz" -type f -mtime +7 -exec rm {} \;
4.crontab 添加定时任务
crontab -e 进入编辑状态添加定时任务,每天凌晨两点执行,日志输出到指定文件中。
00 02 * * * /your/path/for/bak/***.sh >> /your/path/for/bak/**.log 2>&1
备注:
脚本写正确后会正确备份,定时任务执行可能备份数据是空,由于mysqldump存在于全局环境变量mysql的bin下面,故在直接运行时可以识别到mysqldump命令,而在crontab里面无法识别到mysqldump命令。(ps:crontab运行失败问题基本都是环境变量引起的)
解决方案1:
在备份脚本里面的mysqldump命令前加上绝对路径可以解决,find / -name mysqldump 命令查看命令所在路径
解决方案2:
修改docker导出命令:
docker exec mysql sh -c "exec /usr/bin/mysqldump -uuser -ppassword databasename | gzip " > /your/path/for/bak/databasename_$(date +%Y%m%d_%H%M%S).sql.gz