跳到主要内容

数据库初始化

数据库初始化​

本节对应本章一键安装中的数据库初始化步骤。下述操作需在 halo 用户下执行,请先 su - halo 切换用户。

创建数据目录​

手工部署时,需要先规划并创建数据路径。默认数据目录为 /data/halo:

mkdir -p /data/halo/archivedir
chown -R halo:halo /data/halo

实际终端输出如下:

[halo@halo ~]$ mkdir -p /data/halo/archivedir
[halo@halo ~]$ chown -R halo:halo /data/halo
[halo@halo ~]$ ls -ld /data/halo /data/halo/archivedir
drwxr-xr-x 2 halo halo 6 Aug 11 07:09 /data/halo
drwxr-xr-x 2 halo halo 6 Aug 11 07:09 /data/halo/archivedir
[halo@halo ~]$

注意: /data/halo 必须为空目录,且属主为 halo。initdb 要求目标目录为空且权限正确。

字符集规划​

在初始化系统之前,需要先规划系统使用的字符集,例如 UTF-8、GBK 等。默认使用 UTF-8 字符集。

提示: Halo 支持 GB18030-2022 级别 3 字符集(已通过国家标准认证)。如需使用 GB18030,见下方"初始化数据库(initdb)"小节的初始化参数。

配置 halo 用户环境变量​

将 HALO_HOME、PGDATA、PATH、LD_LIBRARY_PATH 写入 halo 用户的 .bash_profile,使 pg_ctl、psql、initdb 等命令默认可用:

cat >> /home/halo/.bash_profile <<'EOF'
export HALO_HOME=/u01/app/halo/product/dbms/16
export PGDATA=/data/halo
export PATH=$HALO_HOME/bin:$PATH
export LD_LIBRARY_PATH=$HALO_HOME/lib:$LD_LIBRARY_PATH
EOF

说明: 配置 PGDATA 后,后续 pg_ctl、psql 命令可省略 -D / 指定数据目录参数。PATH 与 LD_LIBRARY_PATH 配置后,pg_ctl、psql 等命令无需写全路径。

初始化数据库(initdb)​

使用 pg_ctl init 命令初始化数据库群集,默认 UTF-8 字符集:

pg_ctl init -D /data/halo

实际终端输出如下:

[halo@halo ~]$ pg_ctl init -D /data/halo
The files belonging to this database system will be owned by user "halo".
This user must also own the server process.

The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /data/halo ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A,
or --auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

/u01/app/halo/product/dbms/16/bin/pg_ctl -D /data/halo -l logfile start
[halo@halo ~]$

如果要初始化成 GB18030 字符集:

pg_ctl init -D /data/halo -o "--encoding=GB18030 --locale=C"

说明:

  • 默认字符集为 UTF8(locale C.UTF-8),与一键安装默认字符集一致。
  • initdb: warning: enabling "trust" authentication for local connections 属正常现象(本地连接默认 trust 认证),可后续在 pg_hba.conf 中按需调整认证方式。 注意(默认库名): Halo 的 initdb 创建的默认数据库为 halo0root。后续连接时请使用 -d halo0root;若误用 -d postgres,会报 FATAL: database "postgres" does not exist(Halo 初始化不创建 postgres 库)。

拷贝授权文件​

将授权文件 license.lic 拷贝到数据库程序目录:

cp /install/license.lic /u01/app/halo/product/dbms/16/license.lic
chown halo:halo /u01/app/halo/product/dbms/16/license.lic

实际终端输出如下:

[halo@halo ~]$ cp /install/license.lic /u01/app/halo/product/dbms/16/license.lic
[halo@halo ~]$ chown halo:halo /u01/app/halo/product/dbms/16/license.lic
[halo@halo ~]$ ls -l /u01/app/halo/product/dbms/16/license.lic
-rw-r--r-- 1 halo halo 258 Aug 11 07:09 /u01/app/halo/product/dbms/16/license.lic
[halo@halo ~]$

配置参数文件​

初始化完成后,编辑 /data/halo/postgresql.conf 追加关键参数(端口、监听、归档、进程目录):

cat >> /data/halo/postgresql.conf <<'EOF'
# --- 手工部署配置 ---
listen_addresses = '*'
port = 1921
max_connections = 100
archive_mode = on
archive_command = 'cp %p /data/halo/archivedir/%f'
unix_socket_directories = '/var/run/halo'
EOF

编辑 /data/halo/pg_hba.conf 放行客户端访问(生产环境应按网段收紧认证方式):

cat >> /data/halo/pg_hba.conf <<'EOF'
host all all 0.0.0.0/0 trust
EOF

注意(字符串值必须用单引号): 在 postgresql.conf 中,字符串值若使用双引号(如 listen_addresses = "*" 或 archive_command = "..."),重启或重载时会报 syntax error ... near token """。字符串值必须使用单引号。 说明: archive_mode = on 配合 archive_command 启用归档日志,便于基于时间点的恢复(PITR)与增量备份。生产环境建议启用归档。