热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

一.postgresql数据库安装1.下载软件包地址:PostgreSQL:FileBrowser2.解压安装[rootpostgresqlu01]#tar-z

一.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.编译

[root@postgresql u01]# cd postgresql-14.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

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

7、加入系统环境变量

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

添加如下内容

export PGHOME=/usr/local/postgresql
export PGDATA=/usr/local/postgresql/dataexport JAVA_HOME=/u01/jdk1.8.0_201
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin:$HOME/.local/bin:$HOME/bin:$PGHOME/bin

使配置文件生效

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

 8、增加用户 postgres 并赋权

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

9、初始化数据库

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

10.配置文件

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

[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.建表插入数据

postgres=# create table class(id bigint,name varchar(20),age int,sex char(2));
CREATE TABLE
postgres=# \dList of relationsSchema | Name | Type | Owner
--------+-------+-------+----------public | class | table | postgres
(1 row)

postgres=# insert into class values(001,'赵华',16,'男');
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.安装

进入目录

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

安装 

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


5.更改 

[root@sqlserver data]# vim postgresql.conf

 更改内容

archive_mode = on
archive_command = 'cp "%p" "/postgres/archivedir" '
max_wal_senders = 10
max_replication_slots = 10
wal_level = replica

创建目录

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

6.重启数据库 

[postgres@postgresql data]$ pg_ctl restart

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

ALTER USER postgres WITH PASSWORD '123456';
CREATE ROLE pgpool WITH PASSWORD '123456' LOGIN;
CREATE ROLE repl WITH PASSWORD '123456' REPLICATION LOGIN;

postgres=#
postgres=# ALTER USER postgres WITH PASSWORD '123456';
ALTER ROLE
postgres=# CREATE ROLE pgpool WITH PASSWORD '123456' LOGIN;
CREATE ROLE
postgres=# CREATE ROLE repl WITH PASSWORD '123456' REPLICATION LOGIN;
CREATE ROLE

 8.创建测试表tb_pgpool

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

查询

postgres=# select * from tb_pgpool;id | age | inserttime
----+-----+----------------------------1 | 1 | 2023-01-01 18:52:26.506927
(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所在位置

[postgres@sqlserver pgpool]$ pwd
/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.启停数据库 

pg_ctl status
pg_ctl start
pg_ctl stop

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

Set Master Password: postgres

三.主从配置 


■■ 主节点


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

su postgres
psql
# 创建 postgres 密码
ALTER USER postgres WITH PASSWORD '123456';
# 创建 从库 replica 用户密码
CREATE ROLE replica login replication encrypted password '123456';
# 检查账号
SELECT usename from pg_user;
SELECT rolname from pg_roles;

执行结果

postgres=# ALTER USER postgres WITH PASSWORD '123456';
ALTER ROLE
postgres=# CREATE ROLE replica login replication encrypted password '123456';
CREATE ROLE
postgres=# SELECT usename from pg_user;usename
----------pgpoolreplpostgresreplica
(4 rows)postgres=# SELECT rolname from pg_roles;rolname
---------------------------pg_database_ownerpg_read_all_datapg_write_all_datapg_monitorpg_read_all_settingspg_read_all_statspg_stat_scan_tablespg_read_server_filespg_write_server_filespg_execute_server_programpg_signal_backendpgpoolreplpostgresreplica
(15 rows)postgres=#

2.修改 pg_hba.conf 配置 

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

3.修改 postgresql.conf 配置 

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

listen_addresses = '*'
wal_level = hot_standby
synchronous_commit = remote_write
# synchronous_commit 参考文档可选其他 on
max_wal_senders = 32 #同步最大的进程数量
wal_sender_timeout = 60s #流复制主机发送数据的超时时间
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

# 移除或注释 wal_level
wal_level = xxx
# 修改或添加以下
primary_cOnninfo= 'host=192.168.153.129 port=5432 user=replica password=123456'
recovery_target_timeline = 'latest'

 5.声明从库

[postgres@sqlserver data]$ vim standby.signal

# 声明从库
standby_mode = on

6.启动 从库

[postgres@sqlserver postgresql]$ pg_ctl start

7.在从机测试主机

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

8.查看主节点复制插槽 

SELECT * FROM pg_replication_slots;

postgres=# \x
扩展显示已打开。
postgres=# SELECT * FROM pg_replication_slots;
-[ RECORD 1 ]-------+-----------
slot_name | pgstandby1
plugin |
slot_type | physical
datoid |
database |
temporary | f
active | t
active_pid | 3346
xmin |
catalog_xmin |
restart_lsn | 0/60001C0
confirmed_flush_lsn |
wal_status | reserved
safe_wal_size |
two_phase | f

 9.主节点信息

[postgres@postgresql log]$ psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

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

10.从节点信息

[postgres@sqlserver postgresql]$ psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

3177 | streaming | 0/5000000 | 1 | 0/60001C0 | 0/60001C0 | 1 | 20
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
+08 | pgstandby1 | 192.168.153.129 | 5432 | user=replica passfile=/home/postgres/.pgpass channel_b
inding=disable dbname=replication host=192.168.153.129 port=5432 fallback_application_name=walreceiver ss
lmode=disable sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=po
stgres target_session_attrs=any
(1 row)

四.主备切换 


1.停止主库

su - postgres
pg_ctl stop -m fast

2.启动备库对外提供服务 

su - postgres
pg_ctl promotepg_controldata #查看状态为in production对外提供服务,另外standby.signal文件自动删除

3.将旧主改为新备库,重新同步

#重建standby.signal文件
su - postgres
cd $PGDATA
touch standby.signal#修改postgresql.auto.conf
vim postgresql.auto.conf# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_cOnninfo= 'user=repl password=repl channel_binding=prefer host=192.168.9.114 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
primary_slot_name = 'pgstandby1'#新主库若没有配置复制槽,需要配置下
SELECT * FROM pg_create_physical_replication_slot(‘pgstandby1’);
SELECT slot_name, slot_type, active FROM pg_replication_slots;#启动备库
pg_ctl startpg_controldata #查看状态为in archive recovery

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

解决办法

su root
[root@sqlserver bin]# mv /usr/bin/psql /usr/bin/psql-bk
[root@sqlserver bin]# cd
[root@sqlserver ~]# find / -name 'psql'
/usr/local/postgresql/bin/psql
/u01/postgresql-14.2/src/bin/psql
/u01/postgresql-14.2/src/bin/psql/psql
[root@sqlserver ~]# ln -s /usr/local/postgresql/bin/psql /usr/bin/psql
[root@sqlserver ~]# su postgres
[postgres@sqlserver root]$ psql
could not change directory to "/root": 权限不够
psql (14.2)
Type "help" for help.postgres=#


推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • linux下编译安装lnmp
    2019独角兽企业重金招聘Python工程师标准#######################安装依赖#####################安装必要的包:y ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 前言对于从事技术的人员来说ajax是这好东西,都会使用,而且乐于使用。但对于新手,开发一个ajax实例,还有是难度的,必竟对于他们这是新东西。leo开发一个简单的ajax实例,用的是 ... [详细]
  • PHP编程能开发哪些应用?
    导读:很多朋友问到关于PHP编程能开发哪些应用的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
author-avatar
甜蜜棉羽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有