惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
P
Proofpoint News Feed
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
A
About on SuperTechFans
T
Tenable Blog
M
MIT News - Artificial intelligence
IT之家
IT之家
I
Intezer
D
DataBreaches.Net
爱范儿
爱范儿
T
Threatpost
C
CERT Recently Published Vulnerability Notes
云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
Cyberwarzone
Cyberwarzone
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AWS News Blog
AWS News Blog
博客园 - 聂微东
C
Check Point Blog
S
Securelist
有赞技术团队
有赞技术团队
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
G
GRAHAM CLULEY
T
The Exploit Database - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
L
Lohrmann on Cybersecurity
G
Google Developers Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog

博客园 - ode

[原创]pg_shard使用场景及功能测试 [原创]PostgreSQL中十进制、二进制、十六进制之间的相互转换 [原创]在Windows和Linux中搭建PostgreSQL源码调试环境 [原创]Postgres-XC集群笔记-概念与环境搭建 [翻译]开源PostgreSQL监控工具OPM [原创]使用benchmarksql和pgbench对PostgreSQL Plus Advanced Server进行性能测试 [原创]PostgreSQL Plus Advanced Server监控工具PEM(四) [原创]PostgreSQL Plus Advanced Server监控工具PEM(三) [原创]PostgreSQL Plus Advanced Server监控工具PEM(二) [原创]PostgreSQL Plus Advanced Server监控工具PEM(一) [原创]EnterpriseDB测试key申请方法 [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制 [原创]PostgreSQL Plus Advanced Server批量创建分区表写入亿级别数据实例 [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(四) [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(三) [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(二) [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(一) [原创]libpq-PostgreSQL客户端编程接口(三)----libpq在Qt中的封装实现及应用
[原创]PostgreSQL Plus Advanced Server配合crontab实现定时维护工作
ode · 2013-07-17 · via 博客园 - ode

本文要实现的目标
1、PostgreSQL定时全备
2、定时删除归档WAL文件
3、定时删除全备文件
4、删除n天之前的数据库日志文件

实验环境
操作系统:RHEL 6.3
数据库:PostgreSQL Plus Advanced Server 9.2.1.3

准备工作
在执行脚本时,为避免脚本中要求输入数据库所有者密码,先在root用户的家目录配置一个.pgpass文件
[root@s8 ~]# touch .pgpass
[root@s8 ~]# vim .pgpass
~/.pgpass:
127.0.0.1:5444:edb:enterprisedb:000000
pgpass文件的格式:hostname:port:database:username:password
需要注意该文件的权限:
[root@s8 ~]# chmod 0600 ~/.pgpass

一、创建归档目录和备份目录
[root@s8 ~]# mkdir /mnt/archivedir
[root@s8 ~]# chown enterprisedb.enterprisedb /mnt/archivedir
[root@s8 ~]# mkdir /mnt/edb_backup
[root@s8 ~]# chown enterprisedb.enterprisedb /mnt/edb_backup
其中:archivedir为归档目录,edb_backup为全备目录。

二、修改配置文件postgresql.conf
[root@s8 ~]# vim /opt/PostgresPlus/9.2AS/data/postgresql.conf
postgresql.conf:
wal_level = archive    
archive_mode = on
archive_command = 'cp -i %p /mnt/archivedir/%f < /dev/null'

[root@s8 ~]# /etc/init.d/ppas-9.2 reload
[root@s8 ~]# /etc/init.d/ppas-9.2 restart

三、执行一次backup_check.sh脚本
backup_check.sh的内容:

执行结束后,可以看到备份目录中已经有了data目录及需要全备的内容。

四、插入一些测试数据并记录插入时间
edb=# insert into mytest values(55); SELECT CURRENT_TIMESTAMP(0);
2013-07-16 20:50:56-04
edb=# insert into mytest values(58); SELECT CURRENT_TIMESTAMP(0);
2013-07-16 20:51:18-04
edb=# insert into mytest values(510); SELECT CURRENT_TIMESTAMP(0);
2013-07-16 20:51:44-04
edb=# insert into mytest values(530); SELECT CURRENT_TIMESTAMP(0);
2013-07-16 20:52:40-04

五、再执行一次backup.sh脚本之后检查备份目录

六、模拟数据丢失
[root@s8 ~]# /etc/init.d/ppas-9.2 stop
[root@s8 ~]# mv /opt/PostgresPlus/9.2AS/data /opt/PostgresPlus/9.2AS/data_bak

七、恢复
[root@s8 ~]# cp -rp /mnt/edb_backup/dbbak_2013-07-16_07-37-08/dbs/data /opt/PostgresPlus/9.2AS/
[root@s8 ~]# mkdir /opt/PostgresPlus/9.2AS/data/pg_xlog
[root@s8 ~]# cp /opt/PostgresPlus/9.2AS/share/recovery.conf.sample /opt/PostgresPlus/9.2AS/data/recovery.conf
[root@s8 ~]# vim /opt/PostgresPlus/9.2AS/data/recovery.conf
recovery.conf文件的内容:
restore_command = 'cp /mnt/archivedir/%f %p'
recovery_target_time = '2013-07-16 07:37:00'
如果不定义恢复到的时间点recovery_target_time的值,会恢复到最近的时间。

另外要注意看看enterprisedb用户是否是pg_xlog的所有者
[root@s8 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/data/pg_xlog/
[root@s8 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/data/recovery.conf

然后启动数据库服务,恢复成功。

八、配置和执行计划任务

在/etc/cron.daily/创建文件
[root@s8 edb_backup]# touch /etc/cron.daily/delaheadlog.cron
[root@s8 edb_backup]# vim /etc/cron.daily/delaheadlog.cron

在这里,也可以用crontab -e来编辑,crontab的单位:分时日月周

delaheadlog.cron的内容:

PATH_DATE=$(date +""%Y-%m-%d_%H-%M-%S"")

# 为防止已经存在备份进程,先执行一次pg_stop_backup()    //http://ode.cnblogs.com
/opt/PostgresPlus/9.2AS/bin/edb-psql -h 127.0.0.1 -p 5444 -U enterprisedb edb -c "select pg_stop_backup();"

# 开始备份
/opt/PostgresPlus/9.2AS/bin/edb-psql -h 127.0.0.1 -p 5444 -U enterprisedb edb -c "select pg_start_backup('full_backup');"

# 执行一次全备
/bin/mkdir -p /mnt/edb_backup/dbbak_$PATH_DATE
/usr/bin/rsync -a --delete --exclude=pg_xlog --exclude=postmaster.pid /opt/PostgresPlus/9.2AS/data /mnt/edb_backup/dbbak_$PATH_DATE/dbs

# 结束备份
/opt/PostgresPlus/9.2AS/bin/edb-psql -h 127.0.0.1 -p 5444 -U enterprisedb edb -c "select pg_stop_backup();"
/opt/PostgresPlus/9.2AS/bin/edb-psql -h 127.0.0.1 -p 5444 -U enterprisedb edb -c "select pg_switch_xlog();"    

# 定期删除归档WAL文件
find /mnt/archivedir/ -mtime +7 -exec rm -rf '{}' \

# 定期删除全备份文件
find /mnt/edb_backup/ -mtime +7 -exec rm -rf '{}' \

# 删除n(当前定义7天)天之前的数据库日志文件
# delete /opt/PostgresPlus/9.2AS/data/pg_log/****.log which is gernerate n days ago.
find /opt/PostgresPlus/9.2AS/data/pg_log/*.log -mtime +7 -exec rm -rf  '{}' \

 
附件中有脚本文件的,创建后改名即可。