1. linux centos系统下安装postgresql
bash
yum install -y postgresql postgresql-server
默认直接yum install postgresql,postgresql-server会安装成系统自带的版本,如果需要安装更新的最新版本,需要先安装 PGDG 仓库再装服务端(以 PG16 为例):
bash
# 安装PGDG仓库
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 查看有哪些可用的版本:
yum repolist | grep pgdg
# 安装server和客户端,这里的16替换成上面列出来的可用版本
sudo yum install -y postgresql16 postgresql16-server
2. 初始化数据目录生成
`/var/lib/pgsql/16/data`:
bash
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
3. 启动服务并设置自启:
bash
sudo systemctl enable --now postgresql-16
# 如果安装的是15
sudo systemctl enable --now postgresql-15
完成后再在 `/var/lib/pgsql/16/data` 找到 `postgresql.conf`、`pg_hba.conf` 等配置。如果只执行了 `yum install postgresql`,那仅安装了客户端二进制,找不到目录是正常的。
4. 初始化与角色管理
bash
sudo -u postgres psql
-- 在 psql 中:
CREATE ROLE appuser WITH LOGIN PASSWORD 'StrongPass' NOSUPERUSER;
CREATE DATABASE appdb OWNER appuser ENCODING 'UTF8';
\q
5. 调整访问控制:
原则:pg_hba.conf 的规则是从上到下匹配,一旦命中就决定认证方式,所以需要按照"最严格→最宽松"的顺序编排,明确数据库、角色、来源网段和认证机制。常用方式包括 scram-sha-256(推荐)、md5(兼容旧客户端)、cert(客户端证书)、trust(仅限本地自动化,非常谨慎)。
bash
# "local" is for Unix domain socket connections only
local postgres postgres trust
......
# 中间部分的保持默认值。修改replication访问控制如下
# Allow replication connections from localhost, by a user with the
# replication privilege.
local all all scram-sha-256
host appdb appuser 10.0.0.5/32 scram-sha-256
host testdb all 10.0.0.5/24 scram-sha-256
postgresql.conf:listen_addresses = 'localhost,10.0.0.5'(按需添加)、port = 5432。pg_hba.conf:增加host appdb appuser 10.0.0.5/32 scram-sha-256;- 若需内网访问,添加相应网段并使用
md5/scram。
bash
# 启动与开机自启:
sudo systemctl enable --now postgresql(或 postgresql-16)。
# 验证:
psql -h localhost -U appuser -d appdb -W
# 输入设置的强密码,以执行下面语句确认连接正常。
SELECT version();
# 退出
\q
常用运维要点
-
备份 :Redis 使用
BGSAVE/SAVE或复制dump.rdb/appendonly.aof;PostgreSQL 定期pg_dump -Fc appdb > backup.dump,或配置pg_basebackup与 WAL 归档。 -
日志与监控 :启用 Redis
slowlog、MONITOR仅在调试短期使用;PostgreSQL 通过log_min_duration_statement记录慢查询,可配合pg_stat_statements。 -
安全 :仅在可信网段开放端口;必要时用内置 TLS(Redis
tls-port+ 证书,PostgreSQLssl = on);不在配置文件中存储明文密码,使用环境变量或 secrets 管理。 -
服务管理 :常用命令
sudo systemctl status redis-server/postgresql; 重启后检查日志/var/log/redis/redis-server.log与 PostgreSQLjournalctl -u postgresql。 -
排障提示
- Redis 拒绝连接:检查
bind/protected-mode配置、firewall;密码错误会报NOAUTH。 - PostgreSQL 无法登陆:确认
pg_hba.conf顺序和认证方式;修改后sudo systemctl reload postgresql生效。 - 端口占用:
ss -ltnp | grep 6379/5432查清冲突进程后调整端口或释放。
- Redis 拒绝连接:检查