FreeBSD PostgreSQL 9 Hot Standby 实践

FreeBSD PostgreSQL 9 Hot Standby 实践

注:PostgreSQL 9 Hot Standby的关键点有2个,工作模式和操作顺序,除了概念的理解。

一、安装PostgreSQL 9

portmaster -d databases/postgresql90-server
修改/etc/login.conf
postgres:\
:lang=en_US.UTF-8:\
:setenv=LC_COLLATE=C:\
:tc=default:
执行cap_mkdb /etc/login.conf

二、初始化主数据库

su pgsql
/usr/local/bin/initdb -D /usr/local/pgsql/data –locale=C -E UTF8 初始化
修改postgresql.conf:
wal_level = hot_standby
max_wal_senders = 1
wal_keep_segments = 32
log_destination = ‘stderr’
logging_collector = on
log级别根据需要设置,建议debug1下一级别即可(log,info)
修改pg_hba.conf:
host replication pgsql 127.0.0.1/32 trust

三、启动主数据库

/usr/local/bin/postmaster -D /usr/local/pgsql/data
看看日志,已经起来:
LOG: database system is ready to accept connections
LOG: autovacuum launcher started

四、基础备份:

流程:在主数据库服务器执行 pg_start_backup(),复制data目录,再执行
pg_stop_backup()。
$ psql -d postgres
postgres=# select pg_start_backup(”);
这个时候,所有请求在写日志之后不会再刷新到磁盘。除非pg_stop_backup()这个函数
被执行。
接下来,把data目录直接复制data2,这个目录将通过scp、rsync等工具同步到节点服
务器,data2就是基础备份的内容。
cd /usr/loca/pgsql
cp -R data/ data2

五、创建节点数据库(Standby)

cd data2
修改postgres.conf
port = 54321
hot_standby = on
增加recovery.conf
standby_mode = ‘on’
primary_conninfo = ‘host=127.0.0.1 port=5432 user=pgsql’
rm postmaster.pid

六、停止主数据库基础备份

postgres=# select pg_stop_backup();
现在数据会写入磁盘,当节点服务器启动后,他会自动连接到主服务器,拉取主服务器
自基础备份后的事务日志。然后,对事务日志进行重演,从而达到恢复数据的效果。

七、启动节点数据库

/usr/local/bin/postmaster -D /usr/local/pgsql/data2
看看日志:
DEBUG: initializing for hot standby
LOG: streaming replication successfully connected to primary
DEBUG: end of backup reached
LOG: consistent recovery state reached at 0/3000000
LOG: database system is ready to accept read only connections

八、测试。

在FreeBSD上运行PostgreSQL数据库

在 FreeBSD 上运行PostgreSQL数据库

概要

* PostgreSQL是自由的对象-关系数据库服务器(数据库管理系统),在灵活的BSD-风格许可证下发行。它在其他开放源代码数据库系统(比如MySQL和Firebird),和专有系统比如Oracle、Sybase、IBM的DB2和Microsoft SQL Server之外,为用户又提供了一种选择。本文主要整理了在 FreeBSD 上运行PostgreSQL数据库的详细安装过程。

配置FreeBSD内核

  options         SYSVSHM
  options         SYSVSEM
  options         SYSVMSG
  options         SHMMAXPGS=65536
  options         SEMMNI=40
  options         SEMMNS=240
  options         SEMUME=40
  options         SEMMNU=120

从Posts安装PostgreSQL

#cd /usr/ports/databases/postgresql90-server/ && make install

配置PostgreSQL

往rc.conf里增加启动项

postgresql_enable="YES"

初始化数据库

# /usr/local/etc/rc.d/postgresql initdb

终端回显

tomato# /usr/local/etc/rc.d/postgresql initdb
属于此数据库系统的文件宿主为用户 "pgsql".
此用户也必须为服务器进程的宿主.
数据库簇将带有一下 locales 初始化
  COLLATE:  C
  CTYPE:    zh_CN.UTF-8
  MESSAGES: zh_CN.UTF-8
  MONETARY: zh_CN.UTF-8
  NUMERIC:  zh_CN.UTF-8
  TIME:     zh_CN.UTF-8
initdb: 无法为语言环境"zh_CN.UTF-8" 找到合适的编码配置
缺省的文本搜索配置将会被设置到"simple"

创建目录 /usr/local/pgsql/data … 成功
正在创建子目录 … 成功
选择默认最大联接数 (max_connections) … 100
选择默认共享缓冲区大小 (shared_buffers) … 32MB
创建配置文件 … 成功
在 /usr/local/pgsql/data/base/1 中创建 template1 数据库 … 成功
初始化 pg_authid …  成功
初始化dependencies … 成功
创建系统视图 … 成功
正在加载系统对象描述 … 成功
创建字符集转换 … 成功
正在创建字典 … 成功
对内建对象设置权限 … 成功
创建信息模式 … 成功
loading PL/pgSQL server-side language … 成功
清理数据库 template1 … 成功
拷贝 template1 到 template0 … 成功
拷贝 template1 到 template0 … 成功

警告: 为本地连接启动了 "trust" 认证.
你可以通过编辑 pg_hba.conf 更改或你下
次运行 initdb 时使用 -A 选项.

成功. 您现在可以用下面的命令运行数据库服务器:

    /usr/local/bin/postmaster -D /usr/local/pgsql/data
或者
    /usr/local/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

tomato#

运行PostgreSQL服务

# /usr/local/etc/rc.d/postgresql start

允许其他非本地IP链接

vi /usr/local/pgsql/data/postgresql.conf
   listen_addresses = ‘*’

修改用户密码加密方式

vi /usr/local/pgsql/data/pg_hba.conf
    host  all  all  10.0.1.0/24  md5

增加数据库用户

    #su pgsql
    $ createuser -sdrP pgsqldb

安装phpPgAdmin,网页版PGSQL管理工具

    #cd /usr/ports/databases/phppgadmin
    #make install clean
    #ln -s /usr/local/www/phpPgAdmin /usr/local/www/data/

通过http://localhost/phppgadmin访问

原文链接:http://wiki.freebsdchina.org/doc/d/pgsql_running