复制BriefCamPostgreSQL数据库
本节将详细介绍如何简化PostgreSQL数据库的复制。
先决条件、注意事项和约定
注意
从本文档的示例中粘贴命令时,请使用Windows PowerShell,而不是命令提示符(cmd)。
如果主服务器空间足够,则在尝试创建复制副本之前(使用pg_dump工具)执行数据库的完全备份。
记下主服务器的IP地址。在本文档的稍后部分,它将称为<主IP>。
记下辅助服务器的IP地址。在本文档的稍后部分,它将称为<secondaryIP>。
在PGSQL服务器中,以下三个安BriefCam装组件都需要设置为主机名或IP地址。确保它们都使用相同的方法(以确保一致性)。具体方式是在以下文件或设置中查找PostgreSQL
connectionString:VS服务器:
C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.configWeb服务:
C:\Program Files\BriefCam\WebServices\ProWebApi\Web.configQlik (RESEARCH):ODBC 64位条目(服务器字段)

建议在创建辅助服务器之前测试系统的完整功能。请确保记下您更改的参数的所有原始值。
在部署BriefCam服务器组件的所有服务器上,将hosts文件设置为指向主PostgreSQL数据库服务器–这将替代DNS。
BriefCam Administrator Console 在中,打开“环境设置”部分,并将“DB.LocalStorageAddress”和“VideoProductsPath”设置设置为使用主机名而不是IP地址。
PostgreSQL基本备份的速度根据环境设置(SSD/HDD/NIC速度)而有很大差异。根据经验,在虚拟环境中的ISCSI存储(10 Gbps链路HDD阵列)和1 Gbps网络NIC (vmxnet3)上,执行包含90 GBBriefCam数据的PostgreSQL数据库基本备份大约需要40分钟。
可以考虑在实际环境中测试速度,以便能够估计基本备份需要多长时间才能正确设置副本创建过程的时隙。
使用目
PostgreSQL_Data录的实际路径。默BriefCam认值为。C:\PostgreSQL_Data.但是,这在不同的设置中可能会有所不同(在本文档的稍后部分将使用默认路BriefCam径)。使用实际路
pgsql.exe径。默BriefCam认值为(C:\PostgreSQL\bin\psql.exe本主题稍后部分将使用默认路BriefCam径)。
在主服务器上的步骤
连接到主PostgreSQL服务器sql shell,并通过执行以下命令来验证配置文件和hba文件的位置:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres SHOW config_file; SHOW hba_file;以下是(基于
PostgreSQL_Data文件夹位置)预期输出的示例:C:/PostgreSQL_Data/postgresql.conf C:/PostgreSQL_Data/pg_hba.conf通过在PowerShell中执行以下命令来备份原始
config和hba文件:copy C:/PostgreSQL_Data/postgresql.conf C:/PostgreSQL_Data/postgresql.conf.$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))copy C:/PostgreSQL_Data/pg_hba.conf C:/PostgreSQL_Data/pg_hba.conf.$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))通过执行以下命令验证是否已创建备份文件:
dir C:/PostgreSQL_Data/*.conf.*预期输出为:
PS C:\Users\Administrator> dir C:/PostgreSQL_Data/*.conf.*
目录:C:\PostgreSQL_Data
模式LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/10/11 11:22 AM 4374 pg_hba.conf.20211117T100109Z
-a---- 2021/10/11 11:25 AM 23798 postgresql.conf.20211117T100344Z
将参数添加到文
postgres.conf件。具体方式为,在文本编辑器中打开该文件,并在文件末尾(Customized Options部分正下方)添加以下行:wal_level = replica hot_standby = on hot_standby_feedback = on full_page_writes = on max_wal_senders = 6 max_replication_slots = 6为复制创建角色/用户并设置其密码(不使用在示例命令中指定的密码)。
使用以下命令,通过PowerShell控制台连接到主PostgreSQL服务器的SQL shell:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres执行下面的命令(在上一步中打开的SQL shell中):
CREATE ROLE repl_user LOGIN REPLICATION PASSWORD 'replQwerty123';
将参数添加到文
pg_hba.conf件。具体方式为,在文本编辑器中打开该文件,并向该文件(在行#replication privilege下)添加以下行:# replication privilege. host replication repl_user <secondaryIP>/32 md5以管理员身份打开PowerShell并运行以下命令,在主PostgreSQL服务器上重新启动BriefCamPostgreSQL服务:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10" net start "BriefCamPostgreSQL - PostgreSQL Server 10"验证配置文件是否包含您对该
postgres.conf文件所做的更改,如下所示:使用以下命令,通过PowerShell控制台连接到主PostgreSQL服务器的SQL shell:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres使用以下命令,通过SQL shell打印出添加到PostgreSQL会议文件的自定义配置:
\pset pager off SELECT pg_read_file('postgresql.conf');确认您现在可以在输出底部看到添加到
postgresql.conf文件的行。
验证配置文件是否包含您对该
pg_hba.conf文件所做的更改,如下所示:通过执行以下命令连接到主PostgreSQL服务器的SQL Shell:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres
\pset pager off
选择pg_read_file('pg_hba.conf');
确认您现在可以在输出底部看到添加到
pg_hba.conf文件的行。
在次要服务器上的步骤
安装BriefCamPostgreSQL。
在辅助PostgreSQL服务器上,以管理员身份在PowerShell中运行以下命令以停止BriefCamPostgreSQL服务:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10"清理数据目录,如下所示:
重命名文
PostgreSQL_Data件夹。创建一个名为
PostgreSQL_Data,并在文件夹的“权限”选项卡中添加“完全控制”到“每个人”的新文件夹。
按如下所示从主服务器到次服务器执行PostgreSQL基本备份:
以管理员身份在PowerShell中执行以下命令:
c:\PostgreSQL\bin\pg_basebackup -h <primaryIP> -U repl_user --checkpoint=fast -D C:\PostgreSQL_Data -R TBD #--slot=standby1建议在可能很长的数据库备份期间停止所有服务器上的所有BriefCam服务。根据数据集的大小,可以在不停止所有服务的情况下执行此步骤。
在辅助PostgreSQL服务器上,以管理员身份在PowerShell中执行以下命令以启动BriefCamPostgreSQL服务:
net start "BriefCamPostgreSQL - PostgreSQL Server 10"
验证复制操作
使用以下命令,通过PowerShell控制台连接到主PostgreSQL服务器的SQL shell:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres通过在SQL shell中运行以下命令来检查延迟值(
write_lag值必须以00:00:00开头):SELECT write_lag,client_addr FROM pg_stat_replication ;以下是预期输出的示例:
postgres=#从pg_stat_replication中选择write_lag,client_addr;
write_lag | client_addr
-----------------+-------------
00:00:00.003972 | 10.30.30.30
(1行)
postgres=#
注意
此检查需要每天至少执行一次。
激活辅助服务器以用作主服务器
本节介绍在主服务器出现故障并需要恢复/迁移的情况下,激活次服务器作为PostgreSQL数据库主实例的过程。
更改所有BC服务器中的hosts文件以反映<secondaryIP>而非<primaryIP>。
通过在PowerShell控制台中运行以下命令(确保在管理员权限下运行PowerShell,并相应地编辑pg_ctl.exe文件和PostgreSQL_Data文件夹的路径),检查状态并将次要服务器PGSQL提升为主服务器:
c:\PostgreSQL\bin\pg_ctl.exe status -D ”C:\PostgreSQL_Data”
示例输出:
pg_ctl: server is running (PID: 5672) C:\PostgreSQL\bin\postgres.exe "-D" "C:\PostgreSQL_Data"c:\PostgreSQL\bin\pg_ctl.exe promote -D ”C:\PostgreSQL_Data”
示例输出:
waiting for server to promote.... done server promoted
在从属服务器上创建定期备份
Windows任务计划程序中的PG_DUMP脚本
创建包含数据库凭据的
%APPDATA%\postgresql\pgpass.conf文件(即:*:5432:*:dbadmin:Qwerty123)。有关详细信息,请参阅:https://www.postgresql.org/docs/10/libpq-pgpass.html和https://www.postgresql.org/docs/10/libpq-envars.html(外部链接)。如果上述操作不起作用,可以在执行行上指定脚本的密码:
$env:PGPASSWORD='Qwerty123' ;& c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d briefcam -f e:\PostgresBackups\db_briefcam-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).tar为备份文件创建文件夹,例如:
E:\PostgresBackups\。为备份脚本文件创建文件夹,例如:
E:\PostgresBackupScripts\。在以下位置创建备份脚本:
E:\PostgresBackupScripts\backup.ps1使用如下所示的三个命令:c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d postgres -f e:\PostgresBackups\db_postgres-$((get-date)。ToUniversalTime()。ToString("yyymddThhMmssz")。tar
c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d briefcam -f e:\PostgresBackups\db_briefcam-$((get-date)。ToUniversalTime()。ToString("yyyyMddThhMmssz")。tar
#ls -file E:\PostgresBackups\db*.tar | 其中{(get-date) - $_.creationtime -gt 15.} | Remove-Item –Verbose
* 上述第3个命令应根据所需的备份保留期限进行调整,方法是删除行开头的“#”符号,然后修改数字15,因为它代表倒退的天数。例如,如果要将脚本配置为删除超过7天的所有文件,则必须将数字15更改为7。
通过将-gt设置为0来测试备份的创建和旧文件的删除,并在Windows cmd中运行以下命令:
powershell.exe e:\PostgresBackupScripts\backup.ps1
此操作将删除创建的所有文件。
调整备份的保留期限,如上面步骤4底部所述。
将备份脚本添加到Windows任务计划程序,如下所示:
将程序/脚本字段设置为以下路径:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
在添加变量字段中设置以下内容:
E:\PostgresBackupScripts\backup.ps1
相应地设置触发器和时间。

将任务设置为运行,无论用户是否登录并保存密码。

在测试服务器上,检查文件是否可恢复。这个测试应该成为你日常工作的一部分。
以下是restore命令的示例:
C:\PostgreSQL\bin\pg_restore.exe -c -v -U dbadmin -d briefcam -F t e:\PostgresBackups\db_briefcam-20211122T122052Z.tar
该参数执-c行放置和创建。有关其他选项,请参阅:
“C:\PostgreSQL\bin\pg_restore.exe --help”
修复后还原至主服务器
如果您由于主服务器出现问题而使用次服务器,本节将介绍如何在问题修复后恢复到主服务器。
注意
以下过程的详细信息可能会因主服务器遭遇的故障类型而异。要考虑最严重的情况(主服务器完全崩溃),以下步骤包括全新安装。
从头安装操作系统。
在当前主服务器上执行“主服务器上的步骤”部分中的步骤。
考虑到重新安装的服务器现在是技术上的“次要”实例,在服务器上执行下面部分中所述的所有操作:
在用作主服务器的服务器上停止PostgreSQL服务。
验证系BriefCam统是否工作正常。
在用作主服务器的服务器上执行创建复制副本的步骤。