news 2026/5/19 3:10:33

保姆级教程:在阿里云ECS(CentOS 7)上绕过GPG检查安装PostgreSQL 12服务器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在阿里云ECS(CentOS 7)上绕过GPG检查安装PostgreSQL 12服务器

阿里云ECS实战:CentOS 7环境下PostgreSQL 12的完整部署指南

在云计算时代,数据库作为应用的核心组件,其部署效率直接影响开发周期。阿里云ECS作为国内主流云服务器平台,结合CentOS 7的稳定性与PostgreSQL 12的高性能特性,构成了企业级应用的黄金组合。本文将深入解析从云环境配置到数据库服务的完整链路,特别针对云平台特有的网络环境和安全策略进行适配,即使遇到GPG验证等常见障碍也能游刃有余。

1. 云环境准备与系统配置

1.1 ECS实例选购要点

阿里云ECS的实例选择直接影响数据库性能表现。对于中小型应用场景,建议配置:

规格类型vCPU内存适用场景
ecs.g6.large2核8GB开发测试环境
ecs.g6.xlarge4核16GB中小型生产环境
ecs.g6.2xlarge8核32GB高并发生产环境

提示:选择CentOS 7.9镜像时,建议勾选"分配公网IP"选项,避免后续手动配置的麻烦。系统盘推荐SSD云盘,容量至少40GB。

1.2 安全组策略配置

云平台的安全组相当于虚拟防火墙,需要为PostgreSQL开放特定端口:

# 查看当前安全组规则 sudo iptables -L -n # 临时开放5432端口(重启失效) sudo iptables -I INPUT -p tcp --dport 5432 -j ACCEPT

更可靠的做法是通过阿里云控制台配置:

  1. 进入ECS实例详情页
  2. 选择"安全组"标签页
  3. 点击"配置规则"
  4. 添加入方向规则:PostgreSQL(5432)

1.3 系统基础优化

在安装数据库前,建议执行以下系统优化:

# 更新系统基础包 sudo yum update -y # 安装常用工具集 sudo yum install -y vim wget curl net-tools # 关闭不必要的SELinux(需要重启生效) sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2. PostgreSQL 12安装全流程

2.1 官方源配置技巧

PostgreSQL官方提供了针对不同Linux发行版的YUM源,配置时需注意:

# 下载最新版repo配置 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 验证repo文件生成 ls -l /etc/yum.repos.d/pgdg-redhat-all.repo

常见问题排查:

  • 若出现"Couldn't resolve host"错误,检查DNS配置:
    echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
  • 阿里云内网用户可替换为:
    echo "nameserver 100.100.2.136" | sudo tee /etc/resolv.conf

2.2 解决GPG验证问题

在云环境特别是CentOS 7系统中,常会遇到GPG签名验证失败:

Error: Failed to download metadata for repo 'pgdg-common': repomd.xml GPG signature verification error: Bad GPG signature

根本原因分析

  1. 云镜像预置的GPG密钥可能过期
  2. 网络波动导致元数据下载不完整
  3. 时区设置不正确导致证书验证失败

专业解决方案

# 方法1:临时跳过验证(适合快速部署) sudo yum install -y --nogpgcheck postgresql12-server # 方法2:彻底解决问题(推荐生产环境) sudo rpm --import https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG sudo yum clean all sudo yum makecache

2.3 多版本管理策略

当系统需要共存多个PostgreSQL版本时,可使用以下方案:

# 查看可用版本 sudo yum list postgresql*-server --showduplicates # 安装特定版本 sudo yum install -y postgresql12-server-12.12-1PGDG.rhel7

版本切换时需要注意:

  1. 不同版本使用不同端口
  2. 数据目录相互独立
  3. 服务名称包含版本号(如postgresql-12)

3. 数据库初始化与安全加固

3.1 初始化数据库集群

完成安装后,需要进行数据库初始化:

# 初始化主数据库集群 sudo /usr/pgsql-12/bin/postgresql-12-setup initdb # 检查初始化结果 sudo ls -l /var/lib/pgsql/12/data/

关键目录说明:

  • /var/lib/pgsql/12/data/:主数据目录
  • /var/log/postgresql/:日志目录
  • /usr/pgsql-12/bin/:二进制工具位置

3.2 权限与目录优化

默认配置可能需要调整以适应生产环境:

# 创建专用存储目录 sudo mkdir -p /data/pgdata/12 sudo chown -R postgres:postgres /data/pgdata # 迁移数据目录(可选) sudo systemctl stop postgresql-12 sudo rsync -av /var/lib/pgsql/12/data/ /data/pgdata/12/ sudo sed -i "s|/var/lib/pgsql/12/data|/data/pgdata/12|g" /usr/lib/systemd/system/postgresql-12.service sudo systemctl daemon-reload

3.3 密码与访问控制

修改默认postgres用户密码并配置远程访问:

-- 登录psql控制台 sudo -u postgres psql -- 修改超级用户密码 ALTER USER postgres WITH PASSWORD 'YourStrong@Pass123'; -- 创建新管理用户 CREATE USER dba WITH SUPERUSER PASSWORD 'Admin@Secure456'; -- 退出控制台 \q

调整pg_hba.conf实现精细控制:

# 允许内网特定IP段访问 echo "host all all 10.0.0.0/8 md5" | sudo tee -a /var/lib/pgsql/12/data/pg_hba.conf # 限制公网访问(根据实际需求调整) echo "host all all 0.0.0.0/0 reject" | sudo tee -a /var/lib/pgsql/12/data/pg_hba.conf

4. 服务管理与运维监控

4.1 系统服务配置

PostgreSQL作为系统服务管理的关键命令:

# 启用开机自启 sudo systemctl enable postgresql-12 # 服务启停控制 sudo systemctl start postgresql-12 sudo systemctl stop postgresql-12 sudo systemctl restart postgresql-12 # 查看服务状态 systemctl status postgresql-12 -l

4.2 性能参数调优

根据服务器配置调整postgresql.conf:

# 建议配置(8GB内存服务器示例) sudo sed -i "s/^#shared_buffers = 128MB/shared_buffers = 2GB/g" /var/lib/pgsql/12/data/postgresql.conf sudo sed -i "s/^#work_mem = 4MB/work_mem = 32MB/g" /var/lib/pgsql/12/data/postgresql.conf sudo sed -i "s/^#maintenance_work_mem = 64MB/maintenance_work_mem = 512MB/g" /var/lib/pgsql/12/data/postgresql.conf sudo sed -i "s/^#random_page_cost = 4.0/random_page_cost = 1.5/g" /var/lib/pgsql/12/data/postgresql.conf

4.3 日志与监控设置

启用详细的查询日志有助于问题排查:

# 配置日志输出 echo "log_destination = 'stderr'" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf echo "logging_collector = on" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf echo "log_directory = 'pg_log'" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf echo "log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf echo "log_rotation_age = 1d" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf

安装pg_stat_statements扩展监控SQL性能:

-- 在psql中执行 CREATE EXTENSION pg_stat_statements; -- 查看最耗资源的SQL SELECT query, calls, total_time, rows, 100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;

5. 备份策略与灾难恢复

5.1 基础备份方案

配置自动化物理备份:

# 创建备份目录 sudo mkdir -p /backup/pg_basebackup sudo chown postgres:postgres /backup/pg_basebackup # 执行基础备份(每周一次) sudo -u postgres pg_basebackup -D /backup/pg_basebackup/$(date +%Y%m%d) -Ft -z -P

结合crontab实现定时备份:

# 编辑postgres用户的crontab sudo -u postgres crontab -e # 添加以下内容(每周日凌晨2点执行) 0 2 * * 0 pg_basebackup -D /backup/pg_basebackup/$(date +\%Y\%m\%d) -Ft -z -P

5.2 逻辑备份与恢复

使用pg_dump进行逻辑备份:

# 完整备份数据库集群 sudo -u postgres pg_dumpall | gzip > /backup/pg_dumpall_$(date +%Y%m%d).sql.gz # 单库备份 sudo -u postgres pg_dump -Fc mydb > /backup/mydb_$(date +%Y%m%d).dump # 恢复示例 gunzip < /backup/pg_dumpall_20230801.sql.gz | sudo -u postgres psql

5.3 时间点恢复(PITR)配置

启用WAL归档实现精细恢复:

# 创建归档目录 sudo mkdir -p /var/lib/pgsql/12/wal_archive sudo chown postgres:postgres /var/lib/pgsql/12/wal_archive # 修改postgresql.conf echo "wal_level = replica" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf echo "archive_mode = on" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf echo "archive_command = 'test ! -f /var/lib/pgsql/12/wal_archive/%f && cp %p /var/lib/pgsql/12/wal_archive/%f'" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 3:10:12

千问 LeetCode 2468.根据限制分割消息 C++实现

好的&#xff0c;这是 LeetCode 2468 "根据限制分割消息" 的 C 实现。解题思路核心是枚举分割的总份数&#xff0c;判断当前份数是否可行&#xff0c;然后构造结果。关键点&#xff1a; 1. 每部分结尾的 <a/b> 长度取决于 a 和 b 的位数 2. 当 b 的位数变化时&…

作者头像 李华
网站建设 2026/5/19 3:10:07

终极指南:如何用OmenSuperHub彻底释放惠普OMEN游戏本性能潜力

终极指南&#xff1a;如何用OmenSuperHub彻底释放惠普OMEN游戏本性能潜力 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为惠普OMEN游戏本官方软件臃…

作者头像 李华
网站建设 2026/5/19 3:08:05

不止于对比实验:用PlatEMO 3.0的GUI模式高效调试你的自定义算法

不止于对比实验&#xff1a;用PlatEMO 3.0的GUI模式高效调试你的自定义算法 当你的进化算法代码在MATLAB命令行中运行了三天三夜却只输出了一个意义不明的收敛曲线时&#xff0c;或许该重新认识PlatEMO这个"可视化实验室"了。作为国内首个获得IEEE TEVC期刊认可的进化…

作者头像 李华