本文主要是为大家在使用 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 物理存储路径的全部内容,感谢您的阅读,欢迎关注+点赞+转发,谢谢。