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

介绍

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

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

课程准备

要完成本指南,您需要:

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

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

第1步 - 移动PostgreSQL数据目录

在我们开始移动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来访问新位置的数据目录。

第2步 - 指向新数据位置

默认情况下,在/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 + XYENTER来保存并关闭文件。这就是配置PostgreSQL以使用新数据目录位置所需的全部操作。此时剩下的就是再次启动PostgreSQL服务并检查它是否确实指向了正确的数据目录。

第3步 - 重新启动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》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏同步博客

Git服务器搭建

  Git是目前世界使用最广泛的分布式版本控制系统,它是由林纳斯·托瓦兹(Linus Torvalds)创作,最初的目的是为了更好地管理Linux内核开发而设计...

42430
来自专栏GreenLeaves

Oracle 数据库实例和数据库

本文参考自oracle数据库实例,数据库的理解,纯属读书笔记,用于加深记忆。 先看Tom关于这二者的解释: 1、数据库 物理操作系统文件或磁盘的集合(我觉得可以...

249100
来自专栏Laoqi's Linux运维专列

Nginx+Tomcat实现Web服务器的负载均衡

51160
来自专栏Java架构沉思录

教你写一个迷你版的Tomcat

Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!

10330
来自专栏生信技能树

linux系统环境变量一文就够

Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。 通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。 ...

43250
来自专栏Ryan Miao

resin4的初次配置与使用

之前用的resin3,结果发布新项目老师文件冲突,我也找不到是哪里有问题,于是尝试使用resin4. 首先从官网下载最新resin4。 然后放到opt下,tar...

381110
来自专栏北京马哥教育

Linux 组调度浅析

cgroup 与组调度 linux内核实现了control group功能(cgroup,since linux 2.6.24),可以支持将进程分组,然后按组来...

43640
来自专栏FreeBuf

Sqlmap联合Nginx实现“地毯式”检测网站SQL注入漏洞

以安全防御方的角度来看,防御的广度比深度更具优先级,这也是信息安全中木桶原理的体现。 Sqlmap是一个开源的SQL注入漏洞检测工具,Nginx是高性能的WEB...

39380
来自专栏知识分享

android studio安装教程

18730
来自专栏菩提树下的杨过

eclipse/intellij Idea集成jetty

jetty相对weblogic、jboss、tomcat而言,启动速度快,十分方便开发调试,以下是eclipse里的使用步骤: 一、eclipse->Marke...

44080

扫码关注云+社区

领取腾讯云代金券