Linux 下写个定时任务脚本每天备份数据库

项目组开发的一个小工具挺不错的,导致很多人在上面使用。用户量越来越大,责任也越来越大。由于工具部署在开发环境上,用的数据库也是开发环境自己搭建的 PG 数据库,没有 DBA 管理和备份机制。如果哪天挂了,后果还是比较严重滴。

所以想着先写个脚本每天把数据库备份下来,避免数据库挂了一点都找不回来。

思路是在另一台 Linux 机器上创建一个定时任务,每天执行 pg_dump 程序。

创建 backup.sh 脚本文件

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh

# 当前日期
today=$(date "+%Y%m%d")

# 打印日志
echo 'Backup DB data on time:'$today

# 先删除存在的备份
rm -rf DB_BACKUP_$today.sql

# 执行备份
/opt/PostgreSQL/9.4/bin/pg_dump -f /usr/local/DB_DATA_BACKUOP/DB_BACKUP_$today.sql -h 10.20.22.125 -p 5432 "dbname=xxx user=xxx password=xxx"

需要注意的是:

  • pg_dump的参数 -f 指定的备份文件需要写绝对路径,我用相对路径,任务执行了,但是找不到文件。
  • 为了不用每次输入数据库密码,将密码作为参数写到命令的最后面。

授权执行权限

1
chmod u+x backup.sh

添加到 crontab 定时任务里

1,crontab -e打开 crontab 编辑模式,添加一行配置(每天凌晨一点执行):

1
0 1 * * * /usr/local/DB_DATA_BACKUOP/backup.sh > /usr/local/DB_DATA_BACKUOP/backup.out 2>&1

2,crontab -l查看是否加入成功。

3,验证结果。