源碼編譯安裝PostgreSQL(pg12)


源碼編譯安裝PostgreSQL(pg12)

摘要:源碼安裝PostgreSQL

    系統環境:
    Centos 7.7
    PostgreSQL12.2

1. 安裝依賴包

# yum -y install readline readline-devel zlib zlib-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel perl perl-devel tcl-devel uuid-devel gcc gcc-c++ make flex bison perl-ExtUtils*

此步驟可選,可根據需要選擇,本人是先直接編譯安裝postgres,然后根據提示再回頭安裝所需的依賴包,也推薦根據報錯信息來安裝依賴包,加深pg所需依賴包的作用。
2. 內核參數調整

根據需要指定,可跳過,采用默認值

# vi /etc/sysctl.conf 

查看已完成配置

# sysctl -p

3. 用戶limits設置

建議設置一下

# vi /etc/security/limits.conf
postgres     soft   nofile     1048576
postgres     hard   nofile     1048576
postgres     soft   nproc      131072
postgres     hard   nproc      131072
postgres     soft   stack      10240
postgres     hard   stack      32768
postgres     soft   core       6291456
postgres     hard   core       6291456

4. 創建用戶和組

# groupadd dba -g 2000
# useradd postgres -g 2000 -u 2000
# id postgres
uid=2000(postgres) gid=2000(dba) groups=2000(dba)

建議固化uid與gid,特別是后期配置流復制或集群。
5. 目錄規划

源文件目錄
# mkdir /soft
 
安裝文件目錄
# mkdir -p /soft/opt/pg12
 
數據目錄
# mkdir -p /opt/data5555
 
WAL目錄
# mkdir -p /opt/wal5555
 
歸檔目錄
# mkdir -p /opt/archive5555
 
chmod -R 0770 /opt
chmod -R 0770 /soft
chown -R postgres:dba /soft

數據目錄等帶上端口號也是比較推薦的,尤其當存在多個實例時。
6. 編譯安裝

下載文件並解壓
# su - postgres
$ cd /soft
$ wget https://ftp.postgresql.org/pub/source/v12.1/postgresql-12.2.tar.gz
$ tar -zxvf postgresql-12.2.tar.gz


編譯
$ cd postgresql-12.2/
$ ./configure --prefix=/soft/opt/pg12 --with-pgport=5555

建議修改一下端口,不采用默認5432端口

安裝
使用gmake 或者gmake world
$ gmake world
當看到最后一行顯示為:
PostgreSQL, contrib, and documentation successfully made. Ready to install.
說明已經編譯成功
 
使用gmake install或者gmake install-world 進行安裝
$ gmake install-world //包含擴展包和文檔
當看到最后一行顯示為:
PostgreSQL, contrib, and documentation installation complete.
說明已經安裝成功

查看版本
$ /soft/opt/pg12/bin/postgres --version
postgres (PostgreSQL) 12.2

7. 設置軟鏈接

$ cd /soft/opt
$ ln -s /soft/opt/pg12 /opt/pgsql

創建一個軟鏈接指向當前版本,當進行版本變更后,不需要調整調用腳本,只需要修改這個軟鏈接即可,后面都會使用這個軟鏈接。
8. 初始化數據目錄

$ /opt/pgsql/bin/initdb -D /opt/data5555 -X /opt/wal5555 -E UTF8 -U postgres -W

下面的例子使用簡體中文編碼
$ /opt/pgsql/bin/initdb -D/opt/data5555 
-E EUC_CN 
--locale=zh_CN 
-W

9. 修改數據庫參數

下面是一個參考配置
$ vi /opt/data5555/postgresql.conf
listen_addresses='192.168.220.150'
port=5555
max_connections=1000
unix_socket_directories='/opt/data5555'
wal_level=logical
archive_mode=on
archive_command='cp %p /opt/archive5555/%f'
max_wal_size=1GB
max_wal_senders=10
wal_keep_segments=512
hot_standby=on
logging_collector=on
log_destination=csvlog
log_directory='/opt/data5555/pg_log'
log_filename='pg_log_%Y-%m-%d_%H%M%S.log'
log_file_mode=0600
log_truncate_on_rotation=on
log_rotation_age=1d
log_rotation_size=10MB
log_min_messages=warning
log_min_duration_statement=30s
log_checkpoints=on
log_connections=on
log_disconnections=on
log_duration=on
log_lock_waits=on
log_statement=DDL

10.配置環境變量

$ vi ~/.bash_profile
export PGPORT=5555
export PGUSER=postgres
export PGHOME=/opt/pgsql
export PGDATA=/opt/data5555
export PATH=$PGHOME/bin:$PATH

11.手工啟停數據庫

查看數據庫運行狀態
$ pg_ctl -D /opt/data5555 status
啟動數據庫
$ pg_ctl -D /opt/data5555 start &
停止數據庫
$ pg_ctl -D /opt/data5555 stop

12.查看實例進程

$  ps f -u postgres
  PID TTY      STAT   TIME COMMAND
 1323 pts/0    S      0:00 -bash
 1456 pts/0    R+     0:00  \_ ps f -u postgres
 1058 ?        Ss     0:00 /opt/pg12/bin/postgres -D /opt/data5555
 1068 ?        Ss     0:00  \_ postgres: logger   
 1070 ?        Ss     0:00  \_ postgres: checkpointer   
 1071 ?        Ss     0:00  \_ postgres: background writer   
 1072 ?        Ss     0:00  \_ postgres: walwriter   
 1073 ?        Ss     0:00  \_ postgres: autovacuum launcher   
 1074 ?        Ss     0:00  \_ postgres: archiver   last was 000000010000000000000008
 1075 ?        Ss     0:00  \_ postgres: stats collector   
 1076 ?        Ss     0:00  \_ postgres: logical replication launcher 

13.開機自啟動

root用戶配置

# cp /soft/postgresql-12.2/contrib/start-scripts/linux /etc/init.d/postgres-12
# chmod +x /etc/init.d/postgres-12
# chkconfig postgres-12 on
# vi /etc/init.d/postgres-12
prefix=/opt/pgsql
 
PGDATA="/opt/data5555"
 
PGUSER=postgres
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
PGCTL="$prefix/bin/pg_ctl"
 
set -e
 
# Only start if we can find the postmaster.
test -x $DAEMON ||
{
    echo "$DAEMON not found"
    if [ "$1" = "stop" ]
    then exit 0
    else exit 5
    fi
}
 
# Parse command line parameters.
case $1 in
  start)
    echo -n "Starting PostgreSQL: "
    su - $PGUSER -c "$PGCTL -D '$PGDATA' start >>/dev/null &"
    echo "ok"
    ;;
  stop)
    echo -n "Stopping PostgreSQL: "
    su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s"
    echo "ok"
    ;;
  restart)
    echo -n "Restarting PostgreSQL: "
    su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s"
    su - $PGUSER -c "$PGCTL -D '$PGDATA' start >>/dev/null &"
    echo "ok"
    ;;
  reload)
    echo -n "Reload PostgreSQL: "
    su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s"
    echo "ok"
    ;;
  status)
    su - $PGUSER -c "$PGCTL status -D '$PGDATA'"
    ;;
  *)
    # Print help
    echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2
    exit 1
    ;;
Esac
 
exit 0







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM