1、前提
- 异地备份,两台服务器需要开墙,保证备份服务器能够访问数据库服务器的pg数据库;
- 异地备份的服务器需安装pg数据库,为了使用pg数据库的备份命令pg_dump。
也可只安装pg_dump,但是目前没有找到只安装pg_dump的方法
2、自动本分脚本
自动本分的脚本如下:
#!/bin/bash
# 定义变量
#数据库服务器地址,本地备份则为localhost
DB_HOST="localhost"
#数据库服务器地址pg数据库服务的端口号
DB_PORT="xxxx"
#数据库用户名
DB_USER="xxxx"
#数据库密码
DB_PASS="xxxx"
#数据库名称
DB_NAME="xxxx"
#备份文件的本地存储路径
BACKUP_DIR="xxxx"
#压缩加密密码
ENCRYPTION_PASS="xxxx"
# 日期
#DATE=$(date +"%Y%m%d%H%M%S")
YEAR=$(date +"%Y")
MONTH=$(date +"%m")
DAY=$(date +"%d")
# 备份数据库
/path/pg/bin/pg_dump -h "${DB_HOST}" -U "${DB_USER}" --port="${DB_PORT}" -d "${DB_NAME}" -f "${BACKUP_DIR}/${DB_NAME}-${YEAR}${MONTH}${DAY}.sql"
# 压缩并加密
zip -j -P "${ENCRYPTION_PASS}" "${BACKUP_DIR}/${DB_NAME}-${YEAR}${MONTH}${DAY}.zip" "${BACKUP_DIR}/${DB_NAME}-${YEAR}${MONTH}${DAY}.sql"
#删除中间文件
rm "${BACKUP_DIR}/${DB_NAME}-${YEAR}${MONTH}${DAY}.sql"
- DB_HOST 为数据库服务器地址,本地备份则可为localhost,异地备份为pg数据库服务器的地址
- 需将其中变量xxxx改为自己的
- 备份数据库命令使用绝对路径:/path/pg/bin/pg_dump 为pg_dump包文件的绝对路径,一般pg_dump都在pg数据库下的bin目录下,path为pg数据库的安装目录
3、自动备份
1、脚本上传至备份服务器
将脚本上传至备份数据的服务器,若为本地备份,则上传至数据服务器上,若为异地备份,则上传至备份服务器上;
上传完成后,若你是在windows上编辑的脚本,再进行上传,则需要使用如下命令,去掉换行;
xxxx.sh为备份脚本的名称,因此注意要在备份脚本的目录上执行,或者脚本文件用绝对路径。
sed -i 's/\r//' xxxx.sh
2、为脚本赋予执行权限
执行以下命令,将脚本变为可执行文件;
执行完成后,使用ll命令,备份脚本变为了绿色,即脚本文件变为了可执行文件。
xxxx.sh为备份脚本的名称,因此注意要在备份脚本的目录上执行,或者脚本文件用绝对路径。
chmod +x xxxx.sh
3、验证脚本
执行脚本,看是否在指定文件下有备份的文件产生;
xxxx.sh为备份脚本的名称,因此注意要在备份脚本的目录上执行,或者脚本文件用绝对路径。
sh xxxx.sh
4、添加定时任务,每日自动备份
执行以下命令,添加定时任务,实现每日自动备份
- 1、进入定时任务编辑器
crontab -e
- 2、添加定时任务
按i,输入以下信息
其中:0 22 * * *表示每天的22:00(24小时制)执行任务; /path/to/xxxx.sh是脚本文件的绝对路径。
0 22 * * * /path/to/xxxx.sh
输入完成后,按esc,输入:(冒号),输入wq,按下enter
- 3、查看定时任务
crontab -l
通过以上步骤,就可以完成本地或异地的pg数据库备份!