Ubuntu18.04定时备份MySQL、PostgreSQL数据库
1、备份MySQL数据库脚本
LOG_DATE=`date +'%Y-%m-%d %H:%M:%S'`
LOG_PATH=/home/dbserver/script_data/backup.log
echo "$LOG_DATE=======>开始备份以下mysql数据库:" >> ${LOG_PATH}
DUMP=/usr/bin/mysqldump
OUT_DIR=/home/dbserver/backup/mysql_backup
LINUX_USER=root
DB_NAME="er giteadb em_hgh"
DB_USER=root
DB_PASS=root
# 指定要删除多少天前的文件
DAYS=7
cd $OUT_DIR
echo "$DB_NAME"
DATE=`date +%Y-%m-%d`
OUT_SQL="$DATE-backup".sql
TAR_SQL="$DATE-backup.tar.gz"
$DUMP -u$DB_USER -p$DB_PASS --databases $DB_NAME --opt -Q -R --skip-lock-tables>$OUT_SQL
echo "$LOG_DATE=======>数据库 $DB_NAME 备份完成" >> ${LOG_PATH}
# 压缩打包备份文件
tar -czf $TAR_SQL $OUT_SQL
# 删除源备份文件
rm $OUT_SQL
# 删除指定天数前的文件
find $OUT_DIR -type f -mtime +$DAYS -delete
2、备份PostgreSQL数据库脚本
LOG_DATE=`date +'%Y-%m-%d %H:%M:%S'`
LOG_PATH=/home/dbserver/script_data/backup.log
echo "$LOG_DATE=======>开始执行 PostgreSql 数据库备份操作......" >> ${LOG_PATH}
OUT_DIR=/home/dbserver/backup/pgsql_backup
DB_NAME='em_hgh'
DB_user='postgres'
# 指定要删除多少天前的文件
DAYS=7
cd $OUT_DIR
DATE=`date +%Y-%m-%d`
OUT_SQL="$DATE-$DB_NAME-backup".sql
TAR_SQL="$DATE-backup.tar.gz"
# 导出PGPASSWORD环境变量,避免每次执行都需要输入密码
export PGPASSWORD='root'
pg_dump -h localhost -U postgres -d $DB_NAME -F c -b -f /home/dbserver/backup/pgsql_backup/$OUT_SQL --encoding UTF8
echo "$LOG_DATE=======>数据库 $DB_NAME 备份完成" >> ${LOG_PATH}
# 压缩打包备份文件
tar -czf $TAR_SQL $OUT_SQL
# 删除源备份文件
rm $OUT_SQL
# 删除指定天数前的文件
find $OUT_DIR -type f -mtime +$DAYS -delete
3、定时任务设置
定时任务创建
首先可以使用 crontab -l
命令来查看一下系统内的定时任务。
接下来就可以创建定时任务了
使用 crontab -e
命令编辑定时任务,添加我们写好的脚本文件路径即可, Cron表达式不懂的话可以找个在线网站生成一下即可。
注意一下要退出按 Ctrl+x
然后输入 y
回车即可退出。
0 1 * * * /bin/bash /home/dbserver/script_data/mysql_databackup.sh
30 1 * * * /bin/bash /home/dbserver/script_data/pgsql_databackup.sh
4、遇到的问题汇总
定时任务执行 No MTA installed, discarding output错误处理
当发现定时任务没有执行时,我们可以使用下面的命令查看定时任务相关日志:
tail -f -n 100 /var/log/syslog | grep CRON
发现提示 No MTA installed, discarding output
,可以参考No MTA installed, discarding output错误排查与处理,写的挺详细了。
发现没有按照设置的时间执行
可能是因为系统内置的时间不准确,导致的,可以参考 Ubuntu系统设置时区和日期时间 设置后再观察一下。