介绍
数据库随着时间的推移而增长,有时超过了原始文件系统的空间,当它们位于与其他操作系统相同的分区上时,这可能会导致 I/O 争议。
RAID、网络区块存储和其他设备可以提供冗余性和提高可扩展性,以及其他可取的功能. 无论您是添加更多的空间、评估优化性能的方法,还是希望利用其他存储功能,本教程都将引导您迁移PostgreSQL的数据目录。
前提条件
要完成本指南,您将需要:
- 具有
sudo
特权的非root用户的Ubuntu 20.04服务器. 您可以了解更多关于如何设置具有这些特权的用户在我们的 初始服务器设置与Ubuntu 20.04 指南。 - PostgreSQL 安装在您的服务器上. 如果您尚未设置此功能,则 如何在Ubuntu 20.04上安装和使用 PostgreSQL 指南可以帮助您。
整个教程中的示例将涉及将数据移动到安装在 /mnt/volume_nyc1_01
的区块存储设备. 如果您在DigitalOcean上使用区块存储,请阅读我们在 如何创建和设置用于Dropplets的卷上的文档,以指导您在继续本教程之前安装您的卷。
然而,无论您使用什么基础存储,以下步骤可以帮助您将数据目录移动到一个新的位置。
步骤 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/12/main
5(1 row)
此输出确认 PostgreSQL 已配置为使用默认数据目录 /var/lib/postgresql/12/main
,所以这就是您需要移动的目录。
1\q
要确保数据的完整性,请在实际对数据目录进行更改之前停止 PostgreSQL:
1sudo systemctl stop postgresql
「systemctl」不會顯示所有服務管理指令的結果. 若要確定您已成功停止服務,請使用下列指令:
1sudo systemctl status postgresql
输出应该告诉你 PostgreSQL 是不活跃(死亡)
的,这意味着它已经停止了:
1[secondary_label Output]
2● postgresql.service - PostgreSQL RDBMS
3Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor pr>
4Active: inactive (dead) since Thu 2022-06-30 16:55:53 UTC; 12s ago
5Process: 13058 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
6Main PID: 13058 (code=exited, status=0/SUCCESS)
现在 PostgreSQL 服务器不再运行,请将现有数据库目录复制到新的位置,使用rsync
。使用-a
旗帜将保留权限和其他目录属性,而-v
则提供语音输出,以帮助您跟踪进展。您将从postgresql
目录开始rsync
,以模仿新位置的原始目录结构。
<$>[注]
注: 请确保目录上没有后续缩短,如果使用TAB
完成,则可能会添加。
版本目录12
并不严格,因为您在postgresql.conf
文件中明确定义了位置,但遵循项目惯例肯定不会伤害,特别是如果将来需要运行多个版本的PostgreSQL:
1sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01
一旦副本完成,将当前文件夹重命名为 .bak
扩展,并将其保留,直到您确认移动成功。
1sudo mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.bak
现在,您已经准备好配置 PostgreSQL 以便在新的位置访问数据目录。
步骤 2 – 指向新数据位置
默认情况下,data_directory
配置指令设置为/var/lib/postgresql/12/main
在/etc/postgresql/12/main/postgresql.conf
文件中。
1sudo nano /etc/postgresql/12/main/postgresql.conf
查找从data_directory
开始的行,然后更改下面的路径以反映新的位置。
1[label /etc/postgresql/12/main/postgresql.conf ]
2. . .
3data_directory = '/mnt/volume_nyc1_01/postgresql/12/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● postgresql.service - PostgreSQL RDBMS
3 Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor pr>
4 Active: active (exited) since Thu 2022-06-30 16:58:17 UTC; 2s ago
5 Process: 13143 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
6 Main PID: 13143 (code=exited, status=0/SUCCESS)
最后,要确保新数据目录确实在使用,请打开 PostgreSQL 命令提示:
1sudo -u postgres psql
再次检查数据目录的值:
1SHOW data_directory;
1[secondary_label Output]
2 data_directory
3-----------------------------------------
4/mnt/volume_nyc1_01/postgresql/12/main
5(1 row)
这确认了PostgreSQL正在使用新的数据目录位置,然后再花一点时间确保您能够访问您的数据库,并与内部数据进行交互,一旦验证了任何现有数据的完整性,您可以删除备份数据目录:
1sudo rm -Rf /var/lib/postgresql/12/main.bak
通过此,您已成功将您的 PostgreSQL 数据目录迁移到新的位置。
结论 :
如果您遵循了这些步骤,您的数据库应该在新位置运行其数据目录,并且您已经完成了一个重要步骤,以便能够扩展您的存储空间。