PostgreSQL12安裝(二)
通過原始碼編譯安裝
1. 下載原始碼
在PostgreSQL官方主頁https://www.postgresql.org/ftp/source/下載區選擇所需格式的原始碼包下載;
wget https://ftp.postgresql.org/pub/source/v12.3/postgresql-12.3.tar.gz
下載之後解壓
tar xf postgresql-12.3.tar.gz
2. 執行configure程式配置編譯選項
執行configure程式之前,需要先準備好編譯環境和安裝必要的包:
yum groupinstall "Development tools"
yum install -y bison flex readline-devel zlib-devel
在原始碼目錄中執行configure --help命令檢視支援的配置編譯選項:
cd postgresql-12.3
./configure --help|less
PostgreSQL支援的編譯選項眾多,常用的編譯選項有:
- --prefix=PREFIX:指定安裝目錄,預設的安裝目錄為”/usr/local/pgsql“;
- --includedir=DIR:指定C和C++的標頭檔案目錄,預設的安裝目錄為”PREFIX/include“;
- --with-pgport=PORTNUM:指定初始化資料目錄時的預設埠,這個值可以在安裝之後進行修改(需要重啟資料庫),修改它只在自行製作RPM包時有用,其它時候意義並不大;
- --with-blocksize=BLOCKSIZE:指定資料檔案的塊大小,預設的是8kB,如果在OLAP場景下可以適當增加這個值到32kB,以提高OLAP的效能,但在OLTP場景下建議使用8kB預設值;
- --with-segsize=SEGSIZE:指定單個檔案的大小,預設是1GB;
- --with-wal-blocksize=BLOCKSIZE:指定WAL檔案的塊大小,預設是8kB;
- --with-wal-segsize=SEGSIZE:指定單個WAL檔案的大小,預設是16MB。
由於”--with-xxx-size“這4個引數都只能在編譯的時候指定,所以在修改它們之前,請提前做好規劃和嚴格的測試,否則後期再做調整,只能將資料匯出重新匯入,如果資料量很大會令人抓狂。
執行configure配置編譯選項如下所示:
./configure --prefix=/web/pgsql12/ --with-pgport=5432
執行configure程式的國產中,如果遇到類似”configure:error:readline library not found“的錯誤,說明缺少所需的包或者開發包,通過yum進行安裝即可。
3. 編譯安裝
在Linux中,PostgreSQL的編譯和安裝使用GNU make程式,編譯使用gmake命令,安裝使用gmake install命令。如果希望在編譯和安裝時,一次性將文件及附加模組全部進行編譯和安裝,可以使用gmake world命令和gmake install-world命令。對於已經安裝的資料庫,再單獨對文件和模組進行編譯和安裝也是可以的,但仍然推薦使用帶有world的編譯和安裝命令一次做完這些事,這樣可以保證網路中所有資料庫軟體的一致性,也避免給後期維護工作帶來麻煩。
執行gmak或gmake world程式進行編譯,如下所示:
gmake
如果使用gmake進行編譯,當看到最後一行的輸出為”All of PostgreSQL successfully made. Ready to install.“說明已經編譯成功。
如果使用gmake world進行編譯,當看到最後一行的輸出為”PostgreSQL,contrib,and documentation successfully made. Ready to install.“說明已經編譯成功。
gamke install
如果使用gmake install進行安裝,當看到最後一行的輸出為”PostgreSQL installation complete.“說明已經安裝成功。
如果使用gmake install-world進行安裝,當看到最後一行的輸出為”PostgreSQL,contrib,and documentation installation complete.“說明已經安裝成功。
檢視安裝的PostgreSQL版本的命令如下所示:
/web/pgsql12/bin/postgres --version
postgres (PostgreSQL) 12.3
4. 設定一個軟連結
有時候我們為了方便工作,會自己寫一些shell或Python指令碼處理一些定時任務,經常會通過類似/web/pg12.x這樣的全路徑呼叫一些工具,使用環境變數也會有一些其它的問題存在,如何儘可能的避免這種麻煩?很簡單。
建立一個/web/pgsql的軟連結指向當前版本即可,命令如下:
ln -s /web/pgsql12 /web/pgsql
當進行了版本變更之後,不需要調整大量的指令碼,只需要修改這個軟連結即可。
至此,我們已經成功的安裝了PostgreSQL資料庫:
tree -L 1 /web/pgsql12/
/web/pgsql12/
├── bin
├── include
├── lib
└── share
5. 建立作業系統使用者
groupadd -g 1005 postgres
useradd -g 1005 -u 1005 postgres
id postgres
uid=1005(postgres) gid=1005(postgres) 組=1005(postgres)
注意事項: - 出於安全考慮,這個作業系統使用者不能是root或者具有作業系統管理員許可權的賬號,例如擁有sudo許可權的使用者;
- 如果是部署叢集,建議配置NTP服務,統一叢集中每個節點的作業系統使用者的uid和gid,如果叢集中某些節點的資料庫作業系統使用者的uid和gid與其它節點不一致,可以通過groupmod命令和usermod命令進行修改,例:
groupmod -g 100 postgres
usermod -u 100 -g 100 postgres
6. 建立資料目錄
也就是在磁碟上初始化一個數據的儲存區域,通常我們稱之為資料目錄。
mkdir -p /web/data_5432
將資料目錄的屬主修改為我們建立的作業系統使用者,並且修改資料目錄的許可權為0700,修改目錄許可權這一步其實並不需要,因為initdb會回收除PostgreSQL使用者之外所有使用者的訪問許可權。但我們應該明確知道資料目錄包含所有儲存在資料庫裡的資料,保護這個目錄不受未授權的訪問非常重要。
chown -R postgres.postgres /web/data_5432
chmod 0700 /web/data_5432
7. 初始化資料目錄
[root@bl68 web]# /web/pgsql12/bin/initdb --help
initdb initializes a PostgreSQL database cluster.
Usage:
initdb [OPTION]... [DATADIR]
Options:
-A, --auth=METHOD 為本地使用者指定pg_hba.conf檔案中的認證方法,可以為md5、trust、password等,為了安裝方便,預設的值是trust,但是除非你信任資料庫例項所在伺服器上的所有本地使用者
--auth-host=METHOD 指定通過TCP/IP連線的本地使用者在pg_hba.conf中使用的認證方法;
--auth-local=METHOD 指定通過UNIX Socket連線的本地使用者在pg_hba.conf檔案中的認證方法;
[-D, --pgdata=]DATADIR 將要初始化的資料目錄,其它選項都可以省略,只有這個選項是必需;
-E, --encoding=ENCODING 設定資料庫的預設編碼,實際它是設定了template的編碼,因為其它新建立的資料庫都是以template1為模板克隆的。
-g, --allow-group-access 設定允許的使用者組在資料目錄的讀或執行許可權。
--locale=LOCALE 設定區域
--lc-collate=, --lc-ctype=, --lc-messages=LOCALE
--lc-monetary=, --lc-numeric=, --lc-time=LOCALE
為指定的分類設定區域
--no-locale 等價於 --locale=C
--pwfile=FILE 從一個檔案讀取第一行作為資料庫超級使用者的口令
-T, --text-search-config=CFG 設定預設的文字搜尋設定
-U, --username=NAME 設定資料庫超級使用者的使用者名稱,預設是postgres
-W, --pwprompt 在initdb的過程中為資料庫超級使用者設定一個密碼。
-X, --waldir=WALDIR 指定預寫日誌(WAL)的儲存目錄
--wal-segsize=SIZE 指定單個WAL檔案的大小,預設是8kB
su - postgres
/web/pgsql12/bin/initdb -D /web/data_5432/
至此資料庫目錄初始化完成。
8. 啟動和停止資料庫伺服器
啟動
su - postgres
/web/pgsql12/bin/pg_ctl -D /web/data_5432/ start
檢視狀態
/web/pgsql12/bin/pg_ctl -D /web/data_5432/ status
停止
/web/pgsql12/bin/pg_ctl -D /web/data_5432/ stop