博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名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_ADDR
和 MYSQL_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 , -d | Run container in background and print container ID | 后台运行模式,d 意为 detach |
–interactive , -i | Keep STDIN open even if not attached | 交互模式,i 意为 interactive |
–tty , -t | Allocate a pseudo-TTY | 分配终端,t 意为 tty |