| 存储过程 | mysql.greatdb_migrate_table |
|---|---|
| 作用 | 迁移普通表,或者分片表的一个partition |
| 参数 | db_name:库名 table_name:表名 part_id:分区id,如果是普通表,该参数不具有实际意义 shard_name:迁移的目标shard |
| 版本 | 5.0.8 |
示例:
CALL `mysql`.`greatdb_migrate_table`('db_name', 'table_name', part_id, 'shard_name');
注意:
- 分片表和普通表,共享同一个用户接口,对于普通表,进行的是全表迁移,此时part-id参数无任何意义;对于分片表,每次迁移一个parition,part_id 是该分区的id。可以通过查询 greatdb_table_distribution 查找当前表分布的规则。
- 调用接口成功后,迁移任务将在后台运行,可以通过查询 greatdb_migrate_table_task 和 greatdb_migrate_table_subtask 查看具体迁移任务执行的状态
- 禁止同一张表(普通表),或者同一个分区(分片表)同时运行多个迁移任务
- 后台正在运行自动扩容迁移,或者自动缩容迁移任务,禁止运行单表迁移任务。
- 该迁移任务受参数greatdb_physical_migrate_table控制,默认值为true,内部执行的是物理迁移;如果设置为false,内部执行逻辑迁移。
- 该迁移任务受参数greatdb_physical_migrate_table_mode控制,默认值为local_copy,内部执行的是普通物理迁移;如果设置为remote_clone,内部执行基于clone的物理迁移,该迁移能够减小锁表时间,从而减小对前端业务的影响,但速度不及普通物理迁移。该变量生效的前提是参是greatdb_physical_migrate_table必须是ON。
- 如果是物理迁移,需要保证目的shard的所有节点都在线,否则可能会出现启动迁移任务成功,但在执行拷贝物理文件时失败。
如果是物理迁移执行失败,且目的shard有重新启动,如果启动过程出现如下错误场景:
(1)tablespaceID重复或者数据字典中的tablespaceID和表空间的tablespaceID不一致(eg.Tablespace id is 55 in the data dictionary but in file ./test/district1@0023p@00231@0023new.ibd it is 41!)。需要手动把这些ibd从数据目录中删除,然后再启动数据库。
(2)如果执行导入的过程出现Data structure corruption,则说明该文件是第一次执行import的过程出现节点crash,启动后再次执行import导致的错误。需要从新拷贝完整表空间再执行import操作。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




