一、KingbaseES Initdb初始化数据库过程
initdb 创建一个新的KingbaseES数据库集群。一个数据库集群是由单个服务器实例管理的多个数据库的集合。
创建数据库系统包括创建数据库数据的宿主目录,生成共享的系统表(不属于任何特定数据库的表)和创建 template1 和 TEST 数据库。当你以后再创建一个新数据库时,template1 数据库里所有内容都会拷贝过来。因此,任何在 template1 里面安装的东西都自动拷贝到之后创建的数据库中。TEST 数据库是一个缺省数据库,用于给用户、工具、第三方应用提供缺省数据库。
尽管 initdb 会尝试创建相应的数据目录,但经常会没有权限做这件事。因为所要创建目录的父目录通常被 root 所拥有。要初始化这种设置,用 root 创建一个空数据目录,然后用 chown 把该目录的所有权交给数据库用户帐号,然后 su 成数据库用户,最后以数据库用户身份运行 initdb 。
initdb 必须以运行数据库服务器的用户身份运行,因为服务器需要访问 initdb 创建的目录和文件。因为服务器通常是以非 root 身份运行的,因此一般也就不以 root 用户运行 initdb ,事实上 initdb 将拒绝你以 root 用户运行它。
initdb 初始化该数据库集群的缺省区域和字符集编码。字符编码排序(LC_COLLATE)和字符集类(LC_CTYPE 也就是大写、小写、数字等)是对所有数据库估定的,不能改变。使用 C 或 POSIX 之外的字符编码排序还会有性能影响。因此在运行 initdb 的时候就做出正确的选择是非常重要的。其它区域范畴可以在随后启动服务器的时候改变。所有服务器区域值(lc_*)都可以用 SHOW ALL 显示。
二、Initdb初始化帮助信息
[kingbase@node1 bin]$ ./initdb --help
initdb initializes a Kingbase database cluster.
Usage:
initdb [OPTION]… [DATADIR]
Options:
-A, --auth=METHOD default authentication method for local connections
–auth-host=METHOD default authentication method for local TCP/IP connections
–auth-local=METHOD default authentication method for local-socket connections
[-D, --kingbase_data=]DATADIR location for this database cluster
-E, --encoding=ENCODING set default encoding for new databases
-g, --allow-group-access allow group read/execute on data directory
–locale=LOCALE set default locale for new databases
–lc-collate=, --lc-ctype=, --lc-messages=LOCALE
–lc-monetary=, --lc-numeric=, --lc-time=LOCALE
set default locale in the respective category for
new databases (default taken from environment)
–no-locale equivalent to --locale=C
–pwfile=FILE read password for the new superuser from file
-T, --text-search-config=CFG
default text search configuration
-U, --username=NAME database superuser name
-W, --pwprompt prompt for a password for the new superuser
-X, --waldir=WALDIR location for the write-ahead log directory
–wal-segsize=SIZE size of WAL segments, in megabytes
-m, --dbmode=MODE set database mode(default value is oracle)
-e, --encrypt-algorithm Specify encryption method
-t, --aud-tblspc-enc enable sysaudit tablespace encrypt
-K, --enckey=KEY Specify sysaudit tablesapace encrypt key
-M, --passwordcheck enable user password check for initdb
-I, --identity-pwdexp enable user password expire check
–case-insensitive initialize database cluster with case-insensitive
–block-size=SIZE set table block size in kB [8]
Less commonly used options:
-d, --debug generate lots of debugging output
-k, --data-checksums use data page checksums
-L DIRECTORY where to find the input files
-n, --no-clean do not clean up after errors
-N, --no-sync do not wait for changes to be written safely to disk
-s, --show show internal settings
-S, --sync-only only sync data directory
Other options:
-V, --version output version information, then exit
-?, --help show this help, then exit
If the data directory is not specified, the environment variable KINGBASE_DATA
is used.
Report bugs to [email protected].
[kingbase@node1 bin]$
三、initdb初始化数据库案例
3.1 案例一:数据库data目录权限问题
1) 案例现象
在通过initdb初始化数据库时,提示数据库数据存储目录data目录没有权限访问。
[kingbase@node1 bin]$ ./initdb -D /data/kingbase/v8r6/data/ -m pg
The files belonging to this database system will be owned by user “kingbase”.
This user must also own the server process.
The database cluster will be initialized with locale “en_US.UTF-8”.
The default database encoding has accordingly been set to “UTF8”.
The default text search configuration will be set to “english”.
The comparision of strings is case-sensitive.
Data page checksums are disabled.
fixing permissions on existing directory /data/kingbase/v8r6/data … initdb: error: could not change permissions of directory “/data/kingbase/v8r6/data”: Operation not permitted
2) 案例分析
查看数据库数据存储目录权限如下图3-1所示,data目录的所有者为root所有,kingbase用户无权限写入访问。
图3-1 查看data目录权限
3) 故障解决
将data目录的所有者改为kingbase用户,重新执行初始化即可。
3.2 案例二:数据库初始化字符集问题
1)案例说明
在执行initdb时,-E参数指定数据库字符集,初始化失败。
[kingbase@node1 bin]$ ./initdb -D /data/kingbase/v8r6/data -E GBK -U system -W
The files belonging to this database system will be owned by user “kingbase”.
This user must also own the server process.
The database cluster will be initialized with locale “en_US.UTF-8”.
initdb: error: "GBK " is not a valid server encoding name
2) 案例分析
通过错误日志可知,操作系统的locale配置为"en_US.UTF-8",需要初始化的字符集为”GBK”,与系统环境不匹配。
查看系统locale:
图3-2 系统locale信息
修改系统locale:
图3-3 配置系统locale
3) 故障解决
修改系统locale后,重新初始化数据库即可。
图3-4 initdb初始化数据库
四、总结
对于initdb初始化数据库问题,可以通过错误日志的信息,进行分析,结合系统配置来解决初始化的故障。
参考文档:
《基于Linux系统的数据库软件安装指南》