活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      文档中心

      数据库复制

      数据库复制

        • 产品动态
        • 产品简介
        • 产品定义
        • 产品优势
        • 产品功能
        • 实时迁移
        • 备份迁移
        • 实时同步
        • 实时灾备
        • 数据类型映射关系
        • 应用场景
        • 相关术语解释
        • 与其他服务关系
        • 计费说明
        • 资源节点
        • 产品规格
        • 计费方式
        • 产品价格
        • 购买
        • 实例生命周期
        • 用户指南
        • 实时迁移
        • 入云
        • 将MySQL迁移到MySQL
        • 将MySQL迁移到DRDS
        • 将MySQL分库分表迁移到DRDS
        • 将MongoDB迁移到DDS
        • 出云
        • 将MySQL迁移到MySQL
        • 将DDS迁移到MongoDB
        • 任务管理
        • 创建迁移任务
        • 查询迁移进度
        • 查看迁移日志
        • 对比迁移项
        • 对象管理
        • 迁移用户
        • 参数对比列表
        • 任务管理
        • 查看任务详情
        • 修改任务信息
        • 修改迁移信息
        • 编辑迁移任务
        • 续传迁移任务
        • 重置迁移任务
        • 暂停迁移任务
        • 结束迁移任务
        • 删除迁移任务
        • 任务状态说明
        • 备份迁移
        • 迁移方案概览
        • 创建RDS备份迁移任务
        • 创建OBS自建桶备份迁移任务
        • 任务管理
        • 查看任务详情
        • 修改任务信息
        • 查看迁移日志
        • 删除迁移任务
        • 任务状态说明
        • 实时同步
        • 数据同步拓扑介绍
        • 入云
        • 将MySQL同步到MySQL
        • 将PostgreSQL同步到PostgreSQL
        • 将Oracle同步到MySQL
        • 将Oracle同步到DRDS
        • 将Oracle同步到PostgreSQL
        • 将DRDS同步到DRDS
        • 将DRDS同步到MySQL
        • 将MySQL同步到DWS
        • 将Oracle同步到DWS
        • 将MongoDB同步到DDS
        • 出云
        • 将MySQL同步到MySQL
        • 自建到自建
        • 将MySQL同步到Kafka
        • 将Oracle同步到Kafka
        • 任务管理
        • 创建同步任务
        • 查询同步进度
        • 查看同步日志
        • 对比同步项
        • 对象管理
        • 编辑同步对象
        • 对象名映射
        • 查看同步映射
        • 数据加工
        • 任务生命周期
        • 查看任务详情
        • 修改任务信息
        • 修改同步信息
        • 编辑同步任务
        • 续传同步任务
        • 暂停同步任务
        • 重置同步任务
        • 修改流速模式
        • 结束同步任务
        • 删除同步任务
        • 任务状态说明
        • 同步场景操作参考
        • Kafka消息格式
        • Kafka认证方式
        • PostgreSQL为源强制结束任务
        • 通过创建触发器和函数实现PostgreSQL增量DDL同步
        • 实时灾备
        • 灾备场景
        • MySQL到MySQL灾备
        • 任务管理
        • 创建灾备任务
        • 查询灾备进度
        • 查看灾备日志
        • 对比灾备项
        • 任务生命周期
        • 查看灾备数据
        • 修改任务信息
        • 编辑灾备任务
        • 续传灾备任务
        • 暂停灾备任务
        • 结束灾备任务
        • 删除灾备任务
        • 查看灾备监控
        • 主备倒换任务
        • 修改流速模式
        • 任务状态说明
        • 快速入门
        • 创建数据库复制 实时迁移
        • 概述
        • 入云迁移使用须知
        • MySQL->RDS for MySQL
        • MySQL->DRDS
        • MySQL分库分表->DRDS
        • MongoDB->DDS
        • PostgreSQL->RDS for PostgreSQL
        • 出云迁移使用须知
        • RDS for MySQL-> MySQL
        • DDS实例-> MongoDB
        • 步骤一(1):创建入云迁移任务
        • 步骤一(2):创建出云迁移任务
        • 步骤二:查询迁移进度
        • 步骤三:查看迁移日志
        • 步骤四:对比迁移项
        • 参考:任务状态含义
        • 创建数据库复制 备份迁移
        • 使用须知
        • 场景一:创建RDS全量备份迁移任务
        • 场景二:创建OBS自建桶迁移任务
        • 参考:任务状态含义
        • 创建数据库复制 实时同步
        • 概述
        • 使用须知
        • 步骤一:创建同步任务
        • 步骤二:查询同步任务
        • 步骤三:查看同步日志
        • 步骤四:对比同步项
        • 参考:任务状态含义
        • 创建数据库复制 实时灾备
        • 概述
        • 使用须知
        • 步骤一:创建灾备任务
        • 步骤二:查询灾备进度
        • 步骤三:查看灾备日志
        • 步骤四:对比灾备项
        • 参考:任务状态含义
        • 最佳实践
        • 最佳实践汇总
        • 跨云数据库实时迁移
        • MySQL数据库迁移
        • MongoDB数据库迁移
        • ECS自建数据库迁移至云上DDS、RDS实例
        • ECS自建MongoDB迁移DDS
        • ECS自建MySQL迁移RDS实例
        • 本地数据库实时迁移
        • MySQL数据库迁移
        • MongoDB数据库迁移
        • 本地Microsoft SQL Server备份迁移到云上RDS for SQL Server实例
        • 场景介绍
        • 迁移准备
        • 导出数据库备份文件
        • 上传备份文件
        • 场景:全量备份迁移
        • 场景:全量+增量备份迁移
        • 手动配置信息
        • 常见问题
        • 产品咨询类
        • 计费类
        • 购买类
        • 操作类
        • 网络及安全
        • 权限管理
        • 实时迁移
        • 备份迁移
        • 实时同步
        • 实时灾备
        • 数据对比
        • 通用操作类问题
        • 时延相关
        • 文档下载
        • 文档下载
        • 相关协议
        • 数据库复制产品服务协议
          无相关产品

          本页目录

          帮助中心数据库复制常见问题实时迁移
          实时迁移
          更新时间 2024-02-22 11:03:26
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2024-02-22 11:03:26
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          本节主要介绍实时迁移

          如何判断数据迁移任务可以停止

          通常,在业务割接完成后,为了防止源数据库的操作继续同步到目标数据库,造成数据覆盖问题,您可选择结束迁移任务。结束之前您需要确认完成以下几点:

          1. 请您确认至少在业务低峰期有过一次完整的数据对比。
          2. 完成业务割接。

          a. 先中断业务(如果业务负载非常轻,也可以尝试不中断业务)。

          b. 在源数据库端执行如下语句(此处以MySQL为例),并观察在1-5分钟内若无任何新会话执行SQL ,则可认为业务已经完全停止。

          show processlist;

          上述语句查询到的进程列表中,包括DRS迁移实例的连接,您需要确认除DRS迁移实例的连接外无任何新会话执行SQL,即可认为业务已经完全停止。

          c. 实时同步时延为0,并稳定保持一段时间;同时,您可以使用数据级对比功能,进行割接前的最后一次数据级对比,耗时可参考之前的对比记录。

          n 如果时间允许,则选择全部对比。

          n 如果时间不允许,则推荐对比活跃表,关键业务表,第二步对比多次存在差异的表等。

          d. 确定系统割接时机,业务系统指向目标数据库,业务对外恢复使用。

          1. 结束迁移任务,该操作仅删除了迁移实例,迁移任务仍显示在任务列表中,您可以进行查看或删除。

          MySQL迁移中Definer强制转化后如何维持原业务用户权限体系

          Definer的使用主要应用在视图、存储过程、触发器、事件等对象里,Definer并不会限制对象被调用的权限,但会限制对象访问数据库的权限。本场景下,用户在MySQL迁移过程中选择了“所有Definer迁移到该用户下”,则源库用户体系下其他用户账号在完成用户迁移后,如果用户迁移和权限授权都执行成功,则无需授权便可继续使用原业务(使用DRS用户迁移功能可以实现用户、权限、密码迁移),否则如果想在原来的用户权限体系下延用原业务,则需要进行授权后才具有Definer相关数据库对象的访问使用权限,从而保证原业务正常。

          本章节主要介绍如何通过数据库命令行对用户账号进行授权的方法。

          步骤 1 确保新用户(Definer统一使用指定账号)具备足够的权限执行视图、存储过程等相关SQL。

          步骤 2通过MySQL官方客户端或者其它工具登录目标数据库。

          步骤 3 通过如下命令查看需要授权的用户user当前权限详情。

          show grants for 'user'@'host';

          步骤 4 为了保证原业务不报错,使用如下命令给用户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';

          步骤 5 使用授权后的用户账号访问目标库对象,无异常报错表示授权成功。需要注意:在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';

          MySQL存储过程迁移上云后遇到调用权限的问题,如何解决

          MySQL存储过程迁移上云后,可能会因为权限问题导致调用存储过程或函数出错。

          针对该情况,不同的Definer策略有不同的处理方法。本章节主要以user1为示例,介绍两种迁移Definer的策略下的处理方法。

          策略一

          在测试连接页面的目标库信息中填写数据库用户名user1,所有Definer迁移到该用户下选“是”。

          这种策略下,源库所有存储过程和方法的Definer迁移到目标库后账号都会自动修改为user1,host改为% 。若在目标库上出现调用存储过程失败的情况,可执行如下操作:

          步骤 1 使用uesr1账号登录到目标库RDS for MySQL实例。

          步骤 2 如果需要使用其他账号调用存储过程,则该账号需要具有execute权限。

          步骤 3 通过如下语句,使用user1授予其他账号执行存储过程的权限。

          其中user表示需要调用存储过程的其他账号:

          GRANT EXECUTE ON db.* TO user;

          步骤 4 如果需要通过Java调用存储过程,则需要通过如下语句,使用user1授予其他账号查询mysql.proc表的权限。

          授权语句可参考如下语句,user表示需要调用存储过程的账号:

          GRANT SELECT ON mysql.proc TO 'user'@'%';

          策略二

          在测试连接页面的目标库信息中填写数据库用户名user1,所有Definer迁移到该用户下选“否”。

          这种策略下,源库所有存储过程和方法的Definer迁移到目标库后账号和host保持不变,选择此选项,需要配合2.3.5.1** **迁移用户功能,将源数据库的用户全部迁移,这样才能保持源数据库的权限体系完全不变。

          如果您未选择用户权限迁移或者用户权限迁移时存在不支持迁移的账号,建议选择[策略一]( " ")来处理。

          如何确保业务数据库的全部业务已经停止

          业务切换时可通过如下方法确保业务数据库的全部业务已经停止:

          步骤 1 在源数据库端执行如下语句,查看当前是否还存在有业务连接。

          show processlist;

          图 查看是否存在业务连接

          图片4.png

          步骤 2 可选: ****如果源数据库有业务连接,则通过结果中Host列的值来查找对应的业务进程并将其停止。

          步骤 3 在源库执行如下语句,查看binlog位置并记录该值(file列取值:position列取值 ),此处将该值记为ckpt1。

          show master status;

          图 查看binlog位置

          图片5.png

          步骤 4 等待30s以上,在源库执行如下语句,查看binlog位置并记录该值(file列取值:position列取值 ),此处将该值记为ckpt2。ckpt1=ckpt2时,表示源数据库业务已基本停写。

          show master status;

          使用定时启动任务失败,迁移日志提示can not get agency token

          使用定时启动任务功能时,如果使用的是子账号,需要使用“账户委托”,否则任务启动失败,迁移日志报:can not get agency token。

          解决方案

          目前针对该情况,分别提供如下解决方案:

          方法一:使用主账号重新创建任务,启动方式选择“定时启动”。

          方法二:使用主账号在子账号所在的用户组添加Security Administrator权限后,重新创建任务,启动方式选择“定时启动”。

          方法三:重新创建任务,启动方式选择“立即启动”。

          RDS for MySQL不支持MyISAM引擎表,迁移时MyISAM如何处理

          基于以下原因,RDS for MySQL目前不支持MyISAM引擎。

          MyISAM引擎表不支持事务,仅支持表级别锁,导致读写操作相互冲突。

          MyISAM对数据完整性的保护存在缺陷,且这些缺陷会导致数据库数据的损坏甚至丢失。

          MyISAM在出现数据损害情况下,很多都需要手动修复,无法通过产品服务提供的恢复功能进行数据恢复。

          MyISAM向InnoDB的迁移透明,大多数情况不需要改动建表的代码,云数据库自动转换InnoDB即可完成迁移。

          DRS在迁移过程中,会自动将MyISAM转换为InnoDB。针对MyISAM引擎表不支持事务这一特点,为了确保MyISAM表的数据一致性, DRS会借助主键来实现最终数据的一致。如果需要迁移没有主键的MyISAM表,建议选择无业务期启动迁移任务,以确保数据的一致性。

          低版本迁移至MySQL 8.0,应该注意哪些问题

          MySQL 8.0较MySQL 5.7增加了一些新的特性,并在性能表现上存在差异。迁移前,需要做兼容性分析并给出解决方案。可以从兼容性、系统变量等方面考虑。

          兼容性分析:

          针对MySQL8.0社区版与MySQL5.7社区版进行分析,包括以下两方面:

          a. 不影响迁移,但使用方法出现差异。

          兼容性 检查项 作用 状态 解决方案
          数据类型或函数 ENCODE()函数 加密 移除 AES_ENCRYPT()函数代替
          DECODE()函数 解密 移除 AES_DECRYPT()函数代替
          ENCRYPT()函数 加密 移除 SHA2()函数代替
          DES_ENCRYPT()函数 加密 移除 AES_ENCRYPT()函数代替
          DES_DECRYPT()函数 解密 移除 AES_DECRYPT()函数代替
          JSON_APPEND()函数 增加json元素 移除 JSON_ARRAY_APPEND()函数代替
          PASSWORD()函数 修改用户密码 移除 ALTER USER user IDENTIFIED BY 'auth_string';
          JSON_MERGE()函数 将多个json合并为一个 废弃 JSON_MERGE_PERSERVE()函数代替
          SQL MODE NO_AUTO_CREATE_USER、DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS - 移除 -
          外键约束长度 外键约束名称不能超过64个字符 - - SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1), INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'ibfk')-1) FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);使用ALTER TABLE调整长度
          features GRANT创建用户 - 移除 CREATE USER
          GRANT修改用户信息 - 移除 ALTER USER
          IDENTIFIED BY PASSWORD 'auth_string' 设置密码 移除 IDENTIFIED WITH auth_plugin AS 'auth_string'
          SQL语句中的\N NULL 移除 NULL代替
          PROCEDURE ANALYSE()语法 对MySQL字段值进行统计分析后给出建议的字段类型 移除 -
          空间函数 - - -
          mysql_install_db 初始化 移除 mysqld --initialize或--initialize-insecure

          b. 影响迁移,需要提前做检查。

          兼容性 检查项 作用 状态 解决方案 原始用法
          保留关键字 cume_dist、dense_rank、empty、except、first_value、grouping、groups、json_table、lag、last_value、lateral、lead、nth_value、ntile、of、over、percent_rank、rank、recursive、row_number、system、window - 新增 SET sql_mode = 'ANSI_QUOTES' 名称:数据库、表、索引、列、alias、view、存储过程、分区、表空间
          字符集 UTF8MB3 - 废弃 使用UTF8MB4代替 -
          分区表 不得出现不支持本地分区的存储引擎的分区表 - 移除 SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';可按照下述两种方式解决:(1)ALTER TABLE table_name ENGINE=INNODB;(2)ALTER TABLE table_name REMOVE PARTITIONING; 不支持MyISAM
          语法 group by … asc/desc 升序/降序 移除 使用order by子句代替 view、function等
          名称长度 view的列名称不能超过64个字符 - - alter处理 最多255个字符
          enum或set元素的总长度不能超过255个字符 - - 用户处理 最大64K
          大小写 lower_case_table_names MySQL设置字母大小写是否敏感 - 升级过程中,如果设置该参数为1,则必须确保schema和table名称必须是小写的SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME != LOWER(TABLE_NAME) AND TABLE_TYPE = 'BASE TABLE';SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME != LOWER(SCHEMA_NAME); -
          触发器 是否有空定义或者无效的创建上下文 - - show triggers查看,检测character_set_client、 collation_connection、Database Collation属性 -

          系统变量默认值变更

          针对社区版MySQL5.7与8.0版本的默认值作对比,默认值不影响迁移,但对迁移后的业务会产生影响。

          序号 parameter/option community 作用 备注
          原默认值 新默认值
          Server
          1 character_set_server latin1 utf8mb4 -
          2 collation_server latin1_swedish_ci utf8mb4_0900_ai_ci -
          3 explicit_defaults_for_timestamp OFF ON 更新某一行时是否更新timestamp列
          4 optimizer_trace_max_mem_size 16KB 1MB -
          5 validate_password_check_user_name OFF ON -
          6 back_log -1 (autosize) changed from : back_log = 50 + (max_connections / 5) -1 (autosize) changed to : back_log = max_connections 在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
          7 max_allowed_packet 4194304 (4MB) 67108864 (64MB) 限制Server接受的数据包大小
          8 max_error_count 64 1024 控制显示告警的个数
          9 event_scheduler OFF ON -
          10 table_open_cache 2000 4000 -
          11 log_error_verbosity 3 (Notes) 2 (Warning) -
          INNODB
          1 innodb_undo_tablespaces 0 2 -
          2 innodb_undo_log_truncate OFF ON -
          3 innodb_flush_method NULL fsync (Unix),unbuffered (Windows) 控制innodb数据文件及redo log的打开、刷写模式
          4 innodb_autoinc_lock_mode 1 (consecutive) 2 (interleaved) 控制着在向有auto_increment 列的表插入数据时,相关锁的行为;
          5 innodb_flush_neighbors 1 (enable) 0 (disable) 从缓冲池刷新页面是否也刷新相同范围内的其他脏页。
          6 innodb_max_dirty_pages_pct_lwm 0 (%) 10 (%) 影响innodb刷新脏页行为
          7 innodb_max_dirty_pages_pct 75 (%) 90 (%) 影响innodb刷新脏页行为
          PERFORMANCE SCHEMA 整体是不是开的 - - -
          REPLICATION
          1 log_bin OFF ON -
          2 server_id 0 1 -
          3 log-slave-updates OFF ON -
          4 expire_log_days 0 30 -
          5 master-info-repository FILE TABLE -
          6 relay-log-info-repository FILE TABLE -
          7 transaction-write-set-extraction OFF XXHASH64 -
          8 slave_rows_search_algorithms INDEX_SCAN, TABLE_SCAN INDEX_SCAN, HASH_SCAN -

          移除系统变量

          针对社区版MySQL 5.7与8.0进行分析,移除系统变量不影响迁移。

          移除变量
          innodb_locks_unsafe_for_binlog
          log_builtin_as_identified_by_password
          old_passwords
          query_cache_limit
          query_cache_min_res_unit
          query_cache_size
          query_cache_type
          query_cache_wlock_invalidate
          ndb_cache_check_time
          ignore_db_dirs
          tx_isolation
          tx_read_only
          sync_frm
          secure_auth
          multi_range_count
          log_error_verbosity
          sql_log_bin
          metadata_locks_cache_size
          metadata_locks_hash_instances
          date_format
          datetime_format
          time_format
          max_tmp_tables
          ignore_builtin_innodb
          innodb_support_xa
          innodb_undo_logs
          innodb_undo_tablespaces
          internal_tmp_disk_storage_engine

          MongoDB数据库迁移过程中,源数据库出现内存溢出(OOM)是什么原因

          场景描述

          在进行MongoDB数据库迁移的过程中,出现源数据库内存溢出(OOM),导致源数据库不可用,迁移失败。

          问题分析

          出现上述内存溢出可能存在如下原因:

          源数据库的mongod服务单独部署在一台机器上,如果这种情况下在迁移过程中出现内存溢出,一般就是因为在迁移过程中源库在执行会大量消耗内存的操作,比如:创建索引,排序查询等。

          源数据库的mongod服务和其他服务同时部署在一台机器上,而且没有设置cacheSizeGB的大小,这种情况下,如果因为其他服务消耗掉内存导致不能给wiredTiger引擎保证的内存,则会出现内存溢出的情况。

          一般默认情况下,mongod的wiredTiger引擎可以使用整个机器内存减一的50%(3.2的版本)或者60%(3.4以后的版本)。

          解决方案

          如果mongod服务是单独部署在一台机器上,则在迁移过程中最好不要执行会大量消耗内存的操作,比如:创建索引,排序查询等。

          如果mongod服务和其他服务共同部署在一台机器上,则建议给mongod的wiredTiger引擎加上cacheSizeGB的参数,设置的值为机器最小空闲内存的一半,保证所有服务在高峰期所使用的内存不会超过分配给wiredTiger引擎的内存。

          如何关闭集合均衡器Balancer

          使用DRS服务进行MongoDB数据库分片集群到分片集群的迁移,必须关闭要迁移集合的均衡器Balancer。

          迁移结束后请开启Balancer,因为在迁移期间关闭了Balancer,源数据库的不同shard可能产生了不等量的块(chunk),在Balancer开启之后集群shard之间的块(chunk)移动会暂时影响源数据库的性能。

          关闭Balancer的步骤

          步骤 1通过Mongo Shell 登录数据库。

          步骤 2 在mongos节点命令窗口中,使用如下命令,切换至config数据库。

          use config

          步骤 3 执行如下命令,判断是否可以关闭Balancer。

          while( sh.isBalancerRunning() ) {

          print("waiting...");

          sleep(1000);** **

          }

          如果返回结果是waiting,则表示当前Balancer正在执行块(chunk)迁移,此时不能执行关闭Balancer的命令,否则可能引起数据不一致。

          图 查看输出结果

          image.gif

          如果返回结果是空,则表示当前Balancer没有在进行块(chunk)迁移,此时可以执行下一步的关闭Balancer的命令。

          步骤 4 关闭Balancer。

          如果是整个实例的迁移,则执行如下命令,可以关闭整个实例的Balancer。

          sh.stopBalancer()

          如果要关闭待迁移且已经开启了分片的集合的Balancer,则执行如下命令:

          sh.disableBalancing("database.collection")

          其中database.collection表示要关闭的集合的namespace。

          如何批量导出、导入事件(event)和触发器(trigger)

          在进行MySQL到MySQL的迁移时,若任务结束后发现迁移日志中提示迁移事件和触发器失败,可手动迁移。

          本小节主要介绍批量导出导入事件和触发器的具体操作。

          步骤 5 从源库批量导出触发器。

          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分别表示从源库待迁移到目标库的数据库。

          1. 在源库执行如下语句,从字段SQL Original Statement中获取源库创建触发器的语句。

          SHOW CREATE TRIGGER TRIGGER_SCHEMA.TRIGGER_NAME \G;

          上述语句中,TRIGGER_SCHEMA.TRIGGER_NAME填写的为[步骤 1.1 ]( " ")中查询到的TRIGGER_SCHEMA和TRIGGER_NAME具体值。

          步骤 6 从源库批量导出事件。

          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分别表示从源库待迁移到目标库的数据库。

          1. 在源库执行如下语句,从字段SQL Original Statement中获取源库创建事件的语句。

          SHOW CREATE EVENT EVENT_SCHEMA.EVENT_NAME \G;

          上述语句中,EVENT_SCHEMA.EVENT_NAME填写的为[步骤 2.1 ]( " ")中查询到的EVENT_SCHEMA和EVENT_NAME具体值。

          步骤 7 导入触发器和事件。

          在目标库重新执行从源库导出的创建触发器和创建事件语句。

          源库参数lower_case_table_names=1时,为什么不允许迁移包含大写字母的库或者表

          场景描述

          当源库参数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

          对于库,则需要导出后,修改库名为小写,再进行导入。

          修改库名或表名之后,需要维护权限的一致性,以免影响应用访问。

          方法三

          对象选择时不迁移该库或者该表。

          分片集群MongoDB迁移前清除孤儿文档

          什么是孤儿文档

          MongoDB负载均衡器(Balancer)会根据集合的分片键(Shard key)均衡数据。Balancer的工作原理是:需要Balancer的数据块(Chunk)先复制到目标Shard,成功后再删除原Shard上的Chunk,来完成一次Chunk迁移,通过多次Chunk迁移来实现均衡。在Chunk迁移时,如果发生网络闪断等不可预知的场景,完成了复制但没有完成删除,那么对同一条文档会同时存在于两个Shard上。因为Chunk迁移在MongoDB上是感知的,config会更新这条文档应该在哪个Shard上,那么另一个Shard上的文档会存在但不会被感知,后续的update、delete操作都不会作用于这个错误的Shard上的文档,那么这条文档被称为孤儿文档(Orphaned Document)。

          迁移影响

          DRS在迁移集群时,会从Shard上抽取全量数据。正常文档和孤儿文档在不同的Shard上,DRS不会感知,都会迁移到目标库。DRS针对MongoDB迁移的冲突策略为忽略,因此最终目标库上的文档取决于哪个文档先被迁过去,会造成数据内容或行数不一致。

          操作步骤

          步骤 1 联系技术支持,获取用于清除孤儿文档的cleanupOrphaned脚本文件,然后解压。

          步骤 2 修改cleanupOrphaned.js脚本文件,将test替换为待清理孤儿文档的数据库名。

          步骤 3 执行以下命令,清理Shard节点下指定的数据库中所有集合的孤儿文档。

          mongo --host ShardIP ** --port** Primaryport --authenticationDatabase database -u username -p passowrd cleanupOrphaned.js

          ShardIP:Shard节点的IP地址。

          Primaryport:Shard节点中的Primary节点的服务端口。

          database:鉴权数据库名,即数据库账号所属的数据库。

          username:登录数据库的账号。

          passowrd:登录数据库的密码。

          如果您有多个数据库,您需要重复执行步骤[步骤 2 ]( " ")和步骤[步骤 3 ]( " "),分别为每个数据库的每个Shard节点清理孤立文档。

          文档反馈

          建议您登录后反馈,可在建议与反馈里查看问题处理进度

          鼠标选中文档,精准反馈问题

          选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理

          知道了

          上一篇 :  权限管理
          下一篇 :  备份迁移
          搜索 关闭
          ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
          公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
          备案 京公网安备11010802043424号 京ICP备 2021034386号
          ©2025天翼云科技有限公司版权所有
          京ICP备 2021034386号
          备案 京公网安备11010802043424号
          增值电信业务经营许可证A2.B1.B2-20090001
          用户协议 隐私政策 法律声明