平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“postgres 数据库迁移的几种做法”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
本内容基于如下所示环境完成测试
| 项 | 设置说明 | 备注 |
|---|---|---|
| 操作系统 | CentOS7 | |
| PG数据版本 | 9.6.24 | |
| 操作系统用户 | root/postgres | |
| 数据量 | 用户(20)、角色(20)、数据库(2)、schema(42)、数据量(约160W行) | 数据文件约640M |
#创建备份存放文件夹(确保postgres用户有权限)
cd /home
mkdir posrgres
chown -R postgres postgres/
#切换postgres用户
su - posrgres
#执行备份
pg_dumpall -U postgres -v -f u_postgres.backup
数据文件默认位置:/var/lib/pgsql/9.6
#切换到数据存放位置
cd /var/lib/pgsql/9.6
#停止数据库服务
systemctl stop postgresql-9.6
#压缩数据文件
tar -cvf data.tar.gz data/
#得到的 data.tar.gz 即为压缩后的数据备份文件
此过程需先行停止pg数据库
完成执行文件备份
#确保过程种服务是停止的
systemctl stop postgresql-9.6
cd /home
#创建迁移目录 并修改权限
mkdir pgdata
##修改归属
chown -R postgres pgdata/
##修改权限(必须)
chmod 700 pgdata/
#切换至pg用户
su - postgres
#复制数据文件到新位置
cp -rf data/* /home/pgdata/
#编辑服务配置文件
vim /usr/lib/systemd/system/postgresql-9.6.service
#修改配置文件种的数据文件路径
修改:Environment=PGDATA=/var/lib/pgsql/9.6/data/
为:Environment=PGDATA=/home/pgdata/
#保存退出
#重启系统
reboot

在这个场景下,此方案基于pg数据库对备份还原的兼容,采用此方法强烈建议在同版本的数据库上操作
#创建备份文件存放位置
cd /home
mkdir postgres
#上传备份文件到上一步的存放位置(上传过程省略)
mv u_postgres.backup postgres/
#修改权限
chown -R postgres postgres/
#切换用户
su - postgres
#切换数据备份目录
cd /home/postgres/
#执行恢复(忽略错误,"postgres"内置角色原因)
psql -U postgres -f u_postgres.backup
#执行恢复(遇到错误停止,不建议)
#psql -U postgres --set ON_ERROR_STOP=on -f u_postgres.backup

解决办法: 修改权限(必须)
chmod 700 pgdata/

解决办法: 修改数据文件所在文件夹为posrgres所有
chown -R postgres pgdata
chown 700 pgdata
#可切换postgres 测试读写权限

到此这篇关于postgres 数据库迁移的几种方法的文章就介绍到这了,更多相关postgres 数据库迁移内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!
tplink5620与6300区别是什么(tplink5620与6300区别详解)
tplink路由器无线信道选哪个好(tplink路由器无线信道选择推荐)
tplink百兆路由器怎么改成千兆(tplink百兆路由器改成千兆方法)
tplink百兆路由器哪个好(tplink百兆路由器选择推荐)
postgres 数据库迁移的几种做法实用指南
PostgreSQL中rank()窗口函数实用指南与示例实用指南