源码安装10.5 rhel6.10
准备工作:
创建用户
#创建用户和组
groupadd postgres
useradd -g postgres postgres
准备安装目录
#进入安装目录
cd /usr/local/
#删除原有安装(如果有的话)
rm -rf postgres*
安装:
#配置
tar zxvf postgresql-10.5.tar.gz
cd postgresql-10.5
./configure --prefix=/usr/local/postgresql --with-perl--with-python
#编译安装
make && make install
#安装contrib目录下的一些工具,是第三方组织的一些工具代码,建议安装
cd contrib
make && make install
环境变量:
vi /etc/profile
export PATH=/usr/local/postgresql/bin:$PATH
exportLD_LIBRARY_PATH=/usr/local/postgresql/lib:$LD_LIBRARY_PATH
数据库存放位置:
mkdir -p /pgdata/data
mkdir -p /backup
mkdir -p /archive_wals
mkdir -p /scripts
授权给psotgres账户:
chown -R postgres.postgres /backup
chown -R postgres.postgres /archive_wals
chown -R postgres.postgres /scripts
chown -R postgres.postgres /pgdata/data
chown -R postgres:postgres /usr/local/postgresql
切换用户到postgres:
设置环境变量:
vi .bash_profile
export PGHOME=/usr/local/postgresql
export PGDATA=/pgdata/data
#初始化数据库
initdb -D /pgdata/data
#启动服务
pg_ctl -D /pgdata/data -l /pgdata/data/logfile start
启停数据库:
启动服务:
pg_ctl start -D /pgdata/data -l /pgdata/data/logfile
#重启服务
pg_ctl restart -D /pgdata/data -l /pgdata/data/logfile
#停止服务
pg_ctl stop -D /pgdata/data -l /pgdata//datalogfile
停止服务,还可以加上-m参数,后面三个选项:
smart:正常关闭,类似Oracle normal
fast:快速关闭,类似Oracle的immediate
immediate:立即关闭,类似Oracle的abort
#登录客户端使用"psql 数据库名"登录数据库。
#缺省数据库名时,连接到默认的数据库postgres。
#本地不用指定数据库
psql
#创建测试数据库
create database micky;
#切换到micky 数据库
\c micky
#创建测试表
create table micky (id integer, name text);
#插入测试数据
insert into micky values (1,'micky');
#选择数据
select * from micky ;
#修改postgresql.conf 文件
vi /pgdata/data/postgresql.conf
#修改为如下:
listen_addresses = '*'
port = 5432
#--------------------允许远程连接---------------------------
#修改客户端认证配置文件pg_hba.conf,将需要远程访问数据库的IP地址或地址段加入该文件
vi /pgdata/data/pg_hba.conf
#在文件的最下方加上下面的这句话(出于安全考虑,不建议这样配置)
host all all 0.0.0.0/0 trust
物理同步复制
物理复制:
主库创建Replication专有用户
CREATE USER repuser REPLICATION ENCRYPTED PASSWORD 'oracle';
配置主库postgresql.conf参数:
wal_level = replica # minimal, replica, or logical
archive_mode = on # enables archiving; off, on, or always
archive_command = '/bin/true' # command to use to archive alogfile segment
max_wal_senders = 10 # max number of walsender processes
wal_keep_segments = 512 # in logfile segments, 16MB each; 0disables
hot_standby = on
alter system set wal_level = replica;
alter system set archive_mode = on;
alter system set archive_command = '/bin/true';
alter system set max_wal_senders = 10;
alter system set wal_keep_segments = 512;
alter system set hot_standby = on;
alter system set synchronous_commit = on;
alter system set synchronous_standby_names = 'pg1052';
配置主库pg_hba.conf参数:
host replication repuser 192.168.203.140/32 md5
host replication repuser 192.168.203.141/32 md5
主库和备库的角色不是静止的,它们的角色是可以互换的,比如做一次主备切换后角色就发生了变化,因此建议主库、备库的pg_hba.conf配置完全一致。
在备库上使用pg_basebackup从主库同步数据
pg_basebackup -D /pgdata/data -Fp -Xs -v -P -h 192.168.203.140-p 5432 -U repuser
以上命令行中的-X参数设置在备份的过程中产生的WAL日志包含在备份中的方式,有两种可选方式,f(fetch)和s(stream),f(fetch)是指WAL日志在基准备份完成后被传送到备节点,这时主库上的wal_keep_segments参数需要设置得较大,以免备份过程中产生的WAL还没发送到备节点之前被主库覆盖掉,如果出现这种情况创建基准备份将会失败,f(fetch)方式主库将会启动一个基准备份WAL发送进程;s(stream)方式主库上除了启动一个基准备份WAL发送进程外还会额外启动一个WAL发送进程用于发送主库产生的WAL增量日志流,这种方式避免了f(fetch)方式过程中主库的WAL被覆盖掉的情况,生产环境流复制部署推荐这种方式,特别是比较繁忙的库或者是大库。
备库中/pgdata/data目录下的数据全部删除
[postgres@pg1052 data]$ pg_basebackup -D /pgdata/data -Fp -Xs-v -P -h 192.168.203.140 -p 5432 -U repuser
Password:
pg_basebackup: initiating base backup, waiting for checkpointto complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/3000028 ontimeline 1
pg_basebackup: starting background WAL receiver
31187/31187 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/30000F8
pg_basebackup: waiting for background process to finishstreaming ...
pg_basebackup: base backup completed
配置备库recovery.conf
cp /usr/local/postgresql/share/recovery.conf.sample/pgdata/data/recovery.conf
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.203.140 port=5432 user=repuserpassword=oracle application_name=pg1052'
standby_mode参数设置是否启用数据库为备库,如果设置成on,备库会不停地从主库上获取WAL日志流,直到获取主库上最新的WAL日志流。
启动备库:
pg_ctl -D /pgdata/data-l /pgdata/data/logfile start
主库插入:
insert into micky values(2,'micky');
insert into micky values(3,'micky');
insert into micky values(4,'micky');
insert into micky values(5,'micky');
备库查询:
micky=# select * from micky ;
id | name
----+-------
1 | micky
(1 row)
micky=# select * from micky ;
id | name
----+-------
1 | micky
2 | micky
3 | micky
4 | micky
5 | micky
(5 rows)
在主库上查看同步状态:
SELECT usename,application_name,client_addr,sync_state FROMpg_stat_replication ;
micky=#SELECT usename,application_name,client_addr,sync_state FROM pg_stat_replication;
usename | application_name | client_addr | sync_state
---------+------------------+-----------------+------------
repuser | pg1052 | 192.168.203.141 | sync
(1row)