如何判断数据迁移任务可以停止?
通常,在业务割接完成后,为了防止源数据库的操作继续同步到目标数据库,造成数据覆盖问题,您可选择结束迁移任务。结束之前您需要确认完成以下几点:
1、请您确认至少在业务低峰期有过一次完整的数据对比。
2、完成业务割接。
a. 先中断业务(如果业务负载非常轻,也可以尝试不中断业务)。
b. 在源数据库端执行如下语句(此处以MySQL为例,其余引擎可以参考《数据库复制服务最佳实践》),并观察在1-5分钟内若无任何新会话执行SQL ,则可认为业务已经完全停止。
show processlist
说明上述语句查询到的进程列表中,包括DRS迁移实例的连接,您需要确认除DRS迁移实例的连接外无任何新会话执行SQL,即可认为业务已经完全停止
c. 实时同步时延为0,并稳定保持一段时间;同时,您可以使用数据级对比功能,进行割接前的最后一次数据级对比,耗时可参考之前的对比记录。
如果时间允许,则选择全部对比。
如果时间不允许,则推荐对比活跃表,关键业务表,第二步对比多次存在差异的表等。
d. 确定系统割接时机,业务系统指向目标数据库,业务对外恢复使用。
3、结束迁移任务,该操作仅删除了迁移实例,迁移任务仍显示在任务列表中,您可以进行查看或删除。
多对一的场景约束及操作建议?
因业务需要,不同实例、不同表的数据需要进行合并时,数据库复制服务提供的数据迁移和实时同步均支持多对一的场景。
操作建议
1、为避免创建任务过程中出现空间不足问题,建议提前计算源数据库的数据量总和,根据该总和一次性规划目标实例的磁盘空间,剩余磁盘空间需大于源库实际数据量大小的总和(例如“源系统1”数据量大小为1GB,“源系统2”数据量大小为3GB,“源系统3”数据量大小为6GB,则目标实例的剩余磁盘空间应该大于10GB)。
2、对于MySQL引擎,目标端参数的设置需要考虑整体资源的提升,建议使用第一个任务的参数对比功能中“常规参数”的“一键修改”(其中max_connections除外),而“性能参数”应该结合目标端实际规格做相应的手工设置。
3、对于多对一同步任务场景,由于该场景是一个一个任务逐步创建的,后面创建任务时可能会造成已创建任务的同步阻塞,为了避免这个情况发生,请注意创建技巧。 每个同步任务都会涉及创建索引步骤,而创建索引时数据库可能会导致Schema锁进而阻塞Schema下的其他表的数据同步,从而导致后创建的任务可能在索引创建阶段对已经同步中的任务阻塞一段时间,我们可以选择在创建同步任务最后设置为“稍后启动”,这样设定在业务低峰期后创建任务,从而避免后创建任务的索引创建对已有任务的同步阻塞。
4、如果涉及表级汇集的多对一同步任务,则不支持DDL,否则会导致同步全部失败。
图 参数对比
场景一:多对一数据迁移
数据迁移是以整体数据库搬迁为目的,可以实现实例级多对一迁移,不支持源端具有同名的数据库,不支持库名映射。
图 多对一数据迁移
场景二:多对一实时同步
实时同步不同于数据迁移,是维持不同业务之间的数据持续性流动,可以实现表级数据多对一同步,并支持库级映射。
图 多对一实时同步
操作流程
创建任务时,为方便多对一任务间的相互识别,请在创建顺序上确保第一个任务进入全量迁移后再创建第二个任务。
图 操作流程
DRS界面信息重叠是什么原因
DRS界面出现信息重叠通常是页面缩放率过小导致的,建议将页面缩放率调整为100%即可显示正常。
MySQL源库设置了global binlog_format = ROW没有立即生效
使用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格式立即生效。
方法一:
- 选择一个非业务的时间段,中断当前数据库上的所有业务连接。
a. 通过如下命令查询当前数据库上的所有业务连接(所有的binlog Dump连接及当前连接除外)。
show processlist;
b. 中断上面查出的所有业务连接。
说明
在上述操作未结束之前,请不要创建或者启动迁移任务,否则会导致数据不一致。
- 为了避免源库binlog_format格式因为数据库重启失效,请在源库的启动配置文件(my.ini或my.cnf等)中添加或修改配置参数binlog_format并保存。
binlog_format=ROW
方法二:
- 为了避免源库binlog_format格式因为数据库重启失效,请在源库的启动配置文件(my.ini或my.cnf等)中添加或修改配置参数binlog_format并保存。
binlog_format=ROW
- 确保上述配置参数binlog_format添加或修改成功后,选择一个非业务时间段,重启源数据库即可。
binlog_row_image参数设置为FULL没有立即生效
使用DRS进行MySQL迁移时,必须确保源库的binlog_row_image参数设置为FULL,否则就会导致任务失败。在源库设置了binlog_row_image=FULL之后,为防止继续生成非全镜像日志导致任务失败,需选择一个非业务时间段,重启源数据库并重置任务即可。
设置binlog_row_image为FULL步骤
如果源数据库为云上RDS实例,可通过RDS管理界面的参数配置,将binlog_row_image修改为FULL,完成修改后重启源数据库并重置任务即可。
如果源数据库为本地自建库,请参考如下步骤修复。
a. 登录MySQL源数据库所在服务器。
b. 手动修改my.cnf配置文件,将binlog_row_image参数值修改为FULL后保存。
binlog_row_image=full
c. 为防止继续生成非全镜像日志导致任务失败,需选择一个非业务时间段,重启源数据库并重置任务。
设置的密码不符合目标库的密码复杂度要求时,如何修改密码强度
操作场景
用户在设置迁移用户密码时,设置的密码不符合目标库的密码复杂度要求,需要按照用户密码复杂度的要求进行密码设置。
操作步骤
以下操作适用于目标数据库为RDS实例的情况。
步骤 1 登录关系型数据库服务控制台。
步骤 2 选择指定目标数据库实例。
步骤 3 单击实例名称。
步骤 4 页面跳转至“基本信息”页签,切换至“参数修改”页面。
步骤 5 在页面右上角搜索框,输入关键字“password”,查看搜索结果。
步骤 6 在步骤 5的搜索结果中,对于表6-4列举的参数,需要根据密码复杂度要求进行修改,确保各参数在密码复杂度允许的范围内。
密码参数
参数 | 允许值 | 说明 |
---|---|---|
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 返回数据复制服务的“迁移模式”页面,继续执行下一步操作即可。
如何设置MongoDB数据库分片集群的分片键
MongoDB数据库中数据的分片是以集合为基本单位的,集合中的数据通过片键被分成多部分。
对集合进行分片时,您需要选择一个片键** **, 片键是每条记录都必须包含的,且建立了索引的单个字段或复合字段,MongoDB数据库按照片键将数据划分到不同的数据块中,并将数据块均衡地分布到所有分片中。为了按照片键划分数据块,MongoDB数据库使用基于范围的分片方式或者基于哈希的分片方式。
分片键分类
分片键类型 | 描述 | 使用场景 |
---|---|---|
基于范围的分片键 | 基于范围的分片键是根据分片键值把数据分成一个个邻接的范围,如果没有指定特定的分片类型,则基于范围的分片键是默认的分片类型。特点:基于范围的分片键对于范围类型的查询比较高效,给定一个片键的范围,分发路由可以很简单地确定哪个数据块存储了请求需要的数据,并将请求转发到相应的分片中。 | 建议在分片键基数较大,频率较低,并且分片键值不是单调变化的情况下使用基于范围的分片键。 |
基于哈希的分片键 | 基于哈希的分片键是指MongoDB数据库计算一个字段的哈希值,并用这个哈希值来创建数据块。特点:保证了集群中数据的均衡。哈希值的随机性使数据随机分布在每个数据块中,因此也随机分布在不同分片中。 | 如果分片键值的基数较大,拥有大量不一样的值,或者分片键值是单调变化的,则建议使用基于哈希的分片键。 |
集合设置分片并插入文档之后,其中的每个文档的分片的键和值都是不可更改的。如果需要修改文档的分片键,必须要先删除文档,再修改分片键,然后重新插入文档。
说明
分片键不支持数组索引,文本索引和地理空间索引。
基于范围的分片键设置
步骤 1 使用如下命令,开启数据库分片开关。
sh.enableSharding(database)
参数database表示要开启分片集合的数据库。
步骤 2 设置分片键。
sh.shardCollection (namespace, key)
- 参数namespace表示需要进行分片的目标集合的完整命名空间.。
- key表示要设置分片键的索引。
- 如果需要进行分片的目标集合是空集合,可以不创建索引直接进行下一步的分片设置,该操作会自动创建索引。
sh.shardCollection()
如果需要进行分片的目标集合是非空集合,则需要先创建索引key。然后使用如下命令设置分片键。
sh.shardCollection()
基于哈希的分片键设置
步骤 1 使用如下命令,开启数据库分片开关。
sh.enableSharding (database)
参数database表示要开启分片集合的数据库。
步骤 2 设置基于哈希的分片键。
sh.shardCollection ( ".", { : "hashed" } * *** , false, {numInitialChunks: 预置的chunk个数})
其中numInitialChunks值的估算方法是:db.collection.stats().size / 1010241024*1024 。
如果集合已经包含数据,则需要先使用如下命令对需要创建的基于哈希的分片键先创建哈希索引:
db.collection.createIndex()
然后再使用如下命令创建基于哈希的分片键:
sh.shardCollection()
扩大带宽是否会对DRS正在进行中的任务产生影响
扩大云连接带宽时需要重建带宽链路,则会导致网络断开,此时是否会对DRS任务产生影响取决于网络断开的时间以及源库IP有没有发生变化。例如针对MySQL引擎而言,如果网络断开1天,而在这1天时间内源库binlog被清理了(MySQL都有binlog清理策略,用户侧自己配置的),就无法进行任务续传,需要重置任务。如果网络中断的时间很短,并且带宽链路更换完成后源库的VPN内的IP地址没有变,则是可以继续续传任务,不会对DRS任务产生影响。
为什么MariaDB和 SysDB下的数据不迁移
由于某些MariaDB的版本把SysDB库作为其系统库(类似于MySQL官方版5.7的sys库),所以DRS默认也将SysDB作为所有MariaDB的系统库来处理(等同于MySQL、information_schema、performance_schema等库)。如果SysDB确实是业务库,您可以通过工单申请处理。
多对一的场景约束及操作建议
因业务需要,不同实例、不同表的数据需要进行合并时,数据复制服务提供的数据迁移支持多对一的场景。
操作建议
为避免创建任务过程中出现空间不足问题,建议提前计算源数据库的数据量总和,根据该总和一次性规划目标实例的磁盘空间,剩余磁盘空间需大于源库实际数据量大小的总和(例如“源系统1”数据量大小为1GB,“源系统2”数据量大小为3GB,“源系统3”数据量大小为6GB,则目标实例的剩余磁盘空间应该大于10GB)。
对于MySQL引擎,目标端参数的设置需要考虑整体资源的提升,建议使用第一个任务的参数对比功能中“常规参数”的“一键修改”(其中max_connections除外),而“性能参数”应该结合目标端实际规格做相应的手工设置。
对于多对一同步任务场景,由于该场景是一个一个任务逐步创建的,后面创建任务时可能会造成已创建任务的同步阻塞,为了避免这个情况发生,请注意创建技巧。** **每个同步任务都会涉及创建索引步骤,而创建索引时数据库可能会导致Schema锁进而阻塞Schema下的其他表的数据同步,从而导致后创建的任务可能在索引创建阶段对已经同步中的任务阻塞一段时间,我们可以选择在创建同步任务最后设置为“稍后启动”,这样设定在业务低峰期后创建任务,从而避免后创建任务的索引创建对已有任务的同步阻塞。
如果涉及表级汇集的多对一同步任务,则不支持DDL,否则会导致同步全部失败。
多对一数据迁移
数据迁移是以整体数据库搬迁为目的,可以实现实例级多对一迁移,不支持源端具有同名的数据库,不支持库名映射。
图
多对一数据迁移
操作流程
创建任务时,为方便多对一任务间的相互识别,请在创建顺序上确保第一个任务进入全量迁移后再创建第二个任务。
图 操作流程
数据复制服务的操作日志在哪里查看
数据复制服务的操作日志属于操作审计类日志,用户可以登录到云审计服务(Cloud Trace Service,简称CTS)页面,查看当前用户在Console页面单击的页面操作,主要是涉及任务变更的管理类操作。
请单击界面右上角的用户名,在下拉菜单选择“操作日志”进行查看。
已结束的任务还能重新启动吗
DRS已结束任务无法重新启动。
重置任务和重新创建任务有什么区别
重置任务不用再次配置任务,仅在暂停和增量失败场景下可进行重置。