如何使用Cron备份我的PostgreSQL数据库?

Vol*_*ike 16 postgresql bash backup cron

我可以在脚本中运行像vacuumdb,pg_dump和psql这样的命令,如果我这样说的那样:

/usr/bin/sudo -u postgres /usr/bin/pg_dump -Fc mydatabase > /opt/postgresql/prevac.gz
/usr/bin/sudo -u postgres /usr/bin/vacuumdb --analyze mydatabase
/usr/bin/sudo -u postgres /usr/bin/pg_dump -Fc mydatabase > /opt/postgresql/postvac.gz
SCHEMA_BACKUP="/opt/postgresql/$(date +%w).db.schema"
sudo -u postgres /usr/bin/pg_dump -C -s mydatabase > $SCHEMA_BACKUP
Run Code Online (Sandbox Code Playgroud)

这些在Redhat的命令行运行,当我sudo root时,然后你在上面的命令中看到我做了一个sudo -u到postgres.

但是当我试图从cron中取消它时,我在所有文件中得到零字节 - 这意味着它没有正常运行.我在日志中看不到任何线索.

我的/ etc/crontab文件底部有此条目

00 23 * * * root /etc/db_backup.cron
Run Code Online (Sandbox Code Playgroud)

是的,/ etc/db_backup.cron是chmod ug + x,由root拥有,文件顶部显示"#!/ bin/bash"(减去双引号).

谁知道什么给了?

小智 14

我有一个动态bash脚本来备份服务器上的所有数据库.它获取所有数据库的列表,然后在执行备份之前清空每个数据库.所有日志都写入文件,然后通过电子邮件将该日志发送给我.如果你愿意,这是你可以使用的东西.

将下面的代码复制到一个文件中,并将该文件添加到您的crontab中.我已经设置了我的pg_hba.conf以信任本地连接.

#!/bin/bash
logfile="/backup/pgsql.log"
backup_dir="/backup"
touch $logfile
databases=`psql -h localhost -U postgres -q -c "\l" | sed -n 4,/\eof/p | grep -v rows\) | grep -v template0 | grep -v template1 | awk {'print $1'}`

echo "Starting backup of databases " >> $logfile
for i in $databases; do
        dateinfo=`date '+%Y-%m-%d %H:%M:%S'`
        timeslot=`date '+%Y%m%d%H%M'`
        /usr/bin/vacuumdb -z -h localhost -U postgres $i >/dev/null 2>&1
        /usr/bin/pg_dump -U postgres -i -F c -b $i -h 127.0.0.1 -f $backup_dir/$i-database-$timeslot.backup
        echo "Backup and Vacuum complete on $dateinfo for database: $i " >> $logfile
done
echo "Done backup of databases " >> $logfile

tail -15 /backup/pgsql.log | mailx youremail@domain.com
Run Code Online (Sandbox Code Playgroud)

  • 这是另一个好脚本:http://wiki.postgresql.org/wiki/Automated_Backup_on_Linux (8认同)
  • @Imraan Parker你怎么设法跳过使用密码?我想备份为数据库的管理员帐户而不是root用户postgres我该怎么做? (2认同)

jhw*_*ist 12

既然您似乎拥有超级用户权限,您可以将这些命令放入postgres用户的crontab中,如下所示:

sudo su postgres
crontab -e
Run Code Online (Sandbox Code Playgroud)

然后将pg_dump/vacuumdb命令放在那里.

  • ''sudo su postgres''那太疯狂了!试试''sudo -u postgres''.设置一个sudo规范,它更安全. (7认同)
  • 这就是我最终所做的事情,只有当我执行 chown postgres.root /opt/postgresql (文件所在的位置)时它才能正常工作。 (2认同)

dar*_*lff 6

我已经设置了这样的cron.自周一至周五每59分钟一班

*/59 * * * 1-5 sh /home/my_user/scripts/back_my_bd.sh 
Run Code Online (Sandbox Code Playgroud)

运行备份的脚本位于back_my_bd.sh文件中,内容为:

pg_dump -U USERDATABASE DATABASENAME > /home/my_user/sql/mybackup.sql
Run Code Online (Sandbox Code Playgroud)

我在主目录中创建了.pgpass文件,允许备份不指定用户和密码

localhost:5432:DATABASENAME:USER:PASSWORD
Run Code Online (Sandbox Code Playgroud)

对不起,我的英语不好!