实时迁移 如何批量导出、导入事件(event)和触发器(trigger) 在进行MySQL到MySQL的迁移时,若任务结束后发现迁移日志中提示迁移事件和触发器失败,可手动迁移。 本小节主要介绍批量导出导入事件和触发器的具体操作。 步骤 5 从源库批量导出触发器。 4. 在源库执行以下语句,获取TRIGGERSCHEMA和TRIGGERNAME。 SELECT TRIGGERSCHEMA,TRIGGERNAME FROM INFORMATIONSCHEMA.TRIGGERS WHERE TRIGGERSCHEMA in ('DB1','DB2','DB3') order by TRIGGERNAME; 上述语句中,DB1,DB2,DB3分别表示从源库待迁移到目标库的数据库。 5. 在源库执行如下语句,从字段SQL Original Statement中获取源库创建触发器的语句。 SHOW CREATE TRIGGER TRIGGERSCHEMA.TRIGGERNAME G; 上述语句中,TRIGGERSCHEMA.TRIGGERNAME填写的为步骤 1.1 中查询到的TRIGGERSCHEMA和TRIGGERNAME具体值。 步骤 6 从源库批量导出事件。 6. 在源库执行以下语句,获取EVENTSCHEMA和EVENTNAME。 SELECT EVENTSCHEMA,EVENTNAME FROM INFORMATIONSCHEMA.EVENTS WHERE EVENTSCHEMA in ('DB1','DB2','DB3') order by EVENTNAME; 上述语句中,DB1,DB2,DB3分别表示从源库待迁移到目标库的数据库。 7. 在源库执行如下语句,从字段SQL Original Statement中获取源库创建事件的语句。 SHOW CREATE EVENT EVENTSCHEMA.EVENTNAME G; 上述语句中,EVENTSCHEMA.EVENTNAME填写的为步骤 2.1 中查询到的EVENTSCHEMA和EVENTNAME具体值。 步骤 7 导入触发器和事件。 在目标库重新执行从源库导出的创建触发器和创建事件语句。 源库参数lowercasetablenames1时,为什么不允许迁移包含大写字母的库或者表 场景描述 当源库参数lowercasetablenames1时,无法迁移包含大写字母的库或者表。 问题分析 当源库的lowercasetablenames 参数值为1时,MySQL会将库名或者表名转换成小写再进行查找。若存在以大写字母形式创建的库或者表,那么在lowercasetablenames参数值为1的情况下,MySQL将无法找到这个库或表,报告查询失败。也就是说,若lowercasetablenames的参数值为1时,大写字母的库或表很可能是不可访问的。 解决方案 目前针对该情况,分别提供如下解决方案: 方法一 修改源库lowercasetablenames的参数值为0 (即大小写敏感),并且保证源库与目标库的该参数值一致。 方法二 若无法永久修改lowercasetablenames,可临时将源库lowercasetablenames修改为0,然后执行如下操作。 对于表,可以使用如下语句将表名转换为小写: alter table BigTab rename to bigtab 对于库,则需要导出后,修改库名为小写,再进行导入。 修改库名或表名之后,需要维护权限的一致性,以免影响应用访问。 方法三 对象选择时不迁移该库或者该表。