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

无论您是添加更多空间,评估优化性能的方法,还是希望利用其他存储功能,本教程都将指导您在Ubuntu 18.04服务器上重新定位PostgreSQL的数据目录。

介绍

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

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

先决条件

要完成本指南,您需要:

在此示例中,我们将数据移动到安装在/mnt/volume_nyc1_01的块存储设备。 如果您在DigitalOcean上使用Block Storage, 本指南可帮助您在继续本教程之前安装卷。

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

第1步 - 移动PostgreSQL数据目录

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

sudo -u postgres psql

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

SHOW data_directory;
       data_directory       
------------------------------
/var/lib/postgresql/10/main
(1 row)

此输出确认PostgreSQL配置为使用默认数据目录/var/lib/postgresql/10/main ,因此这是我们需要移动的目录。 确认系统上的目录后,键入\q并按ENTER以关闭PostgreSQL提示符。

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

sudo systemctl stop postgresql

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

sudo systemctl status postgresql

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

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

现在PostgreSQL服务器已关闭,我们将使用rsync将现有数据库目录复制到新位置。 使用-a标志保留权限和其他目录属性,而-v提供详细输出,以便您可以跟踪进度。 我们将从postgresql目录启动rsync ,以模仿新位置中的原始目录结构。 通过在mount-point目录中创建postgresql目录并保留PostgreSQL用户的所有权,我们可以避免将来升级的权限问题。

注意:确保目录上没有尾部斜杠,如果使用制表符完成,则可以添加斜杠。 如果包含尾部斜杠, rsync会将目录的内容转储到挂载点,而不是复制目录本身。

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

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

复制完成后,我们将使用.bak扩展名重命名当前文件夹并保留,直到我们确认移动成功为止。 这将有助于避免因在新旧位置具有类似命名的目录而引起的混淆:

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

现在我们准备配置PostgreSQL来访问新位置的数据目录。

第2步 - 指向新数据位置

默认情况下, data_directory/etc/postgresql/10/main/postgresql.conf文件中设置为/var/lib/postgresql/10/main 编辑此文件以反映新数据目录:

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

找到以data_directory开头的行,并更改后面的路径以反映新位置。 在本教程的上下文中,updated指令将如下所示:

/etc/postgresql/10/main/postgresql.conf
. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .

CTRL + XY ,然后按ENTER保存并关闭文件。 这就是配置PostgreSQL以使用新数据目录位置所需的全部操作。 此时剩下的就是再次启动PostgreSQL服务并检查它是否确实指向了正确的数据目录。

第3步 - 重新启动PostgreSQL

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

sudo systemctl start postgresql

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

sudo systemctl status postgresql

如果服务正确启动,您将在此命令的输出结尾处看到以下行:

. . .
Jul 12 15:45:01  ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
. . .

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

sudo -u postgres psql

再次检查数据目录的值:

SHOW data_directory;
            data_directory
-----------------------------------------
/mnt/volume_nyc1_01/postgresql/10/main
(1 row)

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

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

有了这个,您已成功将PostgreSQL数据目录移动到新位置。

结论:

如果您已经跟进,那么您的数据库应该在新位置运行其数据目录,并且您已经完成了向能够扩展存储的重要一步。 您可能还需要查看5个针对Web应用程序的通用服务器设置,以获取有关如何创建服务器基础结构以帮助您扩展和优化Web应用程序的建议。