您的位置:首页 > 科技 > IT业 > PostgreSQL 的数据迁移

PostgreSQL 的数据迁移

2024/10/7 4:33:12 来源:https://blog.csdn.net/lanphaday/article/details/141829979  浏览:    关键词:PostgreSQL 的数据迁移

本着不能过好日子就过好日子的朴素想法,一直想把服务器成本降下来。这批服务器和进程,基本上都是之前开外包公司的时候积累下来的,随着时间迁移,大部分客户不再续费了,在网络工程,在数据备份策略等各方面都有很大的优化空间。现在每个月要支付1000块的费用,实在太高了。这几天稍闲一点,终于下定决心去优化。

停用

先做的当然是先停掉不再续费的客户的进程,这个很简单,把 nginx、supervisor 的配置一删除,再一重启就搞定,内存占用立马下来,原来内存的 1/4 就够了。

停用 Rdb

尝试使用 postgresql自带的pg_dump备份

接下来是把云数据库 Rdb 的数据迁过来到云服务器,计划把 Rdb 停掉。本机是 ubuntu 14.04 的操作系统,apt 自带安装的 postgresql 是 9.3 版本,而 Rdb 用的是 9.4 版本。当使用 pg_dump备份数据的时候,出现备份工具版本与数据库服务器版本不匹配的情况。

尝试使用 django的数据迁移方案

幸好我们代码是django开发的,而它也自带一套数据迁移方案。dumpdata 命令可以把数据导出为 json 格式,我一试,没有问题。但当用 loaddata导入时,发现生成的 SQL语句本机安装的postgresql 9.3不兼容,有语法错误,至此,只能考虑升级PostgreSQL

升级PostgreSQL

也没有这么简单,因为年代已经太久远了,PostgreSQL的PPA源已经没有9.4版本了。于是只能升级操作系统。do-release-upgrade一条命令打下去,Ubuntu升级到了16.04,而带的PostgreSQL也升级到了9.5版本。

修复 PG 9.5

不过并不顺序,一条ps axu命令下去,发现pg 9.3和9.5的进程都在跑着,这肯定有问题啊。得先把 pg 9.3 删除掉,执行apt remove postgresql-9.3 之后,发现 9.5 的进程怎么也起不来,重启机器也不行。

psql: 无法联接到服务器: 没有那个文件或目录服务器是否在本地运行并且在 Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432"上准备接受联接?

经搜索,找到一个解决方案,使用其中的Option B方法,把所有PostgreSQL删除,然后再指定安装 9.5 版本,终于修复。

数据迁移

再次使用pg_dump备份数据,就不再有版本不匹配的问题了。但使用pg_restore的时候,又说导出的数据是文本格式,要用psql来导入。

sudo -u postgres psql database_name  < backup_file.sql

关闭 Rdb

导入数据后,修改配置文件,使程序连接本地数据库,运行&测试后,即可关闭 Rdb。

备份

最后,编写备份脚本,隔一周备份并推送到远程的另一台服务器上,确保数据安全。

其它

以下备份一些关于 PostgreSQL的操作语句。

# 安装完即有postgres用户可进入交互式Shell
sudo -u postgres psqlsudo -u postgres createuser --interactive --password NEW_USERNAMEsudo -u postgres createdb DB_NAME  --owner USERNAME# 备份
pg_dump -U USERNAME -W -h 192.168.0.xx -d DB_NAME -f 2024xxx-backup.sql# 导入
sudo -u postgres psql DB_NAME  < 2024xxxx-backup.sqlALTER USER USERNAME  PASSWORD 'NEW_PASSWORD';

最后,今年(2024年)PostgreSQL的版本已经更新到16了,9.4迁移到9.5的情况应该很少见了,在此记之,如果有人需要,多个参考。

成果

最后,完成服务器降配,停掉云数据库,停掉VPC网络,成功把1000块/月的费用压缩到150块了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com