作者简介
Granthana Biswas cybertec公司工程师。
译者简介
王志斌,从事数据库产品相关工作,主要致力于postgresql数据库高可用解决方案及云端产品化工作。
校对者简介
李鑫,任职于海能达通信股份有限公司,数据库开发高级工程师,致力于postgresql数据库在专网通信领域、公共安全领域的应用与推广。
在上一篇关于pgBackRest的文章中,我们了解了如何安装和设置pgBackRest,并且为PostgreSQL进行一次备份。这是一个非常基本的单服务器设置,只是为了掌握该工具的窍门。在生产环境中不推荐使用这种操作,因为不建议在运行数据库的同一服务器上执行备份(或者说不起作用)。
所以:让我们熟悉如何使用pgbackback设置远程备份服务器,以及如何从备份服务器执行完整备份和增量备份,以及如何在数据库服务器上进行恢复。
我们需要两台服务器。命令如下:
1. 备份服务器
2. 数据库服务器
安装pgbackrest:
我们需要安装pgBackRest到数据库服务器和备份服务器上。确定你安装了相同的版本。.
对于数据库服务器,请按照我上一篇文章中的安装步骤进行操作。备份服务器的步骤略有不同,因为创建一个单独的用户来拥有存储库是更好的做法。
在备份服务器上创建pgbackrest用户
sudo adduser --disabled-password --gecos "" pgbackrest
从包中安装需要的Perl包和pgBackRest或者安装以下方式手工安装:
sudo apt-get install libdbd-pg-perl
sudo 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/pgbackrest
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown pgbackrest:pgbackrest /var/lib/pgbackrest
现在我们可以开始启用数据库服务器和备份服务器之间的通信了。pgBackRest需要一个无密码的SSH连接。
我们可以通过使用命令生成SSH身份验证密钥文件来实现这一点
ssh-keygen
在备份服务器上使用pgbackrest用户:
sudo -u pgbackrest mkdir -m 750 /home/pgbackrest/.ssh
sudo -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/.ssh
sudo -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@db1
root@db1:~$ sudo -u postgres ssh pgbackrest@repository
配置
在备份服务器上,在pgBackRest配置文件中配置数据库主机和路径以及存储备份的存储库路径。我们已将数据库主机添加为“pg1-host”,以后可以将更多数据库主机添加为“pg2-host”依此类推。pg1-path也是如此。
cat /etc/pgbackrest/pgbackrest.conf
[demo]
pg1-host=db1
pg1-path=/var/lib/postgresql/10/main
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
start-fast=y
Start Fast选项(--start-fast) 强制在快速备份的时候使用检查点。否则,备份将在下一个常规检查点之后启动。
在数据库服务器上,在pgBackRest配置文件中配置数据库路径和备份主机,如下所示:.
cat /etc/pgbackrest/pgbackrest.conf
[demo]
pg1-path=/var/lib/postgresql/10/main
[global]
log-level-file=detail
repo1-host=pgbackup
在数据库服务器上,更新postgresql.conf 文件,进行如下更改:
archive_command = 'pgbackrest --stanza=demo archive-push %p'
archive_mode = on
listen_addresses = '*'
log_line_prefix = ''
max_wal_senders = 3
wal_level = replica
现在重新启动PostgreSQL使配置文件更改生效。
在备份服务器上创建一节并检查它是否工作。没有结果意味着节已成功创建。
sudo -u pgbackrest pgbackrest --stanza=demo stanza-create
sudo -u pgbackrest pgbackrest --stanza=demo check
检查数据库服务器上检查节配置是否正确:
sudo -u postgres pgbackrest --stanza=demo check
备份
安装就绪后,让我们从备份服务器上进行第一次远程备份。默认备份是增量备份,但第一次备份始终是完全备份。
sudo -u pgbackrest pgbackrest --stanza=demo backup
sudo -u pgbackrest pgbackrest --stanza=demo info
stanza: demo
status: ok
cipher: none
db (current)
wal archive min/max (10-1): 000000010000000000000007/000000010000000000000008
full backup: 20190726-133657F
timestamp start/stop: 2019-07-26 13:36:57 / 2019-07-26 13:37:07
wal start/stop: 000000010000000000000007 / 000000010000000000000007
database size: 22.5MB, backup size: 22.5MB
repository size: 2.6MB, repository backup size: 2.6MB
您可以在备份路径下找到创建的路径和文件。
还原
很容易执行一个全量备份。让我们看一些增量备份和恢复的示例:
在数据库服务器上创建一个测试数据库:
postgres=# create database test;
CREATE DATABASE
postgres=# \l
List of databases
Name | 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/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres postgres=CTc/postgres
test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)
再备份一次。因为这是第二次备份,我们没有指定类型,默认情况下,这将是增量备份:
sudo -u pgbackrest pgbackrest --stanza=demo backup
为了在数据库服务器上运行pgbackrest进行还原,请停止PostgreSQL:
sudo service postgresql stop
sudo -u postgres pgbackrest --stanza=demo --delta restore
sudo service postgresql start
如果现在检查数据库,将找不到测试数据库。这是因为备份是从第一次完全备份还原的。.
postgres=# \l
List of databases
Name | 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/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres postgres=CTc/postgres
(3 rows)
从增量备份中还原数据,在--recovery-option中使用recovery_target来运行还原命令:
sudo service postgresql stop
sudo -u postgres pgbackrest --stanza=demo --delta restore \
--recovery-option=recovery_target=immediate
sudo service postgresql start
让我们现在检查一下数据库:
postgres=# \l
List of databases
Name | 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/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)
我希望这个练习能帮助你开始使用pgBackRest!要了解更多命令,请访问这里的官方网站。
请点击文章底部“阅读原文”查看原文内容!
PostgreSQL中文社区欢迎广大技术人员投稿
投稿邮箱:press@postgres.cn
https://zulin.tiancebbs.cn/sh/1265.html https://aihuishou.tiancebbs.cn/sh/1292.html https://huqiuqusz.tiancebbs.cn/qths/464711.html https://zulin.tiancebbs.cn/sh/4856.html https://aihuishou.tiancebbs.cn/sh/4119.html https://www.tiancebbs.cn/ershouwang/467756.html https://su.tiancebbs.cn/hjzl/459492.html https://sy.tiancebbs.cn/qths/463146.html https://zulin.tiancebbs.cn/sh/533.html https://changshushi.tiancebbs.cn/hjzl/458556.html https://aihuishou.tiancebbs.cn/sh/2211.html https://jx.tiancebbs.cn/qths/474094.html https://pds.tiancebbs.cn/qths/474031.html https://zy.tiancebbs.cn/qths/462144.html https://zulin.tiancebbs.cn/sh/3113.html https://zulin.tiancebbs.cn/sh/3840.html https://ha.tiancebbs.cn/qths/474091.html
吴承恩是哪个朝代:https://www.nanss.com/wenti/18955.html 反问句:https://www.nanss.com/xuexi/20637.html 洋酒的种类:https://www.nanss.com/shenghuo/20033.html 海底两万里好句:https://www.nanss.com/xuexi/20247.html 产业研究:https://www.nanss.com/gongzuo/20504.html 有意思的名字:https://www.nanss.com/mingcheng/20575.html 中华魂征文:https://www.nanss.com/xuexi/18714.html 吃苦耐劳的精神:https://www.nanss.com/gongzuo/20474.html 未时是几点到几点钟:https://www.nanss.com/jiaju/20562.html 社会稳定风险评估:https://www.nanss.com/shenghuo/19991.html 产业研究:https://www.nanss.com/gongzuo/20504.html 参赛口号:https://www.nanss.com/yulu/20222.html 安全月总结:https://www.nanss.com/gongzuo/19332.html 自评报告:https://www.nanss.com/gongzuo/18766.html 小学五年级班主任工作总结:https://www.nanss.com/gongzuo/20550.html 实习报告前言:https://www.nanss.com/xuexi/19310.html 市场部工作计划:https://www.nanss.com/gongzuo/20546.html 小学生写老师的作文:https://www.nanss.com/xuexi/20104.html 中国最大淡水湖:https://www.nanss.com/shenghuo/18547.html 家庭心理学:https://www.nanss.com/yuer/20603.html 游戏家族名字大全:https://www.nanss.com/mingcheng/19216.html 人生的意义:https://www.nanss.com/yuedu/20482.html 小投资项目:https://www.nanss.com/shenghuo/20703.html 自愿离婚协议书:https://www.nanss.com/shenghuo/20106.html 房屋出租广告:https://www.nanss.com/shenghuo/19367.html 感人小故事:https://www.nanss.com/yuedu/20373.html 英语励志名言:https://www.nanss.com/yulu/18830.html 红磷在空气中燃烧的现象:https://www.nanss.com/xuexi/18970.html 安慰逝者家属暖心的话:https://www.nanss.com/yulu/20259.html 组织生活个人对照检查材料:https://www.nanss.com/gongzuo/20051.html