环境:Linux
pqsql版本:9.0及以上
主库:
安装
1、下载包源码安装,./configure --prefix=/usr/local/pgsql;make;make install
2、启动数据库
>1 创建用户postgres
useradd postgres
echo "postgres" |passwd --stdin "postgres"
2> 创建pgsql的数据目录
mkdir -p /data/pgsql/data
chown postgres:postgres /data/pgsql/data
3> 添加环境变量,我这里添加的是全局的,如果是想在自己的个人用户里面,修改对应家目录的文件~./bashrc
vim /etc/profile
export PATH=/usr/local/pgsql/bin:$PATH
export PGDATD=/data/pgsql/data
然后source /etc/profile 使其生效,如果能直接打出比如 post 能自动补全postgres,说明变量生效以及设置成功
4> 初始化数据库,产生一下基础文件
/usr/local/pgsql/bin/initdb –D /data/pgsql/data
> 启动服务
/usr/local/pgsql/postgres –I -D /data/pgsql/data start &
这里加上-i 的意思是允许客户端进行tcp/ip的连接
至此pgsql 安装启动完毕,可以本地连接,看下服务是否正常,做主从前确保本身能正常启动和创建
主从配置主:
1、vim /data/pgsql/data/pg_hda.conf :针对某一个主机,增加一个认证账号
host replication replica 10.68.4.161/32 md5
首先连接pgsql,psql -d dbname -U username
CREATE ROLE replica login replication encrypted password 'replica'
2、主库得创建这个账号,必须是超级用户
createuser -a -d -e -P replica
如果之前已经创建,可以删除 dropuser -i -e replica
至于查看这个用户是否是超级用户,可以先随便连接一个数据库进入查看
psql -d postgres -U postgre
\du
3、vim postgresql.conf
wal_level = hot_standby # 这个是设置主为wal的主机
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
4、pg_ctl restart 重启pgsql 服务
主从配置从:
1、安装与主一样,唯一启动的时候不要出事话,已备份机的方式启动
pg_basebackup -F -p --progress -D /data2/pgsql/data2 -h 10.68.4.60 -U replica --password 回车之后,输入用户密码即可
2、启动成功之后,检查数据目录是否已经存在主库那边的所有目录文件,并且运行次命令
cp /usr/local/pgsql/share/recovery.conf.sample /data2/pgsql/data2/recovery.conf
vim recovery.conf
standby_mode = on # 这个说明这台机器为从库
primary_conninfo = 'host=10.12.12.10 port=5432 user=replica password=replica' # 这个说明这台机器对应主库的信息
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据
3、
vim postgresql.conf
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大,***这里把同步过来的主的注释掉
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
4、启动pgsql
su postgres
pg_ctl start
如果报权限有问题,那是因为数据权限有问题,必须是0700,而我们这个是同步过来,非初始化的,所有可能权限不太对
chmod 700 -R ./*
再次启动应该ok
5、校验
ps aux |grep postgre (以哪个用户启动就过滤它)
主库上面是否存在sender process 进程
从库上面是否存在receive process 进程
查看基本的配置信息:select * from pg_stat_replication;
6、建库和 表做校验,是否能正常实时同步
createdb xueyuan
psql -d xueyuan -U postgres
#create table classes(pid integer,pname varchar(32),constraint zhongwc_pid_pk primary key(pid)); 删除表:drop table classes
插入数据
insert into classes (id,number,name) values