如何修改或迁移 Postgres 数据库存储路径

发布于: 13 October, 2023
分享:

迁移 PostgreSQL 数据文件夹到非系统盘可提高性能、减轻系统负担,降低系统盘故障风险,提升数据库的稳定性和可维护性。

本文主要是为大家在使用 PostgreSQL 数据库时,可能忽略的问题提供解药。PostgreSQL被誉为世界上最先进的开源数据库,它拥有很长的历史,最初是1985年在加利福尼亚大学伯克利分校开发的。

和 MySQL 相比较,PostgreSQL 完全由开源社区项目驱动,全世界有超过1000名开发人员对其进行维护和升级迭代,提供了单个完整功能的版本,而 MySQL 已逐步向商业化过渡,提供了多个不同的社区版、商业版与企业版,自然也就造成部分功能上的混淆。

假设我们在 Ubuntu Server 20.04 LTS 开发环境安装 PostgreSQL,安装过程非常简单,随着日常数据量的增加,当初的默认安装目录并非在数据磁盘上,需要迁移数据库存储目录怎么办? 本文为您解答,建议收藏。

 

1. 通过 postgres 账户执行 psql 命令:

我们现在要迁移数据库到其他磁盘目录,要先明确当前数据库的存放位置,需要用到 psql 命令。PostgreSQL 的超级管理员用户登录方式比较特别,它是通过操作系统中为其指定的账户来登录,也就是我们现在使用的 postgres 账户。

$ sudo -u postgres psql

 

2. 查询当前数据库存储路径:

通过 psql 成功登录后,我们可以执行命令或 SQL 语句 CURD 数据库。输入 SHOW DATA_DIRECTORY 来查询当前数据库存储路径。

postgres=# SHOW DATA_DIRECTORY;

 

执行后返回:

 

当前数据库路径为:

/var/lib/postgresql/14/main

数字 14 代表你当前安装的 PostgreSQL 数据库版本,以实际版本为准,替换版本编号即可。

 

3. 停止 PostgreSQL 数据库服务

迁移之前,要停止 poistgresql 服务,防止系统进程占用或其他用户访问,否则无法完成迁移操作。

$ sudo systemctl stop postgresql

 

4. 查询当前 PostgreSQL 服务状态

通过下面这条命令,再次确认服务已停止。

$ sudo systemctl status postgresql

执行后返回:

Output
...
Jan 12 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.

 

5. 复制数据库目录:

我们可以通过 rsync 命令,来确保目录下每一个文件夹和目录都被复制到数据磁盘,我们事先将一块 500GB 磁盘挂载到至 /data 目录后,执行如下命令:

$ sudo rsync -av /var/lib/postgresql /data/

 

6. 归档数据库:

为了复核迁移后的数据库可以正常访问,即便上一个步骤已经复制了原数据库,也不要立即删除它。我们通过下面这段命令,将原数据库改名归档,防止出现意外。

$ sudo mv /var/lib/postgresql/14/main /var/lib/postgresql/14/main.bak

 

7. 修改 PostgreSQL 配置文件

目录结构我们已经迁移完成,下面通过 nano 命令修改 PostgreSQL 配置文件,将数据库存放目录改为新的路径:

$ sudo nano /etc/postgresql/14/main/postgresql.conf

 

找到 data_directory 配置项,将目录修改为新的数据磁盘路径并保存。

...
data_directory = '/data/postgresql/14/main'
...

 

8. 启动 PostgreSQL 服务

一切就绪后,我们重新启动 postgresql 服务,并再次查询服务状态。

$ sudo systemctl start postgresql
$ sudo systemctl status postgresql

 

9. 核验 DATA_DIRECTORY

再次通过 postgres 账号执行 psql命令,复核当前 data_directory 设置是否生效:

$ sudo -u postgres psql
postgres=# SHOW DATA_DIRECTORY;

 

10. 删除数据库归档

现在我们可以放心删除之前存放在系统默认安装的数据库归档,释放磁盘空间:

$ sudo rm -Rf /var/lib/postgresql/14/main.bak

 

11. 重启 PostgreSQL 服务

为确保服务正常运行,再次重新启动 postgresql 服务并查询服务状态。

$ sudo systemctl restart postgresql
$ sudo systemctl status postgresql

 

以上就是迁移 PostgreSQL 物理存储路径的全部内容,感谢您的阅读,欢迎关注+点赞+转发,谢谢。

分享:

0 留言

留言

您的留言将被人工审核,请勿发表色情、反动言论。

您可能感兴趣

如何修改或迁移 Postgres 数据库存储路径

迁移 PostgreSQL 数据文件夹到非系统盘可提高性能、减轻系统负担,降低系统盘故障风险,提升数据库的稳定性...