参考:https://www.jianshu.com/p/7fe9754c9c5f
https://www.modb.pro/db/29419

一:安装以及初始工作

安装环境:

os:CentOS Linux release 7.3.1611<br />pg:postgresql-12.2

安装基础依赖:

yum install -y readline-devel zlib-devel make gcc

注:安装依赖失败考虑修改镜像,或者官网下载压缩包自行安装,安装的版本要求最好与官网一致

创建用户组和用户:pg的命令无法在root下执行

groupadd postgres<br />useradd -g postgres postgres

解压软件包至/opt目录:

tar -zxvf postgresql-12.2.tar.gz -C opt

指定软件包安装路径:

注:安装的时候一定看好选项,配置上debug选项,否则不能调试

./configure --prefix=/usr/local/postgresql-12

编译安装:

make && make install

二:主备搭建

创建目录
image.png

创建主备的环境变量文件, 因为是在同一台机上起两个PG实例, 环境变量要各自设置。
postgresql.conf也可以设置端口

vi master.env
image.png
注:PGHOME指的是安装目录 可以省略PGMAJOR,根据自己实际安装来,环境变量source后可以自动识别port端口

vi slave.env
image.png
注意这里的PG_HOME是安装目录,在非root下该文件为只读

初始化master实例

注:以下命令切换到postgres用户下运行,并将postgres用户添加到sudoer,部分创建的文件夹设置为postgres下

su - postgres
chown -R postgres.postgres xx xx:data目录 或者log目录等

image.png
image.png
注:初始化数据库为
initdb -D xx :pgdata目录,主库需要初始化,从库直接从主库拉取配置
pg需要配置一个流复制账号进行主从同步。并且还需要在从服务器配置文件中授权该用户

初始化slave实例
image.png

三:验证

image.png
image.png
一个false一个tree, 证明目前主备状态正常。

image.png

image.png

验证其他参考博客:
https://www.jianshu.com/p/7fe9754c9c5f

四:PG必备命令行:

psql:进入pg命令行
chown -R postgres.postgres postgresql/data``设置拥有者,防止权限不够
tail logs/xx.log:查看错误日志

创建流复制用户
psql -c " CREATE USER repuser replication LOGIN ENCRYPTED PASSWORD 'repuser';"

'user=repuser password=repuser host=localhost port=6543' 流复制用户密码

source master.env 刷新环境变量
pg_ctl -l logs/master.log start 启动服务
pg_ctl stop 停止服务

# 拉取全量备份, 注意master用的端口是6543
pg_basebackup -D $PGDATA -Fp -Xs -v -P -h localhost -p 6543 -U repuser
\d :列出表
create table rep_test(id int,name text);创建表
insert into rep_test values(1,'slave instance added');
select * from rep_test;
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (1, 'Paul', 32, 'California', 20000.00,'2001-07-13');

补充命令行:
ip addr show 查看ip
vi:/xx查找
mkdir -p 递归创建
chmod 700 -R /var/lib/postgresql/data修改文件权限

GDB调试:psql命令行下退出,重新打开进程号会变,开启了新的进程,调试不要退出
ps -ef|grep postgres 找到进程号

环境变量:
export::当前终端有效,窗口关闭后无效
vim ~/.bashrc:永久生效
vim ~/.bash_profile:永久生效 .是隐藏文件
source(或点)命令通常用于重新执行刚修改的初始化文档
vi xx.env sourcexx.env