厦门建设网站的公司,可以设计什么网站,收到网站建设费分录,网站设计需要哪些技能因为自己项目中需要用到mysql数据同步到es中#xff0c;查找了相关资料最后决定用canal来做#xff0c;所以便有了本文#xff0c;下面一起来看如何使用canal吧canal教程根据 https://github.com/alibaba/canal 上的原理解释#xff0c;我们知道 canal 会模拟 mysql slave …因为自己项目中需要用到mysql数据同步到es中查找了相关资料最后决定用canal来做所以便有了本文下面一起来看如何使用canal吧canal教程根据 https://github.com/alibaba/canal 上的原理解释我们知道 canal 会模拟 mysql slave 的交互协议伪装自己为 mysql slave然后向 mysql master 发送 dump 协议。mysql master 收到 dump 请求开始推送 binary log 给 slave(也就是 canal)然后 canal 解析 binary log 对象(原始为 byte流)。经 canal 解析过的对象我们使用起来就非常的方便了。再根据 https://github.com/alibaba/canal/releases 提供的版本信息你会发现 canal 其实相当于一个中间件专门用来解析 MySQL 的 binlog 日志。canal 解析好了之后会封装成一个数据对象通过 protobuf3.0 协议进行交互让 canal 客户端进行消费。根据上面的解释以及 canal 提供的版本信息我们在使用 canal 的时候首选要安装一个 canal.deployer-1.1.4.tar.gz 进行解析 MySQL 的 binlog 日志。下载后复制 canal.deployer-1.1.4.tar.gz 到 MySQL 主机上比如放在 /usr/local/soft/目录下。然后依次执行下面的命令mkdir canalcd canaltar -zxvf ../canal.deployer-1.1.4-SNAPSHOT.tar.gz然后修改 canal 的配置文件 vim conf/example/instance.properties这三项改成你自己的比如我的配置如下canal.instance.dbUsernamecanalcanal.instance.dbPasswordcanalcanal.instance.connectionCharset UTF-8canal.instance.defaultDatabaseName canal_test然后保存并退出。(VI 模式下按 Esc 输入 :wq 回车退出。)接着我们检查一下 MySQL 的配置。确定版本和是否开启了 binlog 日志以及日志格式。show variables like binlog_format;show variables like log_bin;select version();canal 支持 binlog 格式为 ROW 的模式。如果你没开启 binlog并且格式是非 row 的建议修改一下 mysql 的配置文件。执行 mysql –help | grep my.cnf 找到 mysql 的 my.cnf 文件。执行 vim /etc/my.cnf 命令。添加下面 3 个配置。log-binmysql-bin #添加这一行就okbinlog-formatROW #选择row模式server_id1 #配置mysql replaction需要定义不能和canal的slaveId重复然后保存并退出。接着执行 sudo service mysqld restart 重启 MySQL。需要注意的是你的 mysql 用户必须要有 REPLICATION SLAVE 权限。该权限授予 slave 服务器以该账户连接 master 后可以执行 replicate 操作的权利。如果没有权限则使用 root 账户登录进 MySQL执行下面的语句创建用户分配权限。CREATE USER canal IDENTIFIED BY ‘canal’;GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘‘canal’’’%’;FLUSH PRIVILEGES;MySQL 启动后就可以开启 canal 服务了。/usr/local/soft/canal/bin/startup.sh开启后观察 canal 服务的日志确保服务正常。tail 300f /usr/local/soft/canal/logs/canal/canal.log查看 canal 的日志确定没有问题后开始编写我们的测试程序。pom.xml 中导入下面的依赖。com.alibaba.otter canal.client 1.1.4使用JAVA进行测试import java.net.InetSocketAddress;import java.util.List;import com.alibaba.otter.canal.client.CanalConnectors;import com.alibaba.otter.canal.client.CanalConnector;import com.alibaba.otter.canal.common.utils.AddressUtils;import com.alibaba.otter.canal.protocol.Message;import com.alibaba.otter.canal.protocol.CanalEntry.Column;import com.alibaba.otter.canal.protocol.CanalEntry.Entry;import com.alibaba.otter.canal.protocol.CanalEntry.EntryType;import com.alibaba.otter.canal.protocol.CanalEntry.EventType;import com.alibaba.otter.canal.protocol.CanalEntry.RowChange;import com.alibaba.otter.canal.protocol.CanalEntry.RowData;public class SimpleCanalClientExample {public static void main(String args[]) { // 创建链接 CanalConnector connector CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(), 11111), example