Postgresql是一个开源的对象关系数据库系统,它同样被广泛应用于mysql数据库系统。
如果你熟悉mysql,你一定要知道,你可以用一行代码传递mysql用户的密码,
例如'mysql-u root-p password`。但在postgresql中并不是这样。
解决方案:为了克服postgres用户密码的传递问题,我们可以在脚本中临时设置环境变量 PGPASSWORD,备份后再取消设置环境变量。
脚本测试环境postgresql 9.1版
如何实现postgres数据库备份脚本
使用postgres用户登录
root@onitroad:~# root@onitroad:~# su -l postgres postgres@onitroad:~$
检查用户的主目录路径
postgres@onitroad:~$ echo $HOME /var/lib/postgresql postgres@onitroad:~$
创建一个名为 dbbackup的目录,将数据库备份保存到本地系统。
postgres@onitroad:~$ whoami postgres postgres@onitroad:~$ mkdir ~/dbbackup postgres@onitroad:~$ postgres@onitroad:~$ ls -ld dbbackup/ drwxrwxr-x 2 postgres postgres 4096 Oct 20 09:25 dbbackup/ postgres@onitroad:~$ postgres@onitroad:~$ pwd /var/lib/postgresql postgres@onitroad:~$
创建备份脚本dbbackupscript.sh
vi ~/dbbackupscript.sh
#!/bin/bash # Author: jack # Date: 10-01-2014 # Desc: Single Database postgres backup script # We are using username postgres here which is similar to mysql root user # # DATABASE=test FILE=$DATABASE-`date +%F-%H%M%S`.sql export PGPASSWORD=postgress_password ## backup command pg_dump -U postgres $DATABASE > ~/dbbackup/$FILE ## compressing the backup file gzip ~/dbbackup/$FILE ## Removing export unset PGPASSWORD FILESIZE=$( du -sh ~/dbbackup/$FILE.gz ) ## Using condition if [ ! -f ~/db-backup/$FILE.gz ]; then echo "$FILE.gz File not found!" | mail -s "postgres database name $DATABASE backup is failed" youremailid@example.com else echo "$FILE.gz File found, Actual size after compression is $FILESIZE " | mail -s "postgres database name $DATABASE backup is completed" youremailid@example.com fi
记得修改PGPASSWORD和DATABASE的值。
修改脚本的权限
chmod 750 dbbackupscript.sh
运行脚本:
$ sh ~/dbbackupscript.sh $ ls -l ~/dbbackup
设置定时任务
crontab -u postgres -e 01 00 * * * sh ~/dbbackupscript.sh
日期:2019-08-20 17:58:28 来源:oir作者:oir