在CentOS 7上将PostgreSQL数据库从默认路径迁移到自定义目录

在CentOS 7上将PostgreSQL数据库从默认路径迁移到自定义目录,需遵循以下步骤。假设原数据目录为"/var/lib/pgsql/12/data",目标目录为"/new/path/pgdata"。

1、步骤概览

  1. 停止PostgreSQL服务
  2. 创建新目录并设置权限
  3. 复制数据文件(保留权限)
  4. 修改配置文件指向新目录
  5. 启动服务并验证

2、详细操作

2.1、创建目标目录并设置权限

powershell 复制代码
sudo mkdir -p /new/path/pgdata
sudo chown -R postgres:postgres /new/path/pgdata  # 确保属主正确
sudo chmod 700 /new/path/pgdata  # 安全权限

2.2、初始化PostgreSQL数据库到自定义目录(如果尚未初始化)

"-D /data/pgsql"这条命令的含义是:指定PostgreSQL数据库的数据存储目录(该目录用于存放所有数据库的相关数据)

powershell 复制代码
sudo -u postgres initdb -D /data/pgsql

2.3、停止PostgreSQL服务

powershell 复制代码
sudo systemctl stop postgresql

2.4、复制数据文件(保留权限)

powershell 复制代码
sudo rsync -av /var/lib/pgsql/data/ /new/path/pgdata/
  • -av:保留权限、属主等属性并显示进度
  • 源目录末尾的"/":确保复制内容而非目录本身

2.5、修改PostgreSQL配置

2.5.1、编辑服务单元文件

powershell 复制代码
sudo vi /usr/lib/systemd/system/postgresql.service

找到"Environment=PGDATA=..."行,修改为:

powershell 复制代码
Environment=PGDATA=/new/path/pgdata

2.5.2、重载systemd配置

powershell 复制代码
sudo systemctl daemon-reload

2.6、启动服务并验证

powershell 复制代码
sudo systemctl start postgresql   # 启动PostgreSQL
sudo systemctl status postgresql  # 检查PostgreSQL状态

2.7、验证数据目录

powershell 复制代码
sudo -u postgres psql -c "SHOW data_directory;"  # 应输出:"/new/path/pgdata"

# 查看存储每个数据库的唯一数字标识符(OID)和系统表,包含所有数据库的元数据
sudo -u postgres psql -c "SELECT oid, datname FROM pg_database;"

3、故障排查

  • 权限问题:确保"/new/path/pgdata"属主为"postgres"且权限为"700"
  • SELinux 错误:检查日志"/var/log/audit/audit.log",临时测试可"setenforce 0"(生产环境不推荐)
  • 服务启动失败:查看日志"journalctl -u postgresql -xe"
  • 路径错误:确认"postgresql.service"中的"PGDATA"路径正确

4、注意事项

  1. 备份优先:操作前务必备份数据("pg_dumpall"或文件级备份)
  2. 磁盘空间:确保目标目录有足够空间
  3. 路径一致性 :自定义路径需永久挂载(避免重启后丢失)
    完成迁移后,可删除原数据目录释放空间(确认服务运行正常后):
powershell 复制代码
sudo rm -rf /var/lib/pgsql/12/data.old
相关推荐
红尘客栈29 小时前
Ansible 入门到实战:自动化运维的瑞士军刀
运维·自动化·ansible
微风中的麦穗9 小时前
【远程桌面】运维强推工具之远程控制软件RustDesk 1.4.1 全面指南:开源远程桌面的终极解决方案
运维·远程工具·rustdesk·远程软件·运维神器·办公神器·局域网远程
望获linux9 小时前
【Linux基础知识系列:第一百三十九篇】使用Bash编写函数提升脚本功能
linux·运维·服务器·arm开发·chrome·性能优化·bash
hhhwx66610 小时前
Linux学习记录--利用信号量来调度共享资源(2)
linux·c语言·c++·学习
biubiubiu070610 小时前
coqui-ai/TTS 安装
linux·运维·服务器
打不了嗝 ᥬ᭄10 小时前
【Linux】UDP 网络编程
linux·运维·服务器
kcoo10 小时前
Jupyter Lab 汉化
linux·开发语言·python
劉小健10 小时前
16-镜像配置-反射镜像
运维·网络·网络协议
Lynnxiaowen11 小时前
今天我们开始学习nginx缓存功能,CORS以及nginx防盗链
linux·运维·学习·nginx·云计算·bash
哦你看看11 小时前
nginx缓存、跨域 CORS与防盗链设置(2)
运维·nginx·缓存