介绍
数据库随着时间的推移而增长,有时超过了原始文件系统的空间。当它们位于与其他操作系统相同的分区时,您也可以运行 I/O 争议。RAID、网络块存储和其他设备可以提供冗余和其他可取的功能。无论您是添加更多的空间、评估优化性能的方法,还是想利用其他存储功能,本教程将指导您迁移 PostgreSQL 数据目录。
前提条件
要完成本指南,您将需要:
- ** 具有
sudo
特权的非根用户的 Ubuntu 16.04 服务器. 您可以了解更多关于如何设置具有这些特权的用户在我们的 初始服务器设置与 Ubuntu 16.04 指南. - ** PostgreSQL 服务器**. 如果您还没有设置一个,则 如何安装和使用 PostgreSQL 在 Ubuntu 16.04 指南可以帮助您。
在本示例中,我们将数据移动到安装在 /mnt/volume-nyc1-01
的区块存储设备中。
无论您使用什么基础存储,以下步骤可以帮助您将数据目录移动到新的位置。
步骤 1 – 移动 PostgreSQL 数据目录
为了准备移动 PostgreSQL 的数据目录,让我们通过启动一个交互式 PostgreSQL 会话来验证当前位置。在下面的行中,psql
是输入交互式显示器的命令,而-u postgres
则告诉 sudo 作为系统的 postgres 用户执行psql
:
1sudo -u postgres psql
输入显示器后,选择数据目录:
1SHOW data_directory;
1[secondary_label Output]
2 data_directory
3------------------------------
4/var/lib/postgresql/9.5/main
5(1 row)
此输出确认 PostgreSQL 已配置为使用默认数据目录, /var/lib/postgresql/9.5/main
,所以这就是我们需要移动的目录。
为了确保数据的完整性,我们将在实际更改数据目录之前关闭 PostgreSQL:
1sudo systemctl stop postgresql
「systemctl」不會顯示所有服務管理指令的結果. 若要確認您成功,請使用下列指令:
1sudo systemctl status postgresql
您可以确认已关闭,如果输出的最后一行告诉您服务器已关闭:
1[secondary_label Output]
2. . .
3Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.
现在服务器关闭了,我们将现有的数据库目录复制到新的位置,使用rsync
。使用-a
旗帜将保留权限和其他目录属性,而-v
则提供无语音的输出,以便您可以跟踪进展。
<$>[注] 注: 请确保目录上没有后续缩减,如果您使用 tab completion 可以添加它。当出现后续缩减时,rsync 会将目录的内容投放到安装点,而不是将其转移到包含 PostgreSQL 的目录: <$>
我们将从postgresql
目录启动rsync
,以模仿我们新位置的原始目录结构。通过在mount-point
目录中创建postgresql
目录,并保留PostgreSQL用户的所有权,我们可以避免未来的升级的权限问题。
1sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01
一旦副本完成,我们将以.bak 扩展名更名当前文件夹,并将其保留,直到我们确认移动成功。
1sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak
现在我们已经准备好将注意力转向配置。
步骤 2 – 指向新数据位置
PostgreSQL 有几种方法来翻译配置值. 默认情况下,data_directory
设置为/var/lib/postgresql/9.5/main
在/etc/postgresql/9.5/main/postgresql.conf
文件中。
1sudo nano /etc/postgresql/9.5/main/postgresql.conf
查找以data_directory
开头的行,然后更改随后的路径以反映新位置。
在我们的情况下,更新的文件看起来像下面的输出:
1[label /etc/postgresql/9.5/main/postgresql.conf ]
2. . .
3data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
4. . .
步骤 3 – 重新启动 PostgreSQL
我们已经准备好启动PostgreSQL。
1sudo systemctl start postgresql
2sudo systemctl status postgresql
要确保新数据目录确实在使用,请启动 PostgreSQL 监视器。
1sudo -u postgres psql
再次查看数据目录的值:
1SHOW data_directory;
1[secondary_label Output]
2 data_directory
3-----------------------------------------
4/mnt/volume-nyc1-01/postgresql/9.5/main
5(1 row)
现在你重新启动了 PostgreSQL 并确认它正在使用新的位置,请利用这个机会确保你的数据库完全功能。
1sudo rm -Rf /var/lib/postgresql/9.5/main.bak
重启 PostgreSQL 最后一次,以确保它按预期工作:
1sudo systemctl restart postgresql
2sudo systemctl status postgresql
结论 :
如果您遵循了这些步骤,您的数据库应该在新位置运行其数据目录,并且您已经完成了一个重要步骤,以便能够扩展您的存储空间。