文档简介:
Q:源库参数lower_case_table_names=1时,为什么不允许迁移包含大写字母的库或者表?
A:场景描述
当源库参数lower_case_table_names=1时,无法迁移包含大写字母的库或者表。
问题分析
当源库的lower_case_table_names 参数值为1时,MySQL会将库名或者表名转换成小写再进行查找。若存在以大写字母形式创建的库或者表,那么在lower_case_table_names参数值为1的情况下,MySQL将无法找到这个库或表,报告查询失败。也就是说,若lower_case_table_names的参数值为1时,大写字母的库或表很可能是不可访问的。
解决方案
目前针对该情况,分别提供如下解决方案:
方法一
修改源库lower_case_table_names的参数值为0 (即大小写敏感),并且保证源库与目标库的该参数值一致。
方法二
若无法永久修改lower_case_table_names,可临时将源库lower_case_table_names修改为0,然后执行如下操作。
对于表,可以使用如下语句将表名转换为小写:
alter table `BigTab` rename to `bigtab`
对于库,则需要导出后,修改库名为小写,再进行导入。
修改库名或表名之后,需要维护权限的一致性,以免影响应用访问。
方法三
对象选择时不迁移该库或者该表。
Q:设置的密码不符合目标库的密码复杂度要求时,如何修改密码强度?
A:操作场景
用户在设置迁移用户密码时,设置的密码不符合目标库的密码复杂度要求,需要按照用户密码复杂度的要求进行密码设置。
操作步骤
以下操作适用于目标数据库为RDS实例的情况。
步骤1:登录关系型数据库服务控制台。
步骤2:选择指定目标数据库实例。
步骤3:单击实例名称。
步骤4:页面跳转至“基本信息”页签,切换至“参数修改”页面。
步骤5:在页面右上角搜索框,输入关键字“password”,查看搜索结果。
步骤6:在步骤5的搜索结果中,对于错误!未找到引用源。列举的参数,需要根据密码负责度要求进行修改,确保各参数在密码复杂度允许的范围内。
表6-2 密码参数
参数 |
允许值 |
说明 |
validate_password_length |
0~2,147,483,647 |
validate_password插件校验的密码的最小字符数。 |
validate_password_mixed_case_count |
0~2,147,483,647 |
指定当密码策略为MEDIUM(中)或更高时,为通过validate_password校验,密码至少需包含多少个大小写字符。 |
validate_password_number_count |
0~2,147,483,647 |
指定当密码策略为MEDIUM(中)或更高时,为通过validate_password校验,密码至少需包含多少个数字。 |
validate_password_policy |
LOW, MEDIUM, STRONG |
validate_password插件执行的密码策略。 |
validate_password_special_char_count |
0~2,147,483,647 |
指定当密码策略为MEDIUM(中)或更高时,为通过validate_password校验,密码至少需包含多少个非字母数字字符。 |
步骤7:密码复杂度修改完成后,保存修改结果。
步骤8:返回数据库复制服务的“迁移模式”页面,继续执行下一步操作即可。
Q:如何批量导出、导入事件(event)和触发器(trigger)?
A:在进行MySQL到MySQL的迁移时,由于数据库复制服务暂时不支持事件和触发器的迁移,需要在迁移结束后将源数据库的事件和触发器导出,手动导入目标数据库中。
本小节主要介绍批量导出导入事件和触发器的具体操作:
步骤1:从源库批量导出触发器。
1.在源库执行以下语句,获取TRIGGER_SCHEMA和TRIGGER_NAME。
SELECT TRIGGER_SCHEMA,TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA in ('DB1','DB2','DB3') order by TRIGGER_NAME;
上述语句中,DB1,DB2,DB3分别表示从源库待迁移到目标库的数据库。
2.在源库执行如下语句,从字段SQL Original Statement中获取源库创建触发器的语句。
SHOW CREATE TRIGGER TRIGGER_SCHEMA.TRIGGER_NAME \G;
上述语句中,TRIGGER_SCHEMA.TRIGGER_NAME填写的为步骤1.1中查询到的TRIGGER_SCHEMA和TRIGGER_NAME具体值。
步骤2:从源库批量导出事件。
1.在源库执行以下语句,获取EVENT_SCHEMA和EVENT_NAME。
SELECT EVENT_SCHEMA,EVENT_NAME FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA in ('DB1','DB2','DB3') order by EVENT_NAME;
上述语句中,DB1,DB2,DB3分别表示从源库待迁移到目标库的数据库。
2.在源库执行如下语句,从字段SQL Original Statement中获取源库创建事件的语句。
SHOW CREATE EVENT EVENT_SCHEMA.EVENT_NAME \G;
上述语句中,EVENT_SCHEMA.EVENT_NAME填写的为步骤2.1中查询到的EVENT_SCHEMA和EVENT_NAME具体值。
步骤3:导入触发器和事件。
在目标库重新执行从源库导出的创建触发器和创建事件语句。
Q:MySQL源库设置了global binlog_format = ROW没有立即生效?
A:使用DRS进行MySQL的增量迁移或同步时,必须确保源库的binlog_format是ROW格式的,否则就会导致任务失败甚至数据丢失。在源库设置了global级别的binlog_format=ROW之后,还需要中断之前所有的业务连接,因为设置之前的连接使用的还是非ROW格式的binlog写入。
安全设置global级binlog_format=ROW的步骤:
步骤1:通过MySQL官方客户端或者其它工具登录源数据库。
步骤2:在源数据库上执行全局参数设置命令。
set global binlog_format = ROW;
步骤3:在源数据库上执行如下命令确认上面操作已执行成功。
select @@global.binlog_format;
步骤4:您可以通过如下两种方式确保修改后的源库binlog_format格式立即生效。
方法一:
1.选择一个非业务的时间段,中断当前数据库上的所有业务连接。
a.通过如下命令查询当前数据库上的所有业务连接(所有的Binlog Dump连接及当前连接除外)。
show processlist
b.中断上面查出的所有业务连接。
说明:在上述操作未结束之前,请不要创建或者启动迁移任务,否则会导致数据不一致。
2.为了避免源库binlog_format格式因为数据库重启失效,请在源库的启动配置文件(my.ini或my.cnf等)中添加或修改配置参数binlog_format并保存。
binlog_format=ROW
方法二:
1.为了避免源库binlog_format格式因为数据库重启失效,请在源库的启动配置文件(my.ini或my.cnf等)中添加或修改配置参数binlog_format并保存。
binlog_format=ROW
2.确保上述配置参数binlog_format添加或修改成功后,选择一个非业务时间段,重启源数据库即可。