PostgreSQL 与 Slony-I 的安装配置
Thursday, April 22nd, 2010 @ 11:31 am
常见问题
~~~~~~~
+ 备份恢复
如果要恢复一个字符集为EUC_CN的数据库,需要在initdb之前设置LANG和LC_ALL,而不是使用系统默认的字符集。
$ export LANG= $ export LC_ALL=C $ initdb $ createdb -E EUC_CN contactdb_bak -T template0 $ createlang -d contactdb_bak plpgsql
如果dump文件中包含slony数据,需要在restore之前做一下处理。
首先把 contactdb_bak库做一个最简单的slony,参考前面的 cluster_setup.sh 脚本,slave也做在同一台机器上就行,因为下载的库是空的,所以set也是空的。
执行修改过的slony初始化脚本。
$ ./cluster_setup.sh
下面的脚本主要是将 dump 文件中特殊slony 对象过滤掉,但是那些有些表里有slony 自动建立的 index,还没办法过滤,后面通过 dropSlonyIindex.sql 来删除。
例如 newtable 表没有主键,slony 会创建一个,这个对象不能通过 contactdb_restore.sh 进行过滤,但可以通过下面的语句删除:
contactdb_bak=> ALTER TABLE newtable DROP COLUMN "_Slony-I_contact_cluster_rowID" CASCADE ;
把所有这样的语句写成一个 dropSlonyIindex.sq 脚本,一次执行。
$ vi contactdb_restore.sh
#!/bin/bash
DUMP="contactdb_20100324_121601.dmp"
DEST="127.0.0.1"
DESTDB="contactdb_bak"
USER="postgres"
CLUSTER="contact_cluster"
JOBS=4
echo Generating contents list...
pg_restore -Fc -l ${DUMP} |sed "s/.*_${CLUSTER}.*/;&/g" > list.txt
echo Starting restore...
pg_restore -j${JOBS} -Fc -O -i --schema="public" -v -L list.txt -h ${DEST} -U ${USER} -d ${DESTDB} ${DUMP}
$ ./contactdb_restore.sh
$ psql contactdb_bak contactdb_bak=> drop schema "_contact_cluster" cascade; contactdb_bak=> \i dropSlonyIindex.sql
得到了一个完整的,无 slony 对象的 contactdb_bak。
当然最好在dump的时候就把 slony 的对象全部删掉,这样dump出来的就是一个干净的库。
+ Solaris
在Solaris上安装slony时,指定pg_config命令所在目录,如果没有,需要安装。
$ su - $ ./configure --with-pgconfigdir=/home/postgres/pgsql/bin $ /usr/local/bin/make all $ /usr/local/bin/make install
Tags: postgresql, slony
Posted in Technology | No Comments »