本文档风哥主要介绍Oracle Cloud Infrastructure (OCI)市场中的MySQL服务,包括MySQL HeatWave、MySQL Database Service等内容,参考MySQL官方文档OCI相关章节,适合DBA人员和云架构师在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 OCI市场概述
Oracle Cloud Infrastructure (OCI) 是Oracle提供的云服务平台,提供全面的MySQL云服务:
1. OCI核心服务
计算服务:
– Compute Instances(计算实例)
– Container Engine for Kubernetes (OKE)
– Functions(无服务器函数)
存储服务:
– Block Volume(块存储)
– Object Storage(对象存储)
– File Storage(文件存储)
数据库服务:
– MySQL Database Service
– Autonomous Database
– Exadata Cloud Service
– Base Database Service
2. OCI MySQL服务概述
MySQL Database Service:
– 完全托管的MySQL服务
– 基于MySQL企业版
– 自动备份和恢复
– 高可用性配置
MySQL HeatWave:
– 内存中查询加速器
– 实时分析处理
– 混合事务/分析处理(HTAP)
– 无需ETL
3. OCI控制台访问
访问OCI控制台:
https://cloud.oracle.com
登录步骤:
1. 输入租户名称
2. 输入用户名和密码
3. 选择身份域
4. 完成多因素认证
控制台界面:
+————————————————–+
| 导航菜单 | 主内容区 |
| |—————————————+
| 计算 | |
| 存储 | 服务仪表板 |
| 网络 | |
| 数据库 | |
| … | |
+———-+—————————————+
4. OCI CLI工具
安装OCI CLI:
# Linux安装
bash -c “$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)”
输出示例:
Installing OCI CLI…
Downloading…
Installing…
OCI CLI installed successfully.
Version: 3.35.0
配置OCI CLI:
oci setup config
输出示例:
Enter a location for your config [/home/user/.oci/config]:
Enter a user OCID: ocid1.user.oc1..xxxxx
Enter a tenancy OCID: ocid1.tenancy.oc1..xxxxx
Enter a region: us-phoenix-1
Do you want to generate a new RSA key pair? [Y/n]: Y
Config written to /home/user/.oci/config
验证配置:
oci iam user get –user-id ocid1.user.oc1..xxxxx
输出示例:
{
“data”: {
“compartment-id”: “ocid1.compartment.oc1..xxxxx”,
“defined-tags”: {},
“description”: “MySQL Admin User”,
“freeform-tags”: {},
“id”: “ocid1.user.oc1..xxxxx”,
“name”: “mysql_admin”,
“time-created”: “2026-04-01T12:00:00.000Z”
}
}
5. OCI区域和可用域
查看可用区域:
oci iam region list
输出示例:
{
“data”: [
{“key”: “PHX”, “name”: “us-phoenix-1”},
{“key”: “IAD”, “name”: “us-ashburn-1”},
{“key”: “FRA”, “name”: “eu-frankfurt-1”},
{“key”: “LHR”, “name”: “uk-london-1”},
{“key”: “NRT”, “name”: “ap-tokyo-1”},
{“key”: “ICN”, “name”: “ap-seoul-1”},
{“key”: “SYD”, “name”: “ap-sydney-1”}
]
}
可用域概念:
– 每个区域有多个可用域
– 可用域之间物理隔离
– 可用域内低延迟连接
– 跨可用域高可用部署
查看可用域:
oci iam availability-domain list –compartment-id ocid1.compartment.oc1..xxxxx
输出示例:
{
“data”: [
{
“compartment-id”: “ocid1.compartment.oc1..xxxxx”,
“id”: “ocid1.availabilitydomain.oc1..xxxxx”,
“name”: “Uocm:PHX-AD-1”
},
{
“compartment-id”: “ocid1.compartment.oc1..xxxxx”,
“id”: “ocid1.availabilitydomain.oc1..xxxxx”,
“name”: “Uocm:PHX-AD-2”
},
{
“compartment-id”: “ocid1.compartment.oc1..xxxxx”,
“id”: “ocid1.availabilitydomain.oc1..xxxxx”,
“name”: “Uocm:PHX-AD-3”
}
]
}
1.2 MySQL HeatWave介绍
MySQL HeatWave是OCI提供的内存中查询加速器,可以显著提升MySQL查询性能:
1. HeatWave概述
什么是HeatWave:
– 内存中查询加速器
– 与MySQL Database Service集成
– 自动数据加载
– 无需修改应用
主要优势:
– 查询性能提升10-100倍
– 实时分析处理
– 混合事务/分析处理(HTAP)
– 无需ETL过程
– 降低总体成本
2. HeatWave架构
架构组件:
+——————-+ +——————-+
| MySQL节点 | –> | HeatWave集群 |
| (OLTP处理) | | (OLAP加速) |
+——————-+ +——————-+
| |
v v
+——————-+ +——————-+
| Block Storage | | Memory (RAM) |
+——————-+ +——————-+
工作流程:
1. 数据存储在MySQL节点
2. 选定表加载到HeatWave
3. 查询自动路由到HeatWave
4. 结果返回给MySQL节点
3. HeatWave节点规格
可用节点形状:
+——————-+——————+——————+
| 形状名称 | OCPU | 内存(GB) |
+——————-+——————+——————+
| MySQL.HeatWave.VM.Standard.E3 | 16 | 512 |
| MySQL.HeatWave.VM.Standard.E4 | 32 | 1024 |
| MySQL.HeatWave.BM.Standard.E3 | 64 | 2048 |
+——————-+——————+——————+
选择建议:
– 小型分析:1个节点
– 中型分析:2-4个节点
– 大型分析:5+个节点
4. HeatWave支持的查询
支持的查询类型:
– SELECT查询
– 聚合查询
– JOIN查询
– 子查询
– GROUP BY
– ORDER BY
– 窗口函数
支持的数据类型:
– 整数类型:TINYINT, SMALLINT, INT, BIGINT
– 浮点类型:FLOAT, DOUBLE
– 定点类型:DECIMAL
– 日期类型:DATE, DATETIME, TIMESTAMP
– 字符串类型:CHAR, VARCHAR, TEXT
– JSON类型
5. HeatWave使用场景
适用场景:
– 实时报表分析
– 数据仓库查询
– 商业智能(BI)
– 机器学习特征工程
– 时序数据分析
不适用场景:
– 高并发OLTP事务
– 频繁数据更新
– 小数据量查询
6. HeatWave性能对比
性能测试示例:
# 在MySQL节点执行
SELECT
product_category,
COUNT(*) as order_count,
SUM(amount) as total_amount
FROM orders
WHERE order_date BETWEEN ‘2026-01-01’ AND ‘2026-03-31’
GROUP BY product_category
ORDER BY total_amount DESC;
# 无HeatWave执行时间
Query OK, 100 rows in set (45.67 sec)
# 有HeatWave执行时间
Query OK, 100 rows in set (0.52 sec)
性能提升:87倍
7. HeatWave限制
当前限制:
– 最大表大小:内存容量限制
– 最大列数:不限制
– 不支持外键约束
– 不支持触发器
– 不支持存储过程调用
数据加载限制:
– 需要主键或唯一键
– 不支持BLOB/GEOMETRY类型
– 加载期间表锁定
1.3 OCI MySQL服务类型
OCI提供多种MySQL服务类型以满足不同需求:
1. MySQL Database Service
服务特点:
– 完全托管的MySQL服务
– 基于MySQL企业版
– 自动补丁和更新
– 自动备份
– 高可用选项
– 只读副本
适用场景:
– Web应用后端
– 电子商务平台
– 内容管理系统
– SaaS应用
服务等级协议(SLA):
– 单节点:99.9%
– 高可用:99.99%
2. MySQL HeatWave
服务特点:
– 包含MySQL Database Service
– 内存中查询加速
– 自动查询路由
– 实时分析
– HTAP能力
适用场景:
– 实时报表
– 数据分析
– 商业智能
– 混合负载
3. MySQL服务形状
可用形状列表:
+————————+——-+——–+——————+
| 形状名称 | OCPU | 内存 | 存储(GB) |
+————————+——-+——–+——————+
| MySQL.VM.Standard.E3.1.8 | 1 | 8 | 50-16384 |
| MySQL.VM.Standard.E3.2.16 | 2 | 16 | 50-16384 |
| MySQL.VM.Standard.E3.4.32 | 4 | 32 | 50-16384 |
| MySQL.VM.Standard.E3.8.64 | 8 | 64 | 50-16384 |
| MySQL.VM.Standard.E3.16.128| 16 | 128 | 50-16384 |
| MySQL.VM.Standard.E3.24.192| 24 | 192 | 50-16384 |
| MySQL.VM.Standard.E3.32.256| 32 | 256 | 50-16384 |
| MySQL.VM.Standard.E3.48.384| 48 | 384 | 50-16384 |
| MySQL.VM.Standard.E3.64.512| 64 | 512 | 50-16384 |
+————————+——-+——–+——————+
选择建议:
– 开发/测试:1-4 OCPU
– 小型生产:4-8 OCPU
– 中型生产:16-32 OCPU
– 大型生产:48-64 OCPU
4. 高可用配置
高可用选项:
– 单节点:无故障转移
– 高可用:自动故障转移
高可用架构:
+——————-+
| 主节点 |
| (AD1) |
+——————-+
|
| 复制
v
+——————-+
| 备节点 |
| (AD2) |
+——————-+
|
| 复制
v
+——————-+
| 备节点 |
| (AD3) |
+——————-+
故障转移时间:
– 检测时间:30-60秒
– 切换时间:60-120秒
– 总恢复时间:2-3分钟
5. 只读副本
只读副本特点:
– 异步复制
– 读扩展
– 独立端点
– 可独立扩展
只读副本配置:
# 创建只读副本
oci mysql replica create \
–mysql-configuration-id ocid1.mysqlconfiguration.oc1..xxxxx \
–display-name “read-replica-1” \
–replica-overrides ‘{“shapeName”: “MySQL.VM.Standard.E3.4.32”}’
输出示例:
{
“data”: {
“id”: “ocid1.mysqlreplica.oc1..xxxxx”,
“display-name”: “read-replica-1”,
“lifecycle-state”: “CREATING”,
“mysql-instance-id”: “ocid1.mysqlinstance.oc1..xxxxx”
}
}
6. 存储配置
存储选项:
– 最小存储:50 GB
– 最大存储:16384 GB (16 TB)
– 自动扩展:支持
– 存储类型:Block Volume
存储性能:
– 基础性能:0.5 IOPS/GB
– 平衡性能:2 IOPS/GB
– 高性能:20 IOPS/GB
配置存储:
# 创建实例时指定存储
oci mysql instance create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-prod” \
–shape-name “MySQL.VM.Standard.E3.4.32” \
–storage ‘{“dataStorageSizeInGB”: 500, “isStorageAutoExpand”: true}’
7. 备份策略
自动备份:
– 备份保留:1-365天
– 备份频率:每日
– 备份类型:全量+增量
– 备份存储:Object Storage
手动备份:
# 创建手动备份
oci mysql backup create \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx \
–display-name “manual-backup-20260401” \
–retention-in-days 30
输出示例:
{
“data”: {
“id”: “ocid1.mysqlbackup.oc1..xxxxx”,
“display-name”: “manual-backup-20260401”,
“lifecycle-state”: “CREATING”,
“retention-in-days”: 30
}
}
时间点恢复(PITR):
– 支持时间范围:最近7天
– 恢复粒度:秒级
– 恢复目标:新实例
Part02-生产环境规划与建议
2.1 OCI MySQL规划
在OCI上部署MySQL需要进行详细的规划:
1. 容量规划
评估因素:
– 数据量大小
– 并发连接数
– 查询复杂度
– 增长速率
计算示例:
# 当前数据量
当前数据库大小:500 GB
月增长率:10%
预计1年后大小:500 * (1.1)^12 = 1569 GB
# 推荐配置
存储空间:2000 GB(预留空间)
内存:64 GB(数据热集的20%)
CPU:16 OCPU
2. 形状选择
选择依据:
– 工作负载类型
– 性能要求
– 预算限制
工作负载分类:
OLTP工作负载:
– 高并发短查询
– 频繁写入
– 推荐形状:E3系列
OLAP工作负载:
– 复杂分析查询
– 大数据扫描
– 推荐形状:HeatWave
混合工作负载:
– 同时有OLTP和OLAP
– 推荐形状:HeatWave
3. 高可用规划
高可用架构选择:
单节点:
– 适用:开发/测试
– SLA:99.9%
– 成本:低
高可用:
– 适用:生产环境
– SLA:99.99%
– 成本:中
跨区域灾备:
– 适用:关键业务
– SLA:99.999%
– 成本:高
4. 网络规划
VCN规划:
# 创建VCN
oci network vcn create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-vcn” \
–cidr-block “10.0.0.0/16”
输出示例:
{
“data”: {
“id”: “ocid1.vcn.oc1..xxxxx”,
“display-name”: “mysql-vcn”,
“cidr-block”: “10.0.0.0/16”,
“lifecycle-state”: “AVAILABLE”
}
}
子网规划:
# 创建子网
oci network subnet create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–vcn-id ocid1.vcn.oc1..xxxxx \
–display-name “mysql-subnet” \
–cidr-block “10.0.1.0/24”
输出示例:
{
“data”: {
“id”: “ocid1.subnet.oc1..xxxxx”,
“display-name”: “mysql-subnet”,
“cidr-block”: “10.0.1.0/24”
}
}
5. 安全组规划
安全列表配置:
# 创建安全列表
oci network security-list create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–vcn-id ocid1.vcn.oc1..xxxxx \
–display-name “mysql-security-list” \
–egress-security-rules ‘[{“destination”: “0.0.0.0/0”, “protocol”: “all”}]’ \
–ingress-security-rules ‘[{“source”: “10.0.0.0/16”, “protocol”: “6”, “tcpOptions”: {“destinationPortRange”: {“min”: 3306, “max”: 3306}}}]’
输出示例:
{
“data”: {
“id”: “ocid1.securitylist.oc1..xxxxx”,
“display-name”: “mysql-security-list”
}
}
2.2 网络架构设计
合理的网络架构设计是OCI MySQL部署的关键:
1. VCN架构设计
推荐架构:
+————————————————–+
| VCN (10.0.0.0/16) |
| +——————+ +——————+ |
| | 公共子网 | | 私有子网 | |
| | 10.0.0.0/24 | | 10.0.1.0/24 | |
| | | | | |
| | – 负载均衡器 | | – MySQL实例 | |
| | – 堡垒主机 | | – 应用服务器 | |
| +——————+ +——————+ |
+————————————————–+
2. 子网设计
子网规划:
– 公共子网:堡垒主机、负载均衡器
– 私有子网:MySQL实例、应用服务器
– 备份子网:备份服务
创建私有子网:
oci network subnet create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–vcn-id ocid1.vcn.oc1..xxxxx \
–display-name “mysql-private-subnet” \
–cidr-block “10.0.1.0/24” \
–prohibit-public-ip-on-vnic true
输出示例:
{
“data”: {
“id”: “ocid1.subnet.oc1..xxxxx”,
“display-name”: “mysql-private-subnet”,
“prohibit-public-ip-on-vnic”: true
}
}
3. 安全组配置
网络安全组(NSG):
# 创建NSG
oci network nsg create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–vcn-id ocid1.vcn.oc1..xxxxx \
–display-name “mysql-nsg”
输出示例:
{
“data”: {
“id”: “ocid1.networksecuritygroup.oc1..xxxxx”,
“display-name”: “mysql-nsg”
}
}
# 添加安全规则
oci network nsg rules add \
–nsg-id ocid1.networksecuritygroup.oc1..xxxxx \
–rules ‘[{“direction”: “INGRESS”, “protocol”: “6”, “source”: “10.0.0.0/16”, “tcpOptions”: {“destinationPortRange”: {“min”: 3306, “max”: 3306}}}]’
4. 负载均衡配置
创建负载均衡器:
oci lb load-balancer create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-lb” \
–shape-name “100Mbps” \
–subnet-ids ‘[“ocid1.subnet.oc1..xxxxx”]’
输出示例:
{
“data”: {
“id”: “ocid1.loadbalancer.oc1..xxxxx”,
“display-name”: “mysql-lb”,
“lifecycle-state”: “CREATING”
}
}
配置后端集:
oci lb backend-set create \
–load-balancer-id ocid1.loadbalancer.oc1..xxxxx \
–name “mysql-backend” \
–policy “ROUND_ROBIN” \
–health-checker ‘{“protocol”: “TCP”, “port”: 3306, “intervalInMillis”: 10000}’
5. 私有连接配置
Service Gateway:
# 创建Service Gateway
oci network service-gateway create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–vcn-id ocid1.vcn.oc1..xxxxx \
–display-name “mysql-sgw” \
–services ‘[{“service-name”: “oci-phoenix-objectstorage”}]’
输出示例:
{
“data”: {
“id”: “ocid1.servicegateway.oc1..xxxxx”,
“display-name”: “mysql-sgw”
}
}
NAT Gateway:
# 创建NAT Gateway
oci network nat-gateway create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–vcn-id ocid1.vcn.oc1..xxxxx \
–display-name “mysql-nat”
输出示例:
{
“data”: {
“id”: “ocid1.natgateway.oc1..xxxxx”,
“display-name”: “mysql-nat”
}
}
2.3 安全配置规划
OCI MySQL的安全配置需要多层次考虑:
1. 身份与访问管理(IAM)
创建策略:
# 创建用户组
oci iam group create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–name “mysql-admins” \
–description “MySQL Administrators”
输出示例:
{
“data”: {
“id”: “ocid1.group.oc1..xxxxx”,
“name”: “mysql-admins”
}
}
# 创建策略
oci iam policy create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–name “mysql-policy” \
–statements ‘[“Allow group mysql-admins to manage mysql-family in compartment mysql-compartment”]’
2. 数据加密
加密配置:
– 存储加密:默认启用
– 传输加密:TLS 1.2+
– 密钥管理:OCI Vault
创建加密密钥:
# 创建Vault
oci kms vault create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-vault” \
–vault-type “DEFAULT”
输出示例:
{
“data”: {
“id”: “ocid1.vault.oc1..xxxxx”,
“display-name”: “mysql-vault”
}
}
# 创建密钥
oci kms key create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-key” \
–key-shape ‘{“algorithm”: “AES”, “length”: 256}’
3. 网络安全
安全列表规则:
入站规则:
– 来源:应用子网
– 端口:3306
– 协议:TCP
出站规则:
– 目标:0.0.0.0/0
– 协议:ALL
配置示例:
# 更新安全列表
oci network security-list update \
–security-list-id ocid1.securitylist.oc1..xxxxx \
–ingress-security-rules ‘[{“source”: “10.0.2.0/24”, “protocol”: “6”, “tcpOptions”: {“destinationPortRange”: {“min”: 3306, “max”: 3306}}}]’
4. 审计日志
启用审计:
# 查看审计日志
oci audit event list \
–compartment-id ocid1.compartment.oc1..xxxxx \
–start-time “2026-04-01T00:00:00Z” \
–end-time “2026-04-01T23:59:59Z”
输出示例:
{
“data”: [
{
“event-name”: “CreateMysqlInstance”,
“event-time”: “2026-04-01T12:00:00.000Z”,
“principal-id”: “ocid1.user.oc1..xxxxx”
}
]
}
Part03-生产环境项目实施方案
3.1 创建MySQL实例
以下是在OCI上创建MySQL实例的详细步骤:
1. 使用控制台创建
步骤:
1. 登录OCI控制台
2. 导航到数据库 -> MySQL -> DB Systems
3. 点击”Create MySQL DB System”
4. 填写基本信息:
– 名称:mysql-prod
– 描述:生产环境MySQL
– 区间:production-compartment
5. 选择配置:
– 形状:MySQL.VM.Standard.E3.4.32
– 存储:500 GB
– 高可用:启用
6. 配置网络:
– VCN:mysql-vcn
– 子网:mysql-private-subnet
7. 配置管理员:
– 用户名:admin
– 密码:********
8. 点击”Create”
2. 使用CLI创建
创建MySQL实例:
oci mysql instance create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-prod” \
–description “Production MySQL Instance” \
–shape-name “MySQL.VM.Standard.E3.4.32” \
–subnet-id ocid1.subnet.oc1..xxxxx \
–admin-username “admin” \
–admin-password “********” \
–availability-domain “Uocm:PHX-AD-1” \
–storage ‘{“dataStorageSizeInGB”: 500, “isStorageAutoExpand”: true}’ \
–is-highly-available true
输出示例:
{
“data”: {
“id”: “ocid1.mysqlinstance.oc1..xxxxx”,
“display-name”: “mysql-prod”,
“lifecycle-state”: “CREATING”,
“shape-name”: “MySQL.VM.Standard.E3.4.32”,
“mysql-instance”: {
“data-storage-size-in-gbs”: 500,
“is-highly-available”: true
}
}
}
3. 查看实例状态
查看实例列表:
oci mysql instance list \
–compartment-id ocid1.compartment.oc1..xxxxx
输出示例:
{
“data”: [
{
“id”: “ocid1.mysqlinstance.oc1..xxxxx”,
“display-name”: “mysql-prod”,
“lifecycle-state”: “ACTIVE”,
“shape-name”: “MySQL.VM.Standard.E3.4.32”
}
]
}
查看实例详情:
oci mysql instance get \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx
输出示例:
{
“data”: {
“id”: “ocid1.mysqlinstance.oc1..xxxxx”,
“display-name”: “mysql-prod”,
“lifecycle-state”: “ACTIVE”,
“endpoints”: [
{
“hostname”: “mysql-prod.mysqlsubnet.vcn.oraclevcn.com”,
“port”: 3306,
“modes”: [“READ”, “WRITE”]
}
],
“mysql-instance”: {
“data-storage-size-in-gbs”: 500,
“is-highly-available”: true
}
}
}
4. 创建HeatWave集群
添加HeatWave节点:
oci mysql heatwave-cluster create \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx \
–shape-name “MySQL.HeatWave.VM.Standard.E3” \
–cluster-size 2
输出示例:
{
“data”: {
“id”: “ocid1.heatwavecluster.oc1..xxxxx”,
“lifecycle-state”: “CREATING”,
“shape-name”: “MySQL.HeatWave.VM.Standard.E3”,
“cluster-size”: 2
}
}
查看HeatWave状态:
oci mysql heatwave-cluster get \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx
输出示例:
{
“data”: {
“lifecycle-state”: “ACTIVE”,
“cluster-size”: 2,
“shape-name”: “MySQL.HeatWave.VM.Standard.E3”
}
}
3.2 配置MySQL参数
OCI MySQL支持自定义配置参数:
1. 查看配置
列出可用配置:
oci mysql configuration list \
–compartment-id ocid1.compartment.oc1..xxxxx
输出示例:
{
“data”: [
{
“id”: “ocid1.mysqlconfiguration.oc1..xxxxx”,
“display-name”: “Default Configuration”,
“type”: “DEFAULT”
},
{
“id”: “ocid1.mysqlconfiguration.oc1..xxxxx”,
“display-name”: “Custom Configuration”,
“type”: “CUSTOM”
}
]
}
2. 创建自定义配置
创建配置:
oci mysql configuration create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-custom-config” \
–description “Custom MySQL Configuration” \
–shape-name “MySQL.VM.Standard.E3.4.32” \
–variables ‘{
“innodbBufferPoolSize”: 26843545600,
“maxConnections”: 500,
“connectTimeout”: 10,
“waitTimeout”: 28800,
“interactiveTimeout”: 28800,
“maxAllowedPacket”: 67108864,
“sqlMode”: “STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE”,
“characterSetServer”: “utf8mb4”,
“collationServer”: “utf8mb4_unicode_ci”
}’
输出示例:
{
“data”: {
“id”: “ocid1.mysqlconfiguration.oc1..xxxxx”,
“display-name”: “mysql-custom-config”,
“lifecycle-state”: “ACTIVE”
}
}
3. 应用配置到实例
更新实例配置:
oci mysql instance update \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx \
–configuration-id ocid1.mysqlconfiguration.oc1..xxxxx
输出示例:
{
“data”: {
“id”: “ocid1.mysqlinstance.oc1..xxxxx”,
“lifecycle-state”: “UPDATING”
}
}
4. 常用参数配置
性能优化参数:
{
“innodbBufferPoolSize”: 26843545600, // 25GB
“innodbBufferPoolInstances”: 8,
“innodbLogFileSize”: 1073741824, // 1GB
“innodbFlushLogAtTrxCommit”: 1,
“innodbFlushMethod”: “O_DIRECT”,
“innodbIoCapacity”: 2000,
“innodbIoCapacityMax”: 4000
}
连接参数:
{
“maxConnections”: 500,
“maxConnectErrors”: 1000,
“connectTimeout”: 10,
“waitTimeout”: 28800,
“interactiveTimeout”: 28800,
“maxAllowedPacket”: 67108864
}
字符集参数:
{
“characterSetServer”: “utf8mb4”,
“collationServer”: “utf8mb4_unicode_ci”,
“characterSetClient”: “utf8mb4”,
“characterSetConnection”: “utf8mb4”,
“characterSetResults”: “utf8mb4”
}
5. 查看当前参数
连接到MySQL查看:
mysql> SHOW VARIABLES LIKE ‘innodb_buffer_pool_size’;
输出示例:
+————————-+————+
| Variable_name | Value |
+————————-+————+
| innodb_buffer_pool_size | 26843545600|
+————————-+————+
mysql> SHOW VARIABLES LIKE ‘max_connections’;
输出示例:
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 500 |
+—————–+——-+
3.3 备份恢复配置
OCI MySQL提供完善的备份和恢复功能:
1. 配置自动备份
创建实例时启用自动备份:
oci mysql instance create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-prod” \
–backup-policy ‘{
“isEnabled”: true,
“retentionInDays”: 30,
“windowStartTime”: “02:00”
}’
更新备份策略:
oci mysql instance update \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx \
–backup-policy ‘{
“isEnabled”: true,
“retentionInDays”: 30,
“windowStartTime”: “02:00”
}’
输出示例:
{
“data”: {
“backup-policy”: {
“is-enabled”: true,
“retention-in-days”: 30,
“window-start-time”: “02:00”
}
}
}
2. 创建手动备份
创建备份:
oci mysql backup create \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx \
–display-name “manual-backup-20260401” \
–description “Manual backup before upgrade” \
–retention-in-days 30
输出示例:
{
“data”: {
“id”: “ocid1.mysqlbackup.oc1..xxxxx”,
“display-name”: “manual-backup-20260401”,
“lifecycle-state”: “CREATING”,
“retention-in-days”: 30
}
}
3. 查看备份列表
列出所有备份:
oci mysql backup list \
–compartment-id ocid1.compartment.oc1..xxxxx \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx
输出示例:
{
“data”: [
{
“id”: “ocid1.mysqlbackup.oc1..xxxxx”,
“display-name”: “manual-backup-20260401”,
“lifecycle-state”: “ACTIVE”,
“time-created”: “2026-04-01T02:00:00.000Z”,
“backup-type”: “FULL”,
“data-storage-size-in-gbs”: 500
},
{
“id”: “ocid1.mysqlbackup.oc1..xxxxx”,
“display-name”: “auto-backup-20260401”,
“lifecycle-state”: “ACTIVE”,
“backup-type”: “INCREMENTAL”
}
]
}
4. 恢复备份
从备份创建新实例:
oci mysql instance create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-restored” \
–subnet-id ocid1.subnet.oc1..xxxxx \
–backup-id ocid1.mysqlbackup.oc1..xxxxx
输出示例:
{
“data”: {
“id”: “ocid1.mysqlinstance.oc1..xxxxx”,
“display-name”: “mysql-restored”,
“lifecycle-state”: “CREATING”,
“source”: {
“backup-id”: “ocid1.mysqlbackup.oc1..xxxxx”
}
}
}
5. 时间点恢复(PITR)
恢复到指定时间点:
oci mysql instance create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-pitr” \
–subnet-id ocid1.subnet.oc1..xxxxx \
–recovery-time “2026-04-01T10:30:00Z”
输出示例:
{
“data”: {
“id”: “ocid1.mysqlinstance.oc1..xxxxx”,
“display-name”: “mysql-pitr”,
“lifecycle-state”: “CREATING”,
“source”: {
“recovery-time”: “2026-04-01T10:30:00Z”
}
}
}
6. 删除备份
删除手动备份:
oci mysql backup delete \
–backup-id ocid1.mysqlbackup.oc1..xxxxx
输出示例:
{
“data”: {
“lifecycle-state”: “DELETING”
}
}
Part04-生产案例与实战讲解
4.1 连接MySQL实例
以下是如何连接OCI MySQL实例的实战案例:
# 案例1:从应用服务器连接
# 步骤1:获取连接信息
oci mysql instance get \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx
# 输出示例:
{
“data”: {
“endpoints”: [
{
“hostname”: “mysql-prod.mysqlsubnet.vcn.oraclevcn.com”,
“port”: 3306,
“modes”: [“READ”, “WRITE”]
}
]
}
}
# 步骤2:从应用服务器连接
mysql -h mysql-prod.mysqlsubnet.vcn.oraclevcn.com \
-P 3306 \
-u admin \
-p
# 输出示例:
# Welcome to the MySQL monitor.
# mysql>
# 案例2:使用SSL连接
# 步骤1:下载SSL证书
oci mysql instance get \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx \
–query ‘data.”ssl-ca-cert”‘ > /tmp/mysql-ca.pem
# 步骤2:使用SSL连接
mysql -h mysql-prod.mysqlsubnet.vcn.oraclevcn.com \
-P 3306 \
-u admin \
-p \
–ssl-ca=/tmp/mysql-ca.pem \
–ssl-mode=REQUIRED
# 输出示例:
# Welcome to the MySQL monitor.
# SSL connection established.
# 案例3:从本地客户端连接(通过堡垒主机)
# 步骤1:配置SSH隧道
ssh -i ~/.ssh/id_rsa \
-L 3306:mysql-prod.mysqlsubnet.vcn.oraclevcn.com:3306 \
opc@bastion-host.example.com \
-N
# 步骤2:连接MySQL
mysql -h 127.0.0.1 \
-P 3306 \
-u admin \
-p
# 输出示例:
# Welcome to the MySQL monitor.
# mysql>
# 案例4:使用连接池
# 配置HikariCP连接池
# application.properties
spring.datasource.url=jdbc:mysql://mysql-prod.mysqlsubnet.vcn.oraclevcn.com:3306/production_db?useSSL=true&serverTimezone=UTC
spring.datasource.username=admin
spring.datasource.password=********
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000
# 案例5:连接只读副本
# 步骤1:查看只读副本信息
oci mysql replica list \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx
# 输出示例:
{
“data”: [
{
“id”: “ocid1.mysqlreplica.oc1..xxxxx”,
“display-name”: “read-replica-1”,
“endpoint”: {
“hostname”: “read-replica-1.mysqlsubnet.vcn.oraclevcn.com”,
“port”: 3306
}
}
]
}
# 步骤2:连接只读副本
mysql -h read-replica-1.mysqlsubnet.vcn.oraclevcn.com \
-P 3306 \
-u admin \
-p
# 输出示例:
# Welcome to the MySQL monitor.
# mysql>
4.2 数据迁移案例
以下是将数据迁移到OCI MySQL的实战案例:
# 案例1:使用mysqldump迁移
# 步骤1:导出源数据库
mysqldump -h source-db.example.com \
-u root -p \
–single-transaction \
–routines \
–triggers \
–events \
–databases production_db \
> production_db_dump.sql
# 输出示例:
# Dump completed successfully.
# File size: 1.5 GB
# 步骤2:导入到OCI MySQL
mysql -h mysql-prod.mysqlsubnet.vcn.oraclevcn.com \
-u admin -p \
< production_db_dump.sql
# 输出示例:
# Query OK, 0 rows affected
# Query OK, 10000 rows affected
# ...
# Import completed successfully.
# 案例2:使用MySQL Shell迁移
# 步骤1:安装MySQL Shell
yum install mysql-shell
# 步骤2:执行数据迁移
mysqlsh user@source-db.example.com:3306 \
-- util dump-instance /tmp/dump \
--threads=4 \
--consistent=true
# 输出示例:
# Dumping instance...
# Dump completed successfully.
# Total size: 1.5 GB
# 步骤3:导入到OCI MySQL
mysqlsh admin@mysql-prod.mysqlsubnet.vcn.oraclevcn.com:3306 \
-- util load-dump /tmp/dump \
--threads=4
# 输出示例:
# Loading dump...
# Load completed successfully.
# Total time: 15 minutes 30 seconds
# 案例3:使用OCI Data Transfer Service
# 适用场景:大数据量迁移(TB级别)
# 步骤1:创建传输作业
oci dts job create \
--compartment-id ocid1.compartment.oc1..xxxxx \
--display-name "mysql-data-transfer" \
--device-type "APPLIANCE"
# 输出示例:
{
"data": {
"id": "ocid1.dtsjob.oc1..xxxxx",
"display-name": "mysql-data-transfer",
"lifecycle-state": "CREATED"
}
}
# 步骤2:准备数据
# 将数据导出到传输设备
# 步骤3:发送设备到Oracle
# 步骤4:数据加载到OCI
# 案例4:使用GoldenGate实时迁移
# 步骤1:配置源端Extract
# Extract配置文件
EXTRACT ext_mysql
SOURCEDB source_db, USERID ggs, PASSWORD ********
TABLE production_db.*;
# 步骤2:配置目标端Replicat
# Replicat配置文件
REPLICAT rep_mysql
TARGETDB oci_mysql, USERID ggs, PASSWORD ********
MAP production_db.*, TARGET production_db.*;
# 步骤3:启动复制
ggsci> START EXTRACT ext_mysql
ggsci> START REPLICAT rep_mysql
# 输出示例:
# EXTRACT EXT_MYSQL is running.
# REPLICAT REP_MYSQL is running.
4.3 监控管理案例
以下是OCI MySQL监控管理的实战案例:
# 案例1:查看实例指标
# 步骤1:获取CPU使用率
oci monitoring metric-data summarize-metrics-data \
–compartment-id ocid1.compartment.oc1..xxxxx \
–namespace “oci_mysql” \
–query-text “CPUUtilization[1m].mean()” \
–start-time “2026-04-01T00:00:00Z” \
–end-time “2026-04-01T23:59:59Z”
# 输出示例:
{
“data”: [
{
“aggregated-datapoints”: [
{“timestamp”: “2026-04-01T00:00:00Z”, “value”: 45.5},
{“timestamp”: “2026-04-01T01:00:00Z”, “value”: 32.1},
{“timestamp”: “2026-04-01T02:00:00Z”, “value”: 28.3}
],
“name”: “CPUUtilization”
}
]
}
# 步骤2:获取内存使用率
oci monitoring metric-data summarize-metrics-data \
–compartment-id ocid1.compartment.oc1..xxxxx \
–namespace “oci_mysql” \
–query-text “MemoryUtilization[1m].mean()”
# 输出示例:
{
“data”: [
{
“aggregated-datapoints”: [
{“timestamp”: “2026-04-01T00:00:00Z”, “value”: 78.5}
],
“name”: “MemoryUtilization”
}
]
}
# 案例2:配置告警
# 步骤1:创建告警规则
oci monitoring alarm create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-high-cpu” \
–metric-compartment-id ocid1.compartment.oc1..xxxxx \
–namespace “oci_mysql” \
–query “CPUUtilization[1m].mean() > 80” \
–severity “CRITICAL” \
–body “MySQL CPU usage is above 80%” \
–notification-topic-id ocid1.onstopic.oc1..xxxxx
# 输出示例:
{
“data”: {
“id”: “ocid1.alarm.oc1..xxxxx”,
“display-name”: “mysql-high-cpu”,
“lifecycle-state”: “ACTIVE”
}
}
# 步骤2:查看告警状态
oci monitoring alarm get \
–alarm-id ocid1.alarm.oc1..xxxxx
# 输出示例:
{
“data”: {
“display-name”: “mysql-high-cpu”,
“status”: “OK”,
“suppression”: null
}
}
# 案例3:查看慢查询日志
# 步骤1:启用慢查询日志
mysql> SET GLOBAL slow_query_log = ON;
mysql> SET GLOBAL long_query_time = 2;
# 输出示例:
Query OK, 0 rows affected (0.00 sec)
# 步骤2:查看慢查询
mysql> SELECT * FROM mysql.slow_log
ORDER BY query_time DESC
LIMIT 10;
# 输出示例:
+———————+—————————+————+———–+
| start_time | user_host | query_time | sql_text |
+———————+—————————+————+———–+
| 2026-04-01 12:00:00 | admin[admin] @ localhost | 00:05:23 | SELECT… |
| 2026-04-01 11:30:00 | app[app] @ 10.0.2.10 | 00:03:45 | SELECT… |
+———————+—————————+————+———–+
# 案例4:扩展实例
# 步骤1:查看当前形状
oci mysql instance get \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx \
–query ‘data.”shape-name”‘
# 输出示例:
“MySQL.VM.Standard.E3.4.32”
# 步骤2:扩展到更大形状
oci mysql instance update \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx \
–shape-name “MySQL.VM.Standard.E3.8.64”
# 输出示例:
{
“data”: {
“id”: “ocid1.mysqlinstance.oc1..xxxxx”,
“lifecycle-state”: “UPDATING”,
“shape-name”: “MySQL.VM.Standard.E3.8.64”
}
}
# 步骤3:验证扩展完成
oci mysql instance get \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx
# 输出示例:
{
“data”: {
“lifecycle-state”: “ACTIVE”,
“shape-name”: “MySQL.VM.Standard.E3.8.64”
}
}
Part05-风哥经验总结与分享
5.1 OCI MySQL最佳实践
以下是OCI MySQL的最佳实践建议:
1. 实例配置最佳实践
– 选择合适的形状:根据工作负载选择
– 启用高可用:生产环境必须
– 配置自动备份:至少保留7天
– 启用存储自动扩展:避免空间不足
2. 网络配置最佳实践
– 使用私有子网:保护数据库安全
– 配置安全列表:限制访问来源
– 使用NSG:更精细的访问控制
– 配置Service Gateway:访问OCI服务
3. 安全配置最佳实践
– 使用强密码:符合企业密码策略
– 启用SSL连接:加密数据传输
– 配置IAM策略:最小权限原则
– 定期审计日志:监控异常访问
4. 性能优化最佳实践
– 配置合适的Buffer Pool
– 创建必要的索引
– 使用HeatWave加速分析
– 监控慢查询并优化
5. 成本优化最佳实践
– 选择合适的形状:避免过度配置
– 使用预留实例:长期使用折扣
– 合理设置备份保留:避免过多备份
– 监控资源使用:及时调整配置
5.2 成本优化建议
以下是OCI MySQL的成本优化建议:
1. 实例成本优化
形状选择:
– 开发环境:使用小形状
– 测试环境:按需使用
– 生产环境:选择合适形状
预留实例:
# 查看预留实例选项
oci limits quota-usage list \
–compartment-id ocid1.compartment.oc1..xxxxx \
–service-name “mysql”
输出示例:
{
“data”: [
{
“name”: “mysql-ocpu-count”,
“used”: 16,
“limit”: 100
}
]
}
2. 存储成本优化
存储策略:
– 选择合适的存储大小
– 启用自动扩展
– 定期清理旧数据
– 使用压缩
备份优化:
– 设置合理的保留期
– 定期清理旧备份
– 使用增量备份
3. 网络成本优化
网络策略:
– 使用Service Gateway减少出站流量
– 在同一区域部署应用和数据库
– 使用Private Endpoint
4. 成本监控
查看成本:
oci usage-api request-summarized-usages \
–compartment-id ocid1.compartment.oc1..xxxxx \
–granularity “MONTHLY” \
–query-type “COST” \
–time-start “2026-04-01T00:00:00Z” \
–time-end “2026-04-30T23:59:59Z”
输出示例:
{
“data”: {
“items”: [
{
“computed-amount”: 1234.56,
“currency”: “USD”,
“service”: “MySQL Database Service”
}
]
}
}
5.3 高可用与灾备
以下是OCI MySQL的高可用和灾备方案:
1. 高可用配置
启用高可用:
oci mysql instance create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-ha” \
–is-highly-available true
输出示例:
{
“data”: {
“is-highly-available”: true,
“availability-domain”: “Uocm:PHX-AD-1”
}
}
高可用架构:
+——————-+
| 主节点 (AD1) |
+——————-+
|
| 同步复制
v
+——————-+
| 备节点 (AD2) |
+——————-+
|
| 同步复制
v
+——————-+
| 备节点 (AD3) |
+——————-+
2. 跨区域灾备
灾备架构:
+——————-+ +——————-+
| 主区域 (Phoenix) | | 备区域 (Ashburn) |
| +—————+ | | +—————+ |
| | MySQL实例 | | 复制 | | MySQL实例 | |
| +—————+ | ——> | +—————+ |
+——————-+ +——————-+
配置跨区域复制:
# 在备区域创建实例
oci mysql instance create \
–compartment-id ocid1.compartment.oc1..xxxxx \
–display-name “mysql-dr” \
–region “us-ashburn-1”
3. 故障转移测试
测试故障转移:
# 模拟主节点故障
oci mysql instance stop \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx
输出示例:
{
“data”: {
“lifecycle-state”: “STOPPING”
}
}
查看故障转移状态:
oci mysql instance get \
–mysql-instance-id ocid1.mysqlinstance.oc1..xxxxx
输出示例:
{
“data”: {
“lifecycle-state”: “FAILOVER_IN_PROGRESS”
}
}
4. 灾备演练
演练步骤:
1. 验证备区域实例状态
2. 测试数据同步延迟
3. 验证应用连接
4. 执行故障转移
5. 验证业务恢复
6. 回切到主区域
风哥提示:OCI MySQL服务提供了企业级的MySQL云服务,特别适合希望减少运维负担的企业。MySQL HeatWave是一个革命性的产品,可以在不改变应用的情况下大幅提升分析查询性能。建议在迁移到OCI之前,先在测试环境充分验证,并制定详细的迁移和回滚计划。更多视频教程请访问www.fgedu.net.cn
注意:本文档内容基于MySQL 8.4官方文档和OCI文档编写,适合DBA人员和云架构师在学习和测试中使用。在生产环境中应用时,请务必进行充分的测试和验证。OCI服务的定价和功能可能随时变化,请由风哥教程参考Oracle官方文档获取最新信息。文档中的命令和配置可能因OCI版本不同而有所差异,请根据实际情况进行调整。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
