数据库复制是将数据从中央或主服务器复制到多个称为副本的服务器的过程。主服务器接受读取和写入操作,而副本服务器提供只读事务。主服务器和副本共同构成一个数据库集群。数据库复制的目标是确保数据的冗余、一致性、高可用性和可访问性,尤其是在高流量、关键任务应用程序中。
PostgreSQL提供了两种复制方法:物理(即流式)复制和逻辑复制。两者都是不同用例的理想选择,用户可以根据最终目标选择其中之一。让我们看看这些复制方法中的每一种。
这是PostgreSQL中最常见的复制类型。物理复制维护集群整个数据的完整副本。它使用精确的块地址并采用逐字节复制。简单来说,主服务器上的整个数据集都被复制到充当备用节点的副本。
物理复制不会复制主数据库集群的特定对象,例如表中的单行数据。相反,它在磁盘块级别上工作,并将所有数据镜像到副本节点;包括每个数据库中的所有表。此复制要求所有副本都相同。
逻辑复制最早是在PostgreSQL9.0中引入的。它通过复制数据对象及其基于唯一标识符(如主键)的更改来工作。简单来说,逻辑复制以基于行的模型复制数据库对象,而不是将所有内容发送到副本节点的物理复制。
因此,与物理复制相反,逻辑复制提供了对数据复制的细粒度控制。
在Ubuntu22.04上设置物理PostgreSQL复制
为了演示复制过程,您需要一个主节点和一个将在其上进行复制的副本节点。下面是我们的实验室设置,我们将使用Ubuntu22.04作为首选操作系统。
主节点:IP:194.195.208.82操作系统:Ubuntu22.04服务器
副本节点:IP:139.144.169.79操作系统:Ubuntu22.04服务器
第1步:安装PostgreSQL服务器
第一步是在主节点和副本节点上安装PostgreSQL。请注意,您需要在两个节点上安装相同版本的PostgreSQL才能进行逻辑复制。
在撰写本指南时,最新版本的PostgreSQL是PostgreSQL14。
通过SSH登录到您的服务器并刷新存储库。
接下来,按如下方式安装PostgreSQL数据库服务器。
sudoaptinstallpostgresqlpostgresql-contrib-y
默认情况下,PostgreSQL守护程序会在安装后自动运行。您可以使用以下命令验证这一点:
sudosystemctlstatuspostgresql
下面的输出确认PostgreSQL服务已启动并正在运行。
此外,考虑使服务在系统启动时启动,如下所示。
sudosystemctlenablepostgresql
接下来,以用户身份登录主节点(194.195.208.82),postgres该用户是每次新安装PostgreSQL时创建的默认用户。
您需要创建一个复制用户,用于从主节点启动复制过程。
因此,运行以下命令创建复制用户并分配复制权限。在此命令中,replica_user?是复制用户,而P@ssword321是用户的密码。请务必提供一个强密码,这与我们使用的纯粹用于演示目的的密码不同。
CREATEROLEreplica_userWITHREPLICATIONLOGINPASSWORD'P@ssword321';
然后从PostgreSQL提示符注销
接下来,您需要对主配置文件进行一些调整。使用您喜欢的文本编辑器访问以下配置文件:
sudovim/etc/postgresql/14/main/postgresql.conf
打开文件后,向下滚动并找到该listen_addresses指令。该指令指定PostgreSQL数据库服务器侦听连接的主机。

接下来,找到该wal_level指令。该设置指定要写入预写日志(WAL)文件的信息量。
取消注释该行并将其设置logical为如图所示。
接下来,找到该wal_log_hints指令。默认情况下,它设置为off。
当设置on为该值时,允许PostgreSQL服务器在页面的第一次修改期间将每个磁盘页面的全部内容写入WAL文件。
这就是此配置文件中所需更改的全部内容。保存更改并退出。
接下来,访问/etc/postgresql/14/main/pg_hba.conf配置文件。
sudovim/etc/postgresql/14/main/pg_hba.conf
将此行附加到配置文件的末尾。这允许副本(139.144.169.79)使用replica_user.
hostreplicationreplica_user139.144.169.79/24md5
保存更改并关闭文件。重启PostgreSQL服务。
sudosystemctlrestartpostgresql
在副本节点可以开始从主节点复制数据之前,您需要创建主节点数据目录到副本数据目录的副本。为此,停止副本节点上的PostgreSQL服务。
sudosystemctlstoppostgresql
接下来,删除副本数据目录中的所有文件,以便从头开始并为主节点数据目录腾出空间。
sudorm-rv/var/lib/postgresql/14/main/
现在pg_basebackup?如图所示运行该实用程序,将数据从主节点复制到副本节点。
sudopg_basebackup-h194.195.208.82-Ureplica_user-Xstream-C-Sreplica_1-v-R-W-D/var/lib/postgresql/14/main/
让我们看一下命令中使用的选项:
之后,在副本上执行以下命令以将数据目录的所有权授予postgres用户。
sudochownpostgres-R/var/lib/postgresql/14/main/
现在,启动PostgreSQL服务器。副本现在将以热备用模式运行。
sudosystemctlstartpostgresql
至此,主节点的数据目录已经成功备份到副本上,副本开始双机热备。
剩下的部分是测试复制是否按预期工作。如果副本在热备模式下成功运行,那么它应该连接到主服务器上的主数据库集群。
要验证副本是否连接到主节点并且主节点正在流式传输,请登录到主服务器并切换到postgres?用户。
接下来,查询pg_stat_replication包含有关复制的重要信息的表。在此命令中,我们正在检索有关副本的IP地址和主服务器状态的信息。
FROMpg_stat_replication;
您应该得到以下输出确认您的设置正在运行。
为了证实这一点,我们将创建一个测试数据库并添加一个包含几条记录的表,然后验证数据库是否已在副本上复制。
我们将创建一个名为students.
CREATEDATABASEstudents_db;
Youarenowconnectedtodatabase"students_db"asuser"postgres".
进入数据库后,创建一个student_details使用以下模式调用的表。
CREATETABLEstudent_details(first_nameVARCHAR(15),last_nameVARCHAR(15),emailVARCHAR(40));
INSERTINTOstudent_details(first_name,last_name,email)
VALUES('Arthur','Spencer','arthurspencer@gmail.com');
您可以查询表以确认插入的记录,如图所示。
现在转到副本节点并切换到postgres?用户。
在shell上,验证刚才在主节点中创建的数据库是否存在。
您应该得到与您在主节点中创建的记录完全相同的记录,如下所示。
这就证明复制成功了!您可以继续在主服务器上添加更多记录,然后将这些记录复制或复制到副本节点。
在本教程中,我们了解了PostgreSQL提供的两种复制方法及其优缺点。我们更进一步,使用PostgreSQL逻辑模型创建了一个复制集群,并演示了从主节点到副本节点的数据复制。前往官方文档以更全面地了解PostgreSQL中的复制。
本文来源:国外服务器--如何设置PostgreSQL数据库复制(plsql复制数据库)
本文地址:https://www.idcbaba.com/guowai/4176.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



