前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何将PostgreSQL数据目录移动到Ubuntu 18.04上的新位置

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

原创
作者头像
大瓜皮
修改2018-10-22 11:30:12
2.3K0
修改2018-10-22 11:30:12
举报
文章被收录于专栏:云计算教程系列

介绍

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

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

课程准备

要完成本指南,您需要:

在这个例子中,我们将数据移动到安装在/mnt/volume_nyc1_01的块存储设备上。

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

第1步 - 移动PostgreSQL数据目录

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

代码语言:javascript
复制
sudo -u postgres psql

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

代码语言:javascript
复制
SHOW data_directory;
       data_directory       
------------------------------
/var/lib/postgresql/10/main
(1 row)

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

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

代码语言:javascript
复制
sudo systemctl stop postgresql

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

代码语言:javascript
复制
sudo systemctl status postgresql

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

代码语言:javascript
复制
​
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:

代码语言:javascript
复制
sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

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

代码语言:javascript
复制
sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak

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

第2步 - 指向新数据位置

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

代码语言:javascript
复制
sudo nano /etc/postgresql/10/main/postgresql.conf

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

代码语言:javascript
复制
. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .

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

第3步 - 重新启动PostgreSQL

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

代码语言:javascript
复制
sudo systemctl start postgresql

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

代码语言:javascript
复制
sudo systemctl status postgresql

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

代码语言:javascript
复制
​
Jul 12 15:45:01  ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
. . .

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

代码语言:javascript
复制
sudo -u postgres psql

再次检查数据目录的值:

代码语言:javascript
复制
SHOW data_directory;
            data_directory
-----------------------------------------
/mnt/volume_nyc1_01/postgresql/10/main
(1 row)

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

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 课程准备
  • 第1步 - 移动PostgreSQL数据目录
  • 第2步 - 指向新数据位置
  • 第3步 - 重新启动PostgreSQL
  • 结论:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档