随着云计算的兴起,越来越多的企业考虑到数据库的稳定性和运维成本,会将运行在本地服务器或是其他虚拟服务器上的数据库迁移到云上,我们推荐您使用DTS来进行迁移。下面将结合案例按照迁移评估、迁移准备、迁移操作、业务切换、验证等步骤详细介绍DTS迁移方案。
通过实时同步方式,使用户迁移过程不会影响正常业务,并可实现秒级别停机切换。具体步骤如下:
在源实例入口对DTS服务器进行授权,允许DTS服务从源数据库中读取数据和拉取增量;
源实例需要开启ROW格式的binlog,以便可以实时同步增量数据(5.1及以上版本支持);
注意:如果源入口使用开启ROW格式的从库作为同步源时,在动态修改binlog格式之后,需要重启一下从库的同步线程以便让修改binlog格式生效。
使用DTS来进行结构+全量+增量数据的迁移,具体操作步骤详见数据迁移。
停止应用程序写入,等到新数据库和老主库的数据一致后,修改应用程序的数据库访问地址,并开始写入。
结束DTS迁移任务,从而完成上云迁移。
适用于业务需要不停机迁移上云场景的用户
数据库作为应用程序中的关键组件之一,将数据库迁移到新的平台是一项非常大的变动,可能影响到程序的功能、稳定性和性能,所以在迁移之前必须进行充分的调研和测试。迁移的阶段包含如下:
数据迁移前需要评估迁移前后对业务及应用程序的影响,包括:
迁移准备工作主要指迁移之前需要完成4项检查:授权检查、检查BINLOG格式、数据表是否有主键和sql_mode检查。
在源数据库中对DTS服务器增加授权。
GRANT SELECT,LOCK TABLES,SUPER,REPLICATION SLAVE,REPLICATION CLIENT,SHOW VIEW on *.* to _dts_trans_@'%' identified by 'your_password'
;不同迁移类型需要的权限说明如下:mysql -h 源数据库ip -P 源数据库端口 -u 用户名 -p密码
使用账号密码的方式连接mysql,登录成功之后,执行SHOW GRANTS FOR _dts_trans_@'%'
查看账号权限。检查源数据库的BINLOG格式。
mysql -h 源数据库ip -P 源数据库端口 -u 用户名 -p密码
查看源库的BINLOG是否已经开启。show variables like 'log_bin'
查看log_bin是否打开。show master logs
查看是否已经有binlog在实时写入。show variables like 'binlog_format'
检查binlog格式是否改成ROW格式。正常的检查结果如下:
注意:
如果源数据库选择的是MYSQL的一个从库,而且通过动态方式修改binlog_format(set global binlog_format='ROW';),必须重启同步线程(stop slave; start slave;)从而让ROW格式正式生效。
若源库为自建数据库单实例,在修改binlog格式后,需排查并kill源库的长连接,以保证binlog格式生效。
最好的方式执行mysql/bin/mysqlbinlog mysql-bin.000040
查看最新的binlog内容是否已经被改成了ROW格式。出现如下红框中的类似内容(非sql可读的内容)说明已经修改成功。
检查要迁移的数据库中的表是否有主键
为保障迁移过程更加顺利,我们要求迁移的表必须有主键,这样在全量迁移过程中由于网络或其他原因导致的中断可以断点续传,确保迁移进度可控。检查方法如下:
mysql -h 源数据库ip -P 源数据库端口 -u 用户名 -p密码
命令连接数据库。select * from information_schema.TABLE_CONSTRAINTS where TABLE_SCHEMA='db1' and TABLE_NAME='t1' and CONSTRAINT_TYPE='PRIMARY KEY'
或show create table db1.t1
查看是否有主键。检查sql_mode配置
由于部分情况的sql_mode有潜在数据不一致的风险,sql_mode需要设置为如下集合中的某一项或某几项。
合法的sql_mode集合("", "REAL_AS_FLOAT", "PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "ONLY_FULL_GROUP_BY", "NO_UNSIGNED_SUBTRACTION", "NO_DIR_IN_CREATE", "POSTGRESQL", "ORACLE", "MSSQL", "DB2", "MAXDB", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS", "MYSQL323", "MYSQL40", "ANSI", "NO_AUTO_VALUE_ON_ZERO", "NO_BACKSLASH_ESCAPES", "STRICT_TRANS_TABLES", "STRICT_ALL_TABLES", "NO_ZERO_IN_DATE", "NO_ZERO_DATE", "ALLOW_INVALID_DATES", "ERROR_FOR_DIVISION_BY_ZERO", "TRADITIONAL", "HIGH_NOT_PRECEDENCE", "NO_ENGINE_SUBSTITUTION", "PAD_CHAR_TO_FULL_LENGTH", "NO_AUTO_CREATE_USER")
我们推荐登录成功后执行命令set global sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
进行模式设置。
在百度智能云的RDS服务中创建数据库实例,创建方法参见登录并创建RDS for MySQL实例。
进入DTS产品页面点击新建迁移任务
填写源数据库和目标数据库信息。
选择需要迁移的库表
查看检查结果通过后,启动迁移
查看任务进度和增量延迟情况
结构迁移进度详情:
全量迁移进度详情:
增量迁移进度详情:
进行到增量数据迁移阶段,并且延迟为0的情况,就说明已经追上同步,下一步开始切流量。
业务需验证应用程序正常功能是否可用,观察业务程序错误日志。观察RDS数据库负载情况,如果发现容量不足,需及时扩容,补充只读副本 迁移完成。至此,数据库上云迁移流程全部完成,切换流量前如需数据校验,可联系DTS同学发起数据校验流程,进一步保障上云前后的数据一致性。
云服务器BCC:高性能、高可靠、安全稳定的弹性计算服务
云数据库 SCS:兼容 Redis、Memcached 协议的分布式缓存服务
云数据库 RDS:专业、高性能、高可靠的关系型数据库
云数据库 DocDB for MongoDB:兼容 MongoDB 协议的文档数据库服务