目前,我们已经启动了Zookeeper和Kafka,但是还没有数据库服务器,Debezium可以从中捕获变化。现在,让我们使用一个示例数据库启动一个MySQL服务器。 打开一个新的终端,使用它启动一个新的容器,运行一个预先配置了库存数据的MySQL数据库服务器:
$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw debezium/example-mysql:0.8
它使用debezium/example-mysql镜像的0.8版本运行一个新的容器,该映像基于mysql:5.7映像,定义并填充一个示例“inventory”数据库,并使用密码dbz创建一个debezium用户,该用户具有debezium mysql连接器所需的最低权限。该命令将mysql名称分配给容器,以便稍后可以方便地引用它。"-it"选项使容器具有交互性,这意味着它将终端的标准输入和输出附加到容器上,以便您可以看到容器中发生了什么。"–rm"命令可以使Docker在容器停止时移除容器。该命令将容器中的端口3306(默认MySQL端口)映射到Docker主机上的相同端口,以便容器外的软件可以连接到数据库服务器。最后,它还三次使用-e选项将MYSQL_ROOT_PASSWORD、MYSQL_USER和MYSQL_PASSWORD环境变量设置为特定值。 您应该可以在终端中看到如下内容:
...
017-09-21T07:18:50.824629Z 0 [Note] mysqld: ready for connections.
Version: '5.7.19-log' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
注意,MySQL服务器在修改配置时启动和停止几次。上面列出的最后一行报告MySQL服务器正在运行,可以使用了。
打开一个新的终端,为MySQL命令行客户端启动一个新的容器,并连接到mysql容器中运行的MySQL服务器:
$ docker run -it --rm --name mysqlterm --link mysql --rm 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"'
这里我们使用mysql:5.7镜像启动容器,命名容器mysqlterm,并将其链接到数据库服务器运行的mysql容器。rm选项告诉Docker在容器停止时移除它,命令的其余部分定义容器应该运行的shell命令。这个shell命令运行MySQL命令行客户端,并指定正确的选项,以便能够正确连接。 容器输出的内容类似如下:
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.17-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
与其他容器不同,这个容器运行一个生成提示符的进程。我们将使用提示符与数据库交互。首先,切换到“inventory”数据库:
mysql> use inventory;
然后列出数据库中的表:
mysql> show tables;
应显示:
+---------------------+
| Tables_in_inventory |
+---------------------+
| customers |
| orders |
| products |
| products_on_hand |
+---------------------+
4 rows in set (0.00 sec)
使用MySQL命令行客户端浏览数据库并查看数据库中预加载的数据。例如:
mysql> SELECT * FROM customers;