MySQL主从复制失效之FlinkCDC
相关背景:
场景:在两台linux服务器上MySQL配置了主从复制,并且在主库的服务器上学习flinkcdc。
问题描述
最近学习了flinkcdc,但是发现一年前进行搭建的主从MySQL集群不能进行复制了
解决过程:
提示:这里填写问题的分析:
MySQL的主从复制是在一年前搭建的,一开始认为是时间太长了是不是两个数据库的配置上有问题导致,但是启动slave从库之后发现是两个YES,来来回回测试了和多次test数据库中的数据不能进行主从复制。
百思不得其解时,在无意间发现从库中拥有学习flinkcdc时的flinkcdc_test数据库,然后校验之后发现flinkcdc_test数据库的主从配置是没问题的。
查看主服务器的my.cnf文件后发现了问题,在学习flinkcdc时创建了flinkcdc_test数据库,开启了flinkcdc_test的binlog。将这句话注掉之后重启mysql,并将master的状态更新到从库后发现test数据库的复制好使了。
猜想:
在学习flinkcdc时只对一个数据库的表进行了监控。MySQL的主从复制利用的也是binlog日志,所以进行猜想是不是MySQL开启了log-bin之后flinkcdc的监控程序可以对其他数据库进行监控。经测试,结果如同猜想,可以对其他数据库的数据进行监控。
//1.获取Flink 执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
//通过FlinkCDC构建SourceFunction
DebeziumSourceFunction<String> sourceFunction = MySqlSource.<String>builder()
.hostname("192.168.137.8")
.port(3306)
.username("root")
.password("123456")
.databaseList("flinkcdc_test,test")
.tableList("flinkcdc_test.user,test.test")
.deserializer(new CustomerDeserializationSchema())
.startupOptions(StartupOptions.initial())
.build();
DataStreamSource<String> dataStreamSource = env.addSource(sourceFunction);
//数据打印
dataStreamSource.print();
//启动任务
env.execute("FlinkCDC");
}
运行结果: