介绍
数据库随时间增长,有时会超过原始文件系统上的空间。 当它们位于与操作系统的其余部分相同的分区上时,也可能遇到I / O争用。 RAID,网络块存储和其他设备可以提供冗余和其他期望的特征。 无论是添加更多空间,评估优化性能的方法,还是希望利用其他存储功能,本教程将指导您重新定位PostgreSQL的数据目录。
先决条件
要完成本指南,您需要:
一个Ubuntu 16.04服务器与非root用户
sudo
权限 。 您可以了解更多有关如何设置这些权限的用户在我们与Ubuntu 16.04的初始服务器安装指南。PostgreSQL的服务器 。 如果您尚未设置一个,该如何安装和使用PostgreSQL在Ubuntu 16.04指南可以帮助你。
在这个例子中,我们将数据移动到安装在块存储设备/mnt/volume-nyc1-01
。 如果您在使用DigitalOcean块存储, 这个指南可以帮助您安装本教程,然后再继续你的音量。
无论您使用什么底层存储,以下步骤都可以帮助您将数据目录移动到新位置。
第1步 - 移动PostgreSQL数据目录
要准备移动PostgreSQL的数据目录,让我们通过启动一个交互式PostgreSQL会话来验证当前位置。 在下面的线, psql
是进入交互式显示器的命令, -u postgres
告诉sudo来执行psql
作为系统的postgres用户:
sudo -u postgres psql
进入监视器后,选择数据目录:
SHOW data_directory;
Output data_directory
------------------------------
/var/lib/postgresql/9.5/main
(1 row)
此输出确认PostgreSQL的配置为使用默认的数据目录, /var/lib/postgresql/9.5/main
,所以这是我们需要移动的目录。 一旦你确认你的系统上的目录,键入\q
退出。
为了确保数据的完整性,我们将在我们实际修改数据目录之前关闭PostgreSQL:
sudo systemctl stop postgresql
systemctl
不显示所有服务管理命令的结果。 要验证您是否成功,请使用以下命令:
sudo systemctl status postgresql
如果输出的最后一行告诉您服务器已停止,您可以确认它已关闭:
Output. . .
Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.
现在,服务器关闭,我们将现有的数据库目录复制到新的位置用rsync
。 使用-a
标志保留的权限和其他目录属性而-v
提供详细输出,以便能够按照进度。
注意:确保没有对目录没有尾随斜线,如果你使用制表符完成可以加入。 当有一个结尾的斜线, rsync
将转储目录复制到安装点,而不是转移成一个包含内容PostgreSQL
目录:
我们要启动rsync
从postgresql
目录,以模拟在我们的新位置,原来的目录结构。 通过创建postgresql
PostgreSQL用户的安装点目录中的目录和保留所有权,我们能避免未来的升级权限问题。 该版本的目录, 9.5
不是绝对必要的,因为我们已经定义的位置明确在postgresql.conf
的文件,但按照约定的项目肯定会受到伤害,尤其是如果有一个需要在将来运行PostgreSQL的多个版本。
sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01
复制完成后,我们将使用.bak扩展名重命名当前文件夹,并保留该文件,直到我们确认移动已成功。 通过重命名它,我们将避免可能由于新的和旧的位置中的文件引起的混乱:
sudo 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
文件。 编辑此文件以反映新的数据目录:
sudo nano /etc/postgresql/9.5/main/postgresql.conf
查找开头的行data_directory
,改变它遵循以反映新的位置的路径。
在我们的示例中,更新的文件看起来像下面的输出:
. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
. . .
第3步 - 重新启动PostgreSQL
我们准备好启动PostgreSQL。
sudo systemctl start postgresql
sudo systemctl status postgresql
为了确保新的数据目录确实在使用,启动PostgreSQL监视器。
sudo -u postgres psql
再次查看数据目录的值:
SHOW data_directory;
Output data_directory
-----------------------------------------
/mnt/volume-nyc1-01/postgresql/9.5/main
(1 row)
现在您已经重新启动PostgreSQL并确认它正在使用新位置,请确保您的数据库完全正常运行。 验证任何现有数据的完整性后,您可以删除备份数据目录:
sudo rm -Rf /var/lib/postgresql/9.5/main.bak
最后一次重新启动PostgreSQL以确保它按预期工作:
sudo systemctl restart postgresql
sudo systemctl status postgresql
结论:
如果你遵循了,你的数据库应该运行,其数据目录在新的位置,你已经完成了一个重要的一步,以便能够扩展存储。 你可能也想看看5通用服务器设置为Web应用程序 ,了解如何创建服务器基础设施,以帮助您规模,优化Web应用程序的想法。