![]() | 博主歷時三年精心創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書現已由知名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 |