当前位置:   article > 正文

postgresql数据库主备安装,备份还原_postgresql 主备

postgresql 主备

一.postgresql数据库安装

1.下载软件包

地址:PostgreSQL: File Browser

2.解压安装

[root@postgresql u01]# tar -zxf postgresql-14.2.tar.gz

安装环境 

 yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake

 3.编译

  1. [root@postgresql u01]# cd postgresql-14.2
  2. [root@postgresql postgresql-14.2]# ./configure --prefix=/usr/local/postgresql

4.安装

[root@postgresql postgresql-14.2]# make && make install

5.进入安装后的目录,查看目录结构

[root@VM-8-15-centos ~]# cd /usr/local/postgresql

6、创建目录 data、log

  1. [root@postgresql bin]# mkdir /usr/local/postgresql/data
  2. [root@postgresql bin]# mkdir /usr/local/postgresql/log

7、加入系统环境变量

[root@postgresql bin]#vim /etc/profile

添加如下内容

  1. export PGHOME=/usr/local/postgresql
  2. export PGDATA=/usr/local/postgresql/data
  3. export JAVA_HOME=/u01/jdk1.8.0_201
  4. export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
  5. export PATH=$PATH:$JAVA_HOME/bin
  6. export PATH=$PATH:$JAVA_HOME/bin:$HOME/.local/bin:$HOME/bin:$PGHOME/bin:/usr/local/postgresql/bin

[root@kylin postgresql]# vim ~/.bash_profile
  1. PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HOME/.local/bin:$HOME/bin:$PGHOME/bin:/usr/local/postgresql/bin
  2. export PGHOME=/usr/local/postgresql
  3. export PGDATA=/usr/local/postgresql/data
  4. export JAVA_HOME=/u01/jdk1.8.0_201
  5. export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
  6. export PATH=$PATH:$JAVA_HOME/bin
  7. export PATH=$PATH:$JAVA_HOME/bin:$HOME/.local/bin:$HOME/bin:$PGHOME/bin:/usr/local/postgresql/bin
[root@kylin postgresql]# source  ~/.bash_profile

切换postgres用户

  1. [postgres@kylin postgresql]$ vim ~/.bash_profile

 加入

  1. export PGHOME=/usr/local/postgresql
  2. export PGDATA=/usr/local/postgresql/data
  3. export JAVA_HOME=/u01/jdk1.8.0_201
  4. export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
  5. export PATH=$PATH:$JAVA_HOME/bin
  6. export PATH=$PATH:$JAVA_HOME/bin:$HOME/.local/bin:$HOME/bin:$PGHOME/bin:/usr/local/postgresql/bin
  1. [postgres@kylin postgresql]$ source ~/.bash_profile

使配置文件生效

[root@postgresql bin]# source /etc/profile

 8、增加用户 postgres 并赋权

  1. [root@postgresql postgresql]# useradd postgres
  2. [root@postgresql postgresql]# chown -R postgres:root /usr/local/postgresql

9、初始化数据库

  1. [root@postgresql ~]# su postgres
  2. [postgres@postgresql root]$ /usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data/

10.配置文件

[postgres@postgresql root]$ vim /usr/local/postgresql/data/postgresql.conf

  1. [postgres@postgresql root]$ vim /usr/local/postgresql/data/pg_hba.conf

 添加

host    all             all             0.0.0.0/0               trust

 11、启动服务

[postgres@postgresql root]$ pg_ctl start -l /usr/local/postgresql/log/pg_server.log

 12.查看版本

[postgres@postgresql root]$ psql -V

 13.登录数据库

[postgres@postgresql root]$ psql -U postgres -d postgres

 13.查看有几个库

postgres=# \l

14.进库

postgres=# \c template1

15.建表

template1=# create table test(name varchar(20),age int);

 

 16 .查看库里面的表

template1=# \d

 17.切换库

template1=# \c postgres

18.建表插入数据

  1. postgres=# create table class(id bigint,name varchar(20),age int,sex char(2));
  2. CREATE TABLE
  3. postgres=# \d
  4. List of relations
  5. Schema | Name | Type | Owner
  6. --------+-------+-------+----------
  7. public | class | table | postgres
  8. (1 row)
  1. postgres=# insert into class values(001,'赵华',16,'男');
  2. INSERT 0 1

 19.查询数据条数

postgres=# select count(*) from class;

 

 二.pgpool安装

1.下载地址

Downloads - pgpool Wiki

2.解压

[root@sqlserver u01]# tar -zxvf pgpool-II-4.2.9.tar.gz

创建目录

mkdir -p /postgres/pgpool

 3.编译

[root@sqlserver pgpool-II-4.2.9]# ./configure  --with-pgsql=/postgres/pgpool

若报错configure: error: libpq is not installed or libpq is old

[root@sqlserver ~]# yum install -y postgresql* gcc*

4.安装

进入目录

  1. [root@sqlserver pgpool-recovery]# cd /u01/pgpool-II-4.2.9/src/sql/pgpool-recovery

安装 

[root@sqlserver pgpool-recovery]# make && make install

5.更改 

  1. [root@sqlserver data]# vim postgresql.conf

 更改内容

  1. archive_mode = on
  2. archive_command = 'cp "%p" "/postgres/archivedir" '
  3. max_wal_senders = 10
  4. max_replication_slots = 10
  5. wal_level = replica

创建目录

[root@sqlserver pgpool-recovery]# mkdir -p /postgres/archivedir

6.重启数据库 

[postgres@postgresql data]$ pg_ctl restart

7.主库修改postgres的密码、创建流复制用户repl

  1. ALTER USER postgres WITH PASSWORD '123456';
  2. CREATE ROLE pgpool WITH PASSWORD '123456' LOGIN;
  3. CREATE ROLE repl WITH PASSWORD '123456' REPLICATION LOGIN;
  1. postgres=#
  2. postgres=# ALTER USER postgres WITH PASSWORD '123456';
  3. ALTER ROLE
  4. postgres=# CREATE ROLE pgpool WITH PASSWORD '123456' LOGIN;
  5. CREATE ROLE
  6. postgres=# CREATE ROLE repl WITH PASSWORD '123456' REPLICATION LOGIN;
  7. CREATE ROLE

 8.创建测试表tb_pgpool

  1. postgres=# CREATE TABLE tb_pgpool ( id serial,age bigint,insertTime timestamp default now());
  2. ^
  3. postgres=# insert into tb_pgpool(age) values(1);

查询

  1. postgres=# select * from tb_pgpool;
  2. id | age | inserttime
  3. ----+-----+----------------------------
  4. 1 | 1 | 2023-01-01 18:52:26.506927
  5. (1 行记录)

9.pgpool配置 

 查找pgpool.conf.sample-stream

[postgres@postgresql pgpool-II-4.2.9]$ find ./ -name pgpool.conf.sample-stream

创建目录 

[postgres@sqlserver postgresql]$ mkdir pgpool/etc -p

找到pgpool所在位置

  1. [postgres@sqlserver pgpool]$ pwd
  2. /usr/local/postgresql/pgpool

执行下面代码

[postgres@sqlserver pgpool-II-4.2.9]$ cp ./src/sample/pgpool.conf.sample-stream  /usr/local/postgresql/pgpool/etc/pgpool.conf

10.查看文件 postgresql.conf

[postgres@postgresql data]$ grep -Ev '^#|^$' $PGDATA/postgresql.conf

查看pgpool.conf 文件

[postgres@postgresql etc]$ grep -Ev '^#|^$' /usr/local/postgresql/pgpool/etc/pgpool.conf

只查看有用的参数

[postgres@postgresql etc]$ grep -Ev '^#|^$' /usr/local/postgresql/pgpool/etc/pgpool.conf  | grep -v '^\s.*'

11.启停数据库 

  1. pg_ctl status
  2. pg_ctl start
  3. pg_ctl stop

 12.客户端工具使用开源的pgAdmin

Set Master Password: postgres

三.主从配置 

■■ 主节点

1.创建用于主从访问的用户, 修改postgres用户的密码,用于远程登录

  1. su postgres
  2. psql
  3. # 创建 postgres 密码
  4. ALTER USER postgres WITH PASSWORD '123456';
  5. # 创建 从库 replica 用户密码
  6. CREATE ROLE replica login replication encrypted password '123456';
  7. # 检查账号
  8. SELECT usename from pg_user;
  9. SELECT rolname from pg_roles;

执行结果

  1. postgres=# ALTER USER postgres WITH PASSWORD '123456';
  2. ALTER ROLE
  3. postgres=# CREATE ROLE replica login replication encrypted password '123456';
  4. CREATE ROLE
  5. postgres=# SELECT usename from pg_user;
  6. usename
  7. ----------
  8. pgpool
  9. repl
  10. postgres
  11. replica
  12. (4 rows)
  13. postgres=# SELECT rolname from pg_roles;
  14. rolname
  15. ---------------------------
  16. pg_database_owner
  17. pg_read_all_data
  18. pg_write_all_data
  19. pg_monitor
  20. pg_read_all_settings
  21. pg_read_all_stats
  22. pg_stat_scan_tables
  23. pg_read_server_files
  24. pg_write_server_files
  25. pg_execute_server_program
  26. pg_signal_backend
  27. pgpool
  28. repl
  29. postgres
  30. replica
  31. (15 rows)
  32. postgres=#

2.修改 pg_hba.conf 配置 

  1. # 添加从库网段
  2. host all all 0.0.0.0/0 trust
  3. # replication privilege.
  4. local replication all peer
  5. host replication replica 192.168.222.12/24 md5
  6. #注意此处 192.168.222.12/24 需修改为从库的 IP 段

3.修改 postgresql.conf 配置 

[postgres@postgresql data]$ vim $PGDATA/postgresql.conf
  1. listen_addresses = '*'
  2. wal_level = hot_standby
  3. synchronous_commit = remote_write
  4. # synchronous_commit 参考文档可选其他 on
  5. max_wal_senders = 32 #同步最大的进程数量
  6. wal_sender_timeout = 60s #流复制主机发送数据的超时时间
  7. max_connections = 100 #最大连接数,从库的max_connections必须要大于主库的

 ■■ 从节点

1.从主库同步数据

清除从库数据

[postgres@sqlserver bin]$ rm -rf $PGDATA/*

 2.远程拉取主节点数据

[postgres@sqlserver data]$ pg_basebackup -h 192.168.153.129 -D $PGDATA -U replica -P -v  -R -X stream -C -S pgstandby1 

复制后从节点的配置文件会和主节点的一样,并且一并复制的还有数据库文件,里面的数据也一样,意味着主节点有什么用户数据从节点也有。

-h –指定作为主服务器的主机。
-D –指定数据目录。
-U –指定连接用户。
-P –启用进度报告。
-v –启用详细模式。
-R–启用恢复配置的创建:创建一个standby.signal文件,并将连接设置附加到数据目录下的postgresql.auto.conf。
-X–用于在备份中包括所需的预写日志文件(WAL文件)。流的值表示在创建备份时流式传输WAL。
-C –在开始备份之前,允许创建由-S选项命名的复制插槽。
-S –指定复制插槽名称。

3.备份过程完成后,会在data目录下创建了一个standby.signal,并将primary_conninfo写入postgresql.auto.conf

[postgres@sqlserver data]$ vim  postgresql.auto.conf

4.修改 postgresql.conf 配置

[postgres@sqlserver data]$ vim $PGDATA/postgresql.conf

  1. # 移除或注释 wal_level
  2. wal_level = xxx
  3. # 修改或添加以下
  4. primary_conninfo = 'host=192.168.153.129 port=5432 user=replica password=123456'
  5. recovery_target_timeline = 'latest'

 5.声明从库

[postgres@sqlserver data]$ vim standby.signal

  1. # 声明从库
  2. standby_mode = on

6.启动 从库

[postgres@sqlserver postgresql]$ pg_ctl start

7.在从机测试主机

  1. 6. 在从机上测试主机
  2. su - postgres
  3. psql -h 192.168.153.129 -U postgres
  4. 验证主备同步状态:
  5. ps aux | grep wal
  6. 主机上有 wal sender process 进程
  7. 从机上有 wal receiver process 进程

8.查看主节点复制插槽 

SELECT * FROM pg_replication_slots;
  1. postgres=# \x
  2. 扩展显示已打开。
  3. postgres=# SELECT * FROM pg_replication_slots;
  4. -[ RECORD 1 ]-------+-----------
  5. slot_name | pgstandby1
  6. plugin |
  7. slot_type | physical
  8. datoid |
  9. database |
  10. temporary | f
  11. active | t
  12. active_pid | 3346
  13. xmin |
  14. catalog_xmin |
  15. restart_lsn | 0/60001C0
  16. confirmed_flush_lsn |
  17. wal_status | reserved
  18. safe_wal_size |
  19. two_phase | f

 9.主节点信息

[postgres@postgresql log]$ psql -c "\x" -c "SELECT * FROM pg_stat_replication;"
  1. [postgres@postgresql log]$ psql -c \x -c "SELECT * FROM pg_stat_replication;"
  2. pid | usesysid | usename | application_name | client_addr | client_hostname | client_port |
  3. backend_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_ls
  4. | write_lag | flush_lag | replay_lag | sync_priority | sync_state | reply_time
  5. ------+----------+---------+------------------+-----------------+-----------------+-------------+---
  6. --------------------------+--------------+-----------+-----------+-----------+-----------+----------
  7. +-----------+-----------+------------+---------------+------------+-------------------------------
  8. 3346 | 24582 | replica | walreceiver | 192.168.153.131 | | 57212 | 20
  9. -01-02 17:03:28.827758+08 | | streaming | 0/60001C0 | 0/60001C0 | 0/60001C0 | 0/60001C0
  10. | | | | 0 | async | 2023-01-02 17:06:38.903732+08
  11. (1 行记录)

10.从节点信息

[postgres@sqlserver postgresql]$ psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"
  1. 3177 | streaming | 0/5000000 | 1 | 0/60001C0 | 0/60001C0 | 1 | 20
  2. 23-01-02 17:15:11.650372+08 | 2023-01-02 17:15:09.816532+08 | 0/60001C0 | 2023-01-02 17:04:10.182778
  3. +08 | pgstandby1 | 192.168.153.129 | 5432 | user=replica passfile=/home/postgres/.pgpass channel_b
  4. inding=disable dbname=replication host=192.168.153.129 port=5432 fallback_application_name=walreceiver ss
  5. lmode=disable sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=po
  6. stgres target_session_attrs=any
  7. (1 row)

四.主备切换 

1.停止主库

  1. su - postgres
  2. pg_ctl stop -m fast

2.启动备库成为新主库对外提供服务 

select pg_promote(true,60);

3. 验证

select pg_is_in_recovery();   #f代表主库 t代表备库

4.新主库修改新主库修改pg_hba.conf文件

原主库IP 192.168.153.133

host    replication     all             192.168.153.133/24           md5

3.将旧主库改为新备库,重新同步,原主库新建$PGDATA/standby.signal文件

  1. [postgres@postgresql cz]$ cd $PGDATA
  2. [postgres@postgresql data]$ vim standby.signal

加入

standby_mode = 'on'

4.原主库修改$PGDATA/postgresql.auto.conf文件

  1. [postgres@postgresql data]$ vim $PGDATA/postgresql.auto.conf
  2. primary_conninfo='user=replica password=123456 host=192.168.153.134 port=5432'

5.启动原主库,变为新备库 

[postgres@postgresql root]$ pg_ctl start -l /usr/local/postgresql/log/pg_server.log

6.测试同步状态 

select pg_is_in_recovery();   #f代表主库 t代表备库

4.警告:psql 版本8.4, 服务器版本14.2. 

解决办法

  1. su root
  2. [root@sqlserver bin]# mv /usr/bin/psql /usr/bin/psql-bk
  3. [root@sqlserver bin]# cd
  4. [root@sqlserver ~]# find / -name 'psql'
  5. /usr/local/postgresql/bin/psql
  6. /u01/postgresql-14.2/src/bin/psql
  7. /u01/postgresql-14.2/src/bin/psql/psql
  8. [root@sqlserver ~]# ln -s /usr/local/postgresql/bin/psql /usr/bin/psql
  9. [root@sqlserver ~]# su postgres
  10. [postgres@sqlserver root]$ psql
  11. could not change directory to "/root": 权限不够
  12. psql (14.2)
  13. Type "help" for help.
  14. postgres=#

基于Postgre 14的主备复制和主备切换

基于Postgre 14的主备复制和主备切换_qq_36606793的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/780374
推荐阅读
相关标签
  

闽ICP备14008679号