使用 MySQL Shell 进行 MySQL 单机到 InnoDB Cluster 的数据迁移实践

迁移背景与环境

原来都是用mysqldump,DTS或者cdc迁移,这次8.0用了下新工具感觉挺好用的,简单快捷,30G数据不到

源环境:单机 MySQL 8.0,地址为 172.23.3.28

目标环境:InnoDB Cluster 集群(3 节点),其中主节点地址为 172.23.3.4

特殊情况:集群中一台节点(172.23.3.79)配置较低,存在 "木桶效应" 导致节点频繁卡死,需要在迁移前进行处理

迁移前的准备工作

由于集群中 172.23.3.79 节点配置较低,成为整个集群的性能瓶颈,在正式迁移前需要先将其从集群中移除:

  1. 登录主节点的 MySQL Shell:

    mysqlsh --user=root --password='pwd' --uri localhost:3306

  2. 移除低配置节点:javascript

    c = dba.getCluster()
    c.removeInstance('172.23.3.79:3306',{force:true})

  3. 验证集群状态,确保节点已成功移除:

    c.status()

数据迁移实施步骤

1. 准备源数据库

为保证数据一致性,先将源数据库设置为只读模式:

复制代码
SET GLOBAL read_only = ON;

2. 使用 MySQL Shell 导出数据

通过 MySQL Shell 的 util.dumpInstance 工具从源库导出数据到主节点目录:

复制代码
mysqlsh --user=migration --password='pwd' --uri 172.23.3.28:3306

在 MySQL Shell 交互模式中执行导出命令:

复制代码
util.dumpInstance('/data/mysql_dump_dir', { 
    threads: 8,                 // 使用8个线程加速导出
    showProgress: true,         // 显示导出进度
    consistent: true,           // 保证数据一致性
    ocimds: false,              // 非OCI环境
    excludeTables: [            // 排除不需要迁移的表
        "d.qttq",
        "d.dept_temp",
    ]
});

3. 处理用户授权信息

为避免迁移过程中的授权错误,替换导出的用户信息文件:

复制代码
cp /usr/local/src/user.sql.bak /data/mysql_dump_dir/\@.users.sql

4. 导入数据到主节点

登录目标集群的主节点,使用 util.loadDump 工具导入数据:

bash

复制代码
mysqlsh --user=root --password=Scjzbd@123.com --uri 172.23.3.4:3306

在 MySQL Shell 交互模式中执行导入命令:

复制代码
util.loadDump('/data/mysql_dump_dir', {
    threads: 32,                // 使用32个线程加速导入
    showProgress: true,         // 显示导入进度
    deferTableIndexes: 'all',   // 延迟创建索引以提高导入速度
    loadUsers: true,            // 导入用户信息
    resetProgress: true
});

迁移后的集群调整

数据导入完成后,需要将之前移除的节点重新加入集群:

  1. 确认集群状态正常:

    c = dba.getCluster()
    c.status()

  2. 添加节点到集群(使用 clone 方式进行数据同步):

    c.addInstance('172.23.3.79', {recoveryMethod: 'clone'})

总结

使用 MySQL Shell 的 util.dumpInstance 和 util.loadDump 工具进行数据迁移,相比传统的 mysqldump 具有以下优势:

  1. 多线程操作,迁移速度更快
  2. 可以排除不需要的表,提高迁移效率
  3. 内置进度显示,便于监控迁移过程
  4. 更好地支持 InnoDB Cluster 环境

在迁移包含性能不均衡节点的集群时,先移除低配置节点可以避免迁移过程中出现的性能瓶颈和节点卡死问题,待迁移完成后再将节点重新加入集群,

相关推荐
MaCa .BaKa15 小时前
56-非遗手工艺品定制平台系统
java·vue.js·spring boot·mysql·maven·非遗手工制作平台系统·非遗制作
程序猿乐锅15 小时前
【MySQL | 第六篇】 SQL 优化
数据库·sql·mysql
j7~15 小时前
【MYSQL】索引特性--详解
数据库·mysql·索引操作·索引的理解·mysql与磁盘·b+树与mysql
唐青枫1 天前
MySQL EXISTS 详解:存在性判断、NOT EXISTS 与实战示例
sql·mysql
2301_773643621 天前
华为云存储实验
网络·mysql·华为云
quan26311 天前
20260529,日常开发-数据库主从问题
java·mysql·主从·延迟
DIY源码阁1 天前
JavaSwing宿舍管理系统 - MySQL版
java·数据库·mysql·eclipse
cfm_29141 天前
MySQL8.0 InnoDB Cluster
数据库·mysql
夜微凉41 天前
三、MySQL
android·数据库·mysql
暴躁小师兄数据学院1 天前
【AI大数据工程师特训笔记】第11讲:正则表达式与正则函数
数据库·mysql