VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
クイックスタート
環境変数
MYSQL_USER と MYSQL_PASSWORD は一緒に設定する必要があります。作成されたユーザーは MYSQL_DATABASE への完全なアクセス権を受け取ります。
ボリュームによる永続データ
ボリュームがないと、コンテナを削除したときにすべてのデータが失われます。データディレクトリを永続化するには、ボリュームをマウントします。mysql-data)は、コンテナの再起動と削除をまたいで永続します。代わりにホストのディレクトリを使うには次のようにします。
イメージとボリューム戦略の選択
ほとんどのワークロードでは、名前付きボリュームが正しいデフォルトです。バインドマウントは、ホストからデータディレクトリを直接確認または編集する必要があるときに役立ちますが、macOS と Windows ではパフォーマンスのコストが問題になります。
Docker Compose
複数のサービスを持つ開発環境では、Docker Compose が標準的なアプローチです。healthcheck と depends_on: condition: service_healthy の組み合わせにより、MySQL が単に起動しただけでなく、接続を受け付ける準備ができるまで、アプリケーションコンテナは起動しません。
カスタム設定
カスタムのmy.cnf をマウントして渡します。
初期化スクリプト
コンテナは、初回起動時(データディレクトリが空のとき)に、/docker-entrypoint-initdb.d/ に置かれた .sql または .sh ファイルを実行します。
アプリケーションからの接続
Docker Compose のネットワーク内では、コンテナはサービス名で MySQL に接続します。127.0.0.1 経由で接続します(localhost ではありません。MySQL のソケットはホストでは使えません)。
Docker で MySQL を実行すべき場合
本番での考慮事項
いくつかの注意点を守れば、Docker は本番の MySQL でもうまく動きます。- データの永続化: 名前付きボリュームまたはバインドマウントを使います。MySQL のデータをコンテナ層に置いたままにしないでください。
- メモリ制限: MySQL がホストのメモリを使い果たさないように Docker で
--memoryを設定し、innodb_buffer_pool_sizeをそれに合わせて調整します。 - バックアップ:
mysqldumpはコンテナ内で動きます:docker exec mysql-dev mysqldump -u root -p myapp > backup.sql - ログ: Docker では MySQL のログは stdout/stderr に出ます。
docker logs mysql-devを使うか、ロギングドライバーを設定します。 - アップグレード: 新しいイメージタグを pull し、古いコンテナを停止し、同じボリュームで新しいコンテナを起動します。新しいバージョンでの初回起動時に、MySQL のアップグレード処理が自動で実行されます。
よくある質問
ホストから mysql -h localhost で接続できないのはなぜですか?
Linux と macOS では、localhost を指定すると MySQL クライアントは Unix ソケット経由で接続しようとしますが、ホストではそのソケットは使えません。127.0.0.1 を明示的に使ってください: mysql -h 127.0.0.1 -P 3306。
Docker で MySQL のデータを永続化するにはどうすればよいですか?
コンテナの起動時に名前付きボリュームを/var/lib/mysql にマウントします: -v mysql-data:/var/lib/mysql。これがないと、すべてのデータはコンテナの書き込み可能な層に保存され、docker rm を実行すると失われます。名前付きボリュームはコンテナの削除後も残り、Docker が管理します。docker volume ls で一覧にし、docker volume inspect mysql-data で保存場所を確認できます。Docker Compose では、トップレベルの volumes: キーの下でボリュームを宣言し、サービスの volumes: リストでそれを参照します(上の Docker Compose セクションの例がこのパターンを示しています)。
Docker Compose のコンテナは MySQL にどう接続しますか?
同じ Compose プロジェクト内のコンテナは、デフォルトのネットワークを共有します。アプリケーションコンテナは、サービス名をホスト名として MySQL に接続します。データベースのサービス名がdb なら、接続文字列は host=db port=3306 です。コンテナ間でポートを公開する必要はありません。ポートマッピング(-p 3306:3306)は、ホストマシンからの接続にだけ必要です。MySQL の準備ができる前にアプリケーションが起動しないように、MySQL サービスの healthcheck とともに depends_on: condition: service_healthy を使ってください。
実行中のコンテナに対して SQL ファイルを実行するにはどうすればよいですか?
トラブルシューティング
このページのすべての内容は、
villagesql/server イメージでも動きます。VillageSQL は拡張機能を備えた MySQL のドロップイン代替であるため、上の compose ファイル、ボリューム、およびヘルスチェックは、イメージ名を 1 か所変えるだけでそのまま使えます。Docker で試す。
関連項目
- MySQL のレプリケーションの基本 — Docker Compose でソース/レプリカのペアを実行する
- MySQL のバックアップ戦略 — コンテナ化された MySQL のデータボリュームをバックアップする
- MySQL からのアップグレード — コンテナを MySQL から VillageSQL に移す
- Kubernetes 上での MySQL の実行 — コンテナオーケストレーションの次の段階
- MySQL チュートリアル用のサーバーのインストール — SQL を学ぶためのサーバーを用意する