159人参与 • 2024-08-04 • PostgreSQL
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社区欢迎并赞赏所有类型的贡献,期待您的加入!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论