前面我們通過“探索postgresql數據庫(一)”和“探索postgresql數據庫(二)”基本了解了postgresql數據庫。接下來本文開始介紹下數據庫控制(server control)。。
一、手動開啟數據庫(Starting the database server manually)
默認postgresql會隨著系統自動啟動,不過有時候設置改動可能需要手動停止或者啟動數據庫。
首先需要區別server和service兩個概念。server指的是database server和他的一些進程,service指的是操作系統中被server包裝起來的服務。server本質上可以在不同平臺上以相同的方式工作,但是service就會因為各個操作系統不同而不同。
在所有操作系統平臺,都有命令來啟動postgresql server,如:
UBUNTU/DEBIAN pg_ctlcluster 9.0 main reload
RED HAT/FEDORA pg_ctl -D /var/lib/pgsql/data start
SOLARIS pg_ctl -D /var/lib/pgsql/data start
MAC OS pg_ctl -D /var/lib/pgsql/data start
FREEBSD pg_ctl -D /var/lib/pgsql/data start
在有些平臺,也可以用這些命令啟動。
RED HAT/FEDORA service postgresql start
WINDOWS net start postgres
二、安全快速停止數據庫(Stopping the server safely and quickly)
可以用以下命令快速停止數據庫:
pg_ctl -D datadir -m fast stop
如果想快速停止,就一定要加-m fast這個參數,因為默認postgresql是需要等所有用戶結束才會關閉的。使用fast快速停止命令,所有用戶在進行的操作都會終止。在關閉數據庫時,postgresql和其他如Oracle, DB2, 或者SQLServer關系型數據庫的區別是postgresql的事務回滾非常快,而其他數據庫關閉可能需要很長時間。
三、緊急停止數據庫(Stopping the server in an emergency)
pg_ctl -D datadir stop -m immediate
使用immediate模式和fast模式一樣,都會強制中止所有用戶的事務,關閉連接。不過immediate模式相當于數據庫經歷了崩潰,比如斷電。下次重啟時緩存的文件需要重建,數據庫自己也需要對崩潰進行恢復。
需要dba注意的是,Oracle中的immediate模式相當于強制關閉數據庫,postgresql和oracle這個是不一樣的。
四、重新加載數據庫配置文件(Reloading the server configuration files)
postgresql配置文件中的一些參數需要重新加載才會生效。以下是各個操作系統平臺重新加載的命令:
UBUNTU/DEBIAN pg_ctlcluster 9.0 main reload
RED HAT/FEDORA service postgresql reload 或pg_ctl -D /var/lib/pgsql/data reload
SOLARIS pg_ctl -D /var/lib/pgsql/data reload
MAC OS pg_ctl -D /var/lib/pgsql/data reload
FREEBSD pg_ctl -D /var/lib/pgsql/data reload
我們也可以在連接postgresql的時候重新加載配置文件,不過前提是你登陸的是超級用戶:
postgres=# select pg_reload_conf(); pg_reload_conf ---------------- t
在pg_settings這個系統表中有一個context字段,如果字段值是”sighup”,那么就必須要reload。以下列出在數據庫配置中可能需要改變的參數:
forummon=# select name,setting,unit,(source=\'default\') as is_default from pg_settings where context =\'sighup\' and (name like \'%delay\' or name like \'%timeout\') and setting !=\'0\' ; name | setting | unit | is_default ------------------------------ --------- ------ ------------ authentication_timeout | 60 | s | t autovacuum_vacuum_cost_delay | 20 | ms | t bgwriter_delay | 200 | ms | t checkpoint_timeout | 300 | s | t max_standby_archive_delay | 30000 | ms | t max_standby_streaming_delay | 30000 | ms | t wal_receiver_timeout | 60000 | ms | t wal_sender_timeout | 60000 | ms | t wal_writer_delay | 200 | ms | t (9 rows)
五、快速重啟數據庫(Restarting the server quickly)
有些數據庫配置的修改必須要求重啟數據庫,如何快速重啟就顯得特別重要。當然重啟最好是在數據庫壓力很小的時候。
基礎快速重啟命令:
pg_ctl -D datadir restart -m fast
重啟表面上看是先停止,在啟動,很簡單的一個步驟。在大多數情況下,這個確實很簡單。
六、防止新鏈接(Preventing new connections)
在某些緊急情況下,dba們可能需要完全鎖定數據庫,或者靜止特定的人連接。
一下是防止新鏈接的幾個方法:
1、暫?;蛘呋謴蜁挸?;后面介紹
2、關閉數據庫,不推薦這樣做;
3、設置特定數據庫的連接數為0;
ALTER DATABASE foo_db CONNECTION LIMIT 0;
這個可以限制除了超級用戶外的其他用戶。
4、設置特定用戶的連接數為0
ALTER USER foo CONNECTION LIMIT 0;
這個可以限制除了超級用戶外的其他用戶。
5、修改host-based authentication (HBA)文件,重新加載數據庫
先備份下pg_hba.conf文件,修改pg_hba.conf文件。
###如下兩行將會禁止所有用戶連接數據庫,包括超級用戶:
# TYPE DATABASE USER CIDR-ADDRESS METHOD local all all reject host all all 0.0.0.0/0 reject ###如果需要讓postgres這個超級用戶連接,可以修改成如下設置: # TYPE DATABASE USER CIDR-ADDRESS METHOD local all postgres ident local all all reject host all all 0.0.0.0/0 reject
d.重新加載數據庫
七、限制每個連接用戶只能打開一個session(Restricting users to just one session each)
如果需要控制服務器資源,你可能會希望一個用戶只能同時打開一個session連接。當然這個也可以用來限制用戶,這個上面已經有介紹。以下是基本命令:
postgres=# ALTER ROLE fred CONNECTION LIMIT 1;
需要取消限制可以把值設為-1。
查詢用戶鏈接限制
SELECT rolconnlimit FROM pg_roles WHERE rolname = \'postgres\';
查看用戶當前連接數
SELECT count(*) FROM pg_stat_activity WHERE usename = \'postgres\';
西部數碼(west.cn)是經工信部審批,持有ISP、云牌照、IDC、CDN全業務資質的正規老牌云服務商,自成立至今20余年專注于域名注冊、虛擬主機、云服務器、企業郵箱、企業建站等互聯網基礎服務!
公司自研的云計算平臺,以便捷高效、超高性價比、超預期售后等優勢占領市場,穩居中國接入服務商排名前三,為中國超過50萬網站提供了高速、穩定的托管服務!先后獲評中國高新技術企業、中國優秀云計算服務商、全國十佳IDC企業、中國最受歡迎的云服務商等稱號!
目前,西部數碼高性能云服務器正在進行特價促銷,最低僅需48元!
https://www.west.cn/cloudhost/