1. 环境准备与依赖安装
在CentOS 7.9系统上安装PostgreSQL 14.0之前,需要做好充分的环境准备工作。首先需要确认系统能够正常连接网络,因为后续安装过程中需要下载必要的依赖包。建议使用最小化安装的CentOS系统,这样可以避免不必要的软件冲突。
1.1 系统基础检查
在开始安装前,建议先执行以下命令更新系统基础软件包:
bash复制yum update -y
yum install -y wget vim
检查系统内核版本和发行版信息:
bash复制uname -r
cat /etc/redhat-release
注意:PostgreSQL 14.0需要GLIBC 2.17或更高版本,CentOS 7.9默认满足此要求。如果使用其他Linux发行版,请先确认GLIBC版本。
1.2 依赖包安装
PostgreSQL编译安装需要以下开发工具和库文件:
bash复制yum groupinstall -y "Development Tools"
yum install -y perl-ExtUtils-Embed readline-devel zlib-devel \
pam-devel libxml2-devel libxslt-devel openldap-devel \
python-devel gcc-c++ openssl-devel cmake
这些依赖包的作用如下:
- readline-devel:提供命令行编辑功能
- zlib-devel:数据压缩支持
- libxml2-devel/libxslt-devel:XML处理功能
- openssl-devel:SSL加密连接支持
- pam-devel/openldap-devel:认证模块支持
1.3 创建安装目录
建议将PostgreSQL安装在/opt目录下,与其他系统软件隔离:
bash复制mkdir -p /opt/pgsql
chmod 755 /opt/pgsql
2. PostgreSQL源码编译安装
2.1 下载源码包
从PostgreSQL官网下载14.0版本的源码包:
bash复制cd /opt/pgsql
wget https://ftp.postgresql.org/pub/source/v14.0/postgresql-14.0.tar.gz
验证下载文件的完整性:
bash复制sha256sum postgresql-14.0.tar.gz
# 官方校验值:ee2ad79126a7375e9102c4db77c4acae
2.2 解压与编译
解压源码包并进入目录:
bash复制tar -zxvf postgresql-14.0.tar.gz
cd postgresql-14.0
配置编译选项,这里我们指定安装路径并启用常用功能:
bash复制./configure --prefix=/opt/pgsql/postgresql \
--with-openssl \
--with-libxml \
--with-pam \
--with-ldap \
--enable-debug
提示:如果编译过程中报错,通常是缺少依赖包,请根据错误信息安装对应的开发包。
开始编译和安装:
bash复制make -j $(nproc)
make install
编译过程可能需要15-30分钟,取决于服务器性能。使用-j $(nproc)参数可以并行编译,加快速度。
2.3 验证安装
安装完成后,检查安装目录:
bash复制ls -l /opt/pgsql/postgresql
应该能看到bin、lib、share等目录。可以检查PostgreSQL版本:
bash复制/opt/pgsql/postgresql/bin/postgres --version
3. 数据库初始化与配置
3.1 创建专用用户
为PostgreSQL创建专用的系统用户和组:
bash复制groupadd postgres
useradd -g postgres -d /home/postgres -m -s /bin/bash postgres
passwd postgres
设置安全权限:
bash复制chmod 700 /home/postgres
chown -R postgres:postgres /opt/pgsql
3.2 初始化数据库
切换到postgres用户初始化数据库:
bash复制su - postgres
/opt/pgsql/postgresql/bin/initdb -D /opt/pgsql/postgresql/data
初始化完成后,关键目录结构如下:
- base/: 包含数据库文件
- global/: 包含集群范围的表
- pg_wal/: 预写日志(WAL)文件
- pg_hba.conf: 客户端认证配置文件
- postgresql.conf: 主配置文件
3.3 基础配置调整
编辑postgresql.conf进行基本配置:
bash复制vi /opt/pgsql/postgresql/data/postgresql.conf
修改以下关键参数:
ini复制listen_addresses = '*' # 允许所有IP连接
port = 5432 # 默认端口
max_connections = 100 # 最大连接数
shared_buffers = 128MB # 共享内存大小
work_mem = 4MB # 每个查询的工作内存
配置客户端认证文件pg_hba.conf:
bash复制vi /opt/pgsql/postgresql/data/pg_hba.conf
在文件末尾添加:
ini复制# 允许所有IP通过密码认证连接
host all all 0.0.0.0/0 md5
4. 服务管理与优化
4.1 创建systemd服务
创建systemd服务文件:
bash复制vi /etc/systemd/system/postgresql.service
添加以下内容:
ini复制[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGDATA=/opt/pgsql/postgresql/data
OOMScoreAdjust=-1000
ExecStart=/opt/pgsql/postgresql/bin/pg_ctl start -D ${PGDATA}
ExecStop=/opt/pgsql/postgresql/bin/pg_ctl stop -D ${PGDATA}
ExecReload=/opt/pgsql/postgresql/bin/pg_ctl reload -D ${PGDATA}
TimeoutSec=300
[Install]
WantedBy=multi-user.target
启用并启动服务:
bash复制systemctl daemon-reload
systemctl enable postgresql
systemctl start postgresql
4.2 防火墙配置
开放PostgreSQL默认端口5432:
bash复制firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reload
4.3 环境变量设置
为postgres用户设置环境变量:
bash复制vi /home/postgres/.bash_profile
添加以下内容:
bash复制export PGHOME=/opt/pgsql/postgresql
export PGDATA=/opt/pgsql/postgresql/data
PATH=$PATH:$PGHOME/bin
使配置生效:
bash复制source /home/postgres/.bash_profile
5. 数据库基本操作
5.1 连接数据库
使用psql客户端连接:
bash复制psql -U postgres -d postgres
首次登录后,建议修改超级用户密码:
sql复制ALTER USER postgres WITH PASSWORD 'YourStrongPassword123';
5.2 创建新用户和数据库
创建新用户和数据库:
sql复制CREATE USER appuser WITH PASSWORD 'AppUserPass123';
CREATE DATABASE appdb OWNER appuser;
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;
5.3 基础维护命令
查看数据库列表:
sql复制\l
切换数据库:
sql复制\c appdb
查看表列表:
sql复制\dt
退出psql:
sql复制\q
6. 性能调优建议
6.1 内存配置
根据服务器内存大小调整postgresql.conf中的参数:
ini复制shared_buffers = 4GB # 通常设为内存的25%
work_mem = 16MB # 每个操作的内存,复杂查询多可增大
maintenance_work_mem = 512MB # 维护操作的内存
effective_cache_size = 12GB # 系统可用缓存估计
6.2 并行查询设置
启用并行查询提高性能:
ini复制max_worker_processes = 8 # 最大工作进程数
max_parallel_workers_per_gather = 4 # 每个查询的并行工作数
parallel_setup_cost = 10.0 # 并行执行启动成本
parallel_tuple_cost = 0.1 # 并行执行元组传输成本
6.3 日志配置
配置详细的日志记录:
ini复制log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1d
log_rotation_size = 100MB
log_min_duration_statement = 1000 # 记录执行超过1秒的查询
7. 常见问题排查
7.1 连接问题
如果无法远程连接,检查:
- postgresql.conf中listen_addresses是否为'*'
- pg_hba.conf中是否有对应IP的访问规则
- 防火墙是否开放5432端口
- 使用
netstat -tulnp | grep 5432检查服务是否监听
7.2 性能问题
遇到性能问题时:
- 检查日志文件中的慢查询
- 使用
EXPLAIN ANALYZE分析查询计划 - 查看
pg_stat_activity了解当前活动连接 - 检查
pg_stat_bgwriter了解后台写入情况
7.3 备份与恢复
基本的备份命令:
bash复制# 逻辑备份
pg_dump -U postgres -d appdb -f appdb_backup.sql
# 物理备份
pg_basebackup -D /backup/pg_data -U replicator -P -v
恢复数据库:
bash复制psql -U postgres -d appdb -f appdb_backup.sql
8. 安全加固建议
8.1 修改默认端口
编辑postgresql.conf修改默认端口:
ini复制port = 5433
同时更新防火墙规则。
8.2 限制超级用户访问
在pg_hba.conf中限制postgres用户的连接:
ini复制# 只允许本地socket连接超级用户
local all postgres peer
host all postgres 127.0.0.1/32 reject
host all postgres ::1/128 reject
8.3 启用SSL加密
生成SSL证书:
bash复制openssl req -new -x509 -days 365 -nodes -text -out server.crt \
-keyout server.key -subj "/CN=pgserver.example.com"
chmod 600 server.key
chown postgres:postgres server.key server.crt
配置postgresql.conf启用SSL:
ini复制ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
8.4 定期维护
设置定期维护任务:
bash复制# 每天凌晨3点执行vacuum和分析
0 3 * * * postgres /opt/pgsql/postgresql/bin/vacuumdb --all --analyze
在实际生产环境中,PostgreSQL的安装和配置需要根据具体的业务需求、硬件配置和安全要求进行调整。建议在正式上线前进行充分的性能测试和安全评估。