在线;离线部署:pg_sql
在线:
源码编译安装 PostgreSQL 14.8(完整步骤)
第一步:安装编译依赖
bash
sudo dnf install -y gcc gcc-c++ make readline-devel zlib-devel openssl-devel \
libicu-devel systemd-devel perl bison flex libxml2-devel libxslt-devel
第二步:下载 PostgreSQL 14.8 源码
bash
cd /var/www
wget https://ftp.postgresql.org/pub/source/v14.8/postgresql-14.8.tar.gz
tar -xzvf postgresql-14.8.tar.gz
cd postgresql-14.8
第三步:编译配置
bash
./configure --prefix=/usr/local/pgsql \
--with-openssl \
--with-systemd \
--with-libxml \
--with-libxslt
参数说明:
--prefix=/usr/local/pgsql:安装目录
--with-openssl:启用 SSL 支持
--with-systemd:支持 systemd 管理
--with-libxml / --with-libxslt:支持 XML 功能
第四步:编译与安装
bash
make -j$(nproc)
sudo make install
第五步:创建 PostgreSQL 用户和数据目录
bash
# 创建 postgres 用户和组
sudo groupadd postgres
sudo useradd -g postgres -s /bin/bash postgres
# 创建数据目录并授权
sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql
第六步:初始化数据库
bash
sudo -u postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
第七步:配置环境变量(方便使用)
bash
# 添加 PostgreSQL 到 PATH
echo 'export PATH=/usr/local/pgsql/bin:$PATH' | sudo tee /etc/profile.d/pgsql.sh
source /etc/profile.d/pgsql.sh
第八步:启动 PostgreSQL
bash
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/logfile start
第九步:验证版本
bash
/usr/local/pgsql/bin/psql --version
预期输出:psql (PostgreSQL) 14.8
第十步:设置 postgres 用户密码
bash
sudo -u postgres /usr/local/pgsql/bin/psql -c "ALTER USER postgres WITH PASSWORD '密码';"
第十一步:配置 systemd 服务(可选,推荐)
创建 systemd 服务文件,方便管理:
制作离线包:
tar -zcvf postgresql‑14.8‑offline.tar.gz -C ./pg_out usr/local/pgsql
目标机器,再解压就可以了
tar -zxvf postgresql‑14.8‑offline.tar.gz -C /
离线:
cat >> /etc/profile <<'EOF'
export PATH=/usr/local/pgsql/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
EOF
解压到指定位置。
tar -zvxf pgsql14.8-bin.tar.gz -C /
postgres --version
psql --version
添加分组和用户:
groupadd postgres
sudo useradd -g postgres -s /bin/bash postgres
创建数据库保存位置
mkdir -p /data/pgdata148
chown postgres:postgres /data/pgdata148
chmod 700 /data/pgdata148
初始化数据库
sudo -u postgres /usr/local/pgsql/bin/initdb -D /data/pgdata148
初始化配置:
echo 'export PATH=/usr/local/pgsql/bin:$PATH' | sudo tee /etc/profile.d/pgsql.sh
source /etc/profile.d/pgsql.sh
启动数据库
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /data/pgdata148 -l /data/pgdata148/pg148.log start
创建服务和开机启动:
cat > /etc/systemd/system/postgresql-14.service <<'EOF'
[Unit]
Description=PostgreSQL 14.8 Database Server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
Environment="PATH=/usr/local/pgsql/bin"
Environment="LD_LIBRARY_PATH=/usr/local/pgsql/lib"
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D /data/pgdata148 -l /data/pgdata148/pg148.log
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /data/pgdata148
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D /data/pgdata148
# 安全配置
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable postgresql-14
systemctl status postgresql-14
远程访问:
vim /data/pgdata148/postgresql.conf
localhost 改到 *
用户访问限定:
vim /data/pgdata148/pg_hba.conf
关闭防火墙或者开放端口
systemctl status firewalld
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
主从备份:
主机需要修改配置(新增内容)。允许从机访问:
echo "host replication repluser 从机IP/32 md5" >> /data/pgdata148/pg_hba.conf
创建备份用户:
sudo -u postgres /usr/local/pgsql/bin/psql -c "CREATE ROLE repluser WITH REPLICATION LOGIN PASSWORD '账户密码';"
从机执行:(从机不执行 initDB)
sudo -u postgres /usr/local/pgsql/bin/pg_basebackup \
-h 主机IP -p 5432 -U repluser \
-F p -X s -P -R -D /data/pgdata148
检测:
从机器多一个文件:ls -l /data/pgdata148/standby.signal
# 必须包含主库连接信息
cat /data/pgdata148/postgresql.auto.conf
启动从机:
cd /tmp
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /data/pgdata148 -l /data/pgdata148/pg148.log start
systemctl start postgresql-14
测试:
sudo -u postgres /usr/local/pgsql/bin/psql -c "SELECT pg_is_in_recovery();"
sudo -u postgres /usr/local/pgsql/bin/psql -c "SELECT status, sender_host, sender_port FROM pg_stat_wal_receiver;"
开机启动
systemctl daemon-reload
systemctl enable postgresql-14
systemctl status postgresql-14

浙公网安备 33010602011771号