docker 安装logstash 并实现 docker中的mysql数据 基于binlog日志同步

在 macOS M1,Docker, MySQL, Logstash 和 Elasticsearch 的安装和配置相对更为复杂,因为这是基于 ARM 架构的设备。下面是一个可能的步骤指南。请注意,这需要您已经在 MacOS M1 上安装并配置了 Docker。

1. 创建并配置 MySQL 容器

首先,您需要在 Docker 中设置并运行一个 MySQL 容器,并且需要启用 binlog 日志。可以通过以下 Docker 命令创建 MySQL 容器:

  1. docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql/mysql-server:8.0.23

然后进入 MySQL 容器调整设置:

  1. docker exec -it mysql bash

在此处,您需要编辑 /etc/my.cnf (或者是 /etc/mysql/my.cnf) 文件,并添加以下内容来启用 binlog:

  1. [mysqld]
  2. server-id = 1
  3. log_bin = /var/log/mysql/mysql-bin.log
  4. binlog_format = ROW
  5. expire_logs_days = 10
  6. max_binlog_size = 100M

然后重启MySQL容器:

  1. docker restart mysql

2. 创建 Elasticsearch 容器

接下来,我们将在 Docker 中创建 Elasticsearch 容器。使用以下 Docker 命令:

  1. docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.0

3. 创建 Logstash 容器

然后我们需要创建并配置 Logstash 容器。您可以在 Docker 中使用以下命令创建 Logstash 容器:

  1. docker run -d --name logstash -p 5000:5000 -v /path/to/config-dir:/usr/share/logstash/config logstash:7.8.0

在这里,/path/to/config-dir 需要替换为主机上包含 Logstash 配置文件的目录的路径。

4. 配置 Logstash

然后,需要在 Logstash 配置文件中配置输入 (input)、过滤器 (filter) 以及输出 (output)。您可以尝试以下的配置,但请根据实际的数据库和表格名称等信息进行修改:

  1. input {
  2. jdbc {
  3. jdbc_driver_library => "mysql-connector-java-5.1.47-bin.jar"
  4. jdbc_driver_class => "com.mysql.jdbc.Driver"
  5. jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
  6. jdbc_user => "root"
  7. jdbc_password => "root"
  8. jdbc_default_timezone => "Asia/Shanghai"
  9. statement => "SELECT * from xxx"
  10. }
  11. }
  12. output {
  13. elasticsearch {
  14. hosts => ["elasticsearch:9200"]
  15. index => "index"
  16. }
  17. stdout {
  18. codec => rubydebug
  19. }
  20. }

在上述配置中,我们假设您运行 Logstash 的命令中路径 /path/to/config-dir 下有 MySQL JDBC 驱动 mysql-connector-java-5.1.47-bin.jarjdbc_connection_string 中的数据库是 test,用户名和密码都是 root;并且需要同步的表的名字是 xxx

5. 运行 Logstash 容器

完成 Logstash 配置后,运行以下命令来启动 Logstash 容器:

  1. docker start logstash

最后,为了确保所有容器能互相通信,需要在一个相同的 Docker 网络中运行 MySQL、Elasticsearch 和 Logstash。上述所有操作中,在每个 docker run 命令后面添加 --network=<your-network> 选项即可。

现在,基于 binlog 的 MySQL 数据应该可以同步到 Elasticsearch 中了。

请注意,这里提供的是一套基本的步骤和示例配置,它可能需要根据您实际的应用环境以及应用需求进行一定的调整来满足您的需求。