云服务器内容精选

  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:An error occurred in the process DATAMOVE, caused by: apply event=[type=table_data, shard_id=0, batch_index_in_shard=1, table_name=%s, record_num=1] occur error, msg=apply data of table=%s failed: Data truncation: Invalid GIS data provided to function st_geometryfromtext.
  • 如何确保业务数据库的全部业务已经停止 业务切换时可通过如下方法确保业务数据库的全部业务已经停止: 在源数据库端执行如下语句,查看当前是否还存在有业务连接 。 show processlist; 图1 查看是否存在业务连接 可选:如果源数据库有业务连接,则通过结果中Host列的值来查找对应的业务进程并将其停止。 在源库执行如下语句,查看binlog位置并记录该值(file列取值:position列取值 ),此处将该值记为ckpt1。 show master status; 图2 查看binlog位置 等待30s以上,在源库执行如下语句,查看binlog位置并记录该值(file列取值:position列取值 ),此处将该值记为ckpt2。ckpt1=ckpt2时,表示源数据库业务已基本停写。 show master status; 父主题: 实时迁移
  • 解决方案 通过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添加或修改成功后,选择一个非业务时间段,重启源数据库即可。
  • 迁移准备 权限准备: 当使用 DRS 将ECS自建MongoDB数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表1: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库权限设置: 需要确保源数据库MongoDB的账号权限具备表1的要求。若权限不足,需要在源数据库端开通高权限的账号。 目标数据库权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库所在的region需要和目标DDS所在的region保持一致。 源数据库可以与目标DDS实例在同一个VPC,也可以不在同一个VPC。 当不在同一个VPC的时候,要求源数据库实例和目标端DDS实例所处的子网处于不同网段,此时需要通过建立对等连接实现网络互通。 具体操作请参见《虚拟私有云用户指南》中“VPC对等连接”章节。 当在同一VPC的时候,网络默认是互通的。 安全规则准备: 同一VPC场景下,默认网络是连通的,不需要单独设置安全组。 不同VPC场景下,通过建立对等连接就可以实现网络互通,不需要单独设置安全组。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后,手动添加到目标DDS中。
  • 迁移准备 权限准备: 当使用 DRS 将本地数据库的数据迁移到本云云数据库 RDS for MySQL 实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表1所示: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 SELECT、SHOW VIEW、EVENT。 SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库 SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFERENCES、WITH GRANT OPTION。 当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。 用户迁移时,需要有mysql库的SELECT、INSERT、UPDATE、DELETE权限。 源数据库的权限设置: 需要确保源数据库MySQL的账号具备表1的权限,若权限不足,需要在源数据库端创建高权限的账号。 目标数据库的权限设置: 本云云数据库 RDS for MySQL使用初始账号即可。 网络准备: 源数据库的网络设置: 本地MySQL数据库实时迁移至本云云数据库 RDS for MySQL的场景,一般可以使用VPN网络和公网网络两种方式进行迁移,您可以根据实际情况为本地MySQL数据库开放公网访问或建立VPN访问。一般推荐使用公网网络进行迁移,该方式下的数据迁移过程较为方便和经济。 目标数据库的网络设置: 若通过VPN访问,请先开通华为VPN服务,确保源数据库MySQL和目标端本云云数据库 RDS for MySQL的网络互通。 若通过公网网络访问,本云云数据库 RDS for MySQL实例不需要进行任何设置。 安全规则准备: 源数据库的安全规则设置: 若通过公网网络进行迁移,源数据库MySQL需要将DRS迁移实例的弹性公网IP添加到其网络白名单内,使源数据库与本云的网络互通。在设置网络白名单之前,需要获取DRS迁移实例的弹性公网IP,具体方法如下: DRS迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的弹性公网IP。 图4 迁移实例EIP 若通过VPN网络进行迁移,源数据库MySQL需要将DRS迁移实例的私有IP添加到其网络白名单内,使源数据库与本云的网络互通。DRS迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的私有IP。 以上白名单是为了进行迁移针对性设置的,迁移结束后可以删除。 目标数据库安全组规则设置: 目标数据库默认与DRS迁移实例处在同一个VPC,网络是互通的,DRS可以直接写入数据到目标数据库,不需要进行任何设置。 其他事项准备。 DRS支持部分与业务和性能强相关的参数迁移,具体参数列表请参见参数列表。若涉及其他参数需要根据用户具体的业务进行手动设置。
  • 响应示例 状态码: 200 OK { "message" : "SUCCESS", "user_list" : [ { "id" : "admin.testuser2", "account" : "admin.testuser2", "comment" : "", "privileges" : null, "password" : null, "roles" : [ "admin.clusterAdmin" ], "selected" : null, "is_transfer" : true }, { "id" : "admin.test_inc_admin_mgo", "account" : "admin.test_inc_admin_mgo", "comment" : "", "privileges" : null, "password" : null, "roles" : [ "mgo.read", "admin.readAnyDatabase", "local.read" ], "selected" : null, "is_transfer" : true }, { "id" : "fastunit.test_full_fastunit_noread", "account" : "fastunit.test_full_fastunit_noread", "comment" : "", "privileges" : null, "password" : null, "roles" : [ "admin.readAnyDatabase" ], "selected" : null, "is_transfer" : true }, { "id" : "admin.test_full", "account" : "admin.test_full", "comment" : "", "privileges" : null, "password" : null, "roles" : [ "fastunit.read", "admin.readAnyDatabase" ], "selected" : null, "is_transfer" : true } ], "roles_list" : [ { "role" : "admin.roletest4", "comment" : "", "privileges" : "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* GRANT XA_RECOVER_ADMIN ON *.*", "selected" : null, "is_transfer" : true, "inherits_roles" : [ "admin.roletest1", "admin.roletest3", "fastunit.roletest1" ] } ] }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 job_id String 任务ID。 is_global_password String 是否使用全局密码。 message String 错误码。 user_list Array of objects 用户列表数据。 详情请参见表4。 roles_list Array of objects 角色列表数据。 详情请参见表5。 is_success Boolean 是否成功。 表4 user_list字段数据结构说明 参数 参数类型 描述 id String 用户账号ID。 account String 账号。 comment String 说明。 is_transfer Boolean 是否支持迁移。 privileges String 权限。 password String 密码。 roles Array of strings 拥有的角色 selected Boolean 是否选择。 no_privileges String 无法同步的用户权限。 parent_account String 父用户。 no_parent_account String 无法同步父子关系的父用户。 表5 roles_list字段数据结构说明 参数 参数类型 描述 role String 角色。 comment String 说明。 is_transfer Boolean 是否支持迁移。 privileges String 权限。 inherits_roles Array of strings 继承的角色。 selected Boolean 是否选择。
  • RDS for MySQL不支持MyISAM引擎表,迁移时MyISAM如何处理 基于以下原因,RDS for MySQL目前不支持MyISAM引擎。 MyISAM引擎表不支持事务,仅支持表级别锁,导致读写操作相互冲突。 MyISAM对数据完整性的保护存在缺陷,且这些缺陷会导致数据库数据的损坏甚至丢失。 MyISAM在出现数据损害情况下,很多都需要手动修复,无法通过产品服务提供的恢复功能进行数据恢复。 MyISAM向InnoDB的迁移透明,大多数情况不需要改动建表的代码,云数据库自动转换InnoDB即可完成迁移。 DRS在迁移过程中,会自动将MyISAM转换为InnoDB。针对MyISAM引擎表不支持事务这一特点,为了确保MyISAM表的数据一致性, DRS会借助主键来实现最终数据的一致。如果需要迁移没有主键的MyISAM表,建议选择无业务期启动迁移任务,以确保数据的一致性。 父主题: 实时迁移