vb_initdb
功能描述
vb_initdb工具用于初始化数据库,在初始化数据库时会创建数据库目录、生成大量系统表和系统视图、创建默认数据库和模板数据库。
初始化时生成的数据库如下所示,初始时如下四个数据库配置一致:
数据库名称 | 数据库介绍 | 数据库功能 |
---|---|---|
template0 | 指初始化实例时生成的数据库模板,未经过用户或应用程序修改。 作为默认模板生成“干净”的数据库。 |
只读 使用 CREATE DATABASE 命令默认创建基于 template0模板复制而来的数据库。 |
template1 | 自定义数据库模板 | 管理员可连接进行修改,修改后使用CREATE DATABASE TEMPLATE template1 命令可创建一个基于自定义模板复制而来的数据库。 |
postgres | 系统默认数据库 | 供内部管理使用,不建议用户直接操作。 |
说明
- 连接工具vsql的默认数据库为数据库安装用户同名的数据库。
- 若使用postgres以外的安装用户,不指定数据库连接,则会报错数据库不存在,用户应显式指定已存在的数据库名。
注意事项
- 在初始化实例时可以通过参数来指定数据库的兼容模式,创建实例完成后,在实例中可提供并仅提供此兼容模式的特有功能。
- 在安装数据库时,推荐使用-D参数调用vb_initdb初始化数据库。如果由于故障恢复等原因,需要重新初始化一个数据库,可以通过执行vb_initdb来完成。
- 尽管vb_initdb会尝试创建相应的数据目录,但可能没有权限执行此操作,因为要创建目录的父目录通常被root所拥有。如果要创建数据目录,首先用root用户创建一个空数据目录,然后用chown命令把该目录的所有权交给数据库用户。
- vb_initdb决定初始化数据库的设置,而该设置将会成为其他数据库的默认设置。
- vb_initdb初始化数据vb库的缺省区域和字符集编码。字符集编码、字符编码排序(LC_COLLATE)和字符集类(LC_CTYPE,如大写、小写数字等)可以在创建数据库时独立设置。
语法格式
vb_initdb [OPTION]... [DATADIR]
参数说明
- -A, --auth=METHOD
指定本地用户连接数据库时的认证方法,即“pg_hba.conf”配置文件中host和local所在行的认证方法。
METHOD取值范围:trust、reject、md5(不安全的算法,为了兼容老版本而存在)、sha256、sm3
默认值:trust说明
- 除非用户对本地用户都是信任的,否则不要使用默认值trust。
- 若取值为md5,则需手动修改参数文件 postgresql.conf.sample中的密码存储类型 password_encryption_type参数的值修改为0,且放开注释使之生效。vs_initdb工具需同时配合-W选项一起使用。
- --auth-host=METHOD
指定本地用户通过TCP/IP连接数据库时的认证方法,即:“pg_hba.conf”配置文件中host所在行的认证方法。
METHOD取值范围:trust、reject、md5(不安全的算法,为了兼容老版本而存在)、sha256、sm3
默认值:trust指定此参数则会覆盖-A参数的值。说明
- --auth-local=METHOD
指定本地用户通过Unix域套接字连接数据库时的认证方法,即“pg_hba.conf”配置文件中local所在行的认证方法。
METHOD取值范围:trust、reject、md5(不安全的算法,为了兼容老版本而存在)、sha256、sm3、peer(仅用于local模式)
默认值:trust指定此参数则会覆盖-A参数的值。说明
- -c, --enable-dcf
设置安装的节点为DCF模式。 - --enable-dss
开启资源池化参数功能。 - -I
指定节点ID,初始化资源池化参数ss_instance_id。
取值范围:0-63, 需要从0开始指定。 - -D, --pgdata=DATADIR
指定数据目录的位置。
DATADIR的取值:用户自定义。不能包括“|”, “;”,“&”,“$”,“<”,“>”,“`”,“\”,“!”这几个字符。 - --nodename=NODENAME
初始化的节点名称。
节点的命名需要遵守如下规范:- 节点名称必须为小写字母(a-z)、下划线(_)、特殊符号#、数字(0-9)。
- 节点名称必须以小写字母(a-z)或下划线(_)开头。
- 节点名称不能为空,且最大的长度为64个字符。
- --vgname=VGNAME
卷组名。
数据类型:字符串 。
例如:一个卷组“+data”或者两个卷组中间用“,”连接“+data,+log”。 - --socketpath=SOCKETPATH
dss实例进程使用的socket文件路径。支持绝对路径。 - --dms_url=URL
节点之间mes通信url。
数据类型:字符串。
格式:节点id:ip:port,节点id:ip:port,.......
例如:“0:127.0.0.1:1611,1:127.0.0.1:1711” - -E, --encoding=ENCODING
指定数据库编码格式。不能包括“|”, “;”,“&”,“$”,“<”,“>”,“`”,“\”,“!”这几个字符。说明
- 如果使用此参数,需要加上--locale选项指定支持此编码格式的区域。如果不加--locale选项,则采用系统默认的区域,如果系统默认区域的编码格式和用此参数指定的编码格式不匹配则会导致数据库初始化失败。
- 如果不指定此参数,则使用系统默认区域的编码格式。系统默认区域和编码格式可以使用locale命令查看,如下:
locale | grep LC_CTYPE
- --locale=LOCALE
指定数据库的缺省区域,如果不希望指定特定的区域,则可以用C。可以用locale -a命令查看可用的区域。
例如用户要将数据库编码格式初始化为GBK,可以采用如下步骤:
1、用命令查看系统支持gbk编码的区域。locale -a | grep gbk
显示结果为:zh_CN.gbk zh_SG.gbk
2、初始化数据库时加入--locale=zh_CN.gbk
选项。说明
- 如果用户设置了数据库的编码格式,则用户选择区域的编码格式必须与用户设置的编码格式一致,否则数据库初始化会失败。
- 不能包括“|”, “;”,“&”,“$”,“<”,“>”,“`”,“\”,“!”这几个字符。
- --enable-oralob-type
启用兼容 Oracle的 LOB 实现方案。
初始化实例时指定此选项表示 LOB 使用定位器存储方式,不指定此选项则默认使用直接存储数据的存储方式。 - --pad-attribute=PADATTRIBUTE
指定数据库默认的列校对规则。
取值范围:- N,NO PAD:把字符串尾端的空格当作一个字符处理,即字符串等值比较不忽略尾端空格。
- S,PAD SPACE:字符串等值比较忽略尾端空格。
默认值:N,NO PAD - --lc-collate=LOCALE, --lc-ctype=LOCALE, --lc-messages=LOCALE,--lc-monetary=LOCALE, --lc-numeric=LOCALE, --lc-time=LOCALE
为新数据库设置指定范畴的区域。各参数的取值必须是操作系统支持的值。不能包括“|”, “;”,“&”,“$”,“<”,“>”,“`”,“\”,“!”这几个字符。说明
- --no-locale
等价于和--locale=C。 - --pwfile=FILE
执行vb_initdb命令时,从文件FILE中读取数据库中系统管理员的密码。该文件的第一行将被当作密码使用。
用户密码规则如下:- 取值范围:字符串。
- 密码长度大于等于8个字符,小于等于32个字符。
- 不能与用户名及用户名倒序相同。
- 至少包含大写字母(A-Z),小写字母(a-z),数字(0-9),非字母数字字符(限定为~!@#$%^&*()-_=+|{};:,<.>/?)四类字符中的三类字符。
说明
- FILE可以是“相对路径+文件”的形式,也可以是“绝对路径+文件”的形式。相对路径是相对当前路径的。
- 支持对pwfile参数指定的密码做合法性校验。
- -T, --text-search-config=CFG
设置缺省的文本搜索方式。此配置项的值不会做正确性校验,配置成功后,有日志记录提醒当前配置项的取值。
取值范围:- english:全文搜索。
- simple:普通文本搜索。
默认值:simple - -U, --username=NAME
选择数据库系统管理员的用户名。
用户自定义创建的的数据库系统管理员的用户名(通常称为数据库初始用户)。
默认值:运行vb_initdb的操作系统用户名(数据库安装用户同名)。
取值范围:用户名不能包括“|”, “;”,“&”,“$”,“<”,“>”,“`”,“\”,“!” 字符。说明
- 初始化时会进行用户名合规性检查,不允许以数字、$符号开头的用户名和系统保留用户名(如public、none、gs_role_)作为初始化用户名。
- 建议自定义的用户名或安装数据库的操作系统用户名中包含的字母均使用小写。这是因为创建初始化用户时会区分大小写,但VexDB默认执行SQL时不区分大小写,所以在执行SQL时指定含大写的初始化用户名需要被双引号包裹才能被识别,否则SQL语句无法执行。
- -W, --pwprompt
执行vb_initdb命令时强制交互式输入数据库管理员的密码。 - -w, --pwpasswd=PASSWD
执行vb_initdb命令时通过命令行指定的管理员用户的密码,而不是交互式输入。使用-w指定的密码VexDB会进行合法性检测。
设置的密码要符合复杂度要求:- 最少包含8个字符,不能超过32个字符。
- 不能和用户名和当前密码相同,或和当前密码反序。
- 至少包含大写字母(A-Z)、小写字母(a-z)、数字、非字母数字字符(限定为“~”,“!”,“@”,“#”,“$”,“%”,“^”,“&”,“*”,“(”,“)”,“-”,“_”,“=”,“+”,“\”,“|”,“”,“{”,“}”,“”,“;”,“:”,“,”,“<”,“>”,“/”,“?”)四类字符中的三类字符。
- -C, --enpwdfiledir=DIR
执行vb_initdb命令时指定的经AES128加密算法加密过的密码文件所在目录。vb_initdb会将该目录下密码文件进行解密,同时把解密后的密码做密码复杂度校验,校验通过的话会将此密码作为用户的密码。说明
- 加密密码文件需使用vb_guc工具生成,例如
vb_guc encrypt -K Gauss@123 -D Dir
。 - 如果用户指定多个-w和-C参数,vb_initdb会将用户输入的最后一个-w或-C参数作为用户的需求,即输入密码的明文或经过AES128加密后的密码。
- 不能包括“|”, “;”,“&”,“$”,“<”,“>”,“`”,“\”,“!”这几个字符。
- 加密密码文件需使用vb_guc工具生成,例如
- -X, --xlogdir=XLOGDIR
声明事务日志存储的目录。说明
- 所设置的目录,必须满足运行VexDB的用户有读写权限。
- 只支持绝对路径。
- 路径不能包括“|”, “;”,“&”,“$”,“<”,“>”,“`”,“\”,“!”这几个字符。
- -S, --security
使用安全方式初始化数据库。以-S方式初始化的数据库后,创建的数据库用户权限受到限制,默认不再具有public schema的使用权限。 - -g, --xlogpath=XLOGPATH
共享存储的XLOG文件路径。 - -d, --debug
从初始化后端打印调试输出信息。初始化后端是vb_initdb用于创建系统表的程序。 - -L DIRECTORY
vb_initdb初始化数据库所需要的输入文件的路径。说明
- 该参数通常是不必要的。如果需要明确声明的话,程序会提示输入。因该参数意为创建指定配置信息的数据库,建议将share/postgresql下的所有涉及启动相关的子目录及文件全部复制过来,避免其他因素的影响。
- 初始化数据库所需的输入文件路径。不能包括“|”,,“;”,“&”,“$”,“<”,“>”,“`”,“\”,“!”这几个字符。
- -n, --noclean
这个选项禁止任何清理动作,因而对调试很有用。不指定该参数时,当vb_initdb发现一些错误妨碍它完成创建数据库的工作时,它将在检测到不能结束工作之前将其创建的所有文件删除。 - -s, --show
显示内部设置。 - -H, --host-ip
初始化VexDB节点node_host。不能包括“|”,,“;”,“&”,“$”,“<”,“>”,“`”,“\”,“!”这几个字符。 - --audit_encrypt_algorithm=AUDITENCRYPTALGORITHM
审计日志加密参数,指定审计日志加密算法。
取值范围:加密算法必须为SM4。 - --audit_master_key=MASTERKEY
主密钥参数,设置主密钥。
取值范围:数据库初始化时设置主密钥长度必须等于16位。 - --audit_encrypt_key=ENCRYPTKEY
加密密钥参数,设置加密密钥。
取值范围:数据库初始化时设置加密密钥长度必须等于16位。--audit_encrypt_algorithm=AUDITENCRYPTALGORITHM,--audit_master_key=MASTERKEY,--audit_encrypt_key=ENCRYPTKEY三个选项相关内容请参考审计日志加密存储。说明
- -V, --version
打印vb_initdb版本信息,然后退出。 - -?, --help
显示关于vb_initdb命令行参数的帮助信息,然后退出。
使用示例
执行如下命令初始化数据库。
vb_initdb -D /home/vexdb/data/vexdb--nodename postgres -w vbase@123
/home/vexdb/data/vexdb为数据库目录,需要0700权限。详细请参见安装指南步骤6:初始化数据库实例(可选)。