雨云上 PostgreSQL 怎么跑:和 MySQL 选型对比与部署实录

雨云 PostgreSQL 部署实录:与 MySQL 选型对比、安装备份与调优踩坑
发布于 更新于
9

在雨云上我既跑 MySQL(之前写过一篇安装、备份与调优实录),也跑 PostgreSQL,后台常被问同一个问题:到底选哪个?这问题没有标准答案,得看你的业务长什么样。这篇不堆参数,直接说我在雨云上两个都装机跑过之后,是怎么做选型的,以及 PostgreSQL 这条线怎么装、怎么备、怎么调。

先说选型:什么场景选 PostgreSQL

如果你符合下面任意一条,我更倾向 PostgreSQL:

  • 存的是半结构化数据:比如配置、标签、元数据经常变字段,PostgreSQL 的 JSONB 类型能直接当文档库用,又能建索引,比在 MySQL 里塞长文本舒服太多;
  • 查询复杂、要联表分析:多表 JOIN、窗口函数、CTE(公用表表达式)这类,PostgreSQL 的优化器和语法都更顺手;
  • 要 GIS 或时序:配合 PostGIS、TimescaleDB 这类扩展,地理信息和时序数据几乎是开箱即用,MySQL 做起来费劲;
  • 事务边界要求严:PostgreSQL 默认事务和约束更”较真”,对金额、库存这类不能出错的数据更稳。

wp 这类默认用 MySQL 的程序不在讨论范围内——WordPress 人家就认 MySQL,别硬改。

什么场景还是 MySQL 更省心

  • 生态和资料多:宝塔、1Panel 面板一键建站基本都围绕 MySQL,踩坑一搜一大把,新手最友好;
  • 业务以简单读写为主:普通博客、商城、CMS,MySQL 完全够,没必要为用 Postgres 而用;
  • 要和大量现成程序对接:很多开源项目只认 MySQL 驱动,强行换库等于重写连接层。

所以一句话:标准建站走 MySQL,文档/分析/GIS/强事务需求走 PostgreSQL。雨云的香港、美国节点免备案,两个都能直接跑;国内节点该备案照备。

PostgreSQL 在雨云上怎么装

登录机器后直接用发行版包管理器装最稳,版本随系统走(较新发行版一般在 14~16 之间),不用去官网下二进制,省心也少依赖坑。

装完第一件事不是急着建库,而是把访问控制定好:

  • pg_hba.conf 决定谁能连、从哪连。默认只允许本地 peer/md5,远程要用的话得加一条放行规则,并且限定来源 IP,别写 0.0.0.0/0 全放;
  • postgresql.conflisten_addresses 默认是 localhost,要对外提供服务就改成具体网卡地址或 '*',配合 pg_hba 一起收口;
  • 新建一个专属业务用户和库,别拿 postgres 超级用户直接跑应用。

这一步做对,后面少一半安全事故。

备份怎么做才不慌

和 MySQL 一样,备份是底线。PostgreSQL 自己的工具就够用:

  • 逻辑备份pg_dump 导出单个库,pg_dumpall 导出全实例,配合 cron 定时跑,简单可靠;
  • 物理备份:数据量大了用 pg_basebackup 做基础备份,再靠 WAL 归档做时间点恢复;
  • 落到异地:dump 出来的文件我习惯再推一份到对象存储(雨云对象存储那篇讲过搭配用法),或者用 BorgBackup 做去重加密,和 MySQL 的备份思路一致。

一个容易忽略的点:备份完要定期恢复演练,光备不验等于没备。我一般每月挑一份 dump 在临时机器上恢复一次,确认能起来。

几个调优项,按需动

PostgreSQL 默认配置偏保守(按小内存机器调的),雨云上如果你机器有 2G 以上内存,可以动这几项:

  • shared_buffers:通常设成物理内存的 1/4 左右,给缓存用;
  • work_mem:每个排序/哈希操作的内存,调大能少落盘,但别乘上并发数算爆;
  • effective_cache_size:告诉优化器系统有多少缓存可用,设大点让它能选索引;
  • 连接数:PostgreSQL 每个连接占内存,高并发别无脑加 max_connections,前面架一层 pgbouncer 连接池更稳。

雨云的云盘是 SSD,对 PostgreSQL 的随机读写很友好,不用额外折腾磁盘。宝塔、1Panel 面板上也能挂 PostgreSQL 管理插件,可视化和命令行结合用最顺。

合规边界

和跑 MySQL 一样,数据库里别存用户明文密码、身份证、银行卡这类敏感明文,按《个人信息保护法》做脱敏和加密存储;《数据安全法》要求做好访问控制和备份;用途限定在正常业务,不把数据库能力用于突破国家网络管控。香港、美国节点免备案,但合规底线一样守。

我踩过的坑

  • pg_hba 没放行来源 IP:应用连不上,排查半天才发现是客户端 IP 不在允许列表;
  • listen_addresses 还是 localhost:改了 pg_hba 却忘了改监听,外部死活连不进;
  • 用 postgres 超级用户跑应用:权限过大,一旦程序有漏洞就是全库风险,后来拆了专属低权用户;
  • locale 不一致导致排序乱:建库时没指定,中文排序和预期不同,重建库指定 Czh_CN.UTF-8 才正常;
  • 连接数打满:高并发没加连接池,max_connections 被占满后新连接全拒,架 pgbouncer 后解决。

选型小结

别被”哪个更强”带节奏。我的经验是:标准 Web 建站、想省心、要对接现成程序,MySQL 优先;要 JSONB、复杂分析、GIS、强事务,PostgreSQL 更对路。两个在雨云香港、美国节点上都能免备案直接跑,价格也都不贵、还便宜,性价比都不差。如果你还在挑机器,用优惠码 admin01 五折开一台先都试一遍最直观。

常见问题(FAQ)

雨云上 PostgreSQL 和 MySQL 哪个更便宜?
两者都是开源免费、自己装不花软件钱,成本只差机器配置。PostgreSQL 默认配置偏保守,想跑顺建议 2G 内存起步,MySQL 在小内存上更轻。机器本身用香港、美国免备案节点,价格都便宜,性价比都不差。
PostgreSQL 能像 MySQL 一样用宝塔或 1Panel 管理吗?
可以。两个面板都有 PostgreSQL 管理插件或一键安装入口,能可视化管理库和用户。但核心的访问控制(pg_hba、监听地址)建议还是走配置文件改,面板只是辅助。
PostgreSQL 的备份能用 MySQL 那套思路吗?
思路一致:逻辑备份加异地留存加定期演练。工具不同(pg_dump/pg_basebackup 对应 mysqldump/xtrabackup),但落对象存储或 BorgBackup 的链路可以直接复用。
国内节点跑 PostgreSQL 要备案吗?
只要对公网提供 Web 服务就要备案,和用哪个数据库无关。纯内网、只自己连的不涉及。香港、美国节点免备案,两个数据库都适用。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

用雨云 KVM 云服务器 Docker 自建 Outline 团队文档协作(Outline+PostgreSQL+Redis+对象存储),配 Nginx 反代 HTTPS、空间权限与备份。含环境变量坑与优惠码 admin01 五折。