本着不能过好日子就过好日子
的朴素想法,一直想把服务器成本降下来。这批服务器和进程,基本上都是之前开外包公司的时候积累下来的,随着时间迁移,大部分客户不再续费了,在网络工程,在数据备份策略等各方面都有很大的优化空间。现在每个月要支付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块了。