目录

一、先说结论:这 10 件事是“保命操作”

二、第 1 件事:禁止 postgres 超级用户远程登录

做法建议

三、第 2 件事:只给业务用户“最小权限”

四、第 3 件事:限制访问 IP,而不是 0.0.0.0/0

五、第 4 件事:明确数据目录和磁盘空间

六、第 5 件事:开启并理解日志(不是只“有日志”)

七、第 6 件事:明确备份策略(哪怕是最原始的)

八、第 7 件事:限制最大连接数(非常容易忽略)

九、第 8 件事:确认字符集和编码

十、第 9 件事:确认数据库启动顺序

十一、第 10 件事:记录你的“数据库变更”


否则数据库迟早会出问题(新手必看)

前一篇我们已经完成了 PostgreSQL 在 Linux 服务器上的完整部署
但我要直接说一个很多教程不会告诉你的事实:

数据库“能用”,和“能长期安全运行”,完全是两回事。

现实中大量 PostgreSQL 问题,并不是装错,而是——
装完之后什么都没管。

这篇文章,我就站在“真实项目”的角度,讲清楚:
PG 部署完成后,我一定会立刻做的 10 件事。


一、先说结论:这 10 件事是“保命操作”

如果你只想记住一句话:

数据库事故,80% 不是 SQL 写错,而是环境和权限问题。

下面这 10 条,至少能帮你避开大多数新手坑。


二、第 1 件事:禁止 postgres 超级用户远程登录

postgres超级用户,一旦泄露,等于裸奔。

做法建议

pg_hba.conf 中:

# 禁止 postgres 远程
host    all     postgres    0.0.0.0/0    reject

 原则:

  • 超级用户只允许本地使用

  • 业务永远用普通用户


三、第 2 件事:只给业务用户“最小权限”

新手最常见操作:

GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;

在小项目里没问题,但你至少要明白:

  • 不要随意给 SUPERUSER

  • 不要让业务用户创建角色

  • 权限越小,事故越小


四、第 3 件事:限制访问 IP,而不是 0.0.0.0/0

教程常用:

host all all 0.0.0.0/0 md5

这是为了方便演示,不是最佳实践。

更合理的是:

host all all 192.168.1.0/24 md5

数据库 ≠ Web 服务

能少暴露,就少暴露。


五、第 4 件事:明确数据目录和磁盘空间

你必须清楚三件事:

  • 数据目录在哪

  • 日志写在哪

  • 这个磁盘还能撑多久

SHOW data_directory;
df -h

数据库磁盘满 = 高概率事故


六、第 5 件事:开启并理解日志(不是只“有日志”)

至少确认:

  • 日志是否开启

  • 日志是否在写

  • 日志是否会轮转

logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'

没日志的数据库,出问题只能靠猜。


七、第 6 件事:明确备份策略(哪怕是最原始的)

你可以什么都不做,但不能没备份意识

最基础的备份方式:

pg_dump app_db > app_db.sql

哪怕一天一次,都比“完全没有”强。


八、第 7 件事:限制最大连接数(非常容易忽略)

默认配置对新手来说往往偏大或不合理。

max_connections = 100

连接数失控时:

  • 数据库负载飙升

  • 应用雪崩


九、第 8 件事:确认字符集和编码

SHOW server_encoding;
SHOW client_encoding;

编码问题,一旦出现在生产环境,代价极高。


十、第 9 件事:确认数据库启动顺序

数据库是基础服务

systemctl enable postgresql-14

否则:

  • 服务器重启

  • 服务先起

  • 数据库没起 → 整站不可用


十一、第 10 件事:记录你的“数据库变更”

哪怕你现在只有你一个人:

  • 改了什么配置

  • 为什么改

  • 改的时间

数据库最怕“没人知道它被改过”。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐