您的位置:首页 > 数据库

使用pg_dumpall备份postgresql

2018-01-22 15:58 218 查看
生产数据库基于X64或X86,Linux系统
双硬盘,容量大小基本一致,第一块硬盘作为根分区(数据库在其中),第二块作为备份分区
通过pg_dump进行SQL转储备份

通过Linux的cron服务,每日凌晨自动进行数据库备份,产生的备份文件存放于备份分区中
维护人员每周自行下载备份数据,即为低成本的异地备份
例如一台基于RedHat Enterprise Linux 4 AS的机器,跑PostgreSQL 8.1.4。硬盘是2个146GB的SCSI,/分区、/boot、SWAP等都在第一块硬盘。第二块硬盘整个挂载到/backup。

备份采用pg_dumpall。pg_dump进行单个数据库的备份,而pg_dumpall备份一个给出的集群中的每个数据库,同时还确保保留象用户和组这样的全局数据状态。使用方法如下:
su postgres (需要切换到系统的postgres用户来进行备份)
pg_dumpall > /backup/all_the_data.backup (备份整个数据库集群)
exit

要用cron来自动调度备份,则如下:
vi /etc/crontab
00 3 * * * postgres pg_dumpall > /backup/all_the_data.backup (添加这行,实现每日凌晨3点自动备份,并且是以postgres用户身份来运行的)
chown postgres /backup/all_the_data.backup (需要改变文件的拥有者,以确保postgres用户能写入)
service crond restart (重启crond服务以更新内存中的crontab)

恢复数据:
su postgres
psql -f /backup/all_the_data.backup postgres
exit
注意此时数据库的postgres用户口令要和备份文件内的一致

一个非常好的技巧,
第二块硬盘划分为/backup分区后,编辑/etc/fstab,取消开机时的自动挂载,即平时无法操作这个硬盘;
编写一个shell脚本,先挂载/backup分
区,然后进行数据库备份,再卸载该分区。
这样的好处是,平时系统中没有挂载/backup分区,可以避免人为的误操作,如删除数据,和恶意入侵等。
我的操作:
1、创建backup.sh脚本
#!/bin/bash

if [ -f ~/.bash_profile ];

then

  . ~/.bash_profile

fi

pg_dumpall > /XXX/XXX/XXX/XXX/XXX.backup (备份路径)

2、创建定时任务
vi /etc/crontab
添加一行:
5 * * * * postgres pg_dumpall > /XXX/XXX/XXX/XXX/XXX/postgresql.backup

或者执行: crontab -e
添加一行:
*/5 * * * * postgres /XXX/XXX/XXX/XXX/XXX/backup.sh

备注:上面两行我也不知道哪行生效了。
3、重新启动crontab服务
systemctl restart cronb.service

转载于百度文库:https://wenku.baidu.com/view/c33b3e8271fe910ef12df851.htmlhttps://wenku.baidu.com/view/c33b3e8271fe910ef12df851.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: