跳转到主要内容

这是本节的多页打印视图。 .

返回本页常规视图.

博客

云架构、数据库迁移、可观测性与工业数字化的长篇实践文章。

来自真实交付现场的笔记:公有云迁移、数据库选型、OT/IT 安全边界,以及什么才是 企业数字化真正能落地的东西。

1 - 全部文章

按发布时间倒序排列。

1.1 - 初次上云:华为云 RDS for MySQL 接入指南

从自建 MySQL 迁移到华为云 RDS for MySQL 的完整实施步骤与关键注意事项,涵盖安全组配置、字符集时区、参数调优和运维方式转变。

很多客户在以往项目中习惯了在 ECS 上自建 MySQL——SSH 进去,yum install mysql-server,配置文件随手改,监控靠自己搭。第一次使用托管数据库服务(RDS)时,往往会在一些细节上"踩坑",不是因为技术难,而是思维惯性没转过来。

本文梳理了从零开始接入华为云 RDS for MySQL 的完整步骤,并重点标注了与自建数据库差异较大的地方。


主要实施步骤

1. 创建 RDS 实例

在华为云控制台购买并创建 RDS for MySQL 实例时,有一个选项务必在创建时就确认好:区域(Region)和 VPC 必须与业务 ECS 保持一致。

这不是可以事后调整的选项。RDS 实例创建完成后,其 VPC 归属无法更改。如果事后发现 RDS 和 ECS 不在同一 VPC,要么重建实例,要么配置 VPC 对等连接——两种方式都麻烦。选对 Region 和 VPC 是后续所有内网连通的前提。

2. 初始化数据库和账号

实例就绪后,在 RDS 控制台:

  • 创建业务所需的数据库(Database)
  • 创建数据库账号(User),不要直接使用 root
  • 按最小权限原则授权,通常业务账号只需 SELECT / INSERT / UPDATE / DELETE / CREATE / DROP 等常用权限即可

3. 修改应用配置

找到业务软件的数据库配置文件,将连接参数从旧的自建 MySQL 切换过来:

参数旧值(自建)新值(RDS)
HostECS 内网 IPRDS 内网域名或内网 IP
Port33063306(默认,可自定义)
Database原库名新建的库名
User原账号RDS 控制台创建的账号
Password原密码RDS 控制台设置的密码

优先使用 RDS 提供的内网域名,而不是内网 IP。内网域名在实例主备切换后仍然有效,IP 可能变化。

4. 验证网络连通性

改配置之前,先从 ECS 测试连通性:

mysql -h <RDS内网地址> -u <用户名> -P 3306 -p

或者用 telnet / nc 先测端口:

telnet <RDS内网地址> 3306

如果连接失败,优先排查安全组——这是新用户最常见的问题,见下文。

5. 启动应用并完整测试

网络连通后,修改配置文件,启动业务软件,进行完整的功能回归测试,确认所有数据库读写操作正常。


需要特别留意的要点

以下几点是自建 MySQL 与云 RDS 差异最大的地方,容易被忽略。

⚠️ 安全组规则(最常见问题)

RDS 实例默认不对任何来源开放 3306 端口。你需要:

  1. 找到 RDS 实例绑定的安全组
  2. 添加入方向规则:协议 TCP,端口 3306,源地址填写业务 ECS 的内网 IP(如 192.168.1.10/32)

不要图省事把源地址设成 0.0.0.0/0,这会将数据库端口暴露在整个 VPC 乃至公网范围内。

⚠️ 字符集和时区

新建 RDS 实例的默认字符集不一定是 utf8mb4。如果你的业务数据包含 emoji 或非 BMP 平面的 Unicode 字符,必须确认:

SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'time_zone';

建议在 RDS 控制台的参数组中显式设置:

character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
time_zone = Asia/Shanghai

时区不对会导致 DATETIME 类型数据存取出现偏差,排查起来很隐蔽。

⚠️ 关键参数确认

RDS 有一套默认参数组,与你自建库的配置可能不同,以下几个参数需要重点核对:

lower_case_table_names(表名大小写敏感)

这是 MySQL 8.0 上最容易踩的坑。RDS for MySQL 8.0 不支持在实例创建后修改此参数,必须在创建实例时就确认好。

  • 0:大小写敏感(Linux 默认,生产推荐)
  • 1:大小写不敏感(Windows 常见,迁移旧库时注意对齐)

innodb_flush_log_at_trx_commit 和 sync_binlog

RDS 默认均为 1,即每次事务提交都强制刷盘,数据最安全但写入性能最低。

配置性能数据安全
两者均为 1较低最强(丢数据风险最低)
flush=2, sync=0较高较弱(宕机可能丢 1 秒数据)

如果业务对写入吞吐有要求,可以在充分测试后酌情调整,但要清楚代价。

⚠️ 从"管理 OS"转变为"管理服务"

这是心智模型的转变,也是最容易产生不适应的地方。

用自建 MySQL 时,你可以 SSH 进服务器,tail -f /var/log/mysql/error.log,vim /etc/mysql/my.cnf,想改什么改什么。用了 RDS 之后,这些操作入口都不存在了。

日常运维对应关系:

自建操作RDS 对应方式
修改 my.cnf控制台 → 参数组
查看 error log控制台 → 日志管理
手动备份控制台 → 备份恢复 → 创建手动备份
监控慢查询控制台 → 慢日志
服务重启控制台 → 重启实例(谨慎操作)

⚠️ 备份策略

RDS 默认开启自动备份,但默认配置不一定符合你的业务要求。建议第一时间确认:

  • 备份时间窗口:设置在业务低峰期(如凌晨 2-4 点)
  • 备份保留天数:默认 7 天,根据业务重要性可调整为 14~30 天
  • 定期手动验证恢复:自动备份有没有用,只有恢复测试说了算

总结

整体迁移工作量不大,核心就三件事:改配置、调参数、测连通性。

容易出问题的地方集中在安全组规则、字符集时区设置,以及 MySQL 8.0 下 lower_case_table_names 的不可变性。提前确认这几个点,接入过程基本能顺滑完成。

云 RDS 的价值不在于"用起来更简单",而在于把备份、高可用、监控、故障切换这些运维成本转移给了云厂商——你不需要操心这些,但需要学会通过控制台而不是命令行来完成这些操作。