如何在 Ubuntu 16.04 上更改 PostgreSQL 数据文件夹位置


在本文中,我们将学习如何在 Ubuntu 16.04 上将 PostgreSQL 数据库数据目录更改或重新定位到新位置。该数据库的增长频率较高,并且取决于公司规模,因为我们需要更多空间,并且出于安全原因,我们将数据目录更改到其他卷或其他位置。

先决条件

  • 具有 Sudo 权限的非 root 用户的 Ubuntu 机器。
  • 已安装并正在运行的 PostgreSQL 服务器。
  • 我们要将数据库数据位置移动到的新卷或位置,新位置将为 /mnt/data_vol/PostgreSQL,其中 data_vol 是附加到机器或服务器的新卷。

更改 PostgreSQL 数据文件夹位置

在更改 PostgreSQL 数据位置之前,我们将首先检查 PostgreSQL 服务器上的当前设置。以下是验证服务器上当前数据位置设置的命令。

$ sudo –u postgre psql
Output:
psql (9.5.4)
Type "help" for help.
postgres=#

验证服务器上当前数据位置设置

postgres=# SHOW data_directory;
Output:
   data_directory
------------------------------
/var/lib/postgresql/9.5/main
(1 row)
postgres=#

通过以上命令,我们将了解默认数据目录位置为 /var/lib/postgresql/9.5/main

现在,我们将停止 PostgreSQL 服务以更改数据文件夹的默认位置

以下是停止 PostgreSQL 服务的命令。

$ sudo systemctl stop postgresql

停止 PostgreSQL 后,我们将使用以下命令检查 PostgreSQL 服务的状态

$ sudo systemctl status postgresql
Output:
   postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor prese
   Active: inactive (dead) since Mon 2016-09-12 15:40:23 IST; 3s ago
   Process: 1553 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 1553 (code=exited, status=0/SUCCESS)
Sep 07 19:27:27 ubuntu-16 systemd[1]: Starting PostgreSQL RDBMS...
Sep 07 19:27:27 ubuntu-16 systemd[1]: Started PostgreSQL RDBMS.
Sep 12 15:20:23 ubuntu-16 systemd[1]: Stopped PostgreSQL RDBMS.

将现有 PostgreSQL 数据移动到新位置

由于我们已停止数据,因此我们现在将使用 rysnc 命令(带 -a 和 –v 标志)将现有 PostgreSQL 数据移动到新位置,-a 保留新位置的文件和文件夹权限,而 –v 将显示详细输出。

使用 rsync,我们将在新位置创建一个新的 postgresql 文件夹,这里的新位置是指在 /mnt/data_vol 处使用 data_vol 挂载的新卷,并且权限将保留为 PostgreSQL,以便在将文件复制到新位置时不会出现任何权限问题。

以下是复制数据的命令。

$ sudo rsync -av /var/lib/postgresql /mnt/data_vol/
Output:
sending incremental file list
postgresql/
postgresql/.pgpass
postgresql/.psql_history
postgresql/9.5/
postgresql/9.5/main/
postgresql/9.5/main/PG_VERSION
postgresql/9.5/main/postgresql.auto.conf
postgresql/9.5/main/postmaster.opts
postgresql/9.5/main/base/
postgresql/9.5/main/base/1/
postgresql/9.5/main/global/3592_vm
postgresql/9.5/main/global/3593
postgresql/9.5/main/global/4060
postgresql/9.5/main/global/4060_vm
postgresql/9.5/main/global/4061
postgresql/9.5/main/global/6000
postgresql/9.5/main/global/6000_vm
postgresql/9.5/main/global/6001
postgresql/9.5/main/global/6002
postgresql/9.5/main/global/pg_control
postgresql/9.5/main/global/pg_filenode.map
…
…
postgresql/9.5/main/pg_subtrans/0000
postgresql/9.5/main/pg_tblspc/
postgresql/9.5/main/pg_twophase/
postgresql/9.5/main/pg_xlog/
postgresql/9.5/main/pg_xlog/000000010000000000000001
postgresql/9.5/main/pg_xlog/archive_status/
sent 63,180,570 bytes received 36,410 bytes 42,144,653.33 bytes/sec
total size is 63,053,465 speedup is 1.00

复制数据库后,我们将重命名旧数据文件夹,并且我们将保留此文件夹,直到我们在后续步骤中确认更改,以便我们不会丢失机器上的数据。

$ sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql_backup

更改 Postgresql 配置文件中的数据文件夹位置

我们可以通过编辑 /etc/postgresql/9.5/main/postgresql.conf 文件并编辑 data_directory 来更改默认数据文件夹。

$ sudo vi /etc/postgresql/9.5/main/postgresql.conf
Output:
….
….
….
#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------
# The default values of these variables are driven from the -D command-line
# option or PGDATA environment variable, represented here as ConfigDir
data_directory = '/mnt/data_vol/postgresql/9.5/main' # use data in another directory
                                       # (change requires restart)
hba_file = '/etc/postgresql/9.5/main/pg_hba.conf' # host-based authentication file
                                       # (change requires restart)
ident_file = '/etc/postgresql/9.5/main/pg_ident.conf' # ident configuration file
….
….
….

在 /etc/postgresql/9.5/main/postgresql.conf 中更新了新的数据文件夹后,我们需要重新启动服务器。

重新启动 PostgreSQL 服务器并验证数据文件夹位置

由于我们必须更新 PostgreSQL 配置,因此我们将重新启动 PostgreSQL 服务,以便应用配置。

$ sudo systemctl start postgresql

服务重新启动后,我们现在将使用以下命令检查 PostgreSQL 服务的状态 –

$ sudo systemctl status postgresql
postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor pres
Active: active (exited) since Mon 2016-09-12 16:57:32 IST; 12s ago
Process: 22296 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 22296 (code=exited, status=0/SUCCESS)
Sep 12 16:57:32 ubuntu-16 systemd[1]: Starting PostgreSQL RDBMS...
Sep 12 16:57:32 ubuntu-16 systemd[1]: Started PostgreSQL RDBMS.
Sep 12 16:57:39 ubuntu-16 systemd[1]: Started PostgreSQL RDBMS.

服务重新启动后,我们现在将验证数据文件夹位置。

$ sudo –u postgre psql
Output:
psql (9.5.4)
Type "help" for help.
postgres=#

验证服务器上当前数据位置设置 –

postgres=# SHOW data_directory;
Output:
data_directory
------------------------------
/mnt/data_vol/postgresql/9.5/main
(1 row)
postgres=#

确认 PostgreSQL 上的数据文件夹已更改后,我们现在将使用以下命令删除旧数据。

$ sudo rm –rf /var/lib/postgresql_backup

在本文中,我们学习了如何将 PostgreSQL 数据文件夹更改为一个新的位置,我们可以在该位置存储更多数据,并且可以将现有数据与数据库一起移动到新位置。

更新于: 2020年1月21日

2K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告