MySQL迁移OceanBase方案

MySQL迁移OceanBase方案

Deng YongJie's blog 22 2025-04-05

一、前期准备

  • 网络连通性:确保MySQL源数据库与OceanBase目标数据库之间的网络通畅。

  • 备份MySQL数据:在迁移之前,对MySQL数据库进行全面备份,以防迁移过程中出现问题。

  • 评估数据规模:统计MySQL数据库的大小,评估迁移所需的时间和资源。

  • MySQL开启Binlog:OMS迁移平台会基于全量迁移任务,读取 MySQL 数据库的 Binlog,实时同步增量数据至目标端。

  • 确认字符集和排序规则:源端和目标端数据库的 Collation 不同,可能导致数据同步不一致,从而导致数据丢失。查询字符集和排序规则:SELECT @@character_set_database, @@collation_database;

  • 统一字符集和排序规则:如果数据不包含特殊的国际化字符,并且在 utf8mb4_unicode_ciutf8mb4_general_ci 排序规则下的排序和比较结果一致,那么可以不修改 MySQL 的排序规则。为了确保迁移后的数据在 OceanBase 与 MySQL 一致,最好还是将 MySQL 的排序规则统一为 utf8mb4_general_ci(需业务方评估确认是否可修改排序规则为utf8mb4_general_ci,确保排序规则的兼容性)

    • 注意事项:在 utf8mb4_unicode_ci 中,äa 的排序不同,因为 ä 在 Unicode 中有一个不同的权重。在 utf8mb4_general_ci 中,äa 可能会被视为相同的字符,因为它们按照字典序进行排序。如果MySQL在在 utf8mb4_unicode_ci 中,存在这种特殊字符,直接修改排序规则可能导致数据不一致或排序错误。建议在测试环境中先进行排序规则的修改,并进行全面测试,确保数据一致性和正确性,再到生产环境中进行修改。OMS在迁移过程中会处理字符集和排序规则的转换,自动转为utf8mb4_general_ci
  • MySQL与OB节点之间时钟同步:若时间不同步可能导致延迟时间(增量同步/反向增量)不准确。

  • MySQL权限说明:数据库用户至少需要具备 REPLICATION CLIENTREPLICATION SLAVESELECT *.* 权限,如果是PRIVILEGES权限,则不用调整。

    • GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '<user_name>'; GRANT SELECT ON *.* TO '<user_name>';
  • OB权限说明:目标端数据库至少具备 CREATECREATE VIEWSELECTINSERTUPDATEALTERINDEXDELETE 权限及整个租户 SELECT 权限。

    • GRANT CREATE,CREATE VIEW,SELECT,INSERT,UPDATE,ALTER,INDEX,DELETE ON <database_name>.* TO '<user_name>';
    • GRANT SELECT ON *.* TO '<user_name>';
  • 确定MySQL 数据库是否为双主或多主架构:如果是双主或多主,需开启 log_slave_updates 参数,否则可能因数据源未及时接收所有的 Binlog 导致存在数据丢失的风险。

  • MySQL本地Binlog日志保留时间:数据迁移要求源端数据库的本地增量日志至少保留 7 天以上。否则数据迁移可能因为无法获取增量日志导致数据迁移任务失败,甚至导致源端和目标端数据不一致。因为OMS需要能够完整地获取从迁移开始时刻到迁移完成时刻之间的所有变更记录,如果源端的binlog保留期限不够长,那么在迁移过程中,早期的变更记录可能会被覆盖或删除,从而导致数据丢失或不一致。expire_logs_days = 7或更大

  • 版本兼容确认:OMS:V4.2.6 与 MySQL:V5.5、V5.6、V5.7、V8.0,MariaDB:V10.2 与 OceanBase 社区版V4.3.0-CE、V4.3.1-CE、V4.3.2-CE、V4.3.3-CE兼容。版本对应关系

  • 源端和目标端不支持大小写敏感:源端MySQL按照目标端参数 lower_case_table_names = 1 设置,并以小写方式创建目标端数据库对象,不支持表名区分大小写。

  • MySQL 数据库设置唯一标识:源端 MySQL Server 必须设置 server_id,用来标识MySQL服务器。因为可能多个服务器同时在进行复制操作,多个MySQL不能共享同一个server_id,避免冲突。

二、迁移过程禁止操作

  • 请勿在结构迁移和全量迁移阶段执行库或表结构变更的 DDL 操作,否则可能造成数据迁移任务中断。
  • 禁止大量写入操作:尽量避免对源端MySQL进行大量的写入操作,以免影响迁移的准确性和效率。
  • 禁止更改数据库结构:不要对MySQL数据库的表结构进行修改,如增加或删除字段、修改数据类型等。
  • 禁止关闭binlog功能:保持MySQL的binlog功能开启,确保增量数据能够被OMS正常获取。
  • 禁止直接修改数据:不应直接在OceanBase上进行数据的修改操作,以避免数据不一致。(等后面校验数据一致性,并停服切换至目标库后,再对目标库数据进行操作)
  • 禁止中断迁移任务:不要随意中断OMS工具的迁移任务,除非遇到严重错误需要紧急停止。
  • 禁止频繁修改配置:不要频繁修改OMS平台的配置,避免影响迁移效果。

三、迁移步骤

  • OMS 新建 源端MySQL 数据源、目标端OceanBase 数据源。

  • 新建数据迁移任务。

  • 选择源端和目标端。

  • 选择数据迁移场景和支持全部表迁移类型。

  • 选择迁移类型:勾选结构迁移全量迁移增量同步同步DML和DDL*全量校验反向增量

  • 选择迁移对象:勾选源端需要同步的库。

  • 迁移选项:结构迁移字符集映射与排序规则映射会自动对齐,排序规则可以支持多个选项。全量迁移、增量同步、全量校验并发速度选择平稳

  • 点击预检查:OMS会自动检查数据库用户的读写权限、数据库的网络连接等是否符合要求。全部检查任务均通过后才能启动数据迁移任务。如果预检查报错,可以根据检查给出的解决方法和提示,处理问题后,重新执行预检查,直至预检查成功。

  • 选择启动任务:数据迁移任务启动后,会根据选择的迁移类型依次执行。

  • 全量校验:在全量迁移完成、增量数据同步至目标端并与源端基本追平后,OMS会自动发起一轮针对源库配置的数据表和目标表的全量数据校验任务。

a.新建数据源

image-20241030184736751
image-20241030184841100

b.新建迁移项目并选择源端和目标端

image-20241030184912996

c.选择迁移场景和迁移类型

image-20241030184944770
image-20241030185120647
image-20241030185221197

d.迁移选项,选择平稳迁移

image-20241030190124669
image-20241030190154384

e.进入预检查,根据提示完成相应的操作

MySQL未开启binlog,所以需要先开启

image-20241030190258309

OB租户开启日志归档,OCP平台可以操作

image-20241030190436004

f.预检查成功后,启动任务

image-20241030192018727

g.结构迁移,需要注意是否有失败的对象,需要重试

image-20241031094932200

h.全量迁移,需要注意是否有失败的对象,需要逐个重试

image-20241031095137752
image-20241031095325675

如果逐个重试失败,请联系业务方,确认是否需要手动执行SQL或跳过!

i.增量同步

image-20241031100510315

j.全量校验

image-20241031100527972

四、业务切换

  • 制定切换窗口:业务方评估低峰期作为切换窗口。业务切换与数据迁移过程,时间窗口越短越好,尽量在全量校验完成后进行切换,时间窗口越长风险越大,避免意想不到的因素导致数据一致性问题而无法切换。

  • 暂停业务写入:在切换窗口开始时暂停所有对MySQL的写入操作。

  • 最后一次数据同步:等待几分钟,OMS自动同步增量数据,确保OceanBase的数据是最新的。

  • 切换业务:将后端POD服务的数据库连接切换到OceanBase。

a.暂停业务数据写入MySQL后,等待最后一次数据同步,同步完成并且全量校验完成后,再进行切换业务

注意,不能启动正向切换阶段,正向切换与反向增量属于回滚阶段,会停止MySQL增量写入OB

image-20241031100836307

五、应急预案

  • 切换后,需连接旧的MySQL

    • 在源库创建事务库create database omstxndb;

    • OMS点击正向切换:不会操作业务应用连接的切换,是 OMS的数据迁移任务配合应用切换需要执行的任务流,只是一个抽象化的流程。需要自行确认已完成数据迁移,并等待正向同步延迟被追平。

    • 源库MySQL禁止写入:因为反向增量变更到源库MySQL时,保证数据一致性。

    • 源库MySQL和目标库自动追平:OMS会把源库增量数据自动追平到目标库,保证两边都处于一个点位,然后会停止源库MySQL到目标库的正向同步。

    • OMS点击反向增量:会有同步对象统计与延迟时间显示,自动将目标库回流反向增量到源库MySQL,最后确保MySQL的数据是最新的。

    • 业务低峰期停止写入目标库,并实施业务切换回滚

建议如果不是无法修复的问题,非必要不回滚,多一次迁移 多一份风险

a.启动正向切换,源端MySQL停止写入

image-20241031101126728

b.启动目标端Store与自动追平停写的位置点,停止正向的同步

image-20241031111515753
image-20241031111554732

c.最后启动反向增量,将OB目标端同步到源端MySQL

image-20241031113912598

image-20241031115825321