DMS无法使用无锁边更?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DMS(数据管理)无锁变更功能在某些情况下可能无法使用,以下是可能导致该问题的原因及解决方法的详细说明:
DMS无锁结构变更功能仅支持以下数据库类型: - MySQL:RDS MySQL、PolarDB MySQL版、MyBase MySQL或其他来源MySQL。 - PostgreSQL:RDS PostgreSQL、PolarDB PostgreSQL版、MyBase PostgreSQL等。
注意:
- 不支持PolarDB分布式版(包括PolarDB-X 1.0和PolarDB-X 2.0)、RDS PostgreSQL等非MySQL数据库使用DMS的无锁结构变更功能。
- 如果您的数据库类型不在支持范围内,请选择其他方式执行变更。
DMS无锁变更不支持表上有外键的变更。如果目标表包含外键约束,您需要关闭DMS无锁变更功能,并采用原生执行方式完成变更。
目标表必须包含主键或唯一键,否则无法执行无锁结构变更。主键或唯一键用于全量拷贝分段操作及后续增量更新。
重要提醒:
- 在执行结构变更期间,避免更新主键或唯一键,否则可能导致任务执行失败。
实例的管控模式需为稳定变更或安全协同。如果实例的管控模式为自由操作,且DMS租户下有免费使用无锁变更的额度,则可以正常使用此功能。
在使用DMS无锁结构变更功能前,您需要先为目标实例开启无锁结构变更功能。具体步骤如下: 1. 登录数据管理DMS 5.0。 2. 在控制台首页的数据库实例区域,找到并右键单击目标实例,选择编辑实例。 3. 在高级信息区域,展开无锁结构变更的下拉列表,选择以下选项之一: - 开启(DMS无锁变更执行):直接使用DMS自研的DDL无锁变更执行。 - 开启(原生无锁优先,失败转DMS执行):优先尝试使用数据库原生OnlineDDL无锁执行,若失败则自动转用DMS引擎执行。 4. 单击保存。
使用无锁结构变更功能时,数据库账号需具备以下权限: - ALL PRIVILEGES权限,或以下读写权限: - ALTER、CREATE、DELETE、DROP、INDEX、INSERT、LOCK TABLES、SELECT、TRIGGER、UPDATE、REPLICATION CLIENT和REPLICATION SLAVE权限。
如果当前数据库账号权限不足,您可以: - 授权数据库账号权限。 - 更换数据库账号。
由于无锁结构变更需要在目标数据库中新建临时表用于数据拷贝,因此磁盘剩余空间需为目标表的两倍以上。如果磁盘空间不足,将导致实例被锁定。
对于PolarDB MySQL版,默认未开启Binlog日志。您需要手动开启Binlog日志以支持无锁结构变更功能。
DMS无锁结构变更对SQL语句有一定的限制: - 不支持增加唯一约束(UK):由于DMS无锁结构变更的原理限制,不支持增加唯一约束。 - 空表处理:如果目标表为空表,DMS会自动降级为原生无锁执行,因为执行空表无风险且速度更快。
如果DMS无法使用无锁变更,请根据上述原因逐一排查: 1. 确认数据库类型是否支持。 2. 检查目标表是否存在外键约束或缺少主键/唯一键。 3. 确保实例的管控模式为稳定变更或安全协同。 4. 开启目标实例的无锁结构变更功能。 5. 检查数据库账号权限是否满足要求。 6. 确保磁盘空间充足。 7. 确认Binlog日志已开启。 8. 检查SQL语句是否符合限制条件。
如仍无法解决问题,建议联系阿里云技术支持获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。