MySQL数据同步到数据仓库的方案

由于历史原因,MySQL是使用的最多,也是首选的数据库,但当数据量达到千万级别,并有在线分析的需求时,读大于写,MySQL的响应就会越来越慢,直接检索MySQL不但不能得到快速的响应,反而会影响写入性能。

此时,将MySQL数据同步到数据仓库中,从数据仓库中来检索数据就变得非常有必要了。

方案1:自写程序

自写同步程序,对数据的增删改通过钩子同步写入到数据仓库。

方案2:通过binlog同步

此方案下,有成熟的产品可以使用,比如阿里云的DTS。

再比如阿里云开源的Canal,以增量的方式,将数据同步到ElasticSearch、ClickHouse等数据库中。

重点说下Canal方案,同步MySQL数据到ElasticSearch,步骤

  1. 准备MySQL数据源
  2. 为ElasticSearch创建索引和mapping
  3. 部署并启动Canal Server
  4. 部署并启动Canal Adapter

这些完成后在MySQL中增删改数据,就会同步到ElasticSearch中。

注意点:

  1. 必须使用阿里云的RDS和ElasticSearch,自建的不支持,为保证同步效率,最好使用同区域的ECS。PS:没有免费的午餐,阿里云不是白提供工具的。。。
  2. 不支持ElasticSearch7以上的版本(2021.11.06),推荐6.7版本
  3. 需要先在ElasticSearch创建索引和mapping info
  4. 服务开启后,新插入的数据会同步,update的数据同步的前提是ElasticSearch中有相应的记录。所以对于老数据,需要手动同步先。
  5. 需要同步哪个表,就在Adapter下conf/es/目录下新建一个与表名相同的yml文件,文件名不同时会提示找不到对应的mapping info

参考文档

  1. 通过Canal将MySQL数据同步到阿里云Elasticsearch

Leave a Comment

豫ICP备19001387号-1