ubuntu 18.04 PostgreSQL 12主从配置
环境说明
主服务器: 11.62.220.70
从服务器: 11.62.220.73
第一步:安装数据库
(1)在线安装
sudo sh -c ‘echo “deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list’
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-12(不带后面的-12默认安装最新版)
(2)离线安装
通过xftp5将离线安装包拷入需要离线安装数据库的服务器中。
1.解压
sudo tar zxvf offlinePackage.tar.gz -C /;
2.添加到系统源
sudo vim /etc/apt/sources.list;
添加内容如下:
deb [trusted=yes] file:/// offlinePackage/ (注意:offlinePackage前面有一个空格)
更新系统源
sudo apt-get update
安装数据库
sudo apt-get install postgresql-12
第二步:修改数据库密码
sudo -u postgres psql #登录
alter user postgres password ‘123456’; # 修改密码
主服务配置:
第1步:修改postgresql.conf文件
sudo vim /etc/postgresql/12/main/postgresql.conf
在文件内找到如下内容并进行修改
原文件都有这些信息,需要仔细找到修改
listen_addresses = ‘*’
wal_level = hot_standby
synchronous_commit = local – 本地同步级别
max_wal_senders = 2 – 两台服务器
wal_keep_segments = 10
保存退出
第2步:修改pg_hba.conf文件
sudo vim /etc/postgresql/12/main/pg_hba.conf
添加如下内容
host all all 0.0.0.0/0 md5
host replication replica 11.62.220.70/24 md5
host replication replica 11.62.220.73/24 md5
第3步:保存退出,重启Postgresql
sudo service postgresql restart
第4步:创建用于复制的用户replica
sudo -u postgres psql
CREATE ROLE replica login replication encrypted password '123456';
从服务配置:
第1步:停止Postgresql服务
sudo service postgresql stop
第2步:修改postgresql.conf文件
和主服务器修改的内容一样,只比主服务器多修改最后一条
hot_standby = on
listen_addresses = ‘*’
wal_level = hot_standby
synchronous_commit = local
max_wal_senders = 2
wal_keep_segments = 10
hot_standby = on
保存退出
第3步:将数据从主机复制到从机【重点】
要从主服务器同步到从服务器,从服务器上的PostgreSQL主目录必须由主服务器的主目录替换。 在从服务器中,登录postgres用户
sudo su - postgres -- 登录postgres 需要输入密码
备份实际数据库目录:
cd /var/lib/postgresql/12/
mv main main_back
sudo pg_basebackup -h 11.62.220.70 -U replica -p 5432 -D $PGDATA main -Xs -P -R
第4步:启动PostgreSQL
sudo service postgresql start
第5步:验证主服务器和备用服务器之间的复制
(也可以在主服务器上新建个表,看看从服务器是否同步成功也新增了表)
在主服务器上输入:
sudo -u postgres psql -x -c "select * from pg_stat_replication"
配置postgresql12主从的过程中遇到的问题
问题一:
在修改完postgresql.conf文件后,重启数据库,就报错
psql: error: could not connect to server: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
查询日志,就报错数据库被关闭了,数据库服务也启动失败
发现在/var/run/postgresql 路径下的postmaster.pid文件丢失,导致无法生成.s.PGSQL.5432文件,以至于启动不了数据库。
Postgresql 的日志路径:/var/log/postgresql12
解决办法:
卸载干净删除postgresql相关文件
sudo apt-get --purge remove postgres\* --卸载所有postgres开头的服务
sudo rm -rf /var/lib/postgresql --删除/var/lib目录下的postgresql文件
重新安装就可以生成postmaster.pid文件
sudo apt-get install postgresql-12
问题出现的原因:应该是修改postgresql.conf文件的内容时,使用的网上参考文档有问题,修改的内容影响了数据库的配置,导致postmaster.pid丢失。
问题二:
在遇到postmaster.pid文件丢失时, 通过网上查到一个办法,把另一台配置好数据库的服务器的数据库相关配置文件拷到这台出问题的数据库的对应路径上。
在拷/etc 路径下的postgresql文件时,由于权限不够,就准备给文件权限,但是由于给的权限级别级别过高,而且直接给到/etc文件,导致系统崩溃,sudo权限失效,所有命令都无法使用。
解决办法:
在服务器启动过程中,长按键盘上的SHIFT键不松,可以进入到GNU GRUB界面
选择Advanced options for ubuntu(类似windows下的安全模式)
进入后可以使用sudu命令,经过查询发现问题出现的根本原因是因为/etc/sudoers文件给了过高的权限,导致系统出现保护机制,禁止使用sudo命令。
在另一台正常的服务器上查询此文件的权限级别后,在出问题的服务器上配置相同的权限,重启系统后即可恢复正常。