元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
基础概念
什么是PostgreSQL
适用场景解析
架构体系简介
▶
安装配置
Windows安装指南
MacOS环境搭建
Linux部署实战
初始配置详解
连接方式大全
▶
数据库操作
创建第一个数据库
数据库查看方法
数据库删除操作
psql命令行工具
▶
数据管理
表结构设计基础
数据类型详解
CRUD操作指南
约束条件设置
索引使用入门
▶
用户权限
创建用户角色
权限分配策略
密码修改方法
▶
备份与恢复
pg_dump使用指南
简单备份策略
数据恢复演练
发布时间:
2025-04-08 09:28
↑
☰
# Linux部署实战 本文将详细介绍如何在Linux系统上部署PostgreSQL数据库,包括多种安装方式、生产环境配置和性能优化建议。 ## 安装方式选择 ### 1. 包管理器安装 #### Ubuntu/Debian系统 ```bash # 添加PostgreSQL官方源 sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - # 更新包列表 sudo apt update # 安装PostgreSQL sudo apt install postgresql-14 postgresql-contrib-14 ``` #### CentOS/RHEL系统 ```bash # 添加PostgreSQL源 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 安装PostgreSQL sudo dnf module disable postgresql sudo dnf install -y postgresql14-server postgresql14-contrib # 初始化数据库 sudo /usr/pgsql-14/bin/postgresql-14-setup initdb # 启动服务 sudo systemctl enable postgresql-14 sudo systemctl start postgresql-14 ``` ### 2. 源码编译安装 适用于需要自定义编译选项或特殊版本需求的场景: ```bash # 安装依赖 sudo apt install -y build-essential libreadline-dev zlib1g-dev flex bison libxml2-dev libxslt-dev libssl-dev libxml2-utils xsltproc # 下载源码 wget https://ftp.postgresql.org/pub/source/v14.0/postgresql-14.0.tar.gz tar xzf postgresql-14.0.tar.gz cd postgresql-14.0 # 配置和编译 ./configure --prefix=/usr/local/pgsql14 make sudo make install # 创建postgres用户 sudo useradd postgres sudo mkdir /usr/local/pgsql14/data sudo chown postgres:postgres /usr/local/pgsql14/data # 初始化数据库 sudo -u postgres /usr/local/pgsql14/bin/initdb -D /usr/local/pgsql14/data ``` ### 3. Docker部署 适用于容器化环境: ```bash # 拉取官方镜像 docker pull postgres:14 # 创建数据卷 docker volume create pgdata # 运行容器 docker run --name postgres14 \ -e POSTGRES_PASSWORD=yourpassword \ -v pgdata:/var/lib/postgresql/data \ -p 5432:5432 \ -d postgres:14 ``` ## 生产环境配置 ### 1. 系统参数优化 编辑/etc/sysctl.conf: ```bash # 内核共享内存设置 kernel.shmmax = 8589934592 kernel.shmall = 2097152 kernel.shmmni = 4096 # 文件系统和I/O设置 fs.file-max = 1000000 vm.swappiness = 10 vm.dirty_ratio = 60 vm.dirty_background_ratio = 2 ``` ### 2. 资源限制配置 编辑/etc/security/limits.conf: ```bash postgres soft nofile 65536 postgres hard nofile 65536 postgres soft nproc 16384 postgres hard nproc 16384 ``` ### 3. PostgreSQL主配置 编辑postgresql.conf: ```bash # 连接设置 max_connections = 200 superuser_reserved_connections = 3 # 内存配置 shared_buffers = 4GB work_mem = 16MB maintenance_work_mem = 256MB effective_cache_size = 12GB # WAL配置 wal_level = replica wal_buffers = 16MB checkpoint_timeout = 15min max_wal_size = 2GB min_wal_size = 1GB # 查询优化器配置 random_page_cost = 1.1 effective_io_concurrency = 200 # 日志配置 log_destination = 'csvlog' logging_collector = on log_directory = 'log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_rotation_age = 1d log_rotation_size = 100MB log_min_duration_statement = 1000 ``` ### 4. 访问控制配置 编辑pg_hba.conf: ```bash # 本地连接 local all postgres peer local all all md5 # IPv4连接 host all all 127.0.0.1/32 md5 host all all 10.0.0.0/8 md5 # IPv6连接 host all all ::1/128 md5 ``` ## 高可用配置 ### 1. 流复制设置 主服务器配置: ```bash # 修改postgresql.conf wal_level = replica max_wal_senders = 10 wal_keep_size = 1GB # 修改pg_hba.conf host replication replicator 10.0.0.0/8 md5 ``` 从服务器配置: ```bash # 创建复制用户 CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'password'; # 配置recovery.conf standby_mode = 'on' primary_conninfo = 'host=主服务器IP port=5432 user=replicator password=password' ``` ### 2. 备份策略 #### 逻辑备份 ```bash # 创建备份脚本 cat > /usr/local/bin/backup_pg.sh << 'EOF' #!/bin/bash BACKUP_DIR=/backup/postgresql DATE=$(date +%Y%m%d_%H%M%S) PG_DUMP=/usr/bin/pg_dump DB_NAME=your_database # 创建备份目录 mkdir -p $BACKUP_DIR # 执行备份 $PG_DUMP -Fc -U postgres $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.dump # 保留最近30天的备份 find $BACKUP_DIR -type f -mtime +30 -delete EOF # 添加执行权限 chmod +x /usr/local/bin/backup_pg.sh # 添加到crontab echo "0 1 * * * /usr/local/bin/backup_pg.sh" >> /var/spool/cron/postgres ``` #### 物理备份 ```bash # 安装pg_basebackup sudo apt install -y postgresql-client-14 # 执行全量备份 pg_basebackup -D /backup/postgresql/base -Ft -z -P -U postgres ``` ## 监控和维护 ### 1. 性能监控 #### 安装pgmetrics ```bash # 下载和安装pgmetrics wget https://github.com/rapidloop/pgmetrics/releases/latest/download/pgmetrics_linux_amd64.tar.gz tar xzf pgmetrics_linux_amd64.tar.gz sudo mv pgmetrics /usr/local/bin/ # 执行监控 pgmetrics --host=localhost --port=5432 --user=postgres > metrics_report.json ``` #### 设置pg_stat_statements ```sql -- 安装扩展 CREATE EXTENSION pg_stat_statements; -- 查询性能统计 SELECT query, calls, total_time, rows, mean_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; ``` ### 2. 日常维护 #### 定期VACUUM ```bash # 添加到crontab echo "0 3 * * * /usr/bin/vacuumdb -a -z -U postgres" >> /var/spool/cron/postgres ``` #### 索引维护 ```sql -- 重建索引 REINDEX DATABASE your_database; -- 分析表统计信息 ANALYZE verbose; ``` ## 故障排查 ### 1. 连接问题 ```bash # 检查监听状态 netstat -nltp | grep postgres # 检查防火墙 sudo iptables -L # 检查日志 tail -f /var/log/postgresql/postgresql-14-main.log ``` ### 2. 性能问题 ```bash # 检查系统资源 top -c iostat -x 1 # 检查慢查询 tail -f /var/log/postgresql/postgresql-14-main.log | grep "duration:" ``` ### 3. 磁盘空间 ```bash # 检查数据目录大小 du -sh /var/lib/postgresql/14/main # 检查表空间 SELECT pg_size_pretty(pg_database_size('your_database')); ``` ## 总结 本文详细介绍了在Linux系统上部署PostgreSQL的多种方式,以及生产环境所需的各项配置。无论是使用包管理器、源码编译还是Docker部署,都需要根据实际需求选择合适的方式。 对于生产环境,建议特别注意以下几点: 1. 系统参数和资源限制的合理配置 2. PostgreSQL参数的优化调整 3. 完善的备份策略 4. 监控和维护机制的建立 同时,建议在正式部署前在测试环境进行充分验证,确保各项配置的正确性和性能表现。如果遇到问题,可以参考故障排查部分,或查阅官方文档获取更多帮助。