一句话理解核心原理
Canal 就像一个 "数据搬运工":它盯着 MySQL 的变化(比如新增、修改、删除数据),然后把这些变化原原本本地告诉 Elasticsearch,让两者数据保持一致。
简单实现步骤(不用写代码)
1. 让 MySQL"记录自己的操作"
MySQL 默认不会记录数据变化,我们需要让它开启 "日志本"(binlog):
-
找到 MySQL 的配置文件(比如叫 my.cnf)
-
加上这几行配置:
plaintext
log_bin = mysql-bin binlog_format = ROW server_id = 1 -
重启 MySQL,这样它就会把所有数据变化记在 "日志本" 上了
2. 启动 Canal"监控 MySQL"
Canal 就像一个 "监控员",专门看 MySQL 的 "日志本":
-
从官网下载 Canal Server(选个稳定版本,比如 1.1.6)
-
解压后,修改配置文件,告诉它:
- 要监控的 MySQL 地址(比如 127.0.0.1:3306)
- MySQL 的账号密码(专门给 Canal 用的,需要提前创建)
-
双击启动脚本(startup.bat 或 startup.sh),Canal 就开始工作了
3. 启动 Canal Adapter"转发数据"
Canal Adapter 是 "搬运工",负责把 Canal 监控到的变化发给 Elasticsearch:
-
下载 Canal Adapter(和 Canal Server 版本保持一致)
-
解压后,修改两个配置文件:
- 告诉它 Canal Server 的地址(让它能拿到数据变化)
- 告诉它 Elasticsearch 的地址(要把数据搬到哪里去)
- 配置 MySQL 的表和 Elasticsearch 的索引对应关系(比如 MySQL 的 user 表对应 ES 的 user_index)
-
启动 Adapter,它就会自动把 MySQL 的变化同步到 ES 了
4. 测试一下
- 在 MySQL 里新增一条数据:
INSERT INTO user (name, age) VALUES ('张三', 20) - 去 Elasticsearch 里查一下,如果能看到这条数据,就说明同步成功了
为什么不用写 Java 代码?
因为 Canal 官方已经做好了现成的工具(Canal Server 和 Canal Adapter),我们只需要简单配置一下就能用,不用自己写代码实现同步逻辑。
如果以后需要定制化同步规则(比如只同步某些字段),再去学习如何修改配置文件就可以了,入门阶段先掌握这个流程就行~