如何将 PostgreSQL 数据目录移动到 Ubuntu 22.04 上的新位置

导言

数据库随着时间的推移而增长,有时会超过其原始文件系统的空间。当它们与操作系统的其余部分位于相同的分区上时,这可能会导致I/O的争论。

RAID,网络块存储和其他设备可以提供冗余并提高可扩展性以及其他理想功能。无论您是添加更多空间,评估优化性能的方法,还是希望利用其他存储功能,本教程都将指导您迁移PostgreSQL的数据目录。

先决条件

要完成本指南,您需要:

本教程中的例子将涉及将数据移动到安装在/mnt/volume_nyc1_01. .如果您在 DigitalOcean 上使用 Block Storage,请阅读我们关于如何创建和设置与 Droplet 一起使用的卷的文档,以指导您在继续本教程之前安装卷。

不管您使用什么底层存储,以下步骤都可以帮助您将数据目录移动到新位置。

步骤 1 — 移动 PostgreSQL 数据目录

在开始移动 PostgreSQL 的数据目录之前,让我们通过启动交互式 PostgreSQL 会话来验证当前位置。在以下命令中,psql是命令进入交互式监视器和-u postgres告诉sudo执行psqlpostgres作为系统的postgres用户:

 
  1. sudo -u postgres psql

打开 PostgreSQL 提示符后,使用以下命令显示当前数据目录:

 
  1. SHOW data_directory;
 

Output

data_directory ----------------------------- /var/lib/postgresql/14/main (1 row)

此输出确认 PostgreSQL 被配置为使用默认数据目录,/var/lib/postgresql/14/main所以这是你需要移动的目录。一旦您确认了系统上的目录,您可以关闭系统。psql提示通过运行\q元命令:

 
  1. \q

为确保数据的完整性,请在实际更改数据目录之前停止 PostgreSQL:

 
  1. sudo systemctl stop postgresql

systemctl不显示所有服务管理命令的结果。要验证您是否已成功停止服务,请使用以下命令:

 
  1. sudo systemctl status postgresql

输出应该告诉你PostgreSQL是inactive (dead)意味着它已被阻止:

 

Output

○ postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor> Active: inactive (dead) since Thu 2022-06-30 18:46:35 UTC; 27s ago Process: 4588 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 4588 (code=exited, status=0/SUCCESS) CPU: 1ms

现在 PostgreSQL 服务器不再运行,请将现有数据库目录复制到新位置。rsync. .使用-a标志保留权限和其他目录属性,而-v提供冗长的输出,以帮助您跟踪进度。你将开始rsyncpostgresql目录以模仿新位置的原始目录结构。通过创建postgresql挂载点目录中的目录和保留 PostgreSQL 用户的所有权,可以避免未来升级的权限问题。

Note:注意:请确保目录上没有尾随斜杠,如果您使用,可能会添加TAB完成。如果你包括一个落后的斜杠,rsync将目录的内容转储到挂载点,而不是复制目录本身。

版本目录,14, 不是严格必要的,因为你已经明确定义的位置在postgresql.conf文件,但遵循项目惯例肯定不会受到伤害,特别是如果将来需要运行多个版本的PostgreSQL:

 
  1. sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

副本完成后,将当前文件夹重命名为.bak扩展并保留它,直到您确认此举成功。这将有助于避免在新位置和旧位置具有类似名称的目录可能引起的混淆:

 
  1. sudo mv /var/lib/postgresql/14/main /var/lib/postgresql/14/main.bak

现在,您已准备好配置 PostgreSQL 以访问其新位置的数据目录。

步骤 2 — 指向新数据位置

默认情况下,data_directoryconfiguration 指令设置为/var/lib/postgresql/14/main/etc/postgresql/14/main/postgresql.conf档案。编辑此文件以反映新的数据目录:

 
  1. sudo nano /etc/postgresql/14/main/postgresql.conf

找到以data_directory并改变遵循的路径以反映新位置。在本教程的上下文中,更新的指令将写成:

/etc/postgresql/14/main/postgresql.conf

. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/14/main'
. . .

通过按 保存和关闭文件CTRL + X,Y,然后ENTER. .这是配置 PostgreSQL 以使用新数据目录位置所需的所有操作。在这一点上剩下的就是再次启动PostgreSQL服务,并检查它是否确实指向正确的数据目录。

步骤 3 - 重新启动 PostgreSQL

改变后data-directory指令在postgresql.conf文件,继续使用PostgreSQL服务器启动PostgreSQL服务器systemctl:

 
  1. sudo systemctl start postgresql

要确认 PostgreSQL 服务器是否成功启动,请再次使用systemctl:

 
  1. sudo systemctl status postgresql

如果服务启动正确,Active线会说active (exited)在命令的输出中:

 

Output

● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor> Active: active (exited) since Thu 2022-06-30 18:50:18 UTC; 3s ago Process: 4852 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 4852 (code=exited, status=0/SUCCESS) CPU: 1ms

最后,为了确保新数据目录确实在用中,请打开 PostgreSQL 命令提示符:

 
  1. sudo -u postgres psql

再次检查数据目录的值:

 
  1. SHOW data_directory;
 

Output

data_directory ---------------------------------------- /mnt/volume_nyc1_01/postgresql/14/main (1 row)

这证实了PostgreSQL正在使用新的数据目录位置。在此之后,花点时间确保您能够访问数据库并与内部数据进行交互。验证任何现有数据的完整性后,您可以删除备份数据目录:

 
  1. sudo rm -Rf /var/lib/postgresql/14/main.bak

这样一来,您就成功地将 PostgreSQL 数据目录移动到了新位置。

结论:

如果您已经跟进,您的数据库应该在新位置运行其数据目录,并且您已经完成了能够扩展存储的重要步骤。您可能还想查看 以了解如何创建服务器基础设施以帮助您扩展和优化 Web 应用程序。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值