作者简介
Granthana Biswas cybertec公司工程师。
译者简介
王志斌,从事数据库产品相关工作,主要致力于postgresql数据库高可用解决方案及云端产品化工作。
校对者简介
李鑫,任职于海能达通信股份有限公司,数据库开发高级工程师,致力于postgresql数据库在专网通信领域、公共安全领域的应用与推广。
安装pgbackrest:
在备份服务器上创建pgbackrest用户
sudo adduser --disabled-password --gecos "" pgbackrest
从包中安装需要的Perl包和pgBackRest或者安装以下方式手工安装:
sudo apt-get install libdbd-pg-perlsudo scp BUILD_HOST:/root/pgbackrest-release-2.14/src/pgbackrest usr/bin/sudo chmod 755 usr/bin/pgbackrest
在备份服务器上创建pgBackRest配置文件, 目录和仓库
sudo mkdir -p -m 770 var/log/pgbackrestsudo chown pgbackrest:pgbackrest var/log/pgbackrestsudo mkdir -p etc/pgbackrestsudo mkdir -p etc/pgbackrest/conf.dsudo touch etc/pgbackrest/pgbackrest.confsudo chmod 640 etc/pgbackrest/pgbackrest.confsudo chown pgbackrest:pgbackrest etc/pgbackrest/pgbackrest.confsudo mkdir -p var/lib/pgbackrestsudo chmod 750 /var/lib/pgbackrestsudo chown pgbackrest:pgbackrest /var/lib/pgbackrest
ssh-keygen
在备份服务器上使用pgbackrest用户:
sudo -u pgbackrest mkdir -m 750 /home/pgbackrest/.sshsudo -u pgbackrest ssh-keygen -f /home/pgbackrest/.ssh/id_rsa -t rsa -b 4096 -N ""
在数据库服务器上使用 postgres用户:
sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.sshsudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa -t rsa -b 4096 -N ""
在两个服务器之间交换公钥
在备份服务器上:
cat ~/.ssh/id_rsa.pub | ssh postgres@db1 "cat >> ~/.ssh/authorized_keys"
在数据库服务器上:
cat ~/.ssh/id_rsa.pub | ssh pgbackrest@pgbackup "cat >> ~/.ssh/authorized_keys"
测试无密码连接,命令如下:
root@pgbackup:~$ sudo -u pgbackrest ssh postgres@db1root@db1:~$ sudo -u postgres ssh pgbackrest@repository
配置
在备份服务器上,在pgBackRest配置文件中配置数据库主机和路径以及存储备份的存储库路径。我们已将数据库主机添加为“pg1-host”,以后可以将更多数据库主机添加为“pg2-host”依此类推。pg1-path也是如此。
cat /etc/pgbackrest/pgbackrest.conf[demo]pg1-host=db1pg1-path=/var/lib/postgresql/10/main[global]repo1-path=/var/lib/pgbackrestrepo1-retention-full=2start-fast=y
cat /etc/pgbackrest/pgbackrest.conf[demo]pg1-path=/var/lib/postgresql/10/main[global]log-level-file=detailrepo1-host=pgbackup
在数据库服务器上,更新postgresql.conf 文件,进行如下更改:
archive_command = 'pgbackrest --stanza=demo archive-push %p'archive_mode = onlisten_addresses = '*'log_line_prefix = ''max_wal_senders = 3wal_level = replica
现在重新启动PostgreSQL使配置文件更改生效。
在备份服务器上创建一节并检查它是否工作。没有结果意味着节已成功创建。
sudo -u pgbackrest pgbackrest --stanza=demo stanza-createsudo -u pgbackrest pgbackrest --stanza=demo check
检查数据库服务器上检查节配置是否正确:
sudo -u postgres pgbackrest --stanza=demo check
备份
sudo -u pgbackrest pgbackrest --stanza=demo backupsudo -u pgbackrest pgbackrest --stanza=demo infostanza: demostatus: okcipher: nonedb (current)wal archive min/max (10-1): 000000010000000000000007/000000010000000000000008full backup: 20190726-133657Ftimestamp start/stop: 2019-07-26 13:36:57 / 2019-07-26 13:37:07wal start/stop: 000000010000000000000007 / 000000010000000000000007database size: 22.5MB, backup size: 22.5MBrepository size: 2.6MB, repository backup size: 2.6MB
还原
postgres=# create database test;CREATE DATABASEpostgres=# \lList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+-----------------------postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres postgres=CTc/postgrestest | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |(4 rows)
再备份一次。因为这是第二次备份,我们没有指定类型,默认情况下,这将是增量备份:
sudo -u pgbackrest pgbackrest --stanza=demo backup
为了在数据库服务器上运行pgbackrest进行还原,请停止PostgreSQL:
sudo service postgresql stopsudo -u postgres pgbackrest --stanza=demo --delta restoresudo service postgresql start
如果现在检查数据库,将找不到测试数据库。这是因为备份是从第一次完全备份还原的。.
postgres=# \lList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+-----------------------postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres postgres=CTc/postgres(3 rows)
从增量备份中还原数据,在--recovery-option中使用recovery_target来运行还原命令:
sudo service postgresql stopsudo -u postgres pgbackrest --stanza=demo --delta restore \--recovery-option=recovery_target=immediatesudo service postgresql start
让我们现在检查一下数据库:
postgres=# \lList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+-----------------------postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgrestest | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |(4 rows)
我希望这个练习能帮助你开始使用pgBackRest!要了解更多命令,请访问这里的官方网站。
PostgreSQL中文社区欢迎广大技术人员投稿
投稿邮箱:press@postgres.cn
文章转载自PostgreSQL中文社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




