MySQL 到 GaussDB 迁移指南
适用场景:已部署ONES系统,数据库从MySQL迁移到GaussDB的场景。
前置约束
- ONES版本号 >= 6.43.7;该客户使用的插件已经完成GaussDB适配。(如果版本过低,则先升级到新版本)
- 已部署ONES系统,数据库从MySQL迁移到GaussDB的场景。确保业务停机,避免对 MySQL 写入或更新数据。
- 外置 GaussDB, 需客户准备可访问的 GaussDB 实例,确保具备网络连通性,并且延迟低于 10ms
- GaussDB 帐号命名约束与建议(修改ONES系统配置时,需要参考此约束)
由于 GaussDB 的账号名 与 业务使用的 schema 名 不可重名(否则可能引发权限冲突及其他问题),
建议在创建账号时为账号名添加环境前缀。推荐的帐号命名前缀如下:
DEV环境(开发): u_dev_
UAT环境(用户验收): u_uat_
SIT环境(集成测试): u_sit_
PROD环境(生产环境): u_prod_ - GaussDB 逻辑日志复制槽的命名约束与建议(修改ONES系统配置时,需要参考此约束)
由于 GaussDB 的逻辑复制槽不允许跨db重名。 因此ONES业务使用的逻辑复制槽的名字必须唯一。
ONES 通过 gaussdbCdcLogicalSlotName 配置指定 逻辑复制槽的名称, 推荐不同环境的命名如下:
DEV环境(开发): slot_dev_ones_cdc
UAT环境(用户验收): slot_uat_ones_cdc
SIT环境(集成测试): slot_sit_ones_cdc
PROD环境(生产环境): slot_prod_ones_cdc - GaussDB 密码要求
GaussDB密码长度必须在 8–32 个字符之间
至少包含以下字符中的三种: 大写字母、小写字母、数字和特殊字符。
特殊字符仅支持 ~ ! @ # % ^ * _ - = + ? ,
客户侧的准备工作
- 准备好 GaussDB 分布式实例,确保具备网络连通性,并且到ONES服务器的延迟低于 10ms
- 创建管理员帐号。(ONES系统cdc组件需要创建、查询、消费 逻辑复制槽,以便保证审计日志、报表、索引功能的正常工作。 而逻辑复制槽的功能需要GaussDB的管理元帐号 )
CREATE USER onesadmin WITH SYSADMIN password "********";
操作步骤
1. 配置准备
- 运行
make init-config生成最新的config/内容。 - 备份旧配置
cp config/config.yaml config/config-mysql.backup.yaml - 编辑配置,加入GaussDB相关的配置项
vi config/private.yaml
# 固定值,无需修改
internalComponentMysqlEnable: false
dbDriver: "gaussdb"
wizEditorUseDB: "gaussdb"
dmCdcDbUser: 'root@mysql01' # 固定值,无需调整
dmCdcDbHost: 'oceanbase-service'
oceanbaseImage: img.ones.pro/library/oceanbase-ce:v4.3.1
gaussdbManualInitDBEnable: false
# 按实际情况进行修改下方配置,注意帐号和密码需要参考本文「前置约束」
gaussdbBaseDB: "ones_uat"
gaussdbHost: "gaussdb.example.com"
gaussdbPort: 8000
gaussdbAdminUser: "onesadmin"
gaussdbAdminPassword: "******"
gaussdbCdcLogicalSlotName: slot_uat_ones_cdc
mysqlUser: u_uat_ones
mysqlPassword: xxxxxxx
mysqlCamundaUser: u_uat_camunda
mysqlCamundaPassword: xxxxxxx
platformMysqlUser: u_uat_platform
platformMysqlPassword: xxxxxxx
platformMysqlPluginUser: u_uat_platform_plugin
platformMysqlPluginPwd: xxxxxxx
pluginBuiltInGvmbef2yMysqlDbUser: u_uat_plugin_built_in_gvmbef2y
pluginBuiltInGvmbef2yMysqlDbPwd: xxxxxxx
wizMysqlUser: u_uat_wizeditor
wizMysqlPassword: xxxxxxx
oauthMysqlUser: u_uat_oauth
oauthMysqlPassword: xxxxxxx
eventsMysqlUser: u_uat_events
eventsMysqlPassword: xxxxxxx
identityMysqlUser: u_uat_identity
identityMysqlPassword: xxxxxxx
mysqlWatchUser: u_uat_oneswatch
# 修改 kafkaCdcConnectorSuffix、kilobSyncSchemaHash、kilobForceSnapshotVersion 的值,跟旧配置值不一样即可
kafkaCdcConnectorSuffix: 3
kilobSyncSchemaHash: 3
kilobForceSnapshotVersion: 3
kilobForceSnapshotAll: true
2. 执行迁移任务
# 初始化 GaussDB
make init-gaussdb-db
# 开始迁移任务
make config-ones
kubectl -n ones apply -f tmp/ones/v1/init-gaussdb-db/mysql-to-gaussdb.yaml
# 查看迁移 mysql-to-gaussdb pod 的日志
kubectl -n ones logs -f -l app=mysql-to-gaussdb
3. 验证迁移结果
查看 mysql-to-gaussdb pod 的日志如果看到了包含 Migration complete 的内容且 failure: 0 则说明迁移完成。如果 failure 不为 0 联系相关同事作进一步处理。

迁移完成后可以执行以下命令
# 删除迁移任务
kubectl -n ones delete -f tmp/ones/v1/init-gaussdb-db/mysql-to-gaussdb.yaml
4. 切换到GaussDB数据库
- 执行
make setup-ones,使ONES系统配置指向GaussDB并生效 - 重建cdc
make rebuild-cdc - 关闭内置 MySQL
make setup-ones-built-in-mysql(外置MySQL时,这一步可忽略)
回退到 MySQL
如果切换到GaussDB数据库后发现问题,可以回退到 MySQL 数据库。
- 备份GaussDB配置
cp config/config.yaml config-gaussdb.backup.yaml - 回退到MySQL配置
cp config/config-mysql.backup.yaml config/config.yaml - 执行
make setup-ones-built-in-mysql启用内置 MySQL(外置MySQL时,这一步可忽略); - 执行
make setup-ones重新部署 ONES。 - 重建cdc
make rebuild-cdc
重置数据库
如果要清除 GaussDB 数据库中的 ONES 数据,使用 GaussDB 控制台或 gsql 工具,登录 GaussDB 数据库执行以下 SQL
(以UAT环境为例,根据实际情况,请调整下方的帐号名称和复制槽名称 )
-- 清理帐号
DROP USER IF EXISTS u_uat_ones CASCADE;
DROP USER IF EXISTS u_uat_camunda CASCADE;
DROP USER IF EXISTS u_uat_platform CASCADE;
DROP USER IF EXISTS u_uat_platform_plugin CASCADE;
DROP USER IF EXISTS u_uat_plugin_built_in_gvmbef2y CASCADE;
DROP USER IF EXISTS u_uat_wizeditor CASCADE;
DROP USER IF EXISTS u_uat_oauth CASCADE;
DROP USER IF EXISTS u_uat_events CASCADE;
DROP USER IF EXISTS u_uat_identity CASCADE;
DROP USER IF EXISTS u_uat_oneswatch CASCADE;
-- 由于GaussDB会在DB下创建跟帐号同名的schema,因此也需要清理DB下的同名schema
DROP SCHEMA IF EXISTS u_uat_ones CASCADE;
DROP SCHEMA IF EXISTS u_uat_camunda CASCADE;
DROP SCHEMA IF EXISTS u_uat_platform CASCADE;
DROP SCHEMA IF EXISTS u_uat_platform_plugin CASCADE;
DROP SCHEMA IF EXISTS u_uat_plugin_built_in_gvmbef2y CASCADE;
DROP SCHEMA IF EXISTS u_uat_wizeditor CASCADE;
DROP SCHEMA IF EXISTS u_uat_oauth CASCADE;
DROP SCHEMA IF EXISTS u_uat_events CASCADE;
DROP SCHEMA IF EXISTS u_uat_identity CASCADE;
DROP SCHEMA IF EXISTS u_uat_oneswatch CASCADE;
-- 清理业务数据库
DROP SCHEMA IF EXISTS project CASCADE;
DROP SCHEMA IF EXISTS wiki CASCADE;
DROP SCHEMA IF EXISTS camunda CASCADE;
DROP SCHEMA IF EXISTS plugin_platform CASCADE;
DROP SCHEMA IF EXISTS open_platform_plugin CASCADE;
DROP SCHEMA IF EXISTS plugin_built_in_gvmbef2y CASCADE;
DROP SCHEMA IF EXISTS wizeditor CASCADE;
DROP SCHEMA IF EXISTS oauth CASCADE;
DROP SCHEMA IF EXISTS events CASCADE;
DROP SCHEMA IF EXISTS identity CASCADE;
-- 清理逻辑复制槽
SELECT pg_drop_replication_slot('slot_uat_ones_cdc');
常见问题
- 迁移出错:联系相关ONES技术支持进一步处理
- 搜索功能异常: 联系相关ONES技术支持进一步处理(排查方向:1.检查oceanbase、kafka-cdc、 kilob 组件是否正常工作)
- 报表功能异常: 联系相关ONES技术支持进一步处理(排查方向:1.检查oceanbase、kafka-cdc、 ones-bi-sync-etl 组件是否正常工作)
- 审计日志功能异常: 联系相关ONES技术支持进一步处理(排查方向:1.检查oceanbase、kafka-cdc、 binlog-event-sync 组件是否正常工作)