简介
随着数据库容量的增长,需要将数据库迁移到其它目录,本文将基于CentOS 7和PostgreSQL 10介绍具体操作方法
需求
环境准备:
- CentOS 7 系统,以及具有sudo权限的非root用户
- 已正常安装的 Postgresql 10
因涉及到多个目录和文件配置,这里提统一列出:
- 旧数据库目录: /var/lib/pgsql/10/data/
- 系统级配置文件目录: /etc/systemd/system/postgresql-10.service.d
- 新数据库目录(示例): /data/postgresql-10/10/data
步骤1: 移动数据库文件
首先确认目前的数据库文件目录
$ sudo -u postgres psql
在pgsql中查询
postgres=# SHOW data_directory;
结果
data_directory
------------------------------
/var/lib/pgsql/10/data
(1 row)
输入 \q
断开连接,并关闭数据库服务
$ sudo systemctl stop postgresql
$ sudo systemctl status postgresql
确认关闭后开始迁移数据库,先确认旧目录的具体结构
$ ls /var/lib/pgsql/10/data
注意用rsync -av
在新旧目录之间同步数据库文件,-a
表示完整保留文件权限设置,-v
便于观察进度
注意:确保 rsync 命令中新目录路径尾部没有反斜杠
/
,特别是按tab使用自动补全可能会添加反斜杠。有无反斜杠的具体的区别详见参考3
创建新目录
$ mkdir /data/postgresql-10
有时候一台服务器上会有多种版本的postgresql,可以只移动指定版本对应的路径,也可以将原目录整体迁移,我这里选择整体迁移
$ sudo rsync -av /var/lib/postgresql /data/postgresql-10
复制完成后,先不要急着删除或移动旧的数据库文件,以防数据库不能正常启动
步骤2: 指定数据库新路径
修改新目录中的配置文件
$ vim /data/postgresql-10/10/data/postgresql.conf
修改 data_directory
的值为新数据目录:
data_directory = '/data/postgresql-10/10/data'
然后要修改系统中数据库服务的配置,你可以直接修改原始配置文件,但由于数据库升级时这个文件会可能会被覆盖导致问题,所以这里推荐用新建覆写配置文件的方法
先新建一个 .conf
后缀的文件,例如
$ cd /etc/systemd/system/postgresql-10.service.d
$ mkdir override.conf
编辑 override.conf
新增以下内容
[Service]
Environment=PGDATA=/data/postgresql-10/10/data
注意,这里修改的是操作系统级别的服务配置,而非数据库本身的配置文件
步骤3: 重启数据库服务
重新载入配置
$ systemctl daemon-reload
重启数据库,检查状态
$ systemctl restart postgresql-10
$ sudo systemctl status postgresql
确认数据库服务完全正常后,再处理旧目录中的文件
文章评论