网上教程都是yum源找不到,很崩溃
自己去官网找到了办法换源,在这个网址的最底部有教程:Repo RPMs - PostgreSQL YUM Repository
// 配置源,如果是9.6就改成9.6,本次使用9.5
cat << EOF > /etc/yum.repos.d/pgdg-95.repo
[pgdg90]
name=PostgreSQL 9.5 RPMs for RHEL/CentOS 7
baseurl=https://yum-archive.postgresql.org/9.5/redhat/rhel-7-x86_64
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
EOF
// 安装
yum install postgresql95-server
// 初始化并启动postgresql
/usr/pgsql-9.5/bin/postgresql95-setup initdb
// 看命令
systemctl list-unit-files --type=service | grep postgresql
// 启动postgresql
systemctl enable postgresql-9.5 // 开机自启动
systemctl start postgresql-9.5 // 启动
systemctl restart postgresql-9.5 // 重启
systemctl stop postgresql-9.5 // 停止
坑:如果报错就执行 清除yum缓存 的命令,然后重新安装
Not using downloaded pgdg90/repomd.xml because it is older than what we have:
// 清除yum缓存
sudo yum clean all
// 安装
yum install postgresql95-server
一些路径:
/var/lib/pgsql/9.5/data/pg_hba.conf
/var/lib/pgsql/9.5/data/postgresql.conf
/var/lib/pgsql/9.5/data/recovery.conf
postgresql.conf 配置文件修改
// 必须配置
listen_addresses='*' #允许从节点连接
wal_level=hot_standby #以启用归档模式
max_wal_senders=2 #允许的最大WAL发送者数量,指定连接到主节点的从节点数量,大于1就行
wal_keep_segments=64 #保留的WAL段数
hot_standby=on #备份的时候允许查询,启用从节点的热备模式
wal_log_hints=on # pg_rewind要使用,放心打开,不会有需要手动清理的文件产生
full_page_writes = on # pg_rewind要使用,放心打开,不会有需要手动清理的文件产生
// 选择配置
wal_send_timeout=60s #打开
archive_mode=on #启用归档模式
archive_command= /bin/true #暂时用伪命令就行
#archive_command = 'cp %p /path/to/archive/%f'
启动pg
创建一个账户repl2负责主从复制
sudo -u postgres psql
创建允许复制的账户
CREATE ROLE repl2 LOGIN REPLICATION PASSWORD '123456';
pg_hba.conf 配置文件修改,把 postgres账户 也提前配置上,后面也要用这个账户
host replication <从节点用户名> <从节点IP地址/子网掩码> trust
如:
host replication repl2 0.0.0.0/0 trust
host all repl2 0.0.0.0/0 trust
host all postgres 0.0.0.0/0 trust
权限问题,这里必须是0700,如果是0777会有各种问题!!!
执行
chown -R postgres:postgres /var/lib/pgsql/9.5/data
chmod -R 0700 /var/lib/pgsql/9.5/data
重启pg
注意:从库不要初始化,如果已经初始化,需要清空 /usr/local/postgresql/data 目录
# 删除前先备份
cp -r /var/lib/pgsql/9.5/data /var/lib/pgsql/9.5/data.bak
# 删除
rm -rf /var/lib/pgsql/9.5/data/*
从主库备份数据:相当于把主库的data目录全量复制过来,然后产生recovery.conf 文件
sudo -u postgres /usr/pgsql-9.5/bin/pg_basebackup -h 主库ip -U repl2 -F p -x -P -R -D /var/lib/pgsql/9.5/data/ -l rep_backup20230705
将产生 recovery.conf 文件
recovery.conf 配置文件修改
#以下配置如果有就不加
recovery_target_timeline = 'latest' # 一般加这一行就行
standby_mode = on
primary_conninfo = 'host=主机IP port=5432 user=admin password=123456'
权限问题:
执行
chown -R postgres:postgres /var/lib/pgsql/9.5/data
chmod -R 0700 /var/lib/pgsql/9.5/data
启动postgresql
日志文件位置:/var/lib/pgsql/9.5/data/pg_log/postgresql-Sun.log
sql语句:
select pg_is_in_recovery(); // t 表示备库
监控命令:
/usr/pgsql-9.5/bin/pg_controldata /var/lib/pgsql/9.5/data/
sudo -u postgres psql -d runoobdb
CREATE DATABASE runoobdb;
\l // 看数据库
\c runoobdb // 切换数据库
CREATE TABLE COMPANY(
NAME TEXT NOT NULL,
AGE INT NOT NULL
);
INSERT INTO COMPANY (NAME,AGE) VALUES ('Allen', 25);
INSERT INTO COMPANY (NAME,AGE) VALUES ('Lily', 30);
INSERT INTO COMPANY (NAME,AGE) VALUES ('ZHANG', 68);
主库新增数据,备库能查到,只是此时备机是只读的,因为防止乱套了
停止主机
备机切换成主机
sudo -u postgres /usr/pgsql-9.5/bin/pg_ctl promote -D /var/lib/pgsql/9.5/data
// 如果是sql:SELECT pg_ctl promote;
产生 recovery.done文件,标识从服务器已经成为了主服务器,数据恢复完成
使用pg_rewind:增量同步数据
优点:速度比较快,可以理解为增量的数据恢复
使用前提:旧主机没有新增数据的产生。如果旧主机和新主机都有新数据产生,不适合使用pg_rewind,而应该使用pg_basebackup来全量恢复数据
相当于把新主库的data目录数据部分增量复制过来,其他文件去量复制过来,由于新主库有recovery.done文件,需要手动改成recovery.conf文件
sudo -u postgres /usr/pgsql-9.5/bin/pg_rewind --target-pgdata=/var/lib/pgsql/9.5/data/ --source-server="host=192.168.1.39 dbname=runoobdb user=postgres" -P
接下来把新备机上的recovery.conf 配置文件修改,按照步骤三。注意改掉ip,还有要注意权限问题
启动新备机
新主库新增数据,新备库能查到
至此,完成 主从复制 —— 主机宕机 + 备机升主 —— 老主机提升为新备机
解决:
a、设置:hot_standby=on #备份的时候允许查询,启用从节点的热备模式
b、先stop再start试试
pg_basebackup: FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
解决:参考权限不够