由於公司的 Package Managment 都是客製化的,外加維護的服務沒有 Container 化,所以以前很難在本機上開發。但最近公司開始導入了 Spring Boot ,所以現在想在本機架起一個環境也不像以前這麼繁瑣,也就順便研究一下直接用 Docker 在本機架起一個 Mysql Server,這邊紀錄一下。

安裝 Mysql Client


透過 Brew 安裝 Mysql Client

1brew install mysql8-client

安裝好以後,Brew 有提醒要 Export 環境變數,別忘了

1If you need to have mysql-client first in your PATH, run:
2  echo 'export PATH="/usr/local/opt/mysql-client/bin:$PATH"' >> ~/.zshrc
3
4For compilers to find mysql-client you may need to set:
5  export LDFLAGS="-L/usr/local/opt/mysql-client/lib"
6  export CPPFLAGS="-I/usr/local/opt/mysql-client/include"

安裝與運行 Mysql8


1$ docker pull mysql/mysql-server:8.0
2$ docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql/mysql-server:8.0
  • name: Container 的名字
  • p: 本機的 port mapping 到 container 裡面的 port
  • MYSQL_ROOT_PASSWORD: Mysql Root 的密碼

確認 Mysql8 運行正常


1$ docker ps
2CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS                    PORTS                                                        NAMES
38ec7a52cc3ea   mysql/mysql-server:8.0   "/entrypoint.sh mysq…"   29 minutes ago   Up 26 minutes (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060-33061/tcp   mysql

要確認 Container 的 Status 是 healthy 喔

連線 Mysql Server


Container 中已經安裝好 Mysql Client 所以可以直接進入到 Container 中連線

1$ docker exec -it mysql8 mysql -uroot -p

讓 Container 本機可以連線


為了讓 Container 以外的本機可以連線,所以需修改 Mysql User 的權限, Root User 可以接受外面的連線。

1UPDATE mysql.user SET HOST='%' WHERE USER = 'root' LIMIT 1;

注意,這邊要重啟 Mysql Server 才會生效,艾倫是直接重啟整個 Container

1docker restart mysql

Mac 本機測試連線


這邊要注意,由於 Mysql Server 是在 Contaienr 中運行的,導致本機沒有 mysq.sock 的 file,所以直接運行 mysql client 沒指定 Host 會出現以下錯誤。

1$ mysql -u root -p
2Enter password:
3ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

所以這邊需要特別指定 Host 為 127.0.0.1

1mysql -h 127.0.0.1 -u root -p