备份恢复新体验!pgBackRest与IvorySQL的完美融合
pgBackRest作为PostgreSQL数据库的备份和还原工具,在软件架构上深度融合了功能与性能的双重考量。它不仅确保了数据的完整性与一致性,还提供了严密的安全防护,同时支持数据的高效压缩以及异步并行处理。今天,我们将聚焦pgBackRest与最新版本的IvorySQL3.1的简单应用,共同展示IvorySQL与PG生态工具的出色兼容性与实用效能。
#1 创建用户及目录
首先,我们需要创建一个名为“ivorysql”的普通用户,该用户将专门用于编译和使用IvorySQL以及pgBackRest,确保系统资源的使用与权限分配得到妥善管理。
useradd ivorysql passwd ivorysql
接下来,我们需要创建备份目录以及仓库、日志、配置等专用目录。
在本实例中,我们将采用自定义配置文件路径的方式来使用pgBackRest。
mkdir -p /home/ivorysql/backup mkdir -p /home/ivorysql/backup/repo mkdir -p /home/ivorysql/backup/log mkdir -p /home/ivorysql/backup/conf
#2 编译IvorySQL
注意事项:在执行./configure命令时,若系统提示需要安装ICU库,请确保执行以下命令以安装所需依赖,确保编译过程顺利进行。
yum install -y libicu-devel
首先,下载IvorySQL的源码文件包,随后执行编译和安装流程,确保IvorySQL能够顺利集成至您的系统中。
tar -zxvf IvorySQL-IvorySQL_3.1.tar.gz ./configure --prefix=`pwd`/install make && make install
编译完成后,为确保IvorySQL能够正确运行,我们需要设置相应的环境变量,以便系统能够正确识别并加载相关的配置和库文件。
vi ~/.bashrc export PATH=$PATH:/home/ivorysql/IvorySQL-IvorySQL_3.1/install/bin export LD_LIBRARY_PATH=/home/ivorysql/IvorySQL-IvorySQL_3.1/install/lib source ~/.bashrc
接下来,我们将编译pgBackRest。
wget https://github.com/pgbackrest/pgbackrest/archive/release/2.50.tar.gz tar -zxvf 2.50.tar.gz cd src && ./configure && make
随后,我们需要将编译完成的pgBackRest可执行文件复制到/usr/bin目录下。
cp /home/ivorysql/backup/pgbackrest /usr/bin/
#3 配置pgBackRest
创建pgBackRest的配置文件pgbackrest.conf
cd /home/ivorysql/backup/conf touch pgbackrest.conf vi pgbackrest.conf
配置文件内容如下:
[ivorysql] pg1-path=/home/ivorysql/IvorySQL-IvorySQL_3.1/install/data pg1-user=ivorysql pg1-port=5432 [global] repo1-block=y repo1-bundle=y repo1-path=/home/ivorysql/backup/repo repo1-cipher-pass=L8yY5t2uaAf6/+uHb0rEWBDZ+n5ZA9yIk3BxrtCTwEns7znjwpLb0ReIxcSHnqxg repo1-cipher-type=aes-256-cbc repo1-retention-full=2 repo1-retention-diff=1 log-path=/home/ivorysql/backup/log start-fast=y [global:archive-push] compress-level=3
其中主要参数如下:
-
pg1-path为当前数据库数据文件夹绝对路径
-
pg1-user为数据库用户,此处使用默认用户
-
pg1-port为数据库端口
-
repo-path为pgbackrest备份仓库路径
-
log-path为pgbackrest的日志路径
#4 配置数据库
(一)初始化数据库
initdb -D data
接下来,我们需要对ivorysql.conf配置文件进行修改。
#增加如下内容 archive_command = 'pgbackrest --pg-version-force=16 --config=/home/ivorysql/backup/conf/pgbackrest.conf --stanza=ivorysql archive-push %p' archive_mode = on hot_standby = on log_filename = 'postgresql.log' max_wal_senders = 3 wal_level = replica
请注意,由于IvorySQL对原有的pg_control文件进行了修改,因此我们需要在使用pgBackRest时添加--pg-version-force=16参数,以便绕过版本验证步骤,确保备份和恢复过程的顺利进行。
(二)启动数据库
pg_ctl -D data start
#5 备份操作
首先,我们需要创建存储节点,以存储IvorySQL的备份数据。在执行相关命令时,请务必添加--pg-version-force=16参数,以兼容IvorySQL对pg_control文件的修改,确保备份过程的正确性和顺利性。
pgbackrest --stanza=ivorysql stanza-create --config=/home/ivorysql/backup/conf/pgbackrest.conf --pg-version-force=16
(一)测试归档
首先,我们需要创建数据表并填充测试数据,随后执行切换日志文件的操作,以模拟数据库的正常使用场景,为后续备份和恢复操作提供必要的测试环境。
[ivorysql@localhost install]$ psql psql (16.1) Type "help" for help. ivorysql=# create table test(id int); CREATE TABLE ivorysql=# insert into test select generate_series(1,10000); INSERT 0 10000 ivorysql=# select pg_switch_wal(); pg_switch_wal 0/20BA9E0 (1 row)
(二)查看归档文件
[ivorysql@localhost ~]$ cd /home/ivorysql/backup/repo/archive/ivorysql/16-1/0000000100000000 [ivorysql@localhost 0000000100000000]$ ll total 3864 -rw-r-----. 1 ivorysql ivorysql 3694848 Mar 8 04:26 000000010000000000000001-bdac3cc50aa5da3dc4309046f40623fed9a2b379.gz -rw-r-----. 1 ivorysql ivorysql 254848 Mar 8 04:27 000000010000000000000002-62d76ca6d4d749b7d885621aafeee498775fde14.gz
(三)创建全量备份
[ivorysql@localhost ~]$ pgbackrest --stanza=ivorysql --type=full backup --config=/home/ivorysql/backup/conf/pgbackrest.conf --pg-version-force=16 --log-level-console=info 2024-03-08 04:32:12.989 P00 INFO: backup command begin 2.50: --config=/home/ivorysql/backup/conf/pgbackrest.conf --exec-id=4644-5c559805 --log-level-console=info --log-path=/home/ivorysql/backup/log --pg1-path=/home/ivorysql/IvorySQL-IvorySQL_3.1/install/data --pg1-port=5432 --pg1-user=ivorysql --pg-version-force=16 --repo1-block --repo1-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/home/ivorysql/backup/repo --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=ivorysql --start-fast --type=full 2024-03-08 04:32:13.697 P00 INFO: execute non-exclusive backup start: backup begins after the requested immediate checkpoint completes 2024-03-08 04:32:14.403 P00 INFO: backup start archive = 000000010000000000000006, lsn = 0/6000028 2024-03-08 04:32:14.403 P00 INFO: check archive for prior segment 000000010000000000000005 2024-03-08 04:32:16.500 P00 INFO: execute non-exclusive backup stop and wait for all WAL segments to archive 2024-03-08 04:32:16.700 P00 INFO: backup stop archive = 000000010000000000000006, lsn = 0/6000100 2024-03-08 04:32:16.703 P00 INFO: check archive for segment(s) 000000010000000000000006:000000010000000000000006 2024-03-08 04:32:16.715 P00 INFO: new backup label = 20240308-043213F 2024-03-08 04:32:16.751 P00 INFO: full backup size = 35.6MB, file total = 1292 2024-03-08 04:32:16.751 P00 INFO: backup command end: completed successfully (3763ms) 2024-03-08 04:32:16.751 P00 INFO: expire command begin 2.50: --config=/home/ivorysql/backup/conf/pgbackrest.conf --exec-id=4644-5c559805 --log-level-console=info --log-path=/home/ivorysql/backup/log --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/home/ivorysql/backup/repo --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=ivorysql 2024-03-08 04:32:16.756 P00 INFO: repo1: 16-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000003 2024-03-08 04:32:16.756 P00 INFO: expire command end: completed successfully (5ms)
(四)创建差异备份
[ivorysql@localhost ~]$ pgbackrest --stanza=ivorysql --type=diff backup --config=/home/ivorysql/backup/conf/pgbackrest.conf --pg-version-force=16 --log-level-console=info 2024-03-08 04:32:58.113 P00 INFO: backup command begin 2.50: --config=/home/ivorysql/backup/conf/pgbackrest.conf --exec-id=4653-761b3d49 --log-level-console=info --log-path=/home/ivorysql/backup/log --pg1-path=/home/ivorysql/IvorySQL-IvorySQL_3.1/install/data --pg1-port=5432 --pg1-user=ivorysql --pg-version-force=16 --repo1-block --repo1-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/home/ivorysql/backup/repo --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=ivorysql --start-fast --type=diff 2024-03-08 04:32:58.831 P00 INFO: last backup label = 20240308-043213F, version = 2.50 2024-03-08 04:32:58.831 P00 INFO: execute non-exclusive backup start: backup begins after the requested immediate checkpoint completes 2024-03-08 04:32:59.337 P00 INFO: backup start archive = 000000010000000000000008, lsn = 0/8000028 2024-03-08 04:32:59.337 P00 INFO: check archive for prior segment 000000010000000000000007 2024-03-08 04:33:00.520 P00 INFO: execute non-exclusive backup stop and wait for all WAL segments to archive 2024-03-08 04:33:00.721 P00 INFO: backup stop archive = 000000010000000000000008, lsn = 0/8000100 2024-03-08 04:33:00.723 P00 INFO: check archive for segment(s) 000000010000000000000008:000000010000000000000008 2024-03-08 04:33:00.734 P00 INFO: new backup label = 20240308-043213F_20240308-043258D 2024-03-08 04:33:00.764 P00 INFO: diff backup size = 8.3KB, file total = 1292 2024-03-08 04:33:00.764 P00 INFO: backup command end: completed successfully (2652ms) 2024-03-08 04:33:00.765 P00 INFO: expire command begin 2.50: --config=/home/ivorysql/backup/conf/pgbackrest.conf --exec-id=4653-761b3d49 --log-level-console=info --log-path=/home/ivorysql/backup/log --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/home/ivorysql/backup/repo --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=ivorysql 2024-03-08 04:33:00.768 P00 INFO: repo1: 16-1 no archive to remove 2024-03-08 04:33:00.768 P00 INFO: expire command end: completed successfully (3ms)
(五)增量备份
[ivorysql@localhost ~]$ pgbackrest --stanza=ivorysql --type=incr backup --config=/home/ivorysql/backup/conf/pgbackrest.conf --pg-version-force=16 --log-level-console=info 2024-03-08 04:33:24.955 P00 INFO: backup command begin 2.50: --config=/home/ivorysql/backup/conf/pgbackrest.conf --exec-id=4668-1454bb89 --log-level-console=info --log-path=/home/ivorysql/backup/log --pg1-path=/home/ivorysql/IvorySQL-IvorySQL_3.1/install/data --pg1-port=5432 --pg1-user=ivorysql --pg-version-force=16 --repo1-block --repo1-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/home/ivorysql/backup/repo --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=ivorysql --start-fast --type=incr 2024-03-08 04:33:25.673 P00 INFO: last backup label = 20240308-043213F_20240308-043258D, version = 2.50 2024-03-08 04:33:25.673 P00 INFO: execute non-exclusive backup start: backup begins after the requested immediate checkpoint completes 2024-03-08 04:33:26.379 P00 INFO: backup start archive = 00000001000000000000000A, lsn = 0/A000028 2024-03-08 04:33:26.379 P00 INFO: check archive for prior segment 000000010000000000000009 2024-03-08 04:33:27.519 P00 INFO: execute non-exclusive backup stop and wait for all WAL segments to archive 2024-03-08 04:33:27.726 P00 INFO: backup stop archive = 00000001000000000000000A, lsn = 0/A000100 2024-03-08 04:33:27.728 P00 INFO: check archive for segment(s) 00000001000000000000000A:00000001000000000000000A 2024-03-08 04:33:27.739 P00 INFO: new backup label = 20240308-043213F_20240308-043325I 2024-03-08 04:33:27.772 P00 INFO: incr backup size = 8.3KB, file total = 1292 2024-03-08 04:33:27.772 P00 INFO: backup command end: completed successfully (2818ms) 2024-03-08 04:33:27.772 P00 INFO: expire command begin 2.50: --config=/home/ivorysql/backup/conf/pgbackrest.conf --exec-id=4668-1454bb89 --log-level-console=info --log-path=/home/ivorysql/backup/log --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/home/ivorysql/backup/repo --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=ivorysql 2024-03-08 04:33:27.775 P00 INFO: repo1: 16-1 no archive to remove 2024-03-08 04:33:27.776 P00 INFO: expire command end: completed successfully (4ms)
(六)查看备份信息
[ivorysql@localhost ~]$ pgbackrest --stanza=ivorysql info --config=/home/ivorysql/backup/conf/pgbackrest.conf --log-level-console=info stanza: ivorysql status: ok cipher: aes-256-cbc db (current) wal archive min/max (16): 000000010000000000000004/00000001000000000000000A full backup: 20240308-043137F timestamp start/stop: 2024-03-08 04:31:37+08 / 2024-03-08 04:31:41+08 wal start/stop: 000000010000000000000004 / 000000010000000000000004 database size: 35.6MB, database backup size: 35.6MB repo1: backup size: 4.8MB full backup: 20240308-043213F timestamp start/stop: 2024-03-08 04:32:13+08 / 2024-03-08 04:32:16+08 wal start/stop: 000000010000000000000006 / 000000010000000000000006 database size: 35.6MB, database backup size: 35.6MB repo1: backup size: 4.8MB diff backup: 20240308-043213F_20240308-043258D timestamp start/stop: 2024-03-08 04:32:58+08 / 2024-03-08 04:33:00+08 wal start/stop: 000000010000000000000008 / 000000010000000000000008 database size: 35.6MB, database backup size: 8.3KB repo1: backup size: 480B backup reference list: 20240308-043213F incr backup: 20240308-043213F_20240308-043325I timestamp start/stop: 2024-03-08 04:33:25+08 / 2024-03-08 04:33:27+08 wal start/stop: 00000001000000000000000A / 00000001000000000000000A database size: 35.6MB, database backup size: 8.3KB repo1: backup size: 480B backup reference list: 20240308-043213F, 20240308-043213F_20240308-043258D
(七)验证
[ivorysql@localhost ~]$ pgbackrest --stanza=ivorysql verify --config=/home/ivorysql/backup/conf/pgbackrest.conf --log-level-console=info --verbose=y 2024-03-08 04:35:58.862 P00 INFO: verify command begin 2.50: --config=/home/ivorysql/backup/conf/pgbackrest.conf --exec-id=4719-18757686 --log-level-console=info --log-path=/home/ivorysql/backup/log --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/home/ivorysql/backup/repo --stanza=ivorysql --verbose 2024-03-08 04:35:59.441 P00 INFO: stanza: ivorysql status: ok archiveId: 16-1, total WAL checked: 7, total valid WAL: 7 missing: 0, checksum invalid: 0, size invalid: 0, other: 0 backup: 20240308-043137F, status: valid, total files checked: 1292, total valid files: 1292 missing: 0, checksum invalid: 0, size invalid: 0, other: 0 backup: 20240308-043213F, status: valid, total files checked: 1292, total valid files: 1292 missing: 0, checksum invalid: 0, size invalid: 0, other: 0 backup: 20240308-043213F_20240308-043258D, status: valid, total files checked: 1292, total valid files: 1292 missing: 0, checksum invalid: 0, size invalid: 0, other: 0 backup: 20240308-043213F_20240308-043325I, status: valid, total files checked: 1292, total valid files: 1292 missing: 0, checksum invalid: 0, size invalid: 0, other: 0 2024-03-08 04:35:59.441 P00 INFO: verify command end: completed successfully (580ms)
#6 总结
上述内容简要介绍了pgBackRest与IvorySQL的基础应用。由于IvorySQL对PostgreSQL原生的控制文件进行了修改,因此在执行各类备份操作时,我们需格外注意并采取相应的措施,以确保备份的完整性和准确性。
社区仓库:
https://github.com/IvorySQL/IvorySQL
IvorySQL社区欢迎并赞赏所有类型的贡献,期待您的加入!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为什么90%的人说医疗行业没有“大”数据?
随着医疗行业数据量的爆炸式增长,如何高效、准确地处理和调度这些数据成为了行业内的一大挑战。医疗数据处理不仅涉及到数据量巨大,还需要处理实时性高、安全性要求严格的任务。包括数据抽取(ETL)、实时数据处理、数据源管理、任务调度的灵活性和易用性等都是行业普遍面临的难题。 其中大数据工程师们往往遇到的问题包括但不限于以下方面: **数据源配置的灵活性与准确性:**在某些情况下,数据源配置不够灵活或准确,导致需要频繁进行手动调整,这在高频率的数据处理场景中尤为突出。例如,当保存任务后再次修改时,数据源类型和数据库的配置不一致问题,反映了在动态数据源管理方面的挑战。 ETL任务的简化:ETL(Extract, Transform, Load)任务的复杂性是医疗数据处理的一大难点。Apache DolphinScheduler通过提供友好的用户界面和灵活的任务配置,显著降低了ETL任务的复杂度,使得数据抽取、转换和加载过程变得更加高效和简单。 增量更新与配置管理:对于医疗数据而言,及时准确地处理增量更新至关重要。用户迫切需要能够有效管理配置文件、灵活处理增量更新和插入的工具。传统调度工具在这方面往...
- 下一篇
Apache Doris Variant 数据类型使用介绍及设计实现
在最新发布的 Apache Doris 2.1 新版本中,我们引入了全新的数据类型 Variant,对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列,彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。为了让大家快速学习和使用 Doris Variant 数据类型,我们为大家提供了实操演示视频,详细展示使用方式和性能表现。 半结构化数据是一种灵活多变的数据形式,不受固定结构限制,无需事先定义固定的表结构,为数据存储和分析提供了强大的灵活性及便捷性。常见的半结构化数据包括 XML、JSON、日志文件等。半结构化数据被广泛应用于以下场景: 电商平台可以利用半结构化数据来存储用户对产品的评价,这些评价包括文字、图片甚至视频。这种数据结构有助于进行复杂的情感分析和用户行为模式挖掘。 移动应用利用半结构化数据记录用户行为数据,随着新功能的引入,用户行为的属性可能会发生改变。半结构化数据能够灵活适应这些变化,无需频繁修改数据库结构。 车联网、物联网等场景可使用半结构化数据存储车辆传感器的实时信息,如速度、位置和油耗,提供高度灵活性以适应技术更...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19