PostgreSQL 二进制安装全流程详解
1. 为什么选择二进制安装PostgreSQL第一次接触PostgreSQL时我也纠结过到底该用哪种安装方式。源码编译、包管理器、二进制安装各有优劣但实测下来二进制安装是最适合新手的方案。它既不像源码编译那样需要处理复杂的依赖关系也不像包管理器安装那样受限于系统版本。二进制安装最大的优势就是干净利落。你下载的压缩包里已经包含了编译好的可执行文件解压就能用。我帮不少团队部署过PostgreSQL遇到系统环境千奇百怪的情况时二进制版本总能稳定运行。比如最近在客户那遇到一个CentOS 6的老系统yum源早就停止维护了用二进制包十分钟就搞定了安装。不过要注意二进制安装的PostgreSQL不会自动注册成系统服务。这意味着你需要手动管理启停对于生产环境可能需要额外配置。但换个角度想这也给了你更大的控制权。我自己的开发机就一直用二进制版本升级时直接替换目录就行完全不影响现有数据。2. 准备工作下载与系统配置2.1 获取正确的二进制包打开PostgreSQL官网(https://www.postgresql.org/download/)时新手常会被各种版本搞晕。我的经验是先看系统架构再看GLIBC版本。比如现在主流的Linux服务器基本都是x86_64架构但GLIBC版本可能差异很大。最近一次安装时我遇到了一个坑下载了最新版的PostgreSQL 15结果在客户的老系统上跑不起来报GLIBC版本过低。后来换了PostgreSQL 12才解决。所以建议先运行ldd --version查看系统GLIBC版本再选择兼容的PostgreSQL版本。下载地址我习惯用EnterpriseDB提供的镜像wget https://get.enterprisedb.com/postgresql/postgresql-15.3-1-linux-x64-binaries.tar.gz如果下载速度慢可以试试国内的镜像源。记得一定要校验SHA256我有次就遇到过下载文件损坏的情况。2.2 系统用户与目录准备PostgreSQL强烈建议使用专用用户运行这是安全最佳实践。我通常这样做# 创建用户组和用户 sudo groupadd -r postgres sudo useradd -r -g postgres postgres数据目录的权限设置很关键我见过不少因为权限问题导致的启动失败。建议按这个流程操作sudo mkdir -p /pgdata/{data,log,archive} sudo chown -R postgres:postgres /pgdata sudo chmod 700 /pgdata/data # 这个权限特别重要有个容易忽略的点SELinux。如果你的系统启用了SELinux比如CentOS默认开启需要额外配置sudo semanage fcontext -a -t postgresql_db_t /pgdata/data(/.*)? sudo restorecon -Rv /pgdata3. 安装与初始化实战3.1 解压与目录结构解压二进制包时我习惯用这个命令tar -xzf postgresql-15.3-1-linux-x64-binaries.tar.gz -C /usr/local/ sudo mv /usr/local/pgsql /usr/local/postgresql-15 sudo ln -s /usr/local/postgresql-15 /usr/local/pgsql这样做的优势是版本化目录便于后续升级软链接保持路径统一符合Linux的目录规范目录结构说明/usr/local/postgresql-15/ ├── bin/ # 可执行文件 ├── include/ # 头文件 ├── lib/ # 库文件 └── share/ # 文档和扩展3.2 数据库初始化切换到postgres用户时我推荐用su -而不是直接su这样可以加载完整的环境变量sudo su - postgres /usr/local/pgsql/bin/initdb -D /pgdata/data -E UTF8 --localeC -U postgres -W几个关键参数解释-E UTF8设置默认编码中文环境必选--localeC避免排序规则问题-U postgres指定超级用户-W交互设置密码初始化完成后建议立即修改pg_hba.confecho host all all 0.0.0.0/0 scram-sha-256 /pgdata/data/pg_hba.conf这样后面才能远程连接但生产环境要谨慎设置IP范围。4. 配置优化与启动4.1 关键配置调整刚安装好的默认配置偏保守我通常会调整这些参数sed -i s/#listen_addresses localhost/listen_addresses */ /pgdata/data/postgresql.conf sed -i s/#port 5432/port 5432/ /pgdata/data/postgresql.conf sed -i s/max_connections 100/max_connections 300/ /pgdata/data/postgresql.conf对于开发环境建议开启日志echo logging_collector on /pgdata/data/postgresql.conf echo log_directory log /pgdata/data/postgresql.conf echo log_filename postgresql-%Y-%m-%d.log /pgdata/data/postgresql.conf4.2 启动与验证手动启动命令/usr/local/pgsql/bin/pg_ctl -D /pgdata/data -l /pgdata/log/start.log start验证服务状态/usr/local/pgsql/bin/pg_isready设置环境变量让日常使用更方便在~/.bashrc添加export PATH/usr/local/pgsql/bin:$PATH export PGDATA/pgdata/data export PGHOSTlocalhost5. 日常管理与维护5.1 创建系统服务虽然二进制安装不自动创建服务但我们可以手动配置。创建/etc/systemd/system/postgresql.service[Unit] DescriptionPostgreSQL database server Afternetwork.target [Service] Typeforking Userpostgres Grouppostgres ExecStart/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} ExecStop/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} ExecReload/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} TimeoutSec300 [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl enable postgresql5.2 基础数据库操作创建用户和数据库的规范做法CREATE ROLE app_user WITH LOGIN PASSWORD strongpassword NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE DATABASE app_db WITH OWNER app_user ENCODING UTF8 LC_COLLATE C LC_CTYPE C TEMPLATE template0; GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;备份策略示例# 基础备份 /usr/local/pgsql/bin/pg_dump -Fc -U postgres -d mydb mydb.dump # 全量备份 /usr/local/pgsql/bin/pg_basebackup -D /pgdata/backup/$(date %Y%m%d) -Ft -z -U replicator6. 常见问题排查6.1 连接失败排查如果遇到连接问题按这个顺序检查服务是否运行ps -ef | grep postgres监听地址检查postgresql.conf中的listen_addresses认证配置检查pg_hba.conf中的规则顺序防火墙sudo iptables -L -n6.2 性能调优建议对于4核8G的服务器我的基准配置shared_buffers 2GB effective_cache_size 6GB maintenance_work_mem 512MB work_mem 16MB random_page_cost 1.1这些值需要根据实际负载调整。建议先用默认值运行再用pg_stat_statements找出慢查询。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2486986.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!