Oracle/云MySQL/MsSQL“大迁移”真相及最优方案

  • 时间:
  • 浏览:2
  • 来源:新睿资源网 - 专注共享小易资源收集博客技术

最近一段时间碰到就说 数据迁移的项目,如:Oracle迁移到MySQL,MsSQL迁移到MySQL,云MySQL迁移到本地MySQL。对于这方面做了系统的分发。包括:迁移方案的选用、要怎样出先迁移遇到的坑、要怎样修改MySQL参数获取最大性能,加入分库分表的需求要怎样实现?文章的最后,作者做了就说 可行性的总结,码字不易,是是因为对您有帮助,感谢转发。

迁移方案的选用:


抛开业务逻辑的因素,根据不同的版本、不同平台、不同停机时间需求,有不同的可选路径决定迁移方

法和工具:

迁移办法优点缺点
SQL LOAD操作简单、波特率快、选用数据范围灵活需自定义开发批量操作、对于CLOB等特殊字段无法支持
OGG商用软件,广泛的数据库平台支持、灵活的qq克隆好友 架构、基于日志的实时数据同步、稳定性高对维护技能有一定的要求、费用高
ETL 软件使用方便简单、定时同步批量处置小量表需定制化配置
MYSQL移植工具安装简单、可自动创建表不可定制、技术支持较弱
定制迁移工具可宽度定制,保证最佳性能和最短停机时间暂无



是是因为不同的数据库版本、不同的组件安装、不同的应用开发型态删改都是是是因为迁移计划的错综错综复杂和差异性。

调研中,除了OGG,有几条MySQL迁移的工具,推荐的比较多,要怎样让收费的。

【工具:OGG (goldengate) 

并肩支持Oracle,Mssql 迁移到 MySQL 上

参数:filter,COMPUTE 进行分库分表逻辑】

● SQLyog

   (https://www.webyog.com/product/sqlyog)

● Navicat Premium

  (https://www.navicat.com/products/navicat-premium)

● Mss2sql

   (http://www.convert-in.com/)

● DB2DB

   (http://www.szmesoft.com/DB2DB)

选用迁移软件,需用要考虑 软件易用性, 处置波特率和内存占用,数据删改性。这主次不得劲要。

以上四款软件中:

1. 最不推荐使用的是 Navicat Premium,主要是是因为是数据的删改性表现较差,转换后的数

据不会 立即用于生产环境,需用进程员仔细自行查找是是因为和分析。

2. SQLyog 有较好的数据删改性,但整体处置波特率非常的慢,是是因为数据较大的情况下,需用浪费非常多宝

贵的时间。比较推荐的是

3. DB2DB,处置波特率,数据删改性,整体表现较好,操作起来我我觉得方便。

我自己趋向于自己写python脚本。

迁移中会占据 那先 细节上的间题?


1. 字符集

字符集转化:Oracle字符集AL32UTF8,ZHS16GBK,转添加MySQL支持的字符集Latin1,utf8,utf8mb4(emoji的表情符)

Mysql对于字符集里有两个多 概念:有两个 是”Character set”没办法 是”Collations”。

Collations:Mysql对字符的比较,排序规则 

Character set:字符的编码办法

2. 字段类型

Oracle Row, Clob,BINARY_DOUBLE类型转化成MySQL支持的字段类型。

如:Oracle CLOB字段最大长度4G对应MySQL LONGTEXT 等等,但就说 把数据那先 数据迁移到MySQL上,不会 想象到会占据 那先 事情。

3. 主键

就说 源表没办法 设置主键, 但对于MySQL来说主键的意思非常大,不得劲是qq克隆好友 环节里。

4. 迁移时间和数据量 

对于现在在线不间断提供的业务非常重要,按照你这些 指标不会 制定全量是是因为增量办法进行迁移。

5. 考虑因素

除了以上内容源数据库还有账号、视图、存储过程、函数、触发器,索引等,同样就说 得劲要,删改都是需用考虑的有两个 因素。

6. 校验数据

你这些 关最后门卡,当数据迁移完成后,要怎样确保数据的正确迁移、没办法 遗漏和错误是有两个 很难的间题。这里的难删改都是实现起来困难,就说 要把它自动化,达到节省人力的目标不得劲难,是是因为两者的数据类型不同,数据量偏大,写就说 脚本去做检查效果不大。

数据的删改性验证是十分重要的,千万太大怕验证到错误不会花好长前一天去抽取同步的操作你这些 步。是是因为一旦没办法 验证到错误,让数据进行了使用却乱掉了,后果将更严重。

一般场景下删改都是对应查询数据行数count来判断数据的否有占据 间题。或则 是用create_time时间字段进行验证数据。或则抽取主次数据进行验证。还有导入过程中的log和警告 ,errors 等信息。

MySQL就说 性能参数

不会 在导入数据的前一天预先修改就说 参数,来获取最大性能的处置,比如不会 把自适应hash关掉,Doublewrite关掉,要怎样让调整缓存区,log文件的大小,把能变大的都变大,把能关的都关掉来获取最大的性能,接下来说几条常用的:

1. innodb_flush_log_at_trx_commit

  • 是是因为innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,要怎样让log file的flush(刷到磁盘)操作并肩进行。该模式下,在事务提交时,太大主动触发写入磁盘的操作。
  • 是是因为innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL删改都是把log buffer的数据写入log file,要怎样让flush(刷到磁盘)中去。
  • 是是因为innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL删改都是把log buffer的数据写入log file。要怎样让flush(刷到磁盘)的操作太大会并肩进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

注意:是是因为进程调度策略间题,你这些 “每秒执行一次 flush(刷到磁盘)操作”并删改都是保证100%的“每秒”。

2. sync_binlog

  • sync_binlog 的默认值是0,像操作系统刷其它文件的机制一样,MySQL太大同步到磁盘中去,就说 依赖操作系统来刷新binary log。
  • 当sync_binlog =N (N>0) ,MySQL 在每写N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。

注意:是是因为启用了autocommit,没办法 每有两个 句子statement就会有一次写操作;要怎样让每个事务对应有两个 写操作。

3. max_allowed_packet

  • 在导大容量数据不得劲是CLOB数据时,是是因为会出先异常:“Packets larger than max_allowed_packet are not allowed”。这是是是因为MySQL数据库有两个多 系统参数max_allowed_packet,其默认值为1048576(1M),不会 通过如下句子在数据库中查询其值:show VARIABLES like ‘%max_allowed_packet%’; 
  • 修改此参数的办法是在MySQL文件夹找到my.cnf文件,在my.cnf文件[MySQLd]中添加一行:max_allowed_packet=16777216

4. innodb_log_file_size

InnoDB日志文件太大,会影响MySQL崩溃恢复的时间,太小会增加IO负担,就说 亲戚朋友要调整要花费的日志大小。在数据导入时先把你这些 值调大就说 。处置无谓的buffer pool的flush操作。但就说 能把innodb_log_file_size开得太大,会明显增加 InnoDB的log写入操作,要怎样让会造成操作系统需用更多的Disk Cache开销。

5. innodb_log_buffer_size

InnoDB用于将日志文件写入磁盘时的缓冲区大小字节数。为了实现较高写入吞吐率,可增大该参数的默认值。有两个 大的log buffer让有两个 大的事务运行,不需用在事务提交前写日志到磁盘,要怎样让,是是因为你有事务比如update、insert是是因为delete 就说 的记录,让log buffer 足够大来节约磁盘I/O。

6. innodb_buffer_pool_size

你这些 参数主要缓存InnoDB表的索引、数据、插入数据时的缓冲。为InnoDN加速优化首要参数。一般让它等于你所有的innodb_log_buffer_size的大小就不会 ,innodb_log_file_size要越大越好。 

7. innodb_buffer_pool_instances

InnoDB缓冲池拆分成的区域数量。对于数GB规模缓冲池的系统,通过减少不同进程读写缓冲页面的争用,将缓冲池拆分为不同实例有有助于于改善并发性。

分库分表方案


现在加难度加入分库分表需求。

你这些 情况建议选用传统的办法写有两个 迁移进程,读源数据库,通过上面件写入目标库db1,db2,db3里

是是因为源数据源设计的合理删改不会 用全量+增量办法实现。如下图所示

我我觉得你这些 办法很灵活,自行控制,但删改都是缺点,所有业务逻辑,分库分表方案,验证都需用手动编写

下次不会 在不同的平台下使用。

现在业界比较常用的分库分表的上面件有本身:

  • proxy形,如:基于阿里开源的Cobar产品而研发的mycat, 需用部署另外服务器,作为分库分表的代理,对外服务,饱含分库分表的配置信息,现在版本是mycat2.0。 
  • client形式,如当当出的sharding-jdbc,现在有京东金融进行维护,现在版本sharding-jdbc4.0开发中。是jar包,使用非常方便。我自己趋向于Sharding-JDBC,你这些 办法,太大额内部管理署,替换原有jdbc,DBA也太大改变原有的运维办法,减轻了DBA的任务。

总结


1. 一定要选用要花费你的迁移工具,没办法 哪有两个 工具是最好的。

2. 数据的检验非常重要,有的前一天亲戚朋友迁过去很开心,校验时占据 错误,你这些 前一天需用要重来。

3. 重复地迁移是很正常的,合乎每次迁移是是因为需用很长时间,总会是有错误的,要做好再迁的心态

4. 迁移过程中的日志记录非常重要,一段出先故障,不会 再间题点现在现在开始 了了继续进行迁移。

本文由

数据和云

发布在

ITPUB

,转载此文请保持文章删改性,并请附上文章来源(ITPUB)及本页链接。

原文链接:http://www.itpub.net/2019/05/20/1910/