有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
文档中心 > 最佳实践 > TDSQL-C MySQL 版 > 通过 DTS 升级数据库版本 MySQL5.7至8.0

背景

TDSQL-C MySQL 版的数据库版本 MySQL8.0结合了完备的管控服务和全新 TXSQL 内核,提供更快、更稳的企业级服务和丰富的行业场景。当前 TDSQL-C MySQL 版控制台暂不支持直接升级数据库版本至 MySQL8.0,如需升级数据库版本,您可使用同一腾讯云账号,在源集群地域新建一个数据库版本为 MySQL8.0的集群,然后通过 DTS 将源集群的数据同步至新集群,最后确认数据无误后删除源集群并将业务切换至新集群上,以此实现数据库版本的升级。

操作场景

同步链路
源数据库及版本
目标数据库及版本
TDSQL-C MySQL 版 > TDSQL-C MySQL 版
TDSQL-C MySQL 版 MySQL5.7
相同腾讯云主账号下数据库之间同步
TDSQL-C MySQL 版 MySQL8.0

注意事项

DTS 在执行全量数据同步时,会占用一定源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行。
为了避免数据重复,请确保需要同步的表具有主键或者非空唯一键。
默认采用无锁方式,同步过程中对源库不加全局锁(FTWRL),仅对无主键的表加表锁,其他不加锁。
数据同步时,DTS 会使用执行同步任务的账号在源库中写入系统库__tencentdb__,用于记录同步任务过程中的数据对比信息。
为保证后续数据对比问题可定位,同步任务结束后不会删除源库中的__tencentdb__
__tencentdb__系统库占用空间非常小,约为源库存储空间的千分之一到万分之一(例如源库为50GB,则__tencentdb__系统库约为5MB-50MB) ,并且采用单线程,等待连接机制,所以对源库的性能几乎无影响,也不会抢占资源。

前提条件

需要具备源数据库的权限如下:
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW VIEW,PROCESS,SELECT ON *.* TO '账号'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON `__tencentdb__`.* TO '账号'@'%';
FLUSH PRIVILEGES;
需要具备目标数据库的权限:ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, PROCESS, REFERENCES, RELOAD, SELECT, SHOW DATABASES, SHOW VIEW, TRIGGER, UPDATE。

应用限制

只支持同步基础表、视图、存储过程和函数。
在同步视图、存储过程和函数时,DTS 会检查源库中 DEFINER 对应的 user1( [DEFINER = user1])和同步账号 user2 是否一致,如果不一致,同步后 DTS 会修改 user1 在目标库中的 SQL SECURITY 属性,由 DEFINER 转换为 INVOKER( [INVOKER = user1]),同时设置目标库中 DEFINER 为同步账号 user2([DEFINER = 同步账号 user2])。如果源库中视图定义过于复杂,可能会导致任务失败。
源端如果是非 GTID 实例,DTS 不支持源端 HA 切换,一旦源端实例发生切换可能会导致 DTS 增量同步中断。
只支持同步 InnoDB、MyISAM、TokuDB 三种数据库引擎,如果存在这三种以外的数据引擎表则默认跳过不进行同步。其中,源库如果存在压缩模式的 TokuDB 引擎数据,需要目标库同步支持压缩模式才可以同步,否则任务会报错。
相互关联的数据对象需要一起同步,否则会导致同步失败。常见的关联关系:视图引用表、视图引用视图、主外键关联表等。
增量同步过程中,若源库产生了类型为 STATEMENT 格式的 Binlog 语句,则会导致同步失败。
源数据库 Binlog 的 GTID 如果存在空洞,可能会影响同步任务的性能并导致任务失败。
不支持同时包含 DML 和 DDL 语句在一个事务的场景,遇到该情况任务会报错。
不支持 Geometry 相关的数据类型,遇到该类型数据任务报错。
不支持 ALTER VIEW 语句,遇到该语句任务跳过不同步。

操作限制

同步过程中请勿进行如下操作,否则会导致同步任务失败。
请勿修改、删除源数据库和目标数据库中用户信息(包括用户名、密码和权限)和端口号。
请勿在源库写入 Binlog 格式为 STATEMENT 的数据。
请勿在源库上执行清除 Binlog 的操作。
在同步增量阶段,请勿删除系统库表 __tencentdb__

支持同步的 SQL 操作

操作类型
SQL 操作语句
DML
INSERT、UPDATE、DELETE
DDL
CREATE DATABASE、DROP DATABASE、ALTER DATABASE、CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE、RENAME TABLE、CREATE VIEW、DROP VIEW、CREATE INDEX、DROP INDEX
说明:
暂不支持 CREATE TABLE 表名 AS SELECT 语句。

环境要求

类型
环境要求
源数据库要求
源库和目标库网络能够连通。
实例参数要求:
源库表的 row_format 不能设置为 FIXED。
Binlog 参数要求:
源端 binlog_format 变量必须设置为 ROW。
源端 binlog_row_image 变量必须设置为 FULL。
不允许设置 do_db, ignore_db。
建议源库 Binlog 日志至少保留3天及以上,否则可能会因任务暂停/中断时间大于 Binlog 日志保留时间,造成任务无法续传,进而导致任务失败。
外键依赖:
外键依赖只能设置为 NO ACTION,RESTRICT 两种类型。
部分库表同步时,有外键依赖的表必须齐全。
环境变量 innodb_stats_on_metadata 必须设置为 OFF。
目标数据库要求
目标库的版本必须大于等于源库的版本。
目标库需要有足够的存储空间,如果初始类型选择“全量数据初始化”,则目标库的空间大小须是源库待同步库表空间的1.2倍以上。
目标库不能有和源库同名的表、视图等同步对象。
目标库 max_allowed_packet 参数设置数值至少为4M。

步骤一、创建同步任务

1. 登录 数据同步购买页,选择相应配置,单击立即购买
参数
描述
服务类型
选择数据同步。
创建模式
选择新建任务
计费模式
支持包年包月和按量计费。
源实例类型
选择 TDSQL-C MySQL,购买后不可修改。
源实例地域
选择源实例所在地域,购买后不可修改。
目标实例类型
选择 TDSQL-C MySQL,购买后不可修改。
目标实例地域
选择目的实例所在地域,购买后不可修改。
规格
请根据业务诉求选择规格,规格越高,性能越好。详情请参考 计费概述
2. 购买完成后,返回 数据同步列表,可看到刚创建的数据同步任务,刚创建的同步任务需要进行配置后才可以使用。
3. 在数据同步列表,单击操作列的配置,进入配置同步任务页面。

4. 在配置同步任务页面,配置源端实例、账号密码,配置目标端实例、账号和密码,测试连通性后,单击下一步

设置项
参数
描述
任务设置
任务名称
DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。
运行模式
支持立即执行和定时执行两种模式。
自动重试
设置后,迁移任务因网络异常等引起的任务临时中断,DTS 将在设置的时间范围内自动重试和恢复任务,不需要用户手动操作。 支持设置的时间范围为5分钟-720分钟。
源库设置
源实例类型
购买时所选择的源实例类型,不可修改。
源实例地域
购买时选择的源实例所在地域,不可修改。
接入类型
选择云数据库。
实例 ID
源实例 ID。
账号
源实例账号,账号权限需要满足要求。
密码
源实例账号的密码。
目标库设置
目标实例类型
购买时选择的目标实例类型,不可修改。
目标实例地域
购买时选择的目标实例地域,不可修改。
接入类型
选择云数据库。
实例 ID
选择目标实例 ID。
账号
目标实例账号,账号权限需要满足要求。
密码
目标实例账号的密码。
5. 在设置同步选项和同步对象页面,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
说明:
初始化类型仅选择全量数据初始化,系统默认用户在目标库已经创建了表结构,不会进行表结构同步,也不会校验源库和目标库是否有同名表,所以当用户同时在已存在同名表中选择前置校验并报错,则校验并报错功能不生效。
如果用户在同步过程中确定会对某张表使用 rename 操作(例如将 table A rename 为 table B),则同步对象需要选择 table A 所在的整个库(或者整个实例),不能仅选择 table A,否则 rename 操作后,table B 的数据不会同步到目标库。

设置项
参数
描述
数据初始化选项
初始化类型
结构初始化:同步任务执行时会先将源实例中表结构初始化到目标实例中。
全量数据初始化:同步任务执行时会先将源实例中数据初始化到目标实例中。仅选择全量数据初始化的场景,用户需要提前在目标库创建好表结构。
默认两者都勾上,可根据实际情况取消。
已存在同名表
前置校验并报错:存在同名表则报错,流程不再继续。
忽略并继续执行:全量数据和增量数据直接追加目标实例的表中。
数据同步选项
冲突处理机制
冲突报错:在同步时发现表主键冲突,报错并暂停数据同步任务。
冲突忽略:在同步时发现表主键冲突,保留目标库主键记录。
冲突覆盖:在同步时发现表主键冲突,用源库主键记录覆盖目标库主键记录。
同步操作类型
支持操作:Insert、Update、Delete、DDL。勾选“DDL 自定义”,可以根据需要选择不同的 DDL 同步策略。详情请参考 设置 SQL 过滤策略
同步对象选项
同步对象
选择指定对象,支持基础库表、视图、存储过程和函数。
高级迁移对象
高级迁移对象的同步是一次性动作,仅支持同步在任务启动前源库中已有的高级对象,在任务启动后,新增的高级对象不会同步到目标库中。更多详情,请参考 同步高级对象
6. 在校验任务页面,完成校验并全部校验项通过后,单击启动任务
说明:
如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。
同步任务可能会增加源库和目标库实例负载,请在业务低峰期进行操作。
同步任务开始后请勿修改源端、目的端密码。
请勿对源端进行 ddl 操作。
请勿断开网络和切换源端。
失败:表示校验项检查未通过,任务阻断,需要修复问题后重新执行校验任务。
警告:表示检验项检查不完全符合要求,可以继续任务,但对业务有一定的影响,用户需要根据提示自行评估是忽略警告项还是修复问题再继续。

7. 返回数据同步任务列表,任务开始进入运行中状态。
说明:
选择操作列的更多 > 结束可关闭同步任务,请您确保数据同步完成后再关闭任务。

8. (可选)您可以单击任务名,进入任务详情页,查看任务初始化状态和监控数据。

步骤二、通过 DMC 主动校验数据

数据同步任务创建成功后,从源集群到新集群的数据同步链路会持续进行同步,鉴于后续需要把业务连接到数据库版本为8.0的集群,请不要对源库写入增量数据,以确保源库和新库的校验一致。
2. 在集群列表找到并单击做数据同步的源集群,然后在其集群详情右上方,单击登录
3. 在弹窗下,输入账号密码,进入源集群的 DMC 管理页面。
4. 重新开一个网页,登录 TDSQL-C MySQL 版控制台
5. 在集群列表找到并单击做数据同步的目标集群,然后在其集群详情右上方,单击登录
6. 在弹窗下,输入账号密码,进入目标集群的 DMC 管理页面。
7. 在 DMC 管理页面对比源集群和目标集群的库表等数据,确保数据已全部同步完成。
源集群 DMC 管理页面

目标库 DMC 管理页面


步骤三、业务切换至新集群

数据同步完成并校验一致后,确认不需要源集群之后,您可在实际应用端将业务连接手动更新为新集群的连接地址,然后在 DTS 侧的 数据同步列表 结束对应数据同步任务,最后在 TDSQL-C MySQL 版控制台 删除源集群。
结束同步任务:

说明:
服务结束前,请您确认已无业务依赖此同步服务。
原有已配置的同步任务将会停止。
同步任务将会设置为已停止状态。
对于包年包月的数据同步任务,停止后不会自动退费,如需退费请单击“销毁/退货”。
删除源集群: