Open1
Docker Compose × MySQL × Sequel Ace接続ガイド

Docker ComposeでMySQLコンテナを立ち上げ、macOSのSequel Aceから接続する最小構成例をまとめます。備忘録メモです
環境
pc:MacBook Pro(2019)
os:macos Sequoia
docker:Docker version 20.10.6, build 370c289
docker-compose:Docker Compose version 2.0.0-beta.1
docker desktop 利用
docker-compose.ymlのサンプル構成
docker-compose.yml
services:
db:
image: mysql:8.0
container_name: mysql_container
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=sample_db
- MYSQL_USER=development
- MYSQL_PASSWORD=password
ports:
# ホスト側3306はバッティングする可能性があるため4306指定
- "4306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
mysqlコンテナ起動
docker compose up -d
コンテナ経由でmysql接続
- passwordは
password
docker exec -it mysql_container mysql -u development -p
SequelAceの設定
接続方式タブ:TCP/IP
Name:docker-mysql(任意)
HOST:127.0.0.1
Username:development
Password:password
Database:sample_db(任意)
Port:4306
注意点
- Mysqlはバージョンによって認証プラグインが異なるため注意
- SequelProはMysql8以降に対応していないとの事なので、Mysql8以降を使う際はSequelAceを使います
- Mysql5.7以前のデフォルト認証方法:mysql_native_password
- Mysql8以降のデフォルト認証方法:cacing_sha2_password
- docker-composeに
command: --default-authentication-plugin=mysql_native_password
でmysql_native_passwordをデフォルトにできる
- docker-composeに
ホスト側でポート番号に3306を指定する場合
- ローカルで
3306
が使われている場合エラーになります、下記コマンドなどで確認 - brew管理のmysqlが動いている可能性もあるのでその場合は
brew services stop mysql
- 私はこれが原因でバッティングしていて若干ハマりました。知らない所で動いているとは..最初に3306ポートが使用済かどうかを確認すれば即解決できた気がします;
sudo lsof -nP -iTCP:3306 | grep LISTEN
brew services list
(mysql)plugin確認と変更
rootユーザーでmysql接続
docker exec -it mysql_container mysql -u root -p
(mysql)plugin確認
SELECT User, Host, plugin FROM mysql.user;
↓のようにユーザーとplugin(認証方法)が確認できる
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| development | % | caching_sha2_password |
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
(mysql)plugin変更
ALTER USER '[user]'@'%' IDENTIFIED WITH [認証方法] BY '[password]';
ALTER USER 'development'@'%' IDENTIFIED WITH mysql_native_password BY 'password';