华为云用户手册

  • 支持的源和目标数据库 表1 支持的数据库 源数据库版本 目标数据库版本 本地及其他云Microsoft SQL Server数据库备份文件版本: Microsoft SQL Server 2000 企业版、标准版 Microsoft SQL Server 2005 企业版、标准版 Microsoft SQL Server 2008 企业版、标准版、Web版 Microsoft SQL Server 2012 企业版、标准版、Web版 Microsoft SQL Server 2014 企业版、标准版、Web版 Microsoft SQL Server 2016 企业版、标准版、Web版 Microsoft SQL Server 2017 企业版、标准版、Web版 Microsoft SQL Server 2019 企业版、标准版、Web版 RDS for SQL Server Microsoft SQL Server 2008 企业版、标准版、Web版(存量版本) Microsoft SQL Server 2012 企业版、标准版、Web版 Microsoft SQL Server 2014 企业版、标准版、Web版 Microsoft SQL Server 2016 企业版、标准版、Web版 Microsoft SQL Server 2017 企业版、标准版、Web版 Microsoft SQL Server 2019 企业版、标准版、Web版 说明: 仅支持目标库大版本等于或高于源库大版本。 仅支持目标库功能性版本等于或高于源库功能性版本,如web版到标准版、标准版到企业版、企业版到企业版
  • 双主灾备子任务的正向和反向怎么理解 为了明确本云(本区)RDS在灾备中所扮演的角色,在创建双主灾备任务时,DRS使用主1、主2来区分角色。主1表示选择的本云RDS具有初始数据,主2则表示选择本云RDS为空库,等待接收数据。 如图1, 选择主2,表示创建任务时选择的本云数据库实例为空库,待接收数据,创建成功后,需先配置表示入云的正向任务,待正向任务进入“灾备中”状态时,再配置并启动反向任务。 选择主1,表示创建任务时选择的本云数据库实例具有初始数据,待同步数据,创建成功后,需先配置表示出云的反向任务,待反向任务进入“灾备中”状态时,配置并启动正向任务。 图1 双主灾备实例信息 父主题: 实时灾备
  • 源库Oracle为RAC集群时,为什么建议使用SCAN IP连接 源库Oracle为RAC集群时,建议使用SCAN IP+ SERVICE_NAMES方式创建任务,因为SCAN IP具有更强的容错性,更好的负载能力,更快的同步体验。 如果需要使用SCAN IP,需要保证SCAN IP与源库的所有VIP互通,否则无法通过测试连接检查。 若不使用SCAN IP,可以使用某一节点的VIP,其他节点异常不影响同步。 关于SCAN IP的说明,可参考Oracle官网文档。 父主题: 实时同步
  • RTO增大处理建议 在“实时灾备管理”页面,选择指定的灾备任务,单击任务名称进入“基本信息”页签。 在“基本信息”页签,单击“灾备监控”页签,查看时延监控的RTO的变化情况。 如果RTO逐渐降低或者只是短时间内增加,则无需关注。 如果RTO持续增加,可在灾备数据库执行以下语句,查看是否有执行时间比较长的sql或者正在执行的DDL。 show processlist 如果灾备数据库异常,需要联系数据库运维工程师解决。
  • RTO增大常见原因 RTO是增量同步期间DRS实例上的事务传输到灾备目标库且回放成功的时间差,RTO值较大说明DRS上需要回放到目标实例的事务有积压。一般有以下几种原因: 灾备任务初始化完成不久,启动灾备任务到当前时间累积的增量数据需要回放。 业务数据库对无主键表进行了批量操作,DRS灾备实例正在同步变更数据较大的无主键表。为了确保无主键表数据一致性,对所有执行操作都进行位点记录,因此效率相比有主键表低。同时,如果目标表无索引,数据更新效率会更低。 业务数据库执行了DDL操作,DRS灾备实例需要等待DDL在灾备目标实例执行完成后,再执行数据回放。 业务数据库对热点表进行频繁操作。DRS灾备实例会对热点表的事务进行合并后再进行回放,减少频繁对目标库操作。 灾备数据库访问异常导致增量数据无法回放成功。
  • DRS对目标数据库的压力及影响 全量(初始化)阶段,DRS需要将源数据库结构、索引以及存量数据全部写入到目标数据库,顺序为先迁移结构,再迁移数据,最后迁移索引,不同过程不会并行,一般活跃总连接数小于8个,其中: 有小于8个连接在批量创建结构。 有小于8个连接在批量写数据,类似如下语句: insert into *** (id,name,msg) values (***); 有小于8个连接在批量创建索引,类似如下语句: alter table *** add index ***; 增量阶段,DRS会把源数据库日志中的增量数据解析成SQL在目标数据库中执行,一般总连接数小于64个,其中: DDL会单连接串行执行,执行DDL时,不会有其他DML执行。 DML最多会有64个连接(短连接,默认超时时间30秒),其中DML只是简单的insert、update、delete、replace语句。 如果需要评估对源数据库的影响,可选择创建测试任务,再通过限速功能或业务低峰期动等来调整迁移策略。
  • MySQL迁移出现数据膨胀怎么办 DRS在全量迁移阶段,为了保证迁移性能和传输的稳定性,采用了行级并行的迁移方式。 当源端数据紧凑情况下,通过DRS迁移到云上RDS for MySQL后,可能会出现数据膨胀现象,使得磁盘空间使用远大于源端。 针对这种情况,客户可选择在目标库中执行以下命令,进行优化整理从而缩小空间。 optimize table table_name 由于命令optimize会进行锁表操作,所以进行优化时要避开表数据操作时间,避免影响正常业务的进行。 父主题: 产品咨询
  • 内容对比不支持哪些数据类型 DRS提供的数据比对功能可以清晰反馈出源数据库和目标数据库的数据是否存在差异。 目前对于以下数据类型,DRS不支持内容对比,进行内容对比时会自动跳过。 表1 不支持内容对比的数据类型 源数据库类型 数据类型 MySQL TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT GaussDB TEXT、CLOB、BLOB、BYTEA、INTERVAL DAY TO SECOND、INTERVAL Oracle BLOB、NCLOB、CLOB、LONG RAW、LONG、INTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTH、UROWID、BFILE、XMLTYPE、SDO_GEOMETRY MongoDB _id为BINDATA类型。 Microsoft SQL Server TEXT、NTEXT、IMAGE、BINARY、VARBINARY、HIERARCHYID、XML、TIMESTAMP 对于以下数据类型作为主键,DRS也不支持内容对比,进行内容对比时会归到无法比对的表中。 表2 不支持内容对比的主键类型 源数据库类型 数据类型 MySQL TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、FLOAT、TIMESTAMP、DATE、DATETIME、BINARY、VARBINARY GaussDB TEXT、CLOB、BLOB、BYTEA、INTERVAL DAY TO SECOND、INTERVAL、REAL、DOUBLE PRECISION、BOOL、TIME、TIMETZ、TIMESTAMP、TIMESTAMPTZ、DATE Oracle BLOB、NCLOB、CLOB、LONG RAW、LONG、INTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTH、UROWID、BFILE、XMLTYPE、SDO_GEOMETRY、BINARY_FLOAT、BINARY_DOUBLE、FLOAT、RAW、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、DATE PostgreSQL REAL、DOUBLE PRECISION、MONEY、TEXT、BYTEA、TIMESTAMP WITHOUT TIME ZONE、TIMESTAMP WITH TIME ZONE、DATE、TIME WITHOUT TIME ZONE、TIME WITH TIME ZONE、INTERVAL、BOOLEAN、ENUMERATED TYPES、POINT、LINE、LSEG、BOX、PATH、POLYGON、CIRCLE、CIDR、INET、MACADDR、MACADDR8、BIT、BIT VARYING、TSVECTOR、TSQUERY、XML、JSON、ARRAY、COMPOSITE TYPES、INT4RANGE、INT8RANGE、NUMRANGE、TSRANGE、TSTZRANGE、DATERANGE Microsoft SQL Server FLOAT、REAL、DATE、DATETIME、DATETIME2、DATETIMEOFFSET、TIME、TIMESTAMP、TEXT、NTEXT、IMAGE、BINARY、VARBINARY、HIERARCHYID、XML、BIT 父主题: 数据对比
  • 暂停任务计费说明 数据复制服务 支持“按需计费”和“包年/包月”两种计费模式,两种方式均针对DRS实例从以下方面收取费用: 表1 计费项 计费项 计费项说明 计费规则 配置费(必选) 指计算和存储资源及数据处理的费用。 “按需计费”配置费用是按照实际使用时长计费,以自然小时为单位整点计费,不足一小时按照实际使用时长计费。 “包年/包月”配置费用是一次性计费。 弹性公网IP费用(可选) 指公网访问产生的数据处理和数据流量费用。如果创建公网网络任务,您需要购买弹性公网IP。 详细说明请参考弹性公网IP计费说明。 所以已暂停的“按需计费”任务仍然会收取配置费用。 父主题: 计费相关
  • 使用场景 MySQL为源的迁移或同步任务,在增量阶段使用第三方拷表方式实现的Online DDL工具(如PT-OSC、GH-OST)在源库执行DDL,会先创建临时表,通过临时表做DDL,针对这个情况,使用DRS进行迁移或同步时,可分为以下三种场景: 对于库级和实例级迁移、同步任务,由于Online DDL使用的临时表在同步列表中,DRS会自动同步DDL操作,因此不需要特殊处理。 对于表级迁移或同步任务,如果创建DRS任务时,迁移或同步对象列表中已经提前添加了第三方Online DDL涉及的临时表的场景,DRS也会自动同步DDL操作,不需要特殊处理。 对于表级迁移或同步任务,如果创建DRS任务时,只选中表的数据,由于Online DDL使用的临时表不在选中的列表中,因此不会被DRS同步。可以参考以下使用限制和操作步骤,通过手动在目标库执行DDL的方式,避免源库Online DDL操作导致的源库和目标库表结构不一致,引起的DRS任务失败。
  • 操作步骤 查看DRS任务状态,确认任务状态为增量中且增量时延在10秒以内。 确认需要执行的DDL操作,不同操作在源库和目标库执行的顺序不同。 加列:先在目标库执行,执行成功后在源库执行。 删列:先在源库执行,执行成功后在目标库执行。 增加、修改、删除列默认值:跟操作顺序无关。 修改列类型:先在目标库执行,执行成功后在源库执行。 修改字符集:先在目标库执行,执行成功后在源库执行。 修改列名:先在源库执行,执行成功后等待DRS任务因列不存在失败,然后在目标库执行,续传DRS任务。 加分区:先在目标库执行,执行成功后在源库执行。 删分区:先在源库执行,执行成功后在目标库执行。 加索引:跟操作顺序无关。 删索引:跟操作顺序无关。 加约束(主键、唯一键、check等):先在源库执行,执行成功后在目标库执行。 删约束(主键、唯一键、check等):先在目标库执行,执行成功后在源库执行。 增加字段长度:先在目标库执行,执行成功后在源库执行。 减少字段长度:先在源库执行,执行成功后在目标库执行。 如果一条DDL中包含多个操作的,所有操作除去跟操作顺序无关的操作外(比如修改默认值),剩余操作的要求顺序一样,则按要求顺序操作;否则需要拆成多条DDL操作。如加列的同时修改默认值,先在目标库执行,执行成功后在源库执行。 表1 总结 DDL操作 操作顺序 加列,修改列类型,修改字符集,加分区,删约束,增加字段长度 先在目标库执行,执行成功后在源库执行。 删列,删分区,加约束,减少字段长度 先在源库执行,执行成功后在目标库执行。 增加、修改、删除列默认值,加索引,删索引 跟操作顺序无关。 修改列名 先在源库执行,执行成功后等待DRS任务因列不存在失败,然后在目标库执行,续传DRS任务。 根据2顺序中完成DDL操作后,查看DRS任务状态是否正常。
  • 数据复制服务是否采用了压缩技术 压缩技术是提升性能和解决数据膨胀的关键技术,DRS在数据传输和增量数据存储两大环节采用了压缩技术。 数据传输压缩:在网络带宽不理想的环境中,进行数据同步与传输,DRS可以开启压缩开关,以减少数据传输对带宽的占用量。 增量数据存储压缩:增量数据转储成逻辑文件后,将会出现膨胀现象,DRS针对该场景做了存储压缩技术,使得本地逻辑文件缓存在DRS时占用磁盘空间大大降低。 父主题: 产品咨询
  • 对等连接限制 有重叠子网网段的VPC建立的对等连接,可能不生效。 两个VPC之间不能同时建立多个VPC对等连接。 不同区域的VPC不能创建对等连接。 如果两个VPC的CIDR有重叠,建立对等连接时,只能针对子网建立对等关系。如果两个VPC下的子网网段有重叠,那么该对等关系不生效。建立对等连接时,请确保两个VPC之间没有重叠的子网。 对等连接建立后,需要在本端VPC、对端VPC分别添加对方子网的路由才能通信。 VPC A与B、C分别建立对等连接,如果B、C两个VPC的网段有重叠,A中无法添加具有相同目的网段的路由。 为了安全起见,请不要接受来自未知账号的对等连接申请。 对等连接双方账号都有权限删除对等连接,一方删除对等连接后,对等连接的所有信息会被立刻删除,包括对等连接关联的路由信息。 VPC对等连接路由存在时,VPC无法被删除。 支持在华为云中国站和国际站同一区域创建对等连接。 VPC1与VPC2创建对等连接,默认情况下VPC2不能通过VPC1的EIP访问公网。您可以通过使用NAT网关服务或配置SNAT服务器,使得VPC2下的弹性云服务器可以通过VPC1下绑定了EIP的弹性云服务器访问Internet。具体实现方式请参见无公网IP的弹性云服务器访问Internet。 具体设置VPC对等连接的方法,可参考《虚拟私有云用户指南》。 对等连接建立后,需要在本端VPC、对端VPC分别添加对方子网的路由才能通信,详细操作可参考添加VPC对等连接路由。 在添加对等路由时,建议添加网段路由信息。如果添加点对点路由,DRS任务重建后实例IP会发生改变,此时需要重新添加路由,否则会导致网络不通。
  • 策略一 在测试连接页面的目标库信息中填写数据库用户名user1,所有Definer迁移到该用户下选“是”。 图1 策略一 这种策略下,源库所有存储过程和方法的Definer迁移到目标库后账号都会自动修改为user1,host改为% 。若在目标库上出现调用存储过程失败的情况,可执行如下操作: 使用uesr1账号登录到目标库RDS for MySQ L实例 。 如果需要使用其他账号调用存储过程,则该账号需要具有execute权限。 通过如下语句,使用user1授予其他账号执行存储过程的权限。 其中user表示需要调用存储过程的其他账号: GRANT EXECUTE ON db.* TO user; 如果需要通过Java调用存储过程,则需要通过如下语句,使用user1授予其他账号查询mysql.proc表的权限。 授权语句可参考如下语句,user表示需要调用存储过程的账号: GRANT SELECT ON mysql.proc TO 'user'@'%';
  • 策略二 在测试连接页面的目标库信息中填写数据库用户名user1,所有Definer迁移到该用户下选“否”。 图2 策略二 这种策略下,源库所有存储过程和方法的Definer迁移到目标库后账号和host保持不变,选择此选项,需要配合用户权限迁移功能,将源数据库的用户全部迁移,这样才能保持源数据库的权限体系完全不变。 如果您未选择用户权限迁移或者用户权限迁移时存在不支持迁移的账号,建议选择策略一来处理。
  • 操作建议 为避免创建任务过程中出现空间不足问题,建议提前计算源数据库的数据量总和,根据该总和一次性规划目标实例的磁盘空间,剩余磁盘空间需大于源库实际数据量大小的总和(例如“源系统1”数据量大小为1GB,“源系统2”数据量大小为3GB,“源系统3”数据量大小为6GB,则目标实例的剩余磁盘空间应该大于10GB)。 对于MySQL引擎,目标端参数的设置需要考虑整体资源的提升,建议使用第一个任务的参数对比功能中“常规参数”的“一键修改”(其中max_connections除外),而“性能参数”应该结合目标端实际规格做相应的手工设置。 对于多对一同步任务场景,由于该场景是一个一个任务逐步创建的,后面创建任务时可能会造成已创建任务的同步阻塞,为了避免这个情况发生,请注意创建技巧。 每个同步任务都会涉及创建索引步骤,而创建索引时数据库可能会导致Schema锁进而阻塞Schema下的其他表的数据同步,从而导致后创建的任务可能在索引创建阶段对已经同步中的任务阻塞一段时间,我们可以选择在创建同步任务最后设置为“稍后启动”,这样设定在业务低峰期后创建任务,从而避免后创建任务的索引创建对已有任务的同步阻塞。 对于多对一同步任务场景,不建议使用内容对比,因为内容对比无法保证一致性。 如果涉及表级汇集的多对一同步任务,则不支持DDL,否则会导致同步全部失败。 图1 参数对比
  • 库表级多对一任务操作流程 实时同步过程中,可以使用对象名映射功能修改库、表名称,实现库表级多对一。 以库级多对一为例: 在“设定同步”页面,同步对象右侧已选对象框中,选择需要进行映射的数据库,单击“编辑”按钮。 在“编辑库名”的弹出框中,填写新的数据库名,修改后的名称即为保存在目标数据库中的库名。 例如,将源库中的库A和库B,修改为同样的库C后,即可实现库A、库B到库C的同步。 库名修改成功后,您会看到修改前的库名和修改后的新数据库名,至此,表示完成库映射的配置。 图5 查看库名修改结果 配置完成后,等待任务启动并完成同步。
  • 如何选择区域? 选择区域时,您需要考虑以下几个因素: 地理位置 一般情况下,建议就近选择靠近您或者您的目标用户的区域,这样可以减少网络时延,提高访问速度。不过,在基础设施、BGP网络品质、资源的操作与配置等方面,中国大陆各个区域间区别不大,如果您或者您的目标用户在中国大陆,可以不用考虑不同区域造成的网络时延问题。 在除中国大陆以外的亚太地区有业务的用户,可以选择“亚太-曼谷”或“亚太-新加坡”区域。 在非洲地区有业务的用户,可以选择“南非-约翰内斯堡”区域。 在欧洲地区有业务的用户,可以选择“欧洲-巴黎”区域。 在拉丁美洲地区有业务的用户,可以选择“拉美-圣地亚哥”区域。 “拉美-圣地亚哥”区域位于智利。 资源的价格 不同区域的资源价格可能有差异,请参见华为云服务价格详情。
  • 什么是区域、可用区? 我们用区域和可用区来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。更多信息请参见华为云全球站点。
  • 设置binlog_row_image为FULL步骤 如果源数据库为云上RDS实例,可通过RDS管理界面的参数配置,将binlog_row_image修改为FULL,完成修改后重启源数据库并重置任务即可。 云数据库RDS for MySQL 8.0版本的binlog_row_image参数默认值为FULL,您无需进行设置。 如果源数据库为本地自建库,请参考如下步骤修复。 登录MySQL源数据库所在服务器。 手动修改my.cnf配置文件,将binlog_row_image参数值修改为FULL后保存。 binlog_row_image=full 为了关闭旧的session,需选择一个非业务时间段,重启源数据库并重置任务。
  • MySQL迁移中Definer强制转化后如何维持原业务用户权限体系 Definer的使用主要应用在视图、存储过程、触发器、事件等对象里,Definer并不会限制对象被调用的权限,但会限制对象访问数据库的权限。本场景下,用户在MySQL迁移过程中选择了“所有Definer迁移到该用户下”,则源库用户体系下其他用户账号在完成用户迁移后,如果用户迁移和权限授权都执行成功,则无需授权便可继续使用原业务(使用DRS用户迁移功能可以实现用户、权限、密码迁移),否则如果想在原来的用户权限体系下沿用原业务,则需要进行授权后才具有Definer相关数据库对象的访问使用权限,从而保证原业务正常。 本章节主要介绍如何通过数据库命令行对用户账号进行授权的方法。 确保新用户(Definer统一使用指定账号)具备足够的权限执行视图、存储过程等相关SQL。 通过MySQL官方客户端或者其它工具登录目标数据库。 通过如下命令查看需要授权的用户user当前权限详情。 show grants for 'user'@'host'; 为了保证原业务不报错,使用如下命令给用户user授予涉及的数据库对象缺失的操作权限。 grant select,insert,update,delete on db_name.* to 'user'@'host'; 一般情况下,访问数据库的权限包括:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、EXECUTE。您需要根据具体的数据库对象查看缺少哪些权限,再进行授权操作。 对于存储过程和函数,必须保证用户user对其有拥有EXECUTE权限,授权SQL命令如下: grant execute on db_name.function_name to 'user'@'host'; 使用授权后的用户账号访问目标库对象,无异常报错表示授权成功。需要注意:在java项目工程中调用存储过程、函数如果出现 Java.sql.SQLException: User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parametertypes,则需要单独执行用户user对mysql.proc库的授权: grant select on mysql.proc to 'user'@'host'; 父主题: 实时迁移
  • 安全设置global级binlog_format=ROW的步骤 通过MySQL官方客户端或者其它工具登录源数据库。 在源数据库上执行全局参数设置命令。 set global binlog_format = ROW; 在源数据库上执行如下命令确认上面操作已执行成功。 select @@global.binlog_format; 您可以通过如下两种方式确保修改后的源库binlog_format格式立即生效。 方法一: 选择一个非业务的时间段,中断当前数据库上的所有业务连接。 通过如下命令查询当前数据库上的所有业务连接(所有的binlog Dump连接及当前连接除外)。 show processlist; 中断上面查出的所有业务连接。 在上述操作未结束之前,请不要创建或者启动迁移任务,否则会导致数据不一致。 为了避免源库binlog_format格式因为数据库重启失效,请在源库的启动配置文件(my.ini或my.cnf等)中添加或修改配置参数binlog_format并保存。 binlog_format=ROW 方法二: 为了避免源库binlog_format格式因为数据库重启失效,请在源库的启动配置文件(my.ini或my.cnf等)中添加或修改配置参数binlog_format并保存。 binlog_format=ROW 确保上述配置参数binlog_format添加或修改成功后,选择一个非业务时间段,重启源数据库即可。
  • 关闭Balancer的步骤 通过Mongo Shell 登录数据库。 在mongos节点命令窗口中,使用如下命令,切换至config数据库。 use config 执行如下命令,判断是否可以关闭Balancer。 while( sh.isBalancerRunning() ) { print("waiting..."); sleep(1000); } 如果返回结果是waiting,则表示当前Balancer正在执行块(chunk)迁移,此时不能执行关闭Balancer的命令,否则可能引起数据不一致。 图1 查看输出结果 如果返回结果是空,则表示当前Balancer没有在进行块(chunk)迁移,此时可以执行下一步的关闭Balancer的命令。 关闭Balancer。 如果是整个实例的迁移,则执行如下命令,可以关闭整个实例的Balancer。 sh.stopBalancer() 如果要关闭待迁移且已经开启了分片的集合的Balancer,则执行如下命令: sh.disableBalancing("database.collection") 其中database.collection表示要关闭的集合的namespace。
  • 问题分析 出现上述内存溢出可能存在如下原因: 源数据库的mongod服务单独部署在一台机器上,如果这种情况下在迁移过程中出现内存溢出,一般就是因为在迁移过程中源库在执行会大量消耗内存的操作,比如:创建索引,排序查询等。 源数据库的mongod服务和其他服务同时部署在一台机器上,而且没有设置cacheSizeGB的大小,这种情况下,如果因为其他服务消耗掉内存导致不能给wiredTiger引擎保证的内存,则会出现内存溢出的情况。 一般默认情况下,mongod的wiredTiger引擎可以使用整个机器内存减一的50%(3.2的版本)或者60%(3.4以后的版本)。
  • 如何批量导出、导入事件(event)和触发器(trigger) 在进行MySQL到MySQL的迁移时,若任务结束后发现迁移日志中提示迁移事件和触发器失败,可手动迁移。 本小节主要介绍批量导出导入事件和触发器的具体操作。 从源库批量导出触发器。 在源库执行以下语句,获取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分别表示从源库待迁移到目标库的数据库。 在源库执行如下语句,从字段SQL Original Statement中获取源库创建触发器的语句。 SHOW CREATE TRIGGER TRIGGER_SCHEMA.TRIGGER_NAME \G; 上述语句中,TRIGGER_SCHEMA.TRIGGER_NAME填写的为1.a中查询到的TRIGGER_SCHEMA和TRIGGER_NAME具体值。 从源库批量导出事件。 在源库执行以下语句,获取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分别表示从源库待迁移到目标库的数据库。 在源库执行如下语句,从字段SQL Original Statement中获取源库创建事件的语句。 SHOW CREATE EVENT EVENT_SCHEMA.EVENT_NAME \G; 上述语句中,EVENT_SCHEMA.EVENT_NAME填写的为2.a中查询到的EVENT_SCHEMA和EVENT_NAME具体值。 导入触发器和事件。 在目标库重新执行从源库导出的创建触发器和创建事件语句。 父主题: 实时迁移
  • 操作步骤 以下操作适用于目标数据库为RDS实例的情况。 登录关系型数据库服务控制台。 选择指定目标数据库实例。 单击实例名称。 页面跳转至“基本信息”页签,切换至“参数修改”页面。 在页面右上角搜索框,输入关键字“password”,查看搜索结果。 图1 修改密码 在5的搜索结果中,对于表1 密码参数列举的参数,需要根据密码复杂度要求进行修改,确保各参数在密码复杂度允许的范围内。 表1 密码参数 参数 允许值 说明 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校验,密码至少需包含多少个非字母数字字符。 密码复杂度修改完成后,保存修改结果。 图2 保存修改结果 返回数据复制服务的“迁移模式”页面,继续执行下一步操作即可。
  • 什么是孤儿文档 MongoDB负载均衡器(Balancer)会根据集合的分片键(Shard key)均衡数据。Balancer的工作原理是:需要Balancer的数据块(Chunk)先复制到目标Shard,成功后再删除原Shard上的Chunk,来完成一次Chunk迁移,通过多次Chunk迁移来实现均衡。在Chunk迁移时,如果发生网络闪断等不可预知的场景,完成了复制但没有完成删除,那么对同一条文档会同时存在于两个Shard上。因为Chunk迁移在MongoDB上是感知的,config会更新这条文档应该在哪个Shard上,那么另一个Shard上的文档会存在但不会被感知,后续的update、delete操作都不会作用于这个错误的Shard上的文档,那么这条文档被称为孤儿文档(Orphaned Document)。
  • 操作步骤 下载用于清除孤儿文档的cleanupOrphaned.js脚本文件。 修改cleanupOrphaned.js脚本文件,将test替换为待清理孤儿文档的数据库名。 执行以下命令,清理Shard节点下指定的数据库中所有集合的孤儿文档。 mongo --host ShardIP --port Primaryport --authenticationDatabase database -u username -p password cleanupOrphaned.js ShardIP:Shard节点的IP地址。 Primaryport:Shard节点中的Primary节点的服务端口。 database:鉴权数据库名,即数据库账号所属的数据库。 username:登录数据库的账号。 password:登录数据库的密码。 如果您有多个数据库,您需要重复执行步骤2和步骤3,分别为每个数据库的每个Shard节点清理孤立文档。
  • DRS对比任务取消后,数据库有对比任务的查询进程未结束 以源库Mysql数据库为例,进行行数对比,取消对比任务,在源库有对比任务的查询进程未及时结束,清理残留进程,按照如下步骤操作: 使用管理员权限用户登录Mysql数据库,执行show processlist; 按照Host和Command获取Id,其中Host是drs任务节点IP,Command是select count(1)开头的查询语句. 步骤2获取到的id是112773,执行kill 112773; 执行show processlist;再次确认残留进程是否删掉. 父主题: 数据对比
  • 关键配置项 用户将数据库还原到RDS for SQL Server实例上之后,本地的一些重要配置项也需要进行同步确认,避免影响业务的正常使用。 tempdb:临时数据库的文件配置需要进行同步。 推荐配置为8个临时文件,注意路径一定要确保在D:\RDSDBDATA\Temp\ 通过在目标数据库端执行如下脚本添加临时数据库的文件配置: USE [master] GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb1', FILENAME = N'D:\RDSDBDATA\Temp\tempdb1.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB ) GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb2', FILENAME = N'D:\RDSDBDATA\Temp\tempdb2.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB ) GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb3', FILENAME = N'D:\RDSDBDATA\Temp\tempdb3.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB ) GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb4', FILENAME = N'D:\RDSDBDATA\Temp\tempdb4.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB ) GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb5', FILENAME = N'D:\RDSDBDATA\Temp\tempdb5.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB ) GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb6', FILENAME = N'D:\RDSDBDATA\Temp\tempdb6.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB ) GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb7', FILENAME = N'D:\RDSDBDATA\Temp\tempdb7.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB ) GO 图6 检查临时文件 数据库隔离级别:请确认原实例上数据库的隔离级别是否开启,并同步到RDS SQL Server实例,快照隔离参数有2个,分别是: 读提交快照(Is Read Committed Snapshot On) 允许快照隔离(Allow Snapshot Isolation) 若原实例上数据库的隔离级别是开启的,您可以通过在目标数据库端执行如下脚本开启数据库的隔离级别: USE [DBName] GO ALTER DATABASE [DBName] SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT GO ALTER DATABASE [DBName] SET ALLOW_SNAPSHOT_ISOLATION ON GO 实例最大并行度:实例最大并行度在RDS for SQL Server实例上默认设置为0,用户也可以根据自己本地原来的设置项进行同步设置,避免不同环境下业务场景出现异常。 右击本地实例选择属性,在服务器属性弹出框中选择高级,然后在右侧找到最大并行度(max degree of parallelism)设置项,确认本地实例设置值,并同步在目标RDS for SQL Server实例管理的参数组中进行修改。 图7 查看本地实例最大并行度值 登录本云实例控制台,在实例管理页,单击目标实例名称,进入基本信息页签,切换至“参数修改”,搜索最大并行度(max degree of parallelism)并进行修改。 图8 修改目标RDS for SQL Server实例的最大并行度 迁移上云的数据库恢复模式是否为完整(FULL)模式,如果不是需要进行修改。 右击数据库选择属性,在弹出数据库属性框中选择选项,并在右侧确认该数据库恢复模式为完整(FULL),保证该数据库高可用和备份策略可执行。 图9 检查数据库恢复模式
共100000条