在本文中,我们将学习如何将PostgreSQL数据库数据目录更改或重定位到Ubuntu 16.04上的新位置。由于我们需要更多空间,并且出于安全原因,我们将数据目录更改为另一个卷或其他位置,因此该数据库的增长频率更高,并且取决于公司的规模。
具有具有Sudo权限的非root用户的Ubuntu计算机。
PostgreSQL服务器已安装并且正在运行。
我们要在其中移动数据库数据位置的新卷或新位置,新位置将是/ mnt / data_vol / PostgreSQL,因为data_vol是连接到计算机或服务器的新卷。
在更改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.
当我们停止数据时,我们现在将使用带有-a和–v标志的rysnc命令将现有的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
我们可以通过编辑/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服务,以便应用该配置。
$ 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数据文件夹更改到一个我们可以存储更多数据的新位置,以及如何将现有数据与数据库一起移动到新位置。