この記事でわかること
– Docker Compose で Metabase + MySQL 8.x のデータ分析環境を10分で構築する方法
– MySQL 8.x 対応の設定ポイント(認証プラグイン、文字コード)
– データの永続化とヘルスチェックの設定
なぜ Metabase か
Metabase は「SQLが書けない人でもデータを触れる」のが最大の強み。社内のビジネスサイドの人にダッシュボードを共有したい場合に特に便利。個人利用なら、株価データや家計簿データの可視化にも使える。
前提環境
– Docker Desktop がインストール済み
– `docker compose version` が動くこと(Docker Compose V2)
ディレクトリ構成
metabase-mysql/
├── docker-compose.yml
├── .env
└── mysql_data/ # MySQL データ永続化用(自動生成)
環境構築
1. docker-compose.yml
services:
metabase:
image: metabase/metabase:latest
container_name: metabase
ports:
- "3000:3000"
environment:
MB_DB_TYPE: h2
depends_on:
mysql:
condition: service_healthy
restart: unless-stopped
mysql:
image: mysql:8.0
container_name: mysql
ports:
- "3306:3306"
env_file:
- .env
volumes:
- ./mysql_data:/var/lib/mysql
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--default-authentication-plugin=mysql_native_password
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
2. .env ファイル
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=analytics
MYSQL_USER=metabase
MYSQL_PASSWORD=metabase123
⚠️ 本番環境では強力なパスワードを使用してください。このファイルは `.gitignore` に追加すること。
3. 起動
# ディレクトリ作成
mkdir metabase-mysql && cd metabase-mysql
# 上記の docker-compose.yml と .env を作成した後
docker compose up -d
ヘルスチェックにより、MySQL が完全に起動してから Metabase が起動する。
4. 動作確認
MySQL
$ docker compose exec mysql mysql -u metabase -pmetabase123 analytics
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| analytics |
| information_schema |
+--------------------+
Metabase
ブラウザで http://localhost:3000 にアクセス。
初期セットアップ画面が表示される:
1. 言語を選択(日本語あり)
2. 管理者アカウントを作成
3. データベース接続設定:
– タイプ: MySQL
– ホスト: `mysql`(Docker Compose のサービス名がそのまま使える)
– ポート: `3306`
– データベース名: `analytics`
– ユーザー名: `metabase`
– パスワード: `metabase123`
💡 ホスト名に `mysql` と入力するのがポイント。Docker Compose のデフォルトネットワークにより、サービス名で名前解決できる。
テストデータを入れてみる
せっかくなので、簡単なテストデータを入れて可視化してみる。
-- サンプル: 月別売上データ
CREATE TABLE monthly_sales (
id INT AUTO_INCREMENT PRIMARY KEY,
month DATE NOT NULL,
product VARCHAR(50) NOT NULL,
amount DECIMAL(10,2) NOT NULL
);
INSERT INTO monthly_sales (month, product, amount) VALUES
('2026-01-01', 'Product A', 150000),
('2026-01-01', 'Product B', 80000),
('2026-02-01', 'Product A', 170000),
('2026-02-01', 'Product B', 95000),
('2026-03-01', 'Product A', 200000),
('2026-03-01', 'Product B', 110000);
Metabase の「新しい質問」→「シンプルな質問」→ `monthly_sales` テーブルを選択すると、自動でサマリーが表示される。
よく使う操作
停止
docker compose stop
再起動
docker compose start
環境削除(データは残る)
docker compose down
環境削除(データも含めて完全削除)
docker compose down -v
rm -rf mysql_data/
トラブルシューティング
Metabase が MySQL に接続できない
Connection refused
→ MySQL のヘルスチェックが通る前に Metabase が接続しようとしている。`depends_on` の `condition: service_healthy` が設定されているか確認。
MySQL 8.x で認証エラー
Authentication plugin ‘caching_sha2_password’ is not supported
→ MySQL 8.x のデフォルト認証プラグインが変わった。`–default-authentication-plugin=mysql_native_password` を command に追加(上記の docker-compose.yml では設定済み)。
日本語が文字化けする
→ `–character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci` を command に追加(上記では設定済み)。

コメント