下面是一套 Debian 13 + PostgreSQL 标准部署方案,特点是: • 程序安装在系统盘 • 数据和日志全部放到新挂载磁盘 • 避免日志撑爆系统盘 • 适合 SATA 盘环境
这也是很多企业服务器的常见部署方式。
一、最终目录结构(推荐)
假设你新挂载的盘是:
/data
最终结构建议:
/usr/lib/postgresql/ # PostgreSQL程序(系统盘) /etc/postgresql/ # PostgreSQL配置(系统盘)
/data/postgresql/ ├── data/ # 数据目录 ├── wal/ # WAL日志 └── log/ # PostgreSQL运行日志
这样好处: • 系统盘不会被数据库撑满 • 数据和日志全部在数据盘 • IO更清晰
二、确认新磁盘已经挂载
先确认:
lsblk
假设看到:
sda 200G / sdb 1T
创建文件系统:
mkfs.ext4 /dev/sdb
创建挂载点:
mkdir /data
挂载:
mount /dev/sdb /data
设置开机自动挂载:
nano /etc/fstab
添加:
/dev/sdb /data ext4 defaults 0 0
确认:
df -h
应该看到:
/dev/sdb 1T /data
三、安装 PostgreSQL
Debian 官方源安装:
apt update apt install postgresql
安装完成后系统会自动创建:
/var/lib/postgresql/16/main
并启动数据库。
先停止:
systemctl stop postgresql
四、创建新的数据库目录
创建目录结构:
mkdir -p /data/postgresql/data mkdir -p /data/postgresql/wal mkdir -p /data/postgresql/log
修改权限:
chown -R postgres:postgres /data/postgresql chmod 700 /data/postgresql/data
五、迁移数据库数据
复制原始数据:
rsync -av /var/lib/postgresql/ /data/postgresql/data/
注意: 原路径是:
/var/lib/postgresql/16/main
迁移后会变成:
/data/postgresql/data/16/main
六、修改 PostgreSQL 配置
编辑配置:
nano /etc/postgresql/16/main/postgresql.conf
修改以下参数:
1 修改数据目录
找到:
data_directory
改成:
data_directory = ‘/data/postgresql/data/16/main’
2 修改 WAL 日志目录
找到:
#wal_log_hints = off
在下面添加:
wal_directory = ‘/data/postgresql/wal’
(如果版本不支持,可以忽略)
3 修改日志目录
找到:
log_directory
改成:
log_directory = ‘/data/postgresql/log’
并开启日志:
logging_collector = on
设置日志文件名:
log_filename = ‘postgresql-%Y-%m-%d.log’
日志轮转:
log_rotation_age = 1d log_rotation_size = 100MB
七、启动数据库
systemctl start postgresql
查看状态:
systemctl status postgresql
八、确认数据目录
执行:
sudo -u postgres psql -c “show data_directory;”
应该返回:
/data/postgresql/data/16/main
九、确认日志目录
执行:
sudo -u postgres psql -c “show log_directory;”
应该是:
/data/postgresql/log
十、删除旧数据(确认运行正常后)
确认数据库运行正常后:
rm -rf /var/lib/postgresql/16/main
这样系统盘就不会存数据库了。
十一、SATA 磁盘优化参数(推荐)
编辑:
nano /etc/postgresql/16/main/postgresql.conf
建议增加:
shared_buffers = 4GB work_mem = 32MB maintenance_work_mem = 512MB
checkpoint_completion_target = 0.9 wal_buffers = 16MB
effective_cache_size = 12GB
如果服务器是:
内存 shared_buffers 16G 4G 32G 8G 64G 16G
SSD的话推荐:
提高并发 IO 能力 effective_io_concurrency = 200
优化随机读写成本 random_page_cost = 1.1
checkpoint优化 checkpoint_completion_target = 0.9
十二、防止日志无限增长(重要)
Debian 默认 logrotate 会管理 PostgreSQL 日志。
确认:
cat /etc/logrotate.d/postgresql
如果没有,可以创建:
nano /etc/logrotate.d/postgresql
内容:
/data/postgresql/log/*.log { daily rotate 7 compress delaycompress missingok notifempty copytruncate }
意思: • 每天轮转 • 保留7天 • 自动压缩
十三、最终效果
系统盘只剩:
/usr/lib/postgresql /etc/postgresql
数据盘:
/data/postgresql ├── data ├── wal └── log
系统盘 永远不会被数据库撑爆。
十四、一个非常重要的经验
数据库服务器一定要监控磁盘:
建议加一个定时检查:
df -h /data
或接入监控系统。