目录
4、write-ahead logging以及checkpoint的动态信息
一、控制文件的结构
1、控制文件的位置与大小
逻辑位置:pg_global表空间中
物理位置与名字:$PGDATA/global/pg_control
物理大小:8k(控制文件内容尽量保持小于512个字节)
2、静态参数
初始化数据库时生成的,除非重新初始化数据库,否则不可更改
3、postgresql.conf中的配置信息
参数配置文件内配置的参数举例如下:
4、write-ahead logging以及checkpoint的动态信息
动态信息会在数据库启动期间 随时更新,举例如下:
二、控制文件的维护与备份
1、固定部分:初始化数据库时产生,固定不变
2、有些信息随时更新:如果发生检査点、备份、日志切换等操作,则自动更新
3、postgres.conf相关参数被更新:如果配置文件中重要的相关参数被修改,则也会自动更新
4、数据库备份时会一起备份
#必须与数据库备份一起备份、一起恢复,不能单独备份。
备份的三种方式如下:
(1)tar命令
tar -jcv -f baseline.tar.bz2 $PGDATA
(2)pg_basebackup命令
pg_basebackup -D bk1 -Ft -z -P
(3)pg_rman命令
pg_rman backup --backup-mode=full -B /home/postgres/pg_rman_bk/ -C -P
5、不能手动修改该文件
6、启动和恢复数据库时需要,当前没有避免发生单一故障点而设计的保护策略
三、重建控制文件(无备份时)
PG10版本以前使用pg_resetxlog工具;10及以后版本使用pg_resetwal工具
本文主讲pg_resetwal
1、重建执行过程:
#创建空文件
cd $PGDATA/global
touch pg_control
#执行重建操作
pg_resetwal -l 000000010000000200000095 -O 0x1000000000 -m 0x00010000, 0x00010000 -x 0x000100000 -f $PGDATA
#查看控制文件内容
pg_crontroldata
#重新启动数据库,或用pg_ctl start
systemctl start postgresql
2、pg_resetwal参数获取说明:
(1)-l
XLOGFILE force minimun WAL starting location for new transaction log
(XLOGFILE强制新事务日志的最小wal起始位置)
参数值获取方法:$PGDATA/pg_wal下 找到创建的最大的日志文件编号+1
(2)-O
OFFSET set next multitransaction offset
参数值获取方法:在$PGDATA/pg_multixact/members下面,找到文件编号中最大的数字,+1,然后乘以65536.转换成16进制为100000,然后末尾添加4个0 (-O 0x1000000000)
例:
0000中最大的数字为0;+1=1;*100000=100000;末尾添加0000=1000000000(9个0);0x表示16进制;得到结果:0x1000000000
(3)-m
MXID set next and oldest multitransaction ID
参数值获取方法:在pg_multixact/offsets下面,找到最大的文件编号,+1,然后末尾添加4个0
(-m 0x00010000, 0x00010000)
例:
0000+1=0001;+4个0=00010000;0x表示16进制;重复一遍;得到:0x00010000, 0x00010000
(4)-x
XID set next transaction ID
参数值获取方法:在pg_xact下面,找到最大的文件编号,+1,后面跟上5个0(-x 0x000100000)
例:
0000+1=0001;+5个0=00010000;0x表示16进制;得到:0x000100000