PG运维篇–服务启停

pg启停

启库

(1)直接运行postgres进程启动

postgres -D  /home/osdba/pgdata &

-D 用于指定数据目录,命令最后一个&表示后台执行

(2)使用pg_ctl命令启动

pg_ctl -D /home/osdba/pgdata start

停库

(1)直接向运行的postgres主进程发送signal信号,停止数据库

(2)使用pg_ctl命令停止数据库

停止数据库的三种模式

(1)smart shutdown

不允许新连接,等已有的连接全部结束后才关闭数据库。

(2)fast shutdown

快速关闭模式,不再允许新的连接,向所有活跃服务进程发送SIGTERM信号,让它们立即退出,等待所有子进程退出并关闭数据库。如果服务处于在线备份状态,将直接终止备份。

(3)immediate shutdown

立即关闭模式,主进程postgres向所有子进程发送SIGQUIT信号,并且立即退出,所有子进程也会立即退出。采用这种模式退出时,并不会妥善地关闭数据库系统,下次启动时数据库会重放wal日志进行恢复。

操作如下

pg_ctl -D /opt/pgdata stop -ms  等价于 等待连接关闭
pg_ctl -D /opt/pgdata stop -mf 等价于 杀掉会话,回滚,关闭
pg_ctl -D /opt/pgdata stop -mi 等价于 kill -9

pg_ctl工具

功能

(1)初始化数据库实例

pg_ctl init[db]  [-s] [-D datadir ] [ -o options]
-s打印错误和告警信息
-D datadir 指定数据库实例的数据目录

(2)启动、终止、重启pg

pg_ctl -D /opt/pgdata -l logfile start 启动
pg_ctl -D /opt/pgdata restart & 重启

(3)查看pg状态

pg_ctl status -D /opt/pgdata 

(4)让数据库实例重新读取配置文件

pg_ctl -D /opt/pgdata reload           重新读取配置文件

(5)允许给一个指定的进程发送的信号

SIGTERM:smart shutdown 关机模式
SIGINT: fast shutdown 关机模式
SIGQUIT: immediate shutdown 关机模式

使用pg_ctl reload 命令和直接调用函数pg_reload_conf()本质也是发送SIGHUP命令给服务主进程。

单用户模式

指启动pg时加上 --single参数,这时pg进程不会进入后台服务模式,用于以下场景

(1)initdb阶段

(2)修复系统表

(3)当多用户模式不接受所有命令时,可以使用单用户模式连接到数据库

PG中一条记录事务年龄不能超过231,如果超过该范围,这条数据就会丢失,pg不允许这种情况发生,当记录的年龄距离231还有一千万的时候,日志中会有告警。如果不处理,还有一百万时,数据库服务器将自动禁止来自任何用户的连接。

这种情况下,只能把数据库启动到单用户模式下执行VACUUM命名来修复。

postgres --single -D /opt/pgdata

...
VACUUM FULL;
...

发表评论

相关文章