数据库随着时间的推移而增长,有时会超出原始文件系统的空间。当它们与操作系统的其余部分位于同一分区时,这也可能导致I / O争用。
RAID,网络块存储和其他设备可以提供冗余并提高可扩展性以及其他所需功能。无论您是添加更多空间,评估优化性能的方法,还是希望利用其他存储功能,本教程都将指导您重新定位PostgreSQL的数据目录。
要完成本指南,您需要:
sudo
权限的非root用户的Ubuntu 18.04服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。在这个例子中,我们将数据移动到安装在/mnt/volume_nyc1_01
的块存储设备上。
但是,无论您使用什么底层存储,以下步骤都可以帮助您将数据目录移动到新位置。
在我们开始移动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来访问新位置的数据目录。
默认情况下,在/etc/postgresql/10/main/postgresql.conf
文件中data_directory
会被设置为/var/lib/postgresql/10/main
。编辑此文件以反映新数据目录:
sudo nano /etc/postgresql/10/main/postgresql.conf
找到以data_directory
开头的行并更改后面的路径以反映新位置。在本教程的上下文中,updated指令将如下所示:
. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .
通过按下CTRL + X
,Y
和ENTER
来保存并关闭文件。这就是配置PostgreSQL以使用新数据目录位置所需的全部操作。此时剩下的就是再次启动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数据目录移动到新位置。
如果您已经跟进,那么您的数据库应该在新位置运行其数据目录,并且您已经完成了向能够扩展存储的重要一步。
更多Ubuntu教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Move a PostgreSQL Data Directory to a New Location on Ubuntu 18.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。