Postgresql安装
A. 下载Postgresql,通常下载到的是Postgresql源码包,以.tar.gz后缀结尾
B. 上传源码包到Linux环境,在命令提示符下执行以下命令:
#tar –zxvf postgresql.tar.gz
#cd postgresql
#./configure
#make
#make install
C.创建postgresql用户组和用户:
#groupadd postgres
#useradd -g postgres postgres
D.创建数据库库文件存储目录,将存储目录权限交给postgresql用户
#mkdir/usr/local/pgsql/data
#cd/usr/local/pgsql
#chown postgres/usr/local/pgsql/data
#chown -Rpostgres /usr/local/pgsql
e. su – postgres
初始化数据库:
#/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
F.配置允许远程连接(su –postgres)
vi /usr/local/pgsql/data/pg_hba.conf
# IPv4local connections:
host all all 127.0.0.1/32 trust
host all all 10.181.157.59/24 trust
host all all 10.181.157.58/24 trust
标红位置为你需要访问数据库的电脑的IP地址
G.配置监听地址和端口
#vi/usr/local/pgsql/data/postgresql.conf
listen_addresses='*' #取消该行的注释,并将单引号内的值设为*
port =5432 #取消该行的注释
H.现在再次重启数据库
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start(启动)
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile stop(关闭)
强制关闭
/usr/local/pgsql/bin/pg_ctl-m fast -D /usr/local/pgsql/data -l logfile stop
J运行数据库服务器:
#/usr/local/pgsql/bin/pg_ctl-D /usr/local/pgsql/data -l logfile start(启动)
然后服务启动了
f.修改Postgres密码:(su – postgres) 数据库服务要开启
#cd /usr/local/pgsql/bin
#./psql
postgres=# ALTER USER postgres WITH PASSWORD '123456';
postgres=# \q (保存并推出)
自动启动
随机启动只要修改OS的配置文件/etc/rc.local文件即可,这是个软连接文件,
新增一行数据库启动的命令即可
# vi /etc/rc.local
加入如下语句
su - postgres -c'/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start'
ostgresql以服务方式启动
postgresql以服务方式启动的脚本在安装程序中已经有了,无需再人工手写,在安装程序的目录:/contrib/start-scripts/linux,linux就是脚本。
cp 那个脚本/etc/init.d/postgresql
$ chmod +x /etc/init.d/postgresql
$ chkconfig --add postgresql
$ chkconfig postgresql on
此时postgresql便能以服务方式启动
service postgresql start
service postgresql stop
在操作中如果遇到如下错误:请按照以下方式解决
bash:chkconfig: command not found
[root@user~]# chkconfig
bash: chkconfig: command not found
[root@user~]# rpm -aq |grep chkconfig
chkconfig-1.3.30.2-2.el5
[root@user~]# export PATH=/sbin:$PATH
[root@user~]# chkconfig
chkconfig version 1.3.30.1 - Copyright (C) 1997-2000 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.
usage: chkconfig --list [name]
chkconfig --add <name>
chkconfig --del <name>
chkconfig [--level<levels>] <name> <on|off|reset|resetpriorities>
[root@user~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/gtl/bin
[root@user~]# PATH="$PATH":/sbin
[root@user~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/gtl/bin:/sbin
数据库集群
数据库的安装路径/usr/local/pgsql
主数据库地址:10.181.76.60
备数据库地址:10.181.76.58
一、主数据库配置
数据库集群需要在系统上建立postgres、repl账号,密码方便最好是:123456。
1. 添加同步账号
#groupadd repl
#useradd -g repl repl
passwd repl
#groupadd postgres
#useradd -g postgres postgres
passwd postgres
你是普通用户的话,修改自己的密码,用:passwd,就可以了,会让你先输入自己的旧密码,再输入两遍新密码。
最常用最简单的用法:passwd tom,修改tom用户密码。
你是root的话,用:password username,就可以修改username的密码了,直接输入两遍新密码就可以了,不用输入旧密码。
su – postgres
cd /usr/local/pgsql/bin/
./psql
create user repl superuser login password ‘123456’;
\q
2. 修改访问控制
vi /usr/local/pgsql/data/pg_hba.conf
添加一句:
host replication repl 10.181.76.58/32 trust
第三项“repl”即第二步创建的用户;第四项需要修改为包含slave服务器IP地址的IP段(或直接指定slave的IP地址);第五项使用md5会要求密码,换成trust则不要求。
3. 修改postgresql服务配置文件
vi /usr/local/pgsql/data/postgresql.conf
主要配置修改如下:
wal_level = hot_standby
archive_mode = on
archive_command = ‘cp -i %p /usr/local/pgsql/archivedir/%f </dev/null ’
# archive_timeout= 600 #此句一定要慎用,不能放在生产上,仅作测试用【该句话会每600秒产生数据库备份文件】
max_wal_senders = 5
wal_keep_segments = 32
与热备有关的参数:
wal_level:WAL(Write-AheadLogging,预写日志)级别,启动时生效。有三种级别,分别为minimal(默认值)、archive和hot_standby:
minimal:只会记录必要的日志,用于在崩溃或直接关闭后恢复数据库
archive:记录的日志可被用作WAL存档
hot_standby:记录的日志可被用于热备
max_wal_senders:指定允许最大用于热备服务器的连接数,启动时生效
wal_keep_segments:指定最少保留的WAL片段数量(即pg_xlog中以16进制命名的文件),超过这个数量后,master可能会移除过多的WAL文件,reload时生效。如数值过小,可能会导致slave复制失败;在设置了archive_mode时非必须
archive_mode:是否开启WAL存档模式,启动时生效。WAL存档会让master在移除WAL片段时留下备份,以便slave恢复时使用。非必须,但可以确保slave在停机较长时间后仍能通过WAL恢复,而不必重新复制basebackup
archive_command:archive_mode开启时,存档执行的shell命令,reload时生效;一般用cp将文件复制到一个本地目录即可,archive_mode关闭时无需设置
4. 建立归档目录
su – postgres
mkdir /usr/local/pgsql/archivedir/
5. 重启服务
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -llogfile stop(关闭)
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -llogfile start(启动)
二、备份数据库配置
1. 修改postgresql配置文件
vi /usr/local/pgsql/data/postgresql.conf
主要配置修改如下:
wal_level =hot_standby
hot_standby= on
2. 新建recovery.conf文件:
vi /usr/local/pgsql/data/recovery.conf
内容如下:
restore_command= ‘cp /usr/local/pgsql/data/archivedir/%f %p’ archive_cleanup_command =’pg_archivecleanup/usr/local/pgsql/archivedir %r’
standby_mode= ‘on’
primary_conninfo= ‘host=10.181.76.60 port=5432 user=repl password=123456’
trigger_file= ‘/usr/local/pgsql/trigger_activestb’
3. 把两个文件复制到临时文件夹
cp/usr/local/pgsql/data/postgresql.conf /home
cp/usr/local/pgsql/data/recovery.conf /home
4. 停止postgres服务
su – postgres
/usr/local/pgsql/bin/pg_ctl-D /usr/local/pgsql/data -l logfile stop(关闭)
5. 删除data文件夹
su – postgres
cd /usr/local/pgsql/
rm –rfdata
mkdir data
chmod -R 700data
三、到主数据库上:
对主数据库做基础备份
cd /usr/local/pgsql/bin/
./psql –d postgres
select pg_start_backup(‘/test/pgstb’);
\q
把主数据库目录拷贝到备库目录(等备份数据两个配置文件建立,删除data文件夹后执行)
su — root
scp –r /usr/local/pgsql/data/* 10.181.76.58: /usr/local/pgsql/data/
结束主库的备份状态
cd /usr/local/pgsql/bin/
./psql –d postgres
select pg_stop_backup();
\q
四、到从数据库上:
删除pid文件,拷贝recovery.conf和postgresql.conf文件(拷贝主数据库基础数据后执行)
cp /home/recovery.conf /usr/local/pgsql/data
cp /home/postgresql.conf /usr/local/pgsql/data
启动postgres服务
/usr/local/pgsql/bin/pg_ctl-D /usr/local/pgsql/data -l logfile start(启动)
使用总结
1. 目前测过的PostgreSQL版本有9.1.2和9.1.3的,目前看来,小版本之间是可以互通的。
2. 别偷懒,base backup是必须得复制的,哪怕你在slave上创建一个完全干净的cluster都不行。
3. 32位和64位的WAL日志疑似不兼容,网上有文章写过,不过我没有排除可疑项进一步测试。
4. locale为zh-CN.UTF-8时,PostgreSQL的部分log会抽风(不是WAL),显示一堆问号,估计是GBK和UTF-8编码没挑清楚。可以在postgresql.conf里将lc_messages改成en-US.UTF-8解决(系统并不一定带有en-US.UTF-8这个locale,可以用dpkg-reconfigurelocales给装上)