Open1

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

tech_mwtech_mw

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をデフォルトにできる

ホスト側でポート番号に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';