postgresSQL主从流复制安装
命令行运维:
https://blog.csdn.net/zhangzeyuaaa/article/details/77941039
安装流程:
先准备类库:
yum -y install readline-devel zlib-devel
下载postgresql-9.6.9.tar.gz到两台机器上解压后进入并:
./configure --prefix=/main/postgresql
然后make make install就ok,接着改一下属主:
adduser postgres
passwd postgres
chown -R postgres:postgres /main/postgresql
创建数据文件目录
mkdir -p /main/postgresql/data
创建log文件
mkdir /main/postgresql/logs
touch /main/postgresql/logs/postgresql.log
初始化数据库:
/main/postgresql/bin/initdb -D /main/postgresql/data
可以看到data下多出来一堆文件
[postgres@iz2zej5nlztmm1frnyl4wxz postgresql]$ ll data/
总用量
drwx------ postgres postgres 7月 : base
drwx------ postgres postgres 7月 : global
drwx------ postgres postgres 7月 : pg_clog
drwx------ postgres postgres 7月 : pg_commit_ts
drwx------ postgres postgres 7月 : pg_dynshmem
-rw------- postgres postgres 7月 : pg_hba.conf
-rw------- postgres postgres 7月 : pg_ident.conf
drwx------ postgres postgres 7月 : pg_logical
drwx------ postgres postgres 7月 : pg_multixact
drwx------ postgres postgres 7月 : pg_notify
drwx------ postgres postgres 7月 : pg_replslot
drwx------ postgres postgres 7月 : pg_serial
drwx------ postgres postgres 7月 : pg_snapshots
drwx------ postgres postgres 7月 : pg_stat
drwx------ postgres postgres 7月 : pg_stat_tmp
drwx------ postgres postgres 7月 : pg_subtrans
drwx------ postgres postgres 7月 : pg_tblspc
drwx------ postgres postgres 7月 : pg_twophase
-rw------- postgres postgres 7月 : PG_VERSION
drwx------ postgres postgres 7月 : pg_xlog
-rw------- postgres postgres 7月 : postgresql.auto.conf
-rw------- postgres postgres 7月 : postgresql.conf
设置环境变量:
export PGDATA=/main/postgresql/data
export PATH=${JAVA_HOME}/bin:/main/mysql5.6.41/bin:/main/postgresql/bin:$PATH
source一下生效之
启动下测试下:
pg_ctl -D /main/postgresql/data/ -l /main/postgresql/logs/postgresql.log start
看看日志:
cat postgresql.log
LOG: could not bind IPv6 socket: 无法指定被请求的地址
HINT: Is another postmaster already running on port ? If not, wait a few seconds and retry.
LOG: database system was shut down at -- :: CST
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
连一下:
psql
psql (9.6.)
Type "help" for help. postgres=#
ok
接下来可以开始配置主从---------------------------------
主库创建同步用户:
psql
psql (9.6.)
Type "help" for help. postgres=# create role repl login replication encrypted password 'xxxxx';
可以查到用户:
postgres=# select usename from pg_user;
usename
----------
postgres
repl
( rows)
vim pg_hba.conf设置访问权限,开放从节点密码读取:
xx.xx.xx.xx是从节点的ip
host replication repl xx.xx.xx.xx/ md5
同时开放其他局域网内的应用节点密码访问:
host all all yy.yy.yy./ md5
修改核心配置文件:
Listen_adresses = ‘*’
wal_level = hot_standby 主从设置为热血模式,流复制必选
max_wal_senders= 流复制允许连接进程
wal_keep_segments =
max_connections = 默认参数,非主从配置相关参数,表示到数据库的连接数
从节点:
从库安装完成后,不初始化,若已经初始化,删除其data目录
从节点从主节点去读取:
pg_basebackup -h 172.17.222.161 -p 5432 -U repl -F p -P -D /main/postgresql/data
Password: 输入密码
/ kB (%), / tablespace
NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup
在基础备份时,初始化文件是从主库复制来的,所以配置文件一致,注释掉
wal_level,
max_wal_senders
wal_keep_segments等参数
打开如下参数:
vi /postgres/data/postgresql.conf
hot_standby = on #在备份的同时允许查询
max_standby_streaming_delay = 30s #可选,流复制最大延迟
wal_receiver_status_interval = 10s #可选,从向主报告状态的最大间隔时间
hot_standby_feedback = on #可选,查询冲突时向主反馈
max_connections = 1000 #默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库
创建恢复文件recovery.conf
cp ../share/recovery.conf.sample recovery.conf
调整参数:
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=172.17.222.161 port=5432 user=repl password=xxxxx'
备注:
recovery.conf #在做基础备份时,也可通过-R参数在备份结束后自动生产一个recovery.conf文件
standby_mode = on #指明从库身份
primary_conninfo = 'host=10.0.120.150 port=5432 user=repl password=repl1234' #连接到主库信息
recovery_target_timeline = 'latest' #同步到最新数据
指定触发文件,文件存在时,将触发从库提升为主库,前提是必须设置”standby_mode = on”;如果不设置此参数,也可采用”pg_ctl promote“触发从库切换成主库
#trigger_file = ‘/main/postgres/data/trigger_activestandby’
从库启动
pg_ctl -D /main/postgresql/data/ -l /main/postgresql/logs/postgresql.log start
主库看看状态

主库进程:

从库进程:

测试:
create table test(id int primary key, name varchar(20));
从库只能读取------写入执行报错:

主库执行读写都ok,不过一般用来写:

主从分别查看同步状态:
pg_controldata /main/postgresql/data/
主节点:

从节点:

到此主从复制建立完成。
测试自动主从切换:
1)主库上执行:
su - postgres
pg_ctl stop -m fast #停主库日志
pg_controldata /postgres/data/ #此时Database cluster state: shutdown
(2)从库切换为主库:
su - postgres
pg_ctl promote
pg_controldata /postgres/data #此时Database cluster state: Inproduction
修改了postgresql.conf中的端口
psql -p 23532
和pg_hba.conf中的访问权限,仅限内网访问
一、建立数据库连接
接入PostgreSQL数据库,切换到pg的用户:
psql -h IP地址 -p 端口 -U 数据库名
之后会要求输入数据库密码
二、访问数据库
1、列举数据库:\l
2、选择数据库:\c 数据库名
3、查看该某个库中的所有表:\dt
4、切换数据库:\c interface
5、查看某个库中的某个表结构:\d 表名
6、查看某个库中某个表的记录:select * from apps limit 1;
7、显示字符集:\encoding
8、退出psgl:\q
三、dump数据库
命令:pg_dump -h IP地址 -p 端口 -U 数据库用户名 -f 目标存储文件及路径 目标数据库名
之后会要求输入数据库用户密码
参数:
# -h: PostgreSQL服务器的主机为192.168.149.137。
# -U: 登录用户为postgres。
# -t: 导出表名以test开头的数据表,如testtable。
# -a: 仅仅导出数据,不导出对象的schema信息。
# -f: 输出文件是当前目录下的my_dump.sql
实例:
# mydatabase是此次操作的目标数据库。
/> pg_dump -h 192.168.149.137 -U postgres -t test* -a -f ./my_dump.sql mydatabase
#-c: 先输出删除数据库对象的SQL命令,在输出创建数据库对象的SQL命令,这对于部署干净的初始系统或是搭建测试环境都非常方便。
/> pg_dump -h 192.168.220.136 -U postgres -c -f ./my_dump.sql mydatabase
#导出mydatabase数据库的信息。在通过psql命令导入时可以重新指定数据库,如:/> psql -d newdb -f my_dump.sql
/> pg_dump -h 192.168.220.136 -U postgres -f ./my_dump.sql mydatabase
#导出模式为my_schema和以test开头的数据库对象名,但是不包括my_schema.employee_log对象。
/> pg_dump -t 'my_schema.test*' -T my_schema.employee_log mydatabase > my_dump.sql
#导出east和west模式下的所有数据库对象。下面两个命令是等同的,只是后者使用了正则。
/> pg_dump -n 'east' -n 'west' mydatabase -f my_dump.sql
/> pg_dump -n '(east|west)' mydatabase -f my_dump.sql
四、恢复dump的数据库
命令:psql -h IP地址 -p 端口 -U 数据库用户名 -d 目标数据库名 -f 目标存储文件及路径
之后会要求输入数据库用户密码
参数:
# -h: PostgreSQL服务器的主机为192.168.149.137。
# -U: 登录用户为postgres。
# -f: 输出文件是当前目录下的my_dump.sql
五、压缩dump数据库及其恢复
压缩dump:pg_dump -h IP地址 -p 端口 -U 数据库用户名 -f 目标存储文件及路径 -Fc 目标数据库名
恢复:pg_restore -h IP地址 -p 端口 -U 数据库用户名 -Fc -d 目标数据库名 目标存储文件及路径
附:压缩dump后文件大小会缩小10倍
六、使用系统表查询数据库个数
执行sql命令:select count(*) from pg_database where datname like 'db%';
postgresSQL主从流复制安装的更多相关文章
- 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署
前言 在MySQL被收购之后,虽然有其替代品为: MariaDB,但是总感觉心里有点膈应.大家发现了另一款开源的数据库: PostgreSQL. 虽然centos自带版本9.2也可以用,但是最近的几次 ...
- postgres配置主从流复制
postgres主从流复制 postgres在9.0之后引入了主从的流复制机制,所谓流复制,就是从库通过tcp流从主库中同步相应的数据.postgres的主从看过一个视频,大概效率为3w多事务qps. ...
- PostgreSQL异步主从流复制搭建
1 总体规划 Master库 Slave库 操作系统 CentOS Linux release 7.5.1804 CentOS Linux release 7.5.1804 处理器 1 1 内存 ...
- Postgressql高可用(pgpool+异步流复制)
文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...
- postgres主从基于流复制
环境: CentOS Linux release 7.6.1810 (Core) 内核版本:3.10.0-957.10.1.el7.x86_64 node1:192.168.216.130 node2 ...
- pgpool-II主备流复制的架设
1.环境 OS: CentOS release 6.4 (Final) DB: postgresql 9.3.6 pgpool服务器: pgpool 172.16.0.240 数据库主服务器:mast ...
- [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制
一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...
- percona-xtrabackup工具实现mysql5.6.34的主从同步复制
percona-xtrabackup工具实现mysql5.6.34的主从同步复制 下载并安装percona-xtrabackup工具 # wget https://www.percona.com/do ...
- PostgreSQL数据库单机扩展为流复制
primary:10.189.102.118 standby:10.189.100.195 1. 配置ssh互信机制 在primary主库执行 $ ssh-keygen -t rsa $ cp ~/. ...
随机推荐
- vector、map 内存释放
一.vector void TestVector() { cout << "begin create vector" << endl; int iSize ...
- MTK framework系统默认设置
Android 5.1 最新framework系统默认设置 一般默认位置:frameworks\base\packages\SettingsProvider\res\values\defaults.x ...
- [DLX精确覆盖] hdu 1603 A Puzzling Problem
题意: 给你n块碎片,这些碎片不能旋转.翻折. 问你能不能用当中的某些块拼出4*4的正方形. 思路: 精确覆盖裸题了 建图就是看看每一个碎片在4*4中能放哪些位置,这个就作为行. 列就是4*4=16个 ...
- php的opcache缓存扩展
opcache (全程 zend opcache): 从php5.5开始,默认提供的php脚本缓存扩展,编译php5.5时加上参数--enable-opcache就可以编译opcache了,只是要启用 ...
- 在WPS中删除整行的快捷键是什么?
选中需要删除的行,(方法:点击最左侧的行号):按快捷键Ctrl+-(按着Ctrl不放,再按小键盘的减号“-”),“-”是删除,“+”是插入,选中行,是对行操作,选中列就是对列操作,选中单元格,就是单元 ...
- [原]NTP时间服务器简单设置
====server edit /etc/ntp.conf 添加 server 127.127.1.0 fudge 127.127.1.0 stratum 1 fudge 127.127.1.0 ...
- Fiddler如何捕捉DefaultHttpClient的HTTP请求
实际开发中为了解决Ajax跨域请求问题,会通过一个同域的控制器在服务端代理请求目标的Web API并将结果返回.为了便于调试这类请求,我们希望通过Fiddler可以监控到这些请求.Fiddler官方给 ...
- ABP之展现层(Datatables分页)
在前面的随笔中,已经介绍了ABP的增删改查的操作,但是对于查询的数据并没有进行分页,只是进行粗糙的展示,今天的随笔中将摸索进行分页展示.这里打算使用的分页插件是DataTables,这是一款比较强大的 ...
- 阿里云VPC服务器通过ClassicLink访问经典网络服务器
VPC中的服务器名称是 vpc-ecs1 , 经典网络中的服务器名称是 classic-ecs2 ,要实现 vpc-ecs1 通过内网访问 classic-ecs2 . VPC 网段是 10.0.0. ...
- [No0000C0]百度网盘真实地址解析(不用下载百度网盘)20170301
一:如果是别人分享的,就保存到自己的网盘,然后再分享出去:如果本身自己的,也是要分享出去(下面提供的代码,不可以在这里直接使用,没用的,必须分享出去) 二:必须是 创建公开链接,私密链接不行(试过了 ...