PostgreSQL 17 在 openEuler 2403 中的数据目录迁移指南

迁移数据目录需谨慎操作,以下是安全转移数据库文件的分步流程:


步骤1:停止 PostgreSQL 服务

确保数据库完全停止,避免文件损坏:

sudo systemctl stop postgresql-17


步骤2:确认当前数据目录

查询现有数据目录位置:

sudo -u postgres psql -c "SHOW data_directory;"

记录输出路径(如 /var/lib/pgsql/17/data


步骤3:创建新数据目录

选择目标位置(如新磁盘 /mnt/pgdata),创建目录并设置权限:

sudo mkdir -p /mnt/pgdata
sudo chown postgres:postgres /mnt/pgdata
sudo chmod 700 /mnt/pgdata  # 仅允许postgres用户访问


步骤4:复制数据文件

使用 rsync 保留权限和属性:

sudo rsync -avzh /var/lib/pgsql/17/data/ /mnt/pgdata/

关键参数

  • -a:归档模式(保留权限、属性)
  • -z:压缩传输
  • -h:人类可读格式
  • 源路径末尾的 / 确保复制内容而非目录本身

步骤5:修改配置文件
  1. 编辑 PostgreSQL 主配置:
    sudo vi /usr/pgsql-17/share/postgresql.conf.sample
    

  2. 更新 data_directory 参数:
    data_directory = '/mnt/pgdata'
    


步骤6:更新 systemd 服务单元

修改服务文件以指向新路径:

sudo vi /usr/lib/systemd/system/postgresql-17.service

找到 Environment=PGDATA 并更新:

Environment=PGDATA=/mnt/pgdata


步骤7:重载配置并启动服务
sudo systemctl daemon-reload
sudo systemctl start postgresql-17


步骤8:验证迁移
  1. 检查服务状态:
    sudo systemctl status postgresql-17
    

  2. 确认数据目录:
    sudo -u postgres psql -c "SHOW data_directory;"
    

  3. 测试数据完整性:
    sudo -u postgres psql -c "\l"
    


关键注意事项
  1. 备份优先
    sudo pg_basebackup -D /backup/pg17 -Ft -z
    

  2. 空间要求:目标位置需满足 $$ \text{目标空间} \geq 1.5 \times \text{当前数据大小} $$
  3. 日志监控:迁移后检查日志:
    journalctl -u postgresql-17 -n 100
    

通过以上步骤,可在保证数据一致性的前提下完成安全迁移。如遇服务启动失败,请检查 SELinux 上下文(restorecon -Rv /mnt/pgdata)或磁盘挂载权限。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐