1. 瀚高数据库基础认知
瀚高数据库(HighGo DB)是一款国产自主研发的企业级关系型数据库管理系统,它基于PostgreSQL内核深度优化而来,在保持开源数据库灵活性的同时,增强了安全性和稳定性。作为国内金融、政务等领域广泛采用的数据库解决方案,掌握其核心操作命令是DBA和开发人员的必备技能。
我第一次接触瀚高数据库是在某银行数据迁移项目中,当时发现虽然它兼容PostgreSQL的大部分语法,但在权限管理、数据加密等企业级功能上有自己独特的命令体系。比如创建用户时除了标准的CREATE USER,还需要通过ALTER USER命令设置密码有效期策略,这种细节在实际运维中非常重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据库连接与基础管理
2.1 连接数据库的多种方式
最基本的连接命令是通过psql客户端工具:
bash复制psql -h 192.168.1.100 -p 5866 -U highgo -d mydb
这里有几个容易踩坑的参数:
- 端口号默认是5866(PostgreSQL是5432)
- 用户名区分大小写
- 如果启用了SSL连接,需要额外添加
-W参数强制密码交互
在连接成功后,我习惯先执行\conninfo查看当前连接信息,避免在多环境切换时搞混。另外,瀚高数据库的\l+命令可以显示更详细的数据库列表,包括编码、表空间等扩展信息。
2.2 用户与权限体系实操
创建用户时推荐使用完整语法:
sql复制CREATE USER dev_user WITH
PASSWORD 'Hg@12345'
VALID UNTIL '2024-12-31'
CONNECTION LIMIT 10;
特别注意:
- 密码策略要求至少8位且包含大小写+特殊字符
- VALID UNTIL是瀚高特有的账户有效期设置
- 生产环境一定要设置CONNECTION LIMIT防止连接耗尽
权限分配有个实用技巧:先创建角色组,再批量授权。例如:
sql复制CREATE ROLE read_only;
GRANT CONNECT ON DATABASE mydb TO read_only;
GRANT USAGE ON SCHEMA public TO read_only;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only;
3. 表空间与存储管理
3.1 表空间创建最佳实践
瀚高建议将系统数据、用户数据和索引分开存储:
sql复制CREATE TABLESPACE tbs_usr
OWNER highgo
LOCATION '/data/hgdb/usr_data'
WITH (seq_page_cost=1, random_page_cost=4);
关键参数说明:
- LOCATION路径需要预先创建且赋予highgo用户权限
- 性能参数seq_page_cost/random_page_cost需要根据磁盘类型调整(SSD建议1.1和1.3)
3.2 分区表管理技巧
创建范围分区表示例:
sql复制CREATE TABLE sales (
id SERIAL,
sale_date DATE NOT NULL,
amount DECIMAL(10,2)
) PARTITION BY RANGE (sale_date);
-- 创建季度分区
CREATE TABLE sales_q1 PARTITION OF sales
FOR VALUES FROM ('2023-01-01') TO ('2023-04-01')
TABLESPACE tbs_usr;
实际运维中发现两个要点:
- 提前规划好分区键,日期类型最常用
- 每个分区可以指定不同表空间实现冷热数据分离
4. 备份恢复关键命令
4.1 逻辑备份的完整流程
推荐使用hg_dumpall进行全量备份:
bash复制hg_dumpall -h db01 -p 5866 -U backup_user -f /backup/full_$(date +%Y%m%d).sql
重要参数:
- -Fc格式支持压缩和并行恢复
- --jobs=4可以启用多线程(需要先创建.signal目录)
- 一定要配合
-W参数避免密码泄露在history中
4.2 物理备份的PITR方案
配置归档命令示例(hg_hba.conf):
ini复制archive_mode = on
archive_command = 'cp %p /archive/%f'
执行基础备份:
bash复制hg_basebackup -D /backup/20240501 -Ft -z -P -h primary_host
恢复时的时间点控制很关键:
sql复制-- 查看可用恢复点
SELECT * FROM pg_available_recovery_snapshots;
-- 指定精确时间点恢复
RECOVER DATABASE UNTIL TIME '2024-05-01 14:30:00';
5. 性能监控与优化
5.1 实时监控命令集
查看活跃会话(比pg_stat_activity更详细):
sql复制SELECT * FROM hg_stat_activity
WHERE state <> 'idle'
ORDER BY query_start DESC;
锁监控专用命令:
sql复制SELECT locktype, relation::regclass, mode, pid
FROM hg_locks
WHERE pid <> pg_backend_pid();
5.2 执行计划分析技巧
瀚高扩展的EXPLAIN增强功能:
sql复制EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM large_table WHERE create_date > '2024-01-01';
重点关注:
- 是否使用了分区裁剪(Partition Pruning)
- 共享内存命中率(shared hit)
- 临时文件使用量(temp written)
6. 安全审计配置
6.1 审计日志启用方法
修改hg_hba.conf:
ini复制audit_enabled = on
audit_log_commands = 'ddl,mod'
audit_log_directory = '/var/log/hgdb/audit'
常用审计查询命令:
sql复制-- 查看最近10条DDL操作
SELECT * FROM hg_audit_log
WHERE command_tag IN ('CREATE','ALTER','DROP')
ORDER BY event_time DESC LIMIT 10;
6.2 透明数据加密(TDE)配置
创建加密表空间:
sql复制CREATE TABLESPACE secure_tbs
LOCATION '/data/encrypted'
WITH (encryption = on, key_id = '2024_db_key');
密钥轮换命令:
sql复制ALTER TABLESPACE secure_tbs
SET (key_id = '2024_new_key');
注意:密钥管理需要配合瀚高安全模块使用,测试环境一定要先备份数据
7. 高可用与读写分离
7.1 主从切换操作流程
查看复制状态:
bash复制hg_controldata -D /data/hgdb | grep -E 'cluster_state|sync_state'
提升备库为主库:
bash复制hg_ctl promote -D /data/hgdb_standby
7.2 读写分离配置要点
修改hg_hba.conf启用负载均衡:
ini复制host all all 192.168.1.0/24 hgbalance
应用层连接串示例:
code复制jdbc:hgdb://master:5866,slave1:5866,slave2:5866/mydb?loadBalanceHosts=true
8. 日常维护实用脚本
8.1 统计信息收集
推荐使用hg_analyze脚本:
bash复制#!/bin/bash
DBLIST=$(psql -h localhost -U highgo -c "SELECT datname FROM pg_database WHERE datname NOT IN ('template0','template1')" -t)
for DB in $DBLIST; do
vacuumdb -h localhost -U highgo -j 4 -z $DB
psql -h localhost -U highgo -d $DB -c "ANALYZE VERBOSE"
done
8.2 自动膨胀监控
创建监控视图:
sql复制CREATE VIEW bloat_view AS
SELECT
nspname || '.' || relname AS table_name,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) AS bloat_size
FROM pg_catalog.pg_statio_user_tables
ORDER BY (pg_total_relation_size(relid) - pg_relation_size(relid)) DESC;
定期维护建议:
sql复制-- 轻度膨胀时
VACUUM VERBOSE ANALYZE large_table;
-- 严重膨胀时(需要锁表)
VACUUM FULL VERBOSE large_table;
