导言
数据库随着时间的推移而增长,有时会超过其原始文件系统的空间。当它们与操作系统的其余部分位于相同的分区上时,这可能会导致I/O的争论。
RAID,网络块存储和其他设备可以提供冗余并提高可扩展性以及其他理想功能。无论您是添加更多空间,评估优化性能的方法,还是希望利用其他存储功能,本教程都将指导您迁移PostgreSQL的数据目录。
先决条件
要完成本指南,您需要:
-
Ubuntu 22.04 服务器,具有非 root 用户
sudo特权。您可以在我们的初始服务器设置与Ubuntu 22.04指南中了解有关如何设置具有这些权限的用户的更多信息。 -
PostgreSQL 安装在您的服务器上。如果您尚未设置此设置,Ubuntu 22.04 指南上的如何安装和使用 PostgreSQL 可以为您提供帮助。
本教程中的例子将涉及将数据移动到安装在/mnt/volume_nyc1_01. .如果您在 DigitalOcean 上使用 Block Storage,请阅读我们关于如何创建和设置与 Droplet 一起使用的卷的文档,以指导您在继续本教程之前安装卷。
不管您使用什么底层存储,以下步骤都可以帮助您将数据目录移动到新位置。
步骤 1 — 移动 PostgreSQL 数据目录
在开始移动 PostgreSQL 的数据目录之前,让我们通过启动交互式 PostgreSQL 会话来验证当前位置。在以下命令中,psql是命令进入交互式监视器和-u postgres告诉sudo执行psqlpostgres作为系统的postgres用户:
sudo -u postgres psql
打开 PostgreSQL 提示符后,使用以下命令显示当前数据目录:
SHOW data_directory;
Output
data_directory ----------------------------- /var/lib/postgresql/14/main (1 row)
此输出确认 PostgreSQL 被配置为使用默认数据目录,/var/lib/postgresql/14/main所以这是你需要移动的目录。一旦您确认了系统上的目录,您可以关闭系统。psql提示通过运行\q元命令:
\q
为确保数据的完整性,请在实际更改数据目录之前停止 PostgreSQL:
sudo systemctl stop postgresql
systemctl不显示所有服务管理命令的结果。要验证您是否已成功停止服务,请使用以下命令:
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提供冗长的输出,以帮助您跟踪进度。你将开始rsync从postgresql目录以模仿新位置的原始目录结构。通过创建postgresql挂载点目录中的目录和保留 PostgreSQL 用户的所有权,可以避免未来升级的权限问题。
Note:注意:请确保目录上没有尾随斜杠,如果您使用,可能会添加TAB完成。如果你包括一个落后的斜杠,rsync将目录的内容转储到挂载点,而不是复制目录本身。
版本目录,14, 不是严格必要的,因为你已经明确定义的位置在postgresql.conf文件,但遵循项目惯例肯定不会受到伤害,特别是如果将来需要运行多个版本的PostgreSQL:
sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01
副本完成后,将当前文件夹重命名为.bak扩展并保留它,直到您确认此举成功。这将有助于避免在新位置和旧位置具有类似名称的目录可能引起的混淆:
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档案。编辑此文件以反映新的数据目录:
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:
sudo systemctl start postgresql
要确认 PostgreSQL 服务器是否成功启动,请再次使用systemctl:
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 命令提示符:
sudo -u postgres psql
再次检查数据目录的值:
SHOW data_directory;
Output
data_directory ---------------------------------------- /mnt/volume_nyc1_01/postgresql/14/main (1 row)
这证实了PostgreSQL正在使用新的数据目录位置。在此之后,花点时间确保您能够访问数据库并与内部数据进行交互。验证任何现有数据的完整性后,您可以删除备份数据目录:
sudo rm -Rf /var/lib/postgresql/14/main.bak
这样一来,您就成功地将 PostgreSQL 数据目录移动到了新位置。
结论:
如果您已经跟进,您的数据库应该在新位置运行其数据目录,并且您已经完成了能够扩展存储的重要步骤。您可能还想查看 以了解如何创建服务器基础设施以帮助您扩展和优化 Web 应用程序。
495

被折叠的 条评论
为什么被折叠?



