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

news2024/11/14 19:58:19

一.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/data

export 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=# \d
         List of relations
 Schema | 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  
----------
 pgpool
 repl
 postgres
 replica
(4 rows)

postgres=# SELECT rolname from pg_roles;
          rolname          
---------------------------
 pg_database_owner
 pg_read_all_data
 pg_write_all_data
 pg_monitor
 pg_read_all_settings
 pg_read_all_stats
 pg_stat_scan_tables
 pg_read_server_files
 pg_write_server_files
 pg_execute_server_program
 pg_signal_backend
 pgpool
 repl
 postgres
 replica
(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 - postgres

psql -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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/133471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小说阅读 (支持txt文本文件浏览)

小说阅读2022 - 界面 2023年1月2日 更新 1、修复BUG。。。 2、优化运行。。。 3、添加了 【[阅读笔记] - 可以在章节处填写阅读笔记保存,程序会自动记录位置坐标,每次在读到本章节保存位置坐标时右上角会自动跳出提示图标,点击提示图标即可…

SAP FICO付款及清账

付款及清账 在SAP中,处理付款要达到两个效果: 实现会计凭证的处理; 实现清账(将付款与应付账款对应核销); 可以边付边清,也可以先付后清。 一、付款并清账 企业的付款一般有现金付款、银行存款…

Gem5模拟器,全流程运行Chiplet-Gem5-SharedMemory-main(十)

小白入门,跑着个代码头都给我跑秃了,文档说不详细吧似乎啥都和你说了,说它详细吧,看了几遍也跑不出来。记录一下我遇到的问题: 目录 一、确定待执行的程序 (1)那些年的undefined reference &…

(3分钟速通)Visual Odometry的特征点法和直接法

光流法:(https://zhuanlan.zhihu.com/p/537113460) ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ​ 编辑切换为居中 添加图…

【免费开放源码】审批类小程序项目实战(预约历史页面)

第一节:什么构成了微信小程序、创建一个自己的小程序 第二节:微信开发者工具使用教程 第三节:深入了解并掌握小程序核心组件 第四节:初始化云函数和数据库 第五节:云数据库的增删改查 第六节:项目大纲以及制…

Vue与React分别实现登录拦截【详细例子+讲解】

文章标题一、Vue实现登录拦截1-1、 效果展示1-2 代码展示1-2-1 router.js1-2-2 store文件夹下1-2-2-1 state.js1-2-2-2 index.js1-2-2-3 mutation.js1-2-3 main.js【实现登录拦截的关键---全局路由守卫】1-2-4 pages下的login.vue1-3 总结二、 Vue项目功能简介2-1 功能2-2 查看…

基于RBAC模型的权限控制的一整套基础开发平台,前后端分离,后端django,前端 vue+ElementUI

Django-Vue-Admin 完整代码下载地址:基于RBAC模型的权限控制的一整套基础开发平台 💡 「关于」 我们是一群热爱代码的青年,在这个炙热的时代下,我们希望静下心来通过Code带来一点我们的色彩和颜色。 因为热爱,所以…

TensorFlow之过拟合与欠拟合-1

1 基本概念 过度拟合(overfit) 创建的模型与用于该模型的训练数据之间发生过于密切的关系,从而引起该模型无法对新数据进行准确的预测。正则化(Regularization)策略可以减少过度拟合,或者使用大数据量、多…

考研数学660刷题记录

🐢🐢 基本概念-基本理论-基本方法 🐢🐢 660刷题记录 二轮复刷标志 ⭐:掌握不熟练 ⭐⭐:是基本方法的组合,但没解出来 ⭐⭐⭐:很难想到这种破局的手段 序号①、②:表示多…

【阶段一】Python快速入门02篇:数据结构-列表

本篇的思维导图: 数据结构-列表 列表的概念 列表(list)是用来存储一组有序数据元素的数据结构,元素之间用逗号分隔。列表中的数据元素应该包括在方括号中,而且列表是可变的数据类型,一旦创建了一个列表,你可以添加、删除或者搜索列表中的元素。在方括号中的数据可以是 i…

小程序:会议OA其他页面

目录 会议管理 一,自定义tabs组件 二,会议管理 父子组件传参演示 个人中心 会议管理 一,自定义tabs组件 文档参考:自定义组件 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/framework/custom-co…

MacBook 与其他设备的低成本高性能数据传输方案

本篇文章分享在不使用路由器的情况下,使用“数据线或网线”将 MacBook 与其他设备连接在一起,获得更高效率的数据交换性能。 写在前面 最近考虑将 Mac 设备和其他的设备连在一起使用,比如之前在“廉价的家用工作站方案:前篇”或…

利用Python实现酒店评论的中文情感分析,含数据集

利用Python实现酒店评论的情感分析 完整代码下载地址:利用Python实现酒店评论的中文情感分析 情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析、归纳。情感极性分析主要有两种分类方法:基于情感知识的方法和基于机器学…

抽象类和接口1

目录 🌤️抽象类概念 🌤️抽象类语法 🌤️抽象类的作用 ⛅接口的概念 ⛅接口的语法 ⛅接口的使用 ⛅接口的特性 ....... 🌤️抽象类概念 在面向对象的概念中,所有对象都是通过类来描述的,但并不是所有的…

上手华为鸿蒙手表gt系列从准备到发布

文章目录1、前期准备2、证书&签名3、编码&发布FQA:问题1:The graphic card OpenGL version is too old for Previewer to work. It must be 3.2 or later. Update the OpenGL driver based on the graphics card model.问题2:编译成HAp,报错 ent…

[UE笔记]延迟与延迟补偿

Lag即延迟,是多人游戏中常会出现的一个现象。lag compensation即延迟补偿,是一种减少延迟对游戏造成影响的技术。 Ping 多个含义 一种指令(用于验证ip地址是否存在或者主机是否正在运行)描述服务器需要多长时间响应客户端的输入…

OpenCV实战——使用邻居访问扫描图像

OpenCV实战——使用邻居访问扫描图像0. 前言1. 图像锐化2. 邻居访问扫描图像3. 锐化滤波器4. 完整代码相关链接0. 前言 在图像处理中,有时需要根据某个像素的相邻像素的值计算该像素位置的值。当这个邻域包括上一行和下一行的像素时,就需要同时扫描图像…

JavaScript高级 浏览器的渲染原理与JavaScript代码执行原理

浏览器的渲染原理1. 网页的解析过程2. 浏览器内核1. V8引擎3. 浏览器渲染过程1. HTML解析2. 生成CSS规则3. 构建Render Tree4. 布局(layout)5. 绘制(Paint)4. 回流和重绘解析1. 回流2. 重绘3. web 性能优化4. 合成和性能优化5. 浏…

剑指offer----C语言版----第六天

目录 1. 用栈实现队列 1.1 题目描述 1.2 栈和队列的基础知识 1.3 思路分析 2. 扩展题目——用队列实现栈 2.1 题目描述 2.2 思路分析 1. 用栈实现队列 原题链接: 剑指 Offer 09. 用两个栈实现队列 - 力扣(LeetCode)https://leetcode.cn/…

数据结构集合框架与大O渐进表示法

作者:爱塔居的博客_CSDN博客-JavaSE领域博主 专栏:数据结构 作者简介:大三学生,希望跟大家一起进步!🌹 博客简介:了解数据结构,学习一些关于数据结构的前置知识 文章目录 目录 文章目…