ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

快速构建 Debezium MySQL Example 数据库

快速构建 Debezium MySQL Example 数据库
《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。

Debezium 官方提供的 MySQL Example 数据库是一个很好的工具,它内置了一个名为 inventory 的数据库,且已经配置好了 binlog,在测试 CDC 方案时非常有用,同时,它又可以基于 Docker 快速部署,所以使用起来就更方便了。本文专门介绍一下这个数据库的使用的方法。

本文操作预设本地已安装并配置好了 docker,如需先行安装 docker,请参考 《Apache Kafka 基于 S3 的数据导出、导入、备份、还原、迁移方案》一文第4节提供的 Shell 脚本。

1. 启动 MySQL Server 端


# stop container if running
docker container stop $(docker ps -aqf "name=mysql")
# remove container
docker container rm $(docker ps -aqf "name=mysql")
# start container
docker run -d --rm \--name mysql \-p 3307:3306 \-e MYSQL_ROOT_PASSWORD=Admin1234! \-e MYSQL_USER=mysqluser \-e MYSQL_PASSWORD=Admin1234! \debezium/example-mysql:1.0

备注:为避免和本地安装的 MySQL Server 冲突,此处特意将端口改为了3307

2. 启动 MySQL Client 端


docker run -it --rm \--name mysqlterm \--link mysql \mysql:5.7 \sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

备注:--link可以通过 “容器名” 互相通信,容器间共享环境变量,该参数用来解决:两个容器通过ip地址连接时容器 IP 地址会变动的问题,mysql 命令行中使用的环境MYSQL_PORT_3306_TCP_ADDRMYSQL_PORT_3306_TCP_PORT均为 link 了 name 为 mysql 的这个容器(就是上面启动的 Server 端容器)后,从该容器传递过来的环境变量,也就是 Server端容器的 IP 地址和 Port。

附录:Docker 知识点


启动 MySQL Server 端和 Client 端的 docker 命令是 -d-it 两个参数特别好的示例!因为两者的启动模式恰好就是这两种参数各自典型的应用场景!简单地说:

  • -d 用来运行那些**”服务“型的程序**,启动之后在后台运行,当前命令行应就地退出,MySQL Server 端进程就是此类典型的案例
  • -it 用来运行那些**”交互“式的命令行**,启动之后不但要分配命令行终端,且不会主动退出,除非用户在终端主动退出,MySQL Client 端进程就是此类典型的案例

以下是 Docker 官方文档 对 -d-i-t 三个参数的解释:

参数说明解释
–detach , -dRun container in background and print container ID后台运行模式,d 意为 detach
–interactive , -iKeep STDIN open even if not attached交互模式,i 意为 interactive
–tty , -tAllocate a pseudo-TTY分配终端,t 意为 tty
返回列表