Debian 13 + PostgreSQL 17 生产环境安装配置及数据库迁移恢复指南
PostgreSQL 是目前企业应用中非常流行的开源关系型数据库,具备稳定、高性能、扩展性强等特点。
本文记录 Debian 13 系统环境下 PostgreSQL 17 的安装、生产环境基础配置,以及旧服务器数据库迁移恢复流程。
数据迁移部分分别介绍:
- 全量备份恢复方式(适合数据库数量少、容量不大的场景)
- 单独备份角色权限 + 单独恢复数据库方式(适合生产环境、精细化迁移)
一、环境说明
本文环境:
操作系统: Debian 13 (Trixie) 数据库: PostgreSQL 17 安装方式: apt 迁移方式: pg_dump / pg_dumpall
适用场景:
- ERP数据库
- MES数据库
- WMS/WCS数据库
- 业务系统后台数据库
- 中间库
二、Debian 13 系统初始化
1. 更新系统
apt update apt upgrade -y
2. 设置服务器时区
数据库日志、任务调度、接口同步均依赖正确时间。
设置中国时区:
timedatectl set-timezone Asia/Shanghai
查看:
timedatectl
显示:
Time zone: Asia/Shanghai (CST, +0800)
3. 安装时间同步服务
安装:
apt install chrony -y
启动:
systemctl enable chrony systemctl start chrony
查看同步状态:
chronyc sources
三、安装 PostgreSQL 17
1. 安装 PostgreSQL
Debian 13 默认提供 PostgreSQL 17:
apt install postgresql postgresql-contrib -y
查看版本:
psql --version
示例:
psql (PostgreSQL) 17.10
2. 查看数据库状态
Debian 使用 PostgreSQL Cluster 管理方式。
查看:
pg_lsclusters
正常:
Ver Cluster Port Status Owner 17 main 5432 online postgres
查看实际数据库服务:
systemctl status postgresql@17-main
正常:
Active: active (running)
注意:
执行:
systemctl status postgresql
可能显示:
Active: active (exited)
这是正常情况。
原因:
postgresql.service
|
|
└── postgresql@17-main.service
真正运行的是:
postgresql@17-main
四、PostgreSQL 生产基础配置
配置目录:
/etc/postgresql/17/main/
主要配置文件:
postgresql.conf pg_hba.conf
五、开启远程访问
1. 修改监听地址
编辑:
vim /etc/postgresql/17/main/postgresql.conf
找到:
#listen_addresses = 'localhost'
修改:
listen_addresses = '*'
2. 配置访问权限
编辑:
vim /etc/postgresql/17/main/pg_hba.conf
增加:
host all all 192.168.1.0/24 scram-sha-256
说明:
192.168.1.0/24
表示允许局域网访问。
生产环境不要直接开放:
0.0.0.0/0
避免数据库暴露公网。
3. 重启数据库
systemctl restart postgresql@17-main
检查端口:
ss -lntp | grep 5432
正常:
LISTEN 0 244 0.0.0.0:5432 postgres
六、设置 PostgreSQL 管理密码
进入数据库:
su - postgres psql
设置密码:
ALTER USER postgres WITH PASSWORD '密码';
退出:
\q
七、数据库迁移方式一:全量备份恢复
适用场景
推荐:
- 数据库数量少
- 数据量不大
- 一次性迁移
例如:
ERP 5GB MES 3GB WCS 2GB 总计10GB
使用:
pg_dumpall
1. 旧服务器全量备份
创建目录:
mkdir -p /backup/postgresql
执行:
pg_dumpall | gzip > /backup/postgresql/all_database.sql.gz
生成:
/backup/postgresql/ └── all_database.sql.gz
该文件包含:
✔ 所有数据库
✔ 用户角色
✔ 权限
✔ 表结构
✔ 数据
✔ 函数
✔ 序列
2. 传输备份文件
复制到 Debian13:
scp all_database.sql.gz root@新服务器IP:/backup/postgresql/
3. 全量恢复数据库
进入 postgres 用户:
su - postgres
执行:
gunzip -c /backup/postgresql/all_database.sql.gz | psql
等待恢复完成即可。
4. 恢复检查
查看数据库:
psql \l
查看用户:
\du
查看表:
\c 数据库名 \dt
八、数据库迁移方式二:角色权限 + 单数据库恢复
适用场景
生产环境更推荐:
- 多数据库
- 需要单独迁移
- 需要控制恢复过程
流程:
备份用户权限
↓
备份数据库
↓
恢复用户
↓
恢复数据库
1. 备份数据库角色
旧服务器:
pg_dumpall --roles-only > /backup/postgresql/roles.sql
生成:
roles.sql
内容包括:
- 用户
- 密码
- 权限
- 角色
2. 单独备份数据库
查看数据库:
psql \l
例如:
erp mes wcs
备份:
pg_dump -Fc erp > /backup/postgresql/erp.dump
其他:
pg_dump -Fc mes > /backup/postgresql/mes.dump pg_dump -Fc wcs > /backup/postgresql/wcs.dump
说明:
-Fc
表示 PostgreSQL custom 格式。
优势:
- 支持并行恢复
- 恢复速度快
- 可以选择对象恢复
3. 恢复用户角色
复制:
scp roles.sql root@新服务器:/backup/postgresql/
恢复:
su - postgres psql < /backup/postgresql/roles.sql
检查:
\du
4. 创建数据库
例如:
createdb erp
5. 恢复数据库
执行:
pg_restore \ -d erp \ /backup/postgresql/erp.dump
多个数据库:
pg_restore -d mes mes.dump pg_restore -d wcs wcs.dump
九、大数据库恢复优化
如果数据库较大:
使用并行恢复:
pg_restore \ -j 8 \ -d erp \ erp.dump
参数:
-j 8
表示8线程恢复。
十、恢复后的数据库检查
查看数据库大小
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
查看数据表
\c 数据库名 \dt
查看最大表
SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
十一、PostgreSQL 生产参数优化
编辑:
vim /etc/postgresql/17/main/postgresql.conf
示例:
服务器:
CPU:8核 内存:32GB
调整:
shared_buffers = 8GB effective_cache_size = 24GB maintenance_work_mem = 1GB work_mem = 64MB max_connections = 200 checkpoint_completion_target = 0.9
重启:
systemctl restart postgresql@17-main
十二、数据库备份策略
生产环境建议:
每日备份
pg_dump -Fc 数据库名 > backup.dump
保留策略
例如:
每日备份 保留30天 重要数据异地备份