Lời mở đầu
Chào các bạn, chắc hẳn lúc mới đầu sử dụng PostgreSQL bạn đã có lúc tự hỏi phải thiết lập cấu hình từ file cấu hình nào, PostgreSQL có những file cấu hình gì. Làm như thế nào để cấu hình,.. Bài viết này sẽ cố gắng đưa ra cách nhìn tổng quan về setting files, cách thiết lập, và một số point khi thiết lập.
PostgreSQL setting files
Tới phiên bản PostgreSQL 10, PostgreSQL có những file settings như bên dưới.
PostgreSQL 10 có nhiều thay đổi về file name, parameter name,... But may mắn là tên file setting thì không có thay đổi.
DangnoMacBook-Pro:~ bocap$ ll $PGDATA | grep conf
-rw------- 1 bocap wheel 4469 Nov 1 20:42 pg_hba.conf
-rw------- 1 bocap wheel 1636 Sep 10 23:19 pg_ident.conf
-rw------- 1 bocap wheel 88 Sep 10 23:19 postgresql.auto.conf
-rw------- 1 bocap wheel 22321 Nov 1 20:45 postgresql.conf
DangnoMacBook-Pro:~ bocap$
File Setting |
Mục đích sử dụng |
Cách phản ảnh |
---|
pg_hba.conf |
File cấu hình xác thực cho PostgreSQL server. Chỉ những host được cấu hình cho phép từ file này mới được phép xác thực tới server. File này cũng cấu hình phương pháp xác thực tới server. Ví dụ: trust(không xác thực password), password(plain text password), md5(xác thực bằng password được hash md5), ident(sử dụng xác thực thông qua OS user), ... |
reload |
pg_ident.conf |
File cấu hình mapping cho OS user với PostgreSQL trong trong phương pháp xác thực |
reload |
postgresql.auto.conf |
Được thêm vào PostgreSQL 9.4, file này có nội dung được ghi vào khi thực hiện lệnh ALTER SYSTEM để thay đổi parameters. Khuyến cáo là không nên chỉnh sửa trực tiếp file này. |
reload, restart |
postgresql.conf |
File cấu hình chính của PostgreSQL Server. |
reload, restart |
recovery.conf |
sử dụng khi restore dữ liệu từ basebackup hoặc dùng trong cấu hình standby |
restart |
Như trên có 2 cách phản ảnh parameters sau khi đã config(thay đổi giá trị paramter).
- Reload là cách làm cho các process đọc lại file config mà không làm ảnh hưởng tới Application.
DangnoMacBook-Pro:~ bocap$ pg_ctl reload
server signaled
LOG: received SIGHUP, reloading configuration files
LOG: parameter "archive_command" removed from configuration file, reset to default
DangnoMacBook-Pro:~ bocap$
- Restart là hình thức phản ảnh parameters bằng cách khởi động lại server. Cách này làm toàn bộ connections bị disconnect, nên phải khởi động lại Application. Nên nếu không cần thiết thì không dùng cách này.
DangnoMacBook-Pro:~ bocap$ pg_ctl restart
waiting for server to shut down....LOG: received fast shutdown request
LOG: aborting any active transactions
LOG: autovacuum launcher shutting down
LOG: shutting down
LOG: database system is shut down
done
server stopped
server starting
DangnoMacBook-Pro:~ bocap$
pg_hba.conf
File cấu hình này có phản ảnh sau khi config bằng cách reload mà không cần restart server. Đương nhiên là restart thì các parameters này cũng được phản ảnh.
DangnoMacBook-Pro:~ bocap$ grep "^local " $PGDATA/pg_hba.conf
local all all md5
DangnoMacBook-Pro:~ bocap$ pg_ctl reload
server signaled
LOG: received SIGHUP, reloading configuration files
DangnoMacBook-Pro:~ bocap$ psql -c "select 1"
?column?
----------
1
(1 row)
DangnoMacBook-Pro:~ bocap$
DangnoMacBook-Pro:~ bocap$ grep "^local " $PGDATA/pg_hba.conf
local all all reject
DangnoMacBook-Pro:~ bocap$ pg_ctl reload
server signaled
LOG: received SIGHUP, reloading configuration files
DangnoMacBook-Pro:~ bocap$ psql -c "select 1"
FATAL: pg_hba.conf rejects connection for host "[local]", user "postgres", database "postgres"
psql: FATAL: pg_hba.conf rejects connection for host "[local]", user "postgres", database "postgres"
DangnoMacBook-Pro:~ bocap$
pg_ident.conf
Cũng như pg_hba.conf, nội dung file này cũng được phản ảnh sau khi reload server.
postgresql.auto.conf
Nội dung file này được phản ảnh sau khi reload server, nhưng giống như postgresql.conf có một số paramters chỉ được phản ảnh sau khi restart server. Như ví dụ bên dưới, mình thay đổi 2 parameters log_disconnections và max_connections, but chỉ có log_disconnections là thay đổi được. Còn parameter max_connections thì cần restart server mới thay đổi được.
DangnoMacBook-Pro:~ bocap$ psql
psql (9.6.5)
Type "help" for help.
postgres=# alter system reset all;
ALTER SYSTEM
postgres=# \! cat $PGDATA/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by ALTER SYSTEM command.
postgres=# show max_connections ;
max_connections
-----------------
20
(1 row)
postgres=# show log_disconnections ;
log_disconnections
--------------------
off
(1 row)
postgres=# alter system set max_connections to 15;
ALTER SYSTEM
postgres=# alter system set log_disconnections to on;
ALTER SYSTEM
postgres=# show log_disconnections ;
log_disconnections
--------------------
off
(1 row)
postgres=# show max_connections ;
max_connections
-----------------
20
(1 row)
postgres=# \q
DangnoMacBook-Pro:~ bocap$ pg_ctl reload
server signaled
LOG: received SIGHUP, reloading configuration files
LOG: parameter "max_connections" cannot be changed without restarting the server
LOG: parameter "log_disconnections" changed to "on"
LOG: configuration file "/usr/local/pgsql/pg9605/data/postgresql.auto.conf" contains errors; unaffected changes were applied
DangnoMacBook-Pro:~ bocap$ psql
psql (9.6.5)
Type "help" for help.
postgres=# show log_disconnections ;
log_disconnections
--------------------
on
(1 row)
postgres=# show max_connections ;
max_connections
-----------------
20
(1 row)
postgres=# \! cat $PGDATA/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by ALTER SYSTEM command.
max_connections = '15'
log_disconnections = 'on'
postgres=# \q
LOG: disconnection: session time: 0:00:33.338 user=postgres database=postgres host=[local]
DangnoMacBook-Pro:~ bocap$
Parameter max_connections được thay đổi sau khi server restart.
DangnoMacBook-Pro:~ bocap$ pg_ctl restart
waiting for server to shut down....LOG: received fast shutdown request
LOG: aborting any active transactions
LOG: autovacuum launcher shutting down
LOG: shutting down
LOG: database system is shut down
done
server stopped
server starting
DangnoMacBook-Pro:~ bocap$ LOG: database system was shut down at 2017-11-04 22:53:11 JST
LOG: MultiXact member wraparound protections are now enabled
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
DangnoMacBook-Pro:~ bocap$ psql
psql (9.6.5)
Type "help" for help.
postgres=# show max_connections ;
max_connections
-----------------
15
(1 row)
postgres=#
postgresql.conf
Giống như postgresql.auto.conf, cách phản của postgresql.conf cũng như vậy.
Ở postgresql.conf và postgresql.auto.conf các parameters dưới đây cần restart server để phản ánh sau khi config.
postgres=# select name,context from pg_settings where context = 'postmaster';
name | context
-------------------------------------+------------
allow_system_table_mods | postmaster
archive_mode | postmaster
autovacuum_freeze_max_age | postmaster
autovacuum_max_workers | postmaster
autovacuum_multixact_freeze_max_age | postmaster
bonjour | postmaster
bonjour_name | postmaster
cluster_name | postmaster
config_file | postmaster
data_directory | postmaster
dynamic_shared_memory_type | postmaster
event_source | postmaster
external_pid_file | postmaster
hba_file | postmaster
hot_standby | postmaster
huge_pages | postmaster
ident_file | postmaster
listen_addresses | postmaster
logging_collector | postmaster
max_connections | postmaster
max_files_per_process | postmaster
max_locks_per_transaction | postmaster
max_pred_locks_per_transaction | postmaster
max_prepared_transactions | postmaster
max_replication_slots | postmaster
max_wal_senders | postmaster
max_worker_processes | postmaster
old_snapshot_threshold | postmaster
port | postmaster
shared_buffers | postmaster
shared_preload_libraries | postmaster
ssl | postmaster
ssl_ca_file | postmaster
ssl_cert_file | postmaster
ssl_ciphers | postmaster
ssl_crl_file | postmaster
ssl_ecdh_curve | postmaster
ssl_key_file | postmaster
ssl_prefer_server_ciphers | postmaster
superuser_reserved_connections | postmaster
track_activity_query_size | postmaster
track_commit_timestamp | postmaster
unix_socket_directories | postmaster
unix_socket_group | postmaster
unix_socket_permissions | postmaster
wal_buffers | postmaster
wal_level | postmaster
wal_log_hints | postmaster
(48 rows)
recovery.conf
Khi server start nếu thư mục dữ liệu tồn tại file recovery.conf PostgreSQL sẽ đọc file này và thực hiện quá trình recovery như trong file recovery.conf chỉ định.
Ví dụ bên dưới mình tạo một standby và thiết lập recovery.conf để khi standby server khi khởi động trước hết sẽ restore archive log từ "/mnt/archivedir/".
DangnoMacBook-Pro:~ bocap$ pg_basebackup -h localhost -R -x -D $PGDATA.sby
LOG: disconnection: session time: 0:00:01.258 user=postgres database= host=::1 port=63760
DangnoMacBook-Pro:~ bocap$ echo port=9606 >> $PGDATA.sby/postgresql.conf
DangnoMacBook-Pro:~ bocap$ cat >> $PGDATA.sby/recovery.conf restore_command = 'cp /mnt/archivedir/%f "%p"'
> EOF
DangnoMacBook-Pro:~ bocap$ pg_ctl start -D $PGDATA.sby
server starting
DangnoMacBook-Pro:~ bocap$ LOG: database system was interrupted; last known up at 2017-11-04 23:10:05 JST
LOG: entering standby mode
LOG: restored log file "00000001000000040000007F" from archive
LOG: redo starts at 4/7F000060
LOG: consistent recovery state reached at 4/7F000130
cp: /mnt/archivedir/000000010000000400000080: No such file or directory
LOG: started streaming WAL from primary at 4/80000000 on timeline 1
DangnoMacBook-Pro:~ bocap$