docker docker-compose.yml 部署canal和部署 mysql 8.0.30 将mysql同步rabbitmq 并且在yml文件中配置canal 的example和创建rabbitmq队列
时间: 2024-03-26 10:35:17 浏览: 174
好的,我会尽力回答你的问题。首先,我们需要编写一个 Docker Compose 文件来部署 Canal 和 MySQL 8.0.30。
1. 部署 Canal 和 MySQL 8.0.30
下面是一个简单的 Docker Compose 文件,用于启动 Canal 和 MySQL 8.0.30:
```
version: '3'
services:
mysql:
image: mysql:8.0.30
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=test
- MYSQL_USER=test
- MYSQL_PASSWORD=test
canal:
image: canal/canal-server:v1.1.4
ports:
- "11111:11111"
- "11112:11112"
depends_on:
- mysql
environment:
- canal.instance.master.address=mysql:3306
- canal.instance.dbUsername=root
- canal.instance.dbPassword=123456
- canal.instance.connectionCharset=UTF-8
```
2. 将 MySQL 同步到 RabbitMQ
我们可以使用 Logstash 来将 MySQL 的 binlog 数据同步到 RabbitMQ。以下是 Logstash 的配置文件示例:
```
input {
jdbc {
jdbc_driver_library => "/usr/share/java/mysql-connector-java.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://mysql:3306/test"
jdbc_user => "test"
jdbc_password => "test"
statement => "SELECT * FROM mytable"
}
}
output {
rabbitmq {
host => "rabbitmq"
exchange => "my_exchange"
exchange_type => "direct"
key => "my_key"
durable => true
user => "guest"
password => "guest"
}
}
```
这里,我们首先使用 JDBC 输入插件来读取 MySQL 数据库中的数据。然后,使用 RabbitMQ 输出插件将数据发送到 RabbitMQ 中。
3. 在 yml 文件中配置 Canal 的 example
要配置 Canal 的示例,请添加以下行到 Canal 服务的环境变量中:
```
- canal.instance.filter.regex=.*\\..*
- canal.instance.filter.black.regex=mysql\\.slave_.*,mysql\\.innodb_.*
- canal.instance.filter.table.regex=test\\..*
- canal.instance.filter.druid.ddl=true
- canal.instance.filter.query.dcl=false
- canal.instance.filter.query.dml=false
```
这将启用 Canal 的示例,并过滤掉一些不需要的数据。
4. 创建 RabbitMQ 队列
要创建 RabbitMQ 队列,请使用以下命令:
```
docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3
docker exec -it some-rabbit /bin/bash
rabbitmqctl add_user guest guest
rabbitmqctl set_permissions -p / guest ".*" ".*" ".*"
rabbitmqctl add_exchange my_exchange direct
rabbitmqctl add_queue my_queue
rabbitmqctl bind_queue my_queue my_exchange my_key
```
这将创建一个名为 `my_queue` 的队列,并将其绑定到名为 `my_exchange` 的交换机上,使用 `my_key` 作为路由键。
希望这些信息可以帮助到你。
阅读全文
相关推荐

















