3.1 Nginx 安装部署与服务管理
服务管理命令
| 操作 | 命令 |
| 配置文件测试 | /usr/local/nginx/sbin/nginx -t |
| 启动服务 | /usr/local/nginx/sbin/nginx |
| 关闭服务 | nginx -s quit/stop |
| 重新加载配置 | nginx -s reload |
| 查看端口 | netstat -tlnp |
基本信息
- 默认端口:
80
- 默认访问页面:
http://IP
- 主配置文件路径:
/usr/local/nginx/conf/nginx.conf
- Nginx 是高性能的 HTTP 和反向代理 Web 服务器。
配置文件六大字段
| 字段 | 作用 |
main block | 全局配置 |
events | 性能参数、事件驱动 |
http | HTTP/HTTPS 协议配置 |
server | 虚拟主机配置 |
location | 站点目录配置 |
stream | TCP 代理/负载均衡 |
嵌套关系:main → events/http/mail/stream → server → location
3.2 Nginx 配置文件详解
HTTP 协议相关配置示例
http {
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
location / { ... }
}
upstream backend { ... }
}
关键指令说明
| 指令 | 作用 |
listen | 监听地址和端口 |
server_name | 虚拟主机名 |
root | 站点根目录 |
alias | 虚拟目录路径别名 |
location | 针对 URL 的条件配置 |
upstream | 负载均衡后端服务器池 |
ip_hash | 按客户端 IP 哈希分配 |
负载均衡配置示例
upstream backend {
ip_hash;
server 192.168.1.10 weight=5;
server 192.168.1.11;
}
3.3 什么是数据库
- 数据库(Database):按照数据本身的特征和结构来组织、存储和管理数据的容器或仓库。
- 数据库管理系统(DBMS):数据库对应的软件,提供一套访问数据方法,用于增、删、改、查等。
- 根据数据特征和结构的不同,可以使用不同方式对其进行存储和管理,形成不同种类的数据库。应用最广泛的是关系型数据库。
3.4 数据库发展史
层次网状型
| 时间 | 事件 |
| 1964 年以前 | 数据以文件系统方式存储,没有专门的数据管理软件 |
| 1964 | 通用发布第一个网状数据库 IDS,作者 Charles Bachman |
| 1968 | IBM 发布第一款层次型数据库 IMS(Information Management System) |
| 1970 | IBM 的 Edgar F. Codd 发表论文《大型共享数据库数据的关系模型》,提出 System R 项目 |
| 1972 | Edgar F. Codd 提出关系代数和关系演算概念,定义关系的并、交、投影、选择、连接等基本运算 |
关系型数据库
| 时间 | 事件 |
| 1973 | IBM 开始 System R 项目;加州大学伯克利分校启动 Ingres 项目 |
| 1974 | IBM 的 Ray Boyce 和 Don Chamberlin 提出 SQL |
| 1977 | SDL 公司成立,后改名 RSI |
| 1979 | RSI 发布 Oracle 2.0 |
| 1980 | BSD 终止 Ingres,IBM 发布第一款 System R |
| 1983 | IBM System R 更名为 DB2 |
| 1985 | 在 Ingres 基础上 Informix 1.1 发布 |
| 1986 | 加州大学伯克利分校重启 Ingres 项目,改名为 PostgreSQL |
| 1987 | Sybase 在 Ingres 基础上推出 Sybase SQL Server |
| 1992 | 微软在 Sybase SQL Server 4.2 基础上发布 MS SQL Server 4.2 |
| 1993 | Edgar F. Codd 提出联机分析处理(OLAP) |
| 1996 | Monty 发布 MySQL |
| 2000 左右 | 中国开始数据库自研尝试 |
| 2014 | Michael Stonebraker 对千核并发控制进行评估;海量数据组建研发团队从事国产数据库开发 |
| 2020 | 华为牵头:openGauss 社区成立;海量数据:发布 Vastbase G100 |
| 2021 | 海量数据 Vastbase G100 进入四期名录 |
鉴往知来
- 现有的关系型数据库起源于 IBM 的 Edgar F. Codd 1970 年发表论文。
- 1980 年加州大学伯克利分校的 Ingres 项目开源,推动了数据库进入蓬勃发展时代。
- 现在流行的商用数据库都是在前人基础上发展起来的。
- 推动数据库技术发展的是数学家、科学家、教授。
- 现阶段国家对核心领域关键技术的重视到了前所未有的高度,数据库作为 IT 行业重要的基础软件之一,也是核心领域关键技术之一。
3.5 国产数据库主要技术线路
| 技术线路 | 特点 |
| 许可买断 | 独立演进可能性不高、授权停止、发展几乎结束 |
| 基于国外开源封装 | 协议风险、断供风险、法务风险、鲁棒性低、和国产硬件匹配差 |
| 仿造商业数据库 | 自主可控程度高,但缺乏面向未来的创新能力 |
| 开源重构 | 可以自立自强、针对硬件优化、生态繁荣、鲁棒性高、可持续发展 |
3.6 openGauss 开源生态的发展
openGauss 是面向数字基础设施的开源数据库,已成为国内最活跃的开源数据库根社区。
版本演进时间线
| 阶段 | 版本 | 时间 |
| 基础版本 | 1.0.0 LTS | 2020.03 |
| 代码正式开源 | — | 2020.06 |
| 企业级特性 | 2.0.0 LTS | 2021.03 |
| 轻量级版本 | 3.0.0 LTS | 2022.03 |
| DataPod/DataKit | 5.0.0 LTS | 2023.03 |
| 全场景 & AI | 6.0.0 LTS | 2024.09 |
生态成就
- 2023 年中国数据库市场线下集中式 openGauss 系新增市场份额达 21.9%。
- 已规模应用于金融、政府、电信、能源、制造、交通、邮政、教育等十大关键行业核心场景。
- 生态伙伴超 570+ 家,已达成 1000+ 数据库解决方案认证。
3.7 Vastbase 企业级关系型数据库
Vastbase 是海量数据基于开源 openGauss 内核开发的企业级关系型数据库,融合了对各行业应用场景的深入理解,除具有 openGauss 极致性能外,还增加了大量 Oracle、MySQL 与 PostgreSQL 的兼容特性。
核心特性
| 特性 | 说明 |
| 高性能 | 极致事务处理能力,支持增量检查点等技术;鲲鹏单机 2P > 175 万 tpmC |
| 高并发 | 线程模型优化,单机可支持超过 1 万并发访问并保持高性能运行 |
| 高可用 | RTO ≤ 10s,灵活多样部署架构 |
| 高安全 | 全栈国密、细粒度安全管控;IT 产品信息安全认证 EAL4+、涉密系统认证等 |
| 高兼容 | Oracle / MySQL / PG / SQL Server 超融合兼容引擎 |
| 多模态 | 拥有空间引擎,支持国际 openGIS 规范;拥有行列混合存储引擎以及 MOT 内存表 |
| 易迁移 | exBase 异构数据库一键式迁移平台,多数据源、智能评估、全自动化迁移 |
| 易运维 | WDR 诊断、慢 SQL 诊断、Session 诊断、AI4DB 智能化实现自调优、自监控、自诊断 |
3.8 Vastbase 安装前准备
硬件要求
| 硬件项目 | 测试环境 | 生产环境 |
| 内存 | 单机:4G+;主从:8G+ | 单机:8G+,建议 128G+;主从:8G+,建议 128G+ |
| CPU | 2 核以上 | 16 核以上 |
| 存储 | 800MB 安装程序 + 750MB 元数据 | 800MB 安装程序 + 750MB 元数据/主机,预留 70% 以上磁盘空间用于数据存储 |
| 网络 | 千兆网络 | 单机:千兆以上;集群:万兆以上 |
环境要求 — 依赖软件包
| 操作系统 | 依赖包 |
| 通用 | zlib-devel、libaio、libuuid、readline-devel、krb5-libs、libicu、libxslt、tcl、perl、openldap、pam、openssl-devel、libxml2、bzip2、libnsl |
| 麒麟 | readline、python2、libicu、cracklib、libxslt、tcl、perl、openldap、pam、systemd-libs、bzip2、gettext、libaio、ncurses-libs、libatomic(Kylin V10) |
| Ubuntu | libreadline5、zlib1g、libxml2、libaio1、libncurses5、gettext |
Python 环境(高可用环境需要)
| 软件依赖 | 版本要求 |
| openEuler | Python 3.7.X |
| CentOS | Python 3.6.X |
| 麒麟 | Python 3.7.X |
| Asianux | Python 3.6.X |
libnsl 仅在 openEuler + x86 环境中需要安装。
3.9 安装规划
安装前需要先规划用户组和软件路径。
用户和组
# 创建组
groupadd vastbase
# 创建用户并指定组
useradd -g vastbase vastbase
# 查看用户信息
id vastbase
# uid=1000(vastbase) gid=1000(vastbase) groups=1000(vastbase)
安装目录
# 常用软件目录规划
/vastdata/app/vastbase/2.2.15
# 常用数据库目录
/vastdata/data/{dbname}
# 示例
mkdir -p /vastdata/app/vastbase/2.2.15
mkdir -p /vastdata/data/vastbase
chown -R vastbase:vastbase /vastdata
3.10 系统配置:必选
1. 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
2. 禁用 SELINUX
修改配置文件 /etc/selinux/config,将 SELINUX=enforcing 改为 SELINUX=disabled。
SELINUX=disabled
3. 关闭 RemoveIPC
从 Linux 7.2 开始,systemd-logind 服务引入新特性:当一个 user 完全退出后,会 remove 掉所有的 IPC 对象,这会引起数据库实例 CRASH,需要禁用。
3.11 系统配置:内核参数
| 参数分类 | 参数名称 | 参数说明 |
| 文件系统 | fs.aio-max-nr | 系统允许的最大异步 IO 请求数目。推荐值:1048576 |
| 文件系统 | fs.file-max | 系统允许打开的最大文件句柄数。推荐值:根据数据库大小 |
| 文件系统 | fs.nr_open | 单个进程可打开的最大文件句柄数。对象多的数据库建议适当增大 |
| 内核 | kernel.sem | 包含 SEMMSL、SEMMNS、SEMOPM、SEMMNI;推荐值:4096 2097152000 4096 5120 |
| 内核 | kernel.shmall | 控制共享内存总页数。推荐值:系统内存 × 80% / PAGE_SIZE |
| 内核 | kernel.shmmax | 最大单个共享内存段大小。推荐值:系统内存 × 0.5 |
| 内核 | kernel.shmmni | 系统范围内共享内存段的最大数量。推荐值:默认 |
| 虚拟内存 | vm.swappiness | 使用 swap 的倾向性。数值越低越尽量避免使用 swap。推荐值:10–20 |
3.12 Vastbase 单节点数据库字符安装
前提条件
- 已完成数据库用户组和数据库用户的创建。
- 普通用户必须有数据库包解压路径、安装路径的读、写和执行权限,并且安装路径必须为空。
- 安装前检查指定的 Vastbase 端口是否被占用。
操作步骤
# 1. 使用 vastbase 用户解压 Vastbase 压缩包
tar -xzvf Vastbase-installer-2.2_Build15-openEuler_22.03sp3-x86_64.tar.gz
# 2. 以 vastbase 用户进入 vastbase-installer 目录,执行安装程序
cd vastbase-installer
./vastbase_installer
vastbase_installer 安装程序提供响应式的自动化安装方式,极大简化了数据库安装过程。
3.13 安装过程解析
依赖包检查
安装程序会检查依赖包是否已安装。如有缺陷的软件包,安装程序将中止,可在配置 yum 源后使用 yum 命令安装后重新运行安装程序。
# 以 tcl 为例
yum -y install tcl
环境检查
IPC 配置不满足安装要求时,修改建议:
- 在
/etc/systemd/logind.conf 中增加 RemoveIPC=no。
- 在
/usr/lib/systemd/system/systemd-logind.service 中增加 RemoveIPC=no。
systemctl daemon-reload
systemctl restart systemd-logind
是否初始化实例
安装程序提示:Whether to instantiate the database (Y/N):
- Y:数据库安装完后,将初始化一个数据库实例。
- N:仅安装数据库软件,安装完成后执行
vb_initdb 命令手工初始化实例。
设置密码
选择典型安装(Typical installation)或自定义安装(Custom installation),然后设定初始用户密码。
路径选择
- 软件安装目录:
/vastdata/app/vastbase/2.2.15
- 数据库目录:
/vastdata/data/vastbase
软件安装目录不需要太多空间,不存储具体数据;数据库目录存储具体数据,需根据业务规划空间。
兼容模式选择
Vastbase 提供针对 4 种商业数据库的兼容模式:
| 模式 | 兼容数据库 |
| A | Oracle |
| B | MySQL |
| PG | PostgreSQL |
| MSSQL | SQL Server |
兼容模式一旦选择不能更改,实例下所有 database 都使用统一兼容模式。
启动数据库
source ~/.bashrc
vb_ctl start
配置 License 授权文件
Vastbase 运行需要 License。编辑数据库参数文件 /vastdata/data/vastbase/postgresql.conf,增加参数 license_path:
license_path='/home/vastbase/.license/vastbase_license'
最新版本已预置免费试用功能,默认无 License 场景下也可免费使用一段时间;试用到期仍未添加有效 License 则数据库实例无法启动。
3.14 停止数据库
vb_ctl stop
vb_ctl 常用参数
| 参数 | 作用 |
-D | 指定数据库目录 |
-w | 等待事务操作的完成 |
-t | 指定超时时间,单位:秒 |
-s | 静默模式,只打印少量信息 |
-m | 关机模式:fast 回滚活跃事务并断开客户端;immediate 强行关闭,下次启动需故障恢复 |
-M | 运行角色 |
3.15 登录数据库
数据库启动后使用 vastbase 用户执行:
vsql -r -d vastbase
远程连接示例
vsql -r -d vastbase -h 192.168.1.105 -p 5432 -U vbuser -W Vastdata#1234
| 参数 | 说明 |
-d | 数据库名 |
-U | 数据库用户名 |
-W | 用户密码 |
-h | 主机名 |
-p | 端口号 |
-r | 使用上下键翻页功能 |
本地连接
在数据库服务器上登录数据库,可省略 IP 地址(默认 local socket)、端口(默认 5432)、用户名(默认 vastbase)。
vsql -r -d vastbase
vsql
使用初始用户登录,命令提示符为 =#;使用普通用户登录,命令提示符为 =>。
3.16 VSQL 工具简介
vsql 是 Vastbase 提供的在命令行下运行的数据库客户端工具,可通过此工具连接数据库并进行操作和维护。
基本功能
高级特性
- 设置变量
- SQL 代换
- 提示符
- 命令自动补齐
- 客户端操作历史记录
3.17 VSQL 元命令
列出所有数据库
\l
常用显示元命令
| 元命令 | 说明 |
\d[S+] | 列出当前 search_path 中模式下所有的表、视图和序列 |
\d[S+] NAME | 列出指定表、视图和索引的结构 |
\d+ [PATTERN] | 列出所有表、视图和索引 |
\da[S] [PATTERN] | 列出所有可用的聚集函数及操作的数据类型和返回值类型 |
\db[+] [PATTERN] | 列出所有可用的表空间 |
\dg[+] [PATTERN] | 列出所有数据库角色,等价于 \du |
\dn[S+] [PATTERN] | 列出所有的模式(名称空间) |
\dT[S+] [PATTERN] | 列出所有的数据类型 |
\dp [PATTERN] | 列出可用的表、视图以及相关的权限信息 |
执行 \? 可获得完整元命令列表。
3.18 新建用户并登录
CREATE USER vbuser IDENTIFIED BY 'Vastdata#0730' LOGIN;
# 使用新用户登录
vsql -r -d vastbase -U vbuser -WVastdata#0730
3.19 VDS 图形化管理工具
VDS(Vastbase Data Studio)是 Vastbase 的专属图形化管理工具,高度适配 Vastbase 数据库特性。
主要功能
| 功能模块 | 说明 |
| 实例管理 | 启动和停止数据库服务、调整 GUC 参数配置 |
| 对象管理 | 图形化增删查改数据对象、授予/撤销对象操作权限 |
| 数据管理 | 可视化查看/编辑数据库的数据 |
| 导入导出 | 批量导出对象 DDL、导入/导出表数据 |
| 命令窗口 | 执行 VSQL 元命令、快速查询 |
| 编译调试 | 函数/存储过程/包的语法编译与程序调试 |
| SQL 终端 | 执行 SQL 及脚本、查看执行计划、提供智能 SQL 编辑帮助 |
| 安全管理 | 配置审计策略、查看审计日志、配置 IP 白名单 |
安装和启动
- 以 Windows 平台为例,解压即完成安装。
- 运行目录下双击
Vastbase Data Studio.exe 即可启动。
3.20 用户、Schema 和 DB
- User(用户):独立于数据库。超级用户登录一个数据库创建用户时,会在该数据库下创建一个同名 schema。
- Role(角色):没有登录权限的 user,也是权限的集合。
- Schema(模式):又叫 namespace,是数据库对象的集合,每个数据库对象都属于一个 schema。
- schema 默认会在当前数据库中随着用户的创建而被同步创建。
数据库对象全景图
Vastbase 实例
├── database(s)
│ └── schema(s)
│ ├── table(s)
│ ├── index(s)
│ ├── view(s)
│ ├── package(s)
│ ├── function(s)
│ └── other(s)
3.21 用户的创建与删除
创建用户
CREATE USER user_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' | DISABLE };
示例:
CREATE USER vbuser WITH CREATEDB PASSWORD 'xxxxxxxxx';
删除用户
DROP USER [ IF EXISTS ] user_name [, ...] [ CASCADE | RESTRICT ];
| 选项 | 说明 |
CASCADE | 级联删除依赖用户的对象 |
RESTRICT | 如果用户还有任何依赖对象,则拒绝删除(缺省行为) |
3.22 创建数据库
用户必须拥有 CREATEDB 权限或数据库系统管理员权限才能创建数据库。
CREATE DATABASE database_name
[ OWNER = user_name ]
[ TEMPLATE = template ]
[ ENCODING = encoding ]
[ LC_COLLATE = lc_collate ]
[ LC_CTYPE = lc_ctype ]
[ TABLESPACE = tablespace_name ]
[ MAXSIZE = tablespace_maxsize ]
[ THRESHOLD = warn_threshold ]
[ CONNECTION LIMIT = connlimit ]
[ PAD_ATTRIBUTE = pad_attribute_type ];
主要参数说明
| 参数 | 说明 |
Owner | 新数据库的所有者,不指定则为当前用户 |
Template | 模板,即从哪个模板创建数据库 |
Encoding | 数据库字符集,默认为 UTF-8 |
Lc_collate | 排序规则,可通过 locale -a 查看支持列表 |
Lc_ctype | 字符分类,可通过 locale -a 查看支持列表 |
Tablespace | 数据库默认表空间 |
Connection limit | 数据库最大连接数 |
示例:
create database hailingdb owner=vbuser tablespace=tbs_user01 encoding='UTF8';
3.23 模式:创建与删除
创建 Schema
CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [ schema_element [ ... ] ];
示例:
CREATE SCHEMA fo;
CREATE SCHEMA schema_fo AUTHORIZATION vbuser;
删除 Schema
DROP SCHEMA [ IF EXISTS ] schema_name [, ...] [ CASCADE | RESTRICT ];
示例:
DROP SCHEMA schema_f1 CASCADE;
3.24 表:创建表
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
(
{ column_name data_type [ CHARACTER SET | CHARSET charset ] [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option [...] ] } [, ...]
)
[ AUTO_INCREMENT [ = ] value ]
[ [ DEFAULT ] CHARACTER SET | CHARSET [ = ] default_charset ] [ [ DEFAULT ] COLLATE [ = ] default_collation ] ]
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH ( {storage_parameter = value} [, ... ] ) ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ COMPRESS | NOCOMPRESS ]
[ TABLESPACE tablespace_name ];
详细说明见官方文档:docs.vastdata.com.cn,SQL 语法章节 create table 部分。
普通表示例
-- 在 schema_fi 下创建表 table1
CREATE TABLE schema_fi.table1(
col1 number,
col2 varchar2(20),
col3 text
) TABLESPACE tbs_user01;
-- 在 vbuser 下创建新表 table2,复制 table1 的表结构
CREATE TABLE vbuser.table2(LIKE table1 INCLUDING ALL);
-- 在 vbuser 下创建新表 table3,复制 table2 的数据
CREATE TABLE vbuser.table3 AS SELECT * FROM vbuser.table2;
3.25 索引
概述
- 索引是一种二级对象,通过对表上的列或列上表达式进行单独存储处理,用于加速数据库中的数据访问行为(查询或排序)。
- 索引需要通过
CREATE INDEX 语句创建,在表创建之后才能创建索引。
- 针对分区表,Vastbase 支持创建本地分区索引 LOCAL INDEX与全局分区索引 GLOBAL INDEX两种。
- 索引与表数据同步,创建索引会造成表数据维护的额外操作。
常见索引类型
| 索引类型 | 描述 |
| 唯一索引 | 约束索引属性值或属性组合值的唯一性;声明主键或唯一约束时自动创建 |
| 多字段索引 | 一个索引定义在多个属性上,Vastbase 中 Btree 支持多字段索引 |
| 部分索引 | 建立在表的子集上,只包含满足条件表达式的行 |
| 表达式索引 | 建立在函数或表达式上,只有在查询时使用与创建时相同的表达式才起作用 |
| GIN 索引 | 通用倒排索引,处理索引项为组合值的情况 |
| GiST 索引 | 适用于几何和地理等多维数据类型和集合数据类型 |
创建与删除
-- B-Tree 索引(默认索引),适用于比较查询以及查询范围场景
CREATE INDEX testtab1_id_idx1 ON testtab1(id) TABLESPACE tbs_index1;
-- 联机创建索引
CREATE INDEX CONCURRENTLY testtab1_id_idx1 ON testtab1(id);
-- 降序索引
CREATE INDEX CONCURRENTLY testtab1_id_idx1 ON testtab1(id) DESC;
-- 唯一索引
CREATE UNIQUE INDEX testtab1_id_idx1 ON testtab1(id);
-- 删除索引
DROP INDEX testtab1_id_idx1;
3.26 约束
概述
- 约束子句用于声明约束,新行或更新的行必须满足这些约束才能成功插入或更新。
- 约束可以在创建表时规定(
CREATE TABLE),也可以在表创建之后添加(ALTER TABLE)。
- 约束可以是列级或表级。
openGauss 中常用约束
| 约束 | 说明 |
NOT NULL | 指示某列不能存储 NULL 值 |
UNIQUE | 确保某列的值都是唯一的 |
PRIMARY KEY | NOT NULL 和 UNIQUE 的结合,唯一标识记录 |
FOREIGN KEY | 保证一个表中的数据匹配另一个表中的值的参照完整性 |
CHECK | 保证列中的值符合指定条件 |
管理示例
-- 建表时定义约束
CREATE TABLE atlastab (
seq integer PRIMARY KEY,
name varchar(64) NOT NULL,
id varchar(24),
itemno integer,
UNIQUE (id),
FOREIGN KEY (itemno) REFERENCES testtab1(id)
);
-- 现有表添加约束
ALTER TABLE testtab1 ADD PRIMARY KEY (id);
-- 删除约束
ALTER TABLE atlastab DROP CONSTRAINT atlastab_id_key;