PostGreSQL(1)-源碼安裝


目錄

簡述

目前大多數Linux 發行版都包含了 PostGreSql的安裝源,通過yumapt-get可以快速的安裝好數據庫。
在一些情況下,我們需要通過源碼方式進行安裝。 例如發行版的軟件版本不滿足我們的需求,或者生產環境無法對接外網下載軟件等等。
下面將從頭到尾介紹手動源碼安裝PostGres的全過程,供大家參考。

一、格式化磁盤

一般我們會為數據庫掛載一個獨立的磁盤用於數據存放,可以參考下面的操作完成磁盤格式化。

不需要掛載磁盤的可跳過這部分

A.查看磁盤信息

kwe1000570040:~ # fdisk -l

Disk /dev/vda: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000aa73e

   Device Boot Start End Blocks Id System
/dev/vda1 * 2048 75505663 37751808 83 Linux
/dev/vda2 75505664 83886079 4190208 82 Linux swap / Solaris

Disk /dev/vdb: 322.1 GB, 322122547200 bytes

這里找到待使用的磁盤為 /dev/vdb

B.使用parted設置分區

//設置分區格式(gpt)
parted -s /dev/vdb mklabel gpt


//執行分區(1GB預留) --第一個分區用於存放工作軟件
parted -a optimal -s /dev/vdb mkpart primary 1GB 100GB

//執行分區 --第二個分區用於存放數據
parted -a optimal -s /dev/vdb mkpart extend 100GB 100%

關於 Parted工具的使用可參考這里

C. 格式化並掛載分區

推薦使用XFS文件系統格式,在掛載分區時指定noatime,nodiratime選項可提升一些性能。

//XFS數據分區格式化
mkfs.xfs -f /dev/vdb1 
mkfs.xfs -f /dev/vdb2 

//創建數據目錄
mkdir -p /opt/local
mkdir -p /data

chmod -R 755 /opt/local
chmod -R 755 /data

//寫入FSTAB
echo "/dev/vdb1 /opt/local xfs noatime,nodiratime 0 0">> "/etc/fstab"
echo "/dev/vdb2 /data xfs noatime,nodiratime 0 0">> "/etc/fstab"

//掛載目錄
mount -a

二、源碼安裝 PostGreSql

1. 安裝 readline-devel

需事先安裝 readline,否則編譯過程會報錯

wget https://ftp.gnu.org/gnu/readline/readline-6.0.tar.gz
tar -xzvf readline-6.0.tar.gz
cd readline
./configure
make && make install

2. 安裝 PostGresql

執行下面的命令,將會完成源碼下載、編碼以及安裝

wget https://ftp.postgresql.org/pub/source/v10.6/postgresql-10.6.tar.gz
tar -xzvf postgresql-10.6.tar.gz
cd postgresql-10.6

./configure --prefix=/opt/local/postgres
make && make install

--prefix表示安裝的目標路徑,在安裝完成后可以進入該目錄找到對應的執行程序。

這里使用的是postgresql-10.6的版本,可以從這里下載到不同的版本。

3. 設置環境變量

編輯 /etc/profile 文件,在末尾加入:

export PG_HOME=/opt/local/postgres
export PATH=$PG_HOME/bin:$PATH

再次執行 source /etc/profile即完成環境變量設置。
接下來,需要設置動態鏈接庫的加載路徑(LD_LIBRARY_PATH),否則會報找不到libpq.so.5的錯誤,如下:

./psql: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory

設置鏈接庫路徑

sudo /sbin/ldconfig /opt/local/pgsql/lib

或通過編輯/etc/profile,加入:

LD_LIBRARY_PATH=/usr/local/pgsql/lib
export LD_LIBRARY_PATH

三、 初始化

1. 設置運行用戶

groupadd postgres
useradd -G postgres postgres
passwd postgres
...

2. 初始化數據庫


//執行初始化
su postgres -c 'pg_ctl -D /data/pgsql/data initdb'
//啟動數據庫
su postgres -c 'pg_ctl start -D /data/pgsql/data -l serverlog'

su postgres -c '...'表示以postgres 的權限來執行程序。
pg_ctl 是postgres 提供的控制程序,可用於初始化、啟動、停止數據庫進程。

執行完上述的命令,可以發現在 /data/pgsql/data目錄中生成了一系列的數據庫文件,如下:

-rw------- 1 postgres users 3 Mar 5 17:18 PG_VERSION
drwx------ 6 postgres users 50 Mar 5 18:22 base
drwx------ 2 postgres users 4.0K Mar 5 17:50 global
drwx------ 2 postgres users 6 Mar 5 17:18 pg_commit_ts
drwx------ 2 postgres users 6 Mar 5 17:18 pg_dynshmem
-rw------- 1 postgres users 4.5K Mar 5 17:18 pg_hba.conf
-rw------- 1 postgres users 1.6K Mar 5 17:18 pg_ident.conf
drwx------ 4 postgres users 65 Mar 5 18:28 pg_logical
drwx------ 4 postgres users 34 Mar 5 17:18 pg_multixact
drwx------ 2 postgres users 17 Mar 5 17:49 pg_notify
drwx------ 2 postgres users 6 Mar 5 17:18 pg_replslot
drwx------ 2 postgres users 6 Mar 5 17:18 pg_serial
drwx------ 2 postgres users 6 Mar 5 17:18 pg_snapshots
drwx------ 2 postgres users 6 Mar 5 17:49 pg_stat
drwx------ 2 postgres users 60 Mar 7 16:06 pg_stat_tmp
drwx------ 2 postgres users 17 Mar 5 17:18 pg_subtrans
drwx------ 2 postgres users 6 Mar 5 17:18 pg_tblspc
drwx------ 2 postgres users 6 Mar 5 17:18 pg_twophase
drwx------ 3 postgres users 58 Mar 5 17:18 pg_wal
drwx------ 2 postgres users 17 Mar 5 17:18 pg_xact
-rw------- 1 postgres users 88 Mar 5 17:18 postgresql.auto.conf
-rw------- 1 postgres users 23K Mar 5 17:18 postgresql.conf
-rw------- 1 postgres users 57 Mar 5 17:49 postmaster.opts
-rw------- 1 postgres users 83 Mar 5 17:49 postmaster.pid
-rw-r--r-- 1 postgres users 1.2K Mar 5 18:22 serverlog

其中,需要了解的幾個文件:

文件 描述
postmaster.pid 首行記錄了進程PID
serverlog 數據庫日志
postgresql.conf 主配置文件(可做定制
pg_hba.conf 鑒權相關文件
PG_VERSION 當前主版本號

3. 設置遠程訪問

編輯 pg_hba.conf文件,在末尾添加一行:

host all all 0.0.0.0/0 md5

為了讓 postgres用戶可以遠程訪問,可以通過 psql 設置密碼:

alter user postgres with password 'postgres';

開啟遠程訪問
默認情況下 postgresql 僅僅監聽本機的端口,需要編輯 /webdata/pgsql/data/postgresql.conf 文件開啟遠程IP的訪問

listen_addresses = '*'

4. 常用命令

如果需要定制端口,可以執行腳本:

postgres -p 5430 -D /data/pgsql/data >serverlog 2>&1 &

檢查進程是否存活:

netstat -nlp |grep `head -1 /data/pgsql/data/postmaster.pid`

停止數據庫進程

kill -INT `head -1 /data/pgsql/data/postmaster.pid`

四、 自動運行

數據庫一般需要設置為隨系統啟動運行,省去每次重啟要手動拉起進程的麻煩。

1. 配置到服務

找到源碼目錄中 contrib/start-scripts/linux腳本文件,拷貝為 /etc/init.d/postgres

修改內容如下:


# 程序所在目錄
prefix=/opt/local/postgres

# 數據目錄
PGDATA="/data/pgsql/data"

# 運行用戶
PGUSER=postgres

# 日志文件
PGLOG="$PGDATA/serverlog"

設置執行權限

chmod +x /etc/init.d/postgres

此后,執行以下命令可以方便的啟停服務

//手動啟動服務
service postgres start

//查看服務狀態
service postgres status

//手動停止服務
service postgres stop

2. 設置自啟動

執行以下命令:

//設置開機啟動
chkconfig --add postgres

如果需要對數據庫做一些參數修改,可以編輯 $DATA_DIR/postgres.conf 這個文件

五、 小試牛刀

按照前面的步驟做好了數據庫的安裝及配置之后,輸入以下命令:

psql -U postgres -p 5432

> select version();

回車,可以看到以下輸出:

                                                version
---------------------------------------------------------------------------------------------------------------------
 PostgreSQL 10.6 on x86_64-pc-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 64-bit
(1 row)

至此,我們就已經完成了整個源碼的安裝過程!

作者:美碼師


免責聲明!

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



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