mysql 海量数据迁移_Canal解决MySQL海量数据迁移问题

bc3f9276acf88283a0569b9b9ef9ee92.png

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

模拟的业务场景:

大型电子商务网站需要每天分析每日交易量。如果使用mysql进行分析,它将非常慢,甚至会导致mysql崩溃。要分析海量数据,您需要将mysql中的数据同步到其他海量数据存储介质(HDFS,hbase)。如何出口呢?

sqoop解决方案一:

mysql 海量数据迁移_Canal解决MySQL海量数据迁移问题_第1张图片

使用sqoop定期将mysql数据导出到hbase或hdfs

Sqoop导出mysql数据,需要通过sql语句查询数据,然后执行导出

存在的问题

MySQL承受着很大的压力。当sqoop再次执行查询时,它需要执行sql查询。为了增加mysql的压力,mysql的速度较慢

Logstash解决方案二

mysql 海量数据迁移_Canal解决MySQL海量数据迁移问题_第2张图片

通过logstash将mysql数据提取到kafka

在logstatsh中编写一条SQL语句,以从mysql查询数据

存在的问题

Logstash还需要在mysql中执行sql语句,这也会增加mysql的压力并降低mysql的速度

渠道解决方案三

mysql 海量数据迁移_Canal解决MySQL海量数据迁移问题_第3张图片

运河来解析mysql中的binlog日志以获取数据

无需使用SQL查询mysql,就不会增加mysql的压力

实际步骤:

建议使用sqlyog创建数据库,创建表

创建数据库

创建数据库表

mysql打开binlog

Binlog日志介绍

用于记录mysql中的添加,删除,修改操作

选择操作将不会保存在binlog中

您必须在mysql中打开binlog函数以生成binlog日志

binlog日志是一系列二进制文件

打开binlog

步骤

修改mysql配置文件并添加binlog支持

重新启动mysql并检查binlog是否已成功配置

实施

使用vi打开/etc/my.cnf

添加以下配置

[mysqld]

log-bin =/var/lib/mysql/mysql-bin

binlog-format = ROW

server_id = 1

配置说明

#配置binlog日志到/var/lib/mysql目录的存储路径,文件以mysql-bin开始

log-bin =/var/lib/mysql/mysql-bin

配置mysql中每行记录的更改将详细记录

binlog-format = ROW

配置当前计算机的服务ID(如果它是mysql集群,则无法重复)

server_id = 1

6.重新启动mysql

服务mysql重新启动

7.使用mysql-u root-p登录mysql并执行以下命令

显示类似”%log_bin%”的变量;

8.mysql输出以下内容,表明binlog已成功打开

mysql 海量数据迁移_Canal解决MySQL海量数据迁移问题_第4张图片

9.转到/var/lib/mysql,您可以看到已经生成了mysql-bin.000001文件

运河原则

mysql 海量数据迁移_Canal解决MySQL海量数据迁移问题_第5张图片5

10.Canal模拟mysql slave的交互协议,假装是mysql slave

11.发送转储协议给mysql master

12.mysql主服务器接收转储协议,并将二进制日志发送到从服务器(运河)

13.运河解析二进制日志字节流对象

运河获取程序构建

使用Java语言解析运河中的binlog日志并将其写入Kafka

mysql 海量数据迁移_Canal解决MySQL海量数据迁移问题_第6张图片

编写配置文件加载代码

创建GlobalConfigUtil工具类,并在application.properties中读取运河和kafka配置

添加main方法以测试是否可以正确读取配置

实施

创建GlobalConfigUtil以读取application.properties中的配置。使用以下代码读取application.properties中的配置

在application.properties中阅读运河和kafka配置

编写主要方法来测试是否可以正确读取配置

参考代码

注意:

使用ResourceBundle.getBundle(”应用程序”,Locale.ENGLISH);读取application.properties即可读取配置文件,无需输入后缀名

编写Kafka工具类代码KafkaSender.java

渠道解析binlog日志工具代码

1.解析mysql中的binlog日志

2.将已解析的数据写入Kafka

测试工具类代码

启动mysql

运河

启动Zookeeper集群

启动kafka集群

在kafka中创建运河主题

bin/kafka-topics.sh-创建–zookeeper cdh1:2181-复制因子2-分区3-主题运河

启动Kafka控制台使用者程序

bin/kafka-console-consumer.sh–zookeeper cdh1:2181–from-beginning–topic运河

启动工具渠道同步程序

打开sqlyog并将一些数据插入mysql

如果您可以看到以下以kafka印刷的消息,则表明运河一直在正常运行

配置文件如下:

你可能感兴趣的:(mysql,海量数据迁移)