网站开发设计思路,wordpress 安装php,wordpress后台很慢,关于做花茶网站的策划书1、Canal实现数据同步
canal可以用来监控数据库数据的变化#xff0c;从而获得新增数据#xff0c;或者修改的数据。
1.1 Canal工作原理 原理相对比较简单#xff1a; 1、canal模拟mysql slave的交互协议#xff0c;伪装自己为mysql slave#xff0c;向mysql master发送…1、Canal实现数据同步
canal可以用来监控数据库数据的变化从而获得新增数据或者修改的数据。
1.1 Canal工作原理 原理相对比较简单 1、canal模拟mysql slave的交互协议伪装自己为mysql slave向mysql master发送dump协议。 2、mysql master收到dump请求开始推送binary log给slave(也就是canal)。 3、canal解析binary log对象(原始为byte流)。 canal需要使用到mysql我们需要先安装mysqlcanal是基于mysql的主从模式实现的所以必须先开启
binlog。
1.2 安装MySQL
# 搜索MySQL镜像
$ docker search mysql# 拉取MySQL镜像
$ docker pull mysql:5.5# 启动MySQL
$ docker run -d -p 3306:3306 -v /home/zhangshixing/linuxmysql/conf:/etc/mysql/conf.d -v /home/zhangshixing/linuxmysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 --name zsxmysq1 mysql:5.5$ docker exec -it fc566f7d1857 /bin/bash$ mysql -h 192.168.94.186 -u root -p1.3 开启binlog模式
(1) 、连接到mysql中并修改 /etc/mysql/my.cnf 需要开启主从模式开启binlog模式。
执行如下命令编辑 mysql 配置文件
$ docker exec -it fc566f7d1857 /bin/bash
# 该目录一定要存在,否则log日志无法写入
$ cd /etc/mysql/
$ vim my.cnf没有vim需要安装vim
$ apt-get update
$ apt-get install vim修改 my.cnf 配置文件添加如下配置
# 开启logbin
log-bin/var/lib/mysql/mysql-bin
# binlog日志格式
binlog-formatROW
# mysql主从备份serverId,canal中不能与此相同
server-id12345(2) 、创建账号用于测试使用使用root账号创建用户并授予权限
# CREATE USER 用户名 [ IDENTIFIED ] BY [ PASSWORD ] 口令
# 用户名格式为 user_namehost_name这里user_name是用户名host_name为主机名
# % 表示一组主机
create user canal% IDENTIFIED by canal;
GRANT SELECT, INSERT, DELETE, UPDATE, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO canal%;
FLUSH PRIVILEGES;(3)、重启mysql容器
$ docker restart fc566f7d1857(4)、查看配置是否生效
$ docker exec -it fc566f7d1857 /bin/bash
$ mysql -h 192.168.94.186 -u canal -p# binlog日志文件
$ show master status;# 查看是否配置成功
$ show variables like binlog_format;查看日志文件 使用Navicat新建canal_test 数据库和t_user_1表。
# 查看日志信息
$ mysqlbinlog -vv mysql-bin.0000011.4 canal容器安装
下载镜像
$ docker pull docker.io/canal/canal-server容器安装
$ docker run -p 11111:11111 --name canal -d docker.io/canal/canal-server进入容器修改核心配置canal.properties 和instance.propertiescanal.properties 是canal自身的
配置instance.properties是需要同步数据的数据库连接配置。
执行代码如下:
$ docker exec -it canal /bin/bash
$ cd canal-server/conf/
$ vim canal.properties
$ cd example/
$ vim instance.properties修改canal.properties的id不能和mysql的server-id重复如下图 修改instance.properties配置数据库连接地址: 这里的canal.instance.filter.regex有多种配置如下
可以参考地址如下:
https://github.com/alibaba/canal/wiki/AdminGuidemysql 数据解析关注的表Perl正则表达式。
多个正则之间以逗号(,)分隔转义符需要双斜杠(\)
常见例子
1、所有表.* or .*\\..*
2、canal schema下所有表canal\\..*
3、canal下的以canal打头的表canal\\.canal.*
4、canal schema下的一张表canal.test1
5、多个规则组合使用canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
注意此过滤条件只针对row模式的数据有效(mixed/statement因为不解析sql所以无法准确提取
tableName进行过滤)。
配置完成后设置开机启动并记得重启canal。
$ docker update --restartalways canal
$ docker restart canal验证配置是否成功
$ docker exec -it canal /bin/bash
$ cd canal-server/logs/example/
# 查看日志
$ tail -100f example.log 1.5 canal服务搭建
当用户执行数据库的操作的时候binlog 日志会被canal捕获到并解析出数据。
1.5.1 安装辅助jar包
在spring-boot-starter-canal-master中有一个工程starter-canal它主要提供了SpringBoot环境下
canal的支持我们需要先安装该工程在starter-canal目录下执行mvn install如下图 1.5.2 canal服务工程搭建
在spring-boot-starter-canal-master中创建一个工程canal-test
pom.xml文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.example/groupIdartifactIdcana-test/artifactIdversion0.0.1-SNAPSHOT/versionpackagingjar/packagingnamecana-test/namedescriptionDemo project for Spring Boot/descriptionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.0.0.RELEASE/versionrelativePath//parentpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdcom.xpand/groupIdartifactIdstarter-canal/artifactIdversion0.0.1-SNAPSHOT/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/projectapplication.yml配置
# canal配置
canal.client.instances.example.host192.168.94.186
canal.client.instances.example.port11111监听创建
创建一个CanalDataEventListener类实现对表增删改操作的监听代码如下
package com.example.canatest.config;import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.*;/*** author zhangshixing*/
CanalEventListener
public class MyEventListener {/*** 增加数据监听** param eventType* param rowData*/InsertListenPointpublic void onEvent1(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {System.out.println(InsertListenPoint);rowData.getAfterColumnsList().forEach((c) - System.out.println(By--Annotation: c.getName() :: c.getValue()));}/*** 修改数据监听** param rowData*/UpdateListenPointpublic void onEvent2(CanalEntry.RowData rowData) {System.out.println(UpdateListenPoint);rowData.getAfterColumnsList().forEach((c) - System.out.println(By--Annotation: c.getName() :: c.getValue()));}/*** 刪除数据监听** param eventType*/DeleteListenPointpublic void onEvent3(CanalEntry.EventType eventType) {System.out.println(DeleteListenPoint);}/*** 自定义数据修改监听** param eventType* param rowData*/ListenPoint(destination example, schema canal_test, table {t_user_1, t_user_2}, eventType CanalEntry.EventType.INSERT)public void onEvent4(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {System.out.println(CustomListenPoint);rowData.getAfterColumnsList().forEach((c) - System.out.println(By--Annotation: c.getName() :: c.getValue()));}
}启动类创建
创建启动类代码如下
package com.example.canatest;import com.xpand.starter.canal.annotation.EnableCanalClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
EnableCanalClient
public class CanaTestApplication {public static void main(String[] args) {SpringApplication.run(CanaTestApplication.class, args);}
}测试
启动canal微服务然后修改任意数据库的表数据canal微服务后台输出信息。
1、插入数据 2、修改数据 3、删除数据 4、自定义插入