下载工作台
PaaS 组件实战

关系型数据库:MySQL / MariaDB / PostgreSQL

试读上半部分 · 解锁后可读全文

第 2 章 · 关系型数据库:MySQL / MariaDB / PostgreSQL


场景说明

demo-mall 的 api-go-demo 需要持久化订单与用户数据。你在 应用商店 → 数据库 看到 MySQL、MariaDB、PostgreSQL 多个卡片,镜像 tag 和 env 名称各不相同——选错或漏配 MYSQL_ROOT_PASSWORD,Pod 会 CrashLoop,应用连不上 mysql:3306

本章在 paas ch01 四步向导 基础上,分别跟练三款关系库:部署 → 写 env → 集群内连接 → 业务集成 → 小紫运维入口

前置xiaozi-cloud ch04 应用商店;paas ch01 有状态约束(单副本、PVC、改 env 后重启)。


学完你能

能力说明
选对引擎MySQL / MariaDB / PG 适用场景
商店一键部署四步向导 + 确认页 YAML
写连接串集群 DNS 与 JDBC / DSN
运维操作备份、扩 PVC、看日志
业务集成Spring / Go / Django 配置项

2.1 MySQL 8.0

适用场景

选用不选用
电商订单、用户账户、财务台账等 强事务 业务非结构化日志、海量时序点(用 InfluxDB)
团队熟悉 SQL、生态成熟(JDBC、ORM 遍地)需要灵活 Schema 的文档模型(用 MongoDB)
主从/读写分离可后续扩展超大规模分片首选(可考虑 TiDB 等,商店另有目录)

商店部署参数

目录 idmysql
镜像mysql:8.0(基础系统 Debian
端口3306
PVC20 Gi/var/lib/mysql
资源中型 · 2 核 4Gi
命名空间建议data
应用名称建议mysql

部署路径:应用商店 → 数据库 → MySQL → 一键部署 → 步骤 ④ 补 env → 确认部署

环境变量与核心配置

          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "强密码_至少16位"
            - name: MYSQL_DATABASE
              value: "appdb"
            - name: MYSQL_USER
              value: "app"
            - name: MYSQL_PASSWORD
              value: "应用账号密码"
            # 可选:字符集
            - name: MYSQL_CHARSET
              value: "utf8mb4"
            - name: MYSQL_COLLATION
              value: "utf8mb4_unicode_ci"
变量必填说明
MYSQL_ROOT_PASSWORD不设则 Pod CrashLoop
MYSQL_DATABASE首次启动自动建库
MYSQL_USER / MYSQL_PASSWORD自动建用户并授权到 MYSQL_DATABASE

连接语法

集群内(同 Namespace data

mysql://app:密码@mysql:3306/appdb

JDBC

jdbc:mysql://mysql.data.svc.cluster.local:3306/appdb?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai

命令行(应用部署 → 终端)

mysql -h 127.0.0.1 -P 3306 -u root -p

外网(NodePort 30306 示例)

mysql -h <节点IP> -P 30306 -u app -p appdb

常用 SQL 语法

-- 建库建用户(若未用 env 自动创建)
CREATE DATABASE shop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'%' IDENTIFIED BY '密码';
GRANT ALL ON shop.* TO 'shop'@'%';
FLUSH PRIVILEGES;

-- 业务表示例
CREATE TABLE orders (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  user_id BIGINT NOT NULL,
  amount DECIMAL(12,2) NOT NULL,
  status TINYINT NOT NULL DEFAULT 0,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_user (user_id)
) ENGINE=InnoDB;

-- 运维
SHOW VARIABLES LIKE 'max_connections';
SHOW ENGINE INNODB STATUS\G

业务集成

Spring Boot application.yml

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/appdb?useSSL=false&serverTimezone=Asia/Shanghai
    username: app
    password: ${MYSQL_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: validate

Django settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'mysql',
        'PORT': '3306',
        'NAME': 'appdb',
        'USER': 'app',
        'PASSWORD': os.environ['MYSQL_PASSWORD'],
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

小紫运维

操作入口
扩容磁盘应用部署 → 存储(Longhorn 校验池容量)
升 CPU/内存资源
改密码工作负载 YAML 改 env → 重启
慢查询终端mysqlSHOW PROCESSLIST
备份逻辑终端 mysqldump -uroot -p appdb > /tmp/backup.sql 或 Namespace YAML 导出

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。