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

介绍

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

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

前提条件

要完成本指南,您将需要:

  • 具有sudo特权的非 root 用户的 Ubuntu 18.04 服务器. 您可以在我们的 Initial Server Setup with Ubuntu 18.04 指南中了解更多有关如何设置具有这些特权的用户。
  • PostgreSQL 安装在您的服务器上。

在本示例中,我们将数据移动到安装在 /mnt/volume_nyc1_01 的区块存储设备中。

然而,无论您使用什么基础存储,以下步骤可以帮助您将数据目录移动到一个新的位置。

步骤 1 – 移动 PostgreSQL 数据目录

在我们开始移动 PostgreSQL 的数据目录之前,让我们通过启动一个交互式 PostgreSQL 会话来验证当前位置。在下面的命令中,psql是输入交互式显示器的命令,而-u postgres则告诉sudo作为系统的 postgres用户执行psql:

1sudo -u postgres psql

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

1SHOW data_directory;
1[secondary_label Output]
2       data_directory       
3------------------------------
4/var/lib/postgresql/10/main
5(1 row)

此输出确认 PostgreSQL 已配置为使用默认数据目录, /var/lib/postgresql/10/main,所以这就是我们需要移动的目录。

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

1sudo systemctl stop postgresql

「systemctl」不會顯示所有服務管理指令的結果. 若要確定您已成功停止服務,請使用下列指令:

1sudo systemctl status postgresql

输出的最后一行应该告诉你 PostgreSQL 已经停止了:

1[secondary_label Output]
2. . .
3Jul 12 15:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.

现在 PostgreSQL 服务器关闭了,我们将现有的数据库目录复制到新的位置,使用rsync。使用-a旗帜保留了权限和其他目录属性,而-v提供了无语的输出,以便您可以跟踪进展。我们将从postgresql目录开始rsync,以模仿新位置的原始目录结构。通过在安装点目录中创建该postgresql目录,并保留 PostgreSQL 用户的所有权,我们可以避免未来的升级的权限问题。

<$>[注] 注: 请确保目录上没有后续缩减,如果您使用 tab completion 将其添加。

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

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

一旦该副本完成,我们将以.bak扩展名更名当前文件夹,并保留它,直到我们确认移动成功,这将有助于避免在新位置和旧位置中使用相同名称的目录引起的混淆:

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

现在,我们已经准备好配置PostgreSQL,以便在新的位置访问数据目录。

步骤 2 – 指向新数据位置

默认情况下,data_directory设置为/var/lib/postgresql/10/main/etc/postgresql/10/main/postgresql.conf文件中。

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

查找从data_directory开始的行,然后更改下面的路径以反映新位置。

1[label /etc/postgresql/10/main/postgresql.conf ]
2. . .
3data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
4. . .

保存并关闭文件,按CTRL + X,Y,然后ENTER。这就是你需要做的,以配置PostgreSQL以使用新的数据目录位置。

步骤 3 – 重新启动 PostgreSQL

在postgresql.conf文件中更改数据目录指令后,继续使用systemctl启动PostgreSQL服务器:

1sudo systemctl start postgresql

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

1sudo systemctl status postgresql

如果该服务正确启动,则将在该命令输出的末尾看到下列行:

1[secondary_label Output]
2. . .
3Jul 12 15:45:01 ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
4. . .

最后,要确保新数据目录确实在使用,请打开 PostgreSQL 命令提示。

1sudo -u postgres psql

再次检查数据目录的值:

1SHOW data_directory;
1[secondary_label Output]
2            data_directory
3-----------------------------------------
4/mnt/volume_nyc1_01/postgresql/10/main
5(1 row)

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

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

通过此,您已成功将您的 PostgreSQL 数据目录迁移到新的位置。

结论 :

如果您遵循了这些步骤,您的数据库应该在新位置运行其数据目录,并且您已经完成了一个重要步骤,以便能够扩展您的存储空间。

Published At
Categories with 技术
comments powered by Disqus