データベース管理を楽々!Docker Compose で MySQL に .sql ファイルをスマートにインポート
Docker Compose を使って MySQL に .sql ファイルをインポートする方法
このチュートリアルでは、Docker Compose を使って MySQL コンテナに .sql ファイルをインポートする方法を説明します。この方法は、開発環境やテスト環境で MySQL データを初期設定する際に役立ちます。
前提条件
- Docker がインストールされていること
- .sql ファイルが存在すること
手順
- Docker Compose ファイルを作成する
以下の内容の docker-compose.yml
ファイルを作成します。
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- ./data:/var/lib/mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: database_name
import:
build: .
volumes:
- ./data:/var/lib/mysql
depends_on:
- db
entrypoint: ["sh", "-c", "docker exec -i db mysql -u root -p${MYSQL_ROOT_PASSWORD} database_name < /var/lib/mysql/data.sql"]
このファイルでは、db
サービスと import
サービスを定義しています。
db
サービスは MySQL 5.7 イメージを実行し、/var/lib/mysql
ディレクトリを永続ボリュームとしてマウントします。import
サービスは、カレントディレクトリをビルドコンテキストとして使用してイメージをビルドし、/var/lib/mysql
ディレクトリを永続ボリュームとしてマウントします。このサービスはdb
サービスに依存しており、起動時にdocker exec
コマンドを使用してdb
コンテナに接続し、.sql
ファイルをインポートします。
以下のコマンドを実行して、Docker Compose を起動します。
docker-compose up -d
このコマンドは、docker-compose.yml
ファイルで定義されたすべてのサービスを起動します。
- インポートを確認する
以下のコマンドを実行して、MySQL クライアントに接続し、インポートされたデータを確認します。
docker-compose exec db mysql -u root -p${MYSQL_ROOT_PASSWORD} database_name
上記の例では、password
と database_name
を置き換える必要があります。
補足
- この例では、MySQL 5.7 イメージを使用しています。使用する MySQL のバージョンに合わせてイメージを変更する必要があります。
.sql
ファイルの名前を変更する場合は、docker-compose.yml
ファイルのentrypoint
コマンドも変更する必要があります。
注意事項
- この方法は、開発環境やテスト環境でのみ使用してください。本番環境では、データベースのバックアップと復元のための適切な手順を使用してください。
.sql
ファイルに機密情報が含まれている場合は、注意が必要です。
Docker Compose を使って MySQL に .sql ファイルをインポートする - サンプルコード
docker-compose.yml
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- ./data:/var/lib/mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: database_name
import:
build: .
volumes:
- ./data:/var/lib/mysql
depends_on:
- db
entrypoint: ["sh", "-c", "docker exec -i db mysql -u root -p${MYSQL_ROOT_PASSWORD} database_name < /var/lib/mysql/data.sql"]
data.sql
CREATE DATABASE database_name;
USE database_name;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL
);
INSERT INTO users (name, email, password) VALUES
('John Doe', '[email protected]', 'password'),
('Jane Doe', '[email protected]', 'password');
使用方法
.docker-compose.yml
ファイルと.sql
ファイルを同じディレクトリに保存します。
docker-compose up -d
docker-compose exec db mysql -u root -p${MYSQL_ROOT_PASSWORD} database_name
- このサンプルはあくまで参考用です。使用する MySQL のバージョンや要件に合わせて変更する必要があります。
Docker Compose 以外で MySQL に .sql ファイルをインポートする方法
docker exec コマンドを使用する
以下のコマンドを実行して、docker exec
コマンドを使用して mysql
コマンドラインツールを db
コンテナ内で実行し、.sql
ファイルをインポートすることができます。
docker exec -i db mysql -u root -p"$MYSQL_ROOT_PASSWORD" database_name < data.sql
このコマンドを実行するには、以下の点に注意する必要があります。
db
は、MySQL コンテナの名前です。MYSQL_ROOT_PASSWORD
は、MySQL root ユーザーのパスワードです。database_name
は、インポートするデータベースの名前です。data.sql
は、インポートする .sql ファイルのパスです。
mysql コマンドラインツールを使用する
MySQL コンテナが起動している場合は、以下のコマンドを実行して、ホストコンピューターから MySQL コマンドラインツールを使用して .sql ファイルをインポートすることができます。
mysql -u root -p"$MYSQL_ROOT_PASSWORD" -h localhost -D database_name < data.sql
Workbench を使用する
MySQL Workbench は、MySQL をグラフィカルに管理するためのツールです。Workbench を使用して、.sql ファイルをインポートするには、以下の手順を実行します。
- Workbench を起動し、MySQL コンテナに接続します。
- 「サーバー管理」>「データベース」に移動します。
- インポートするデータベースを右クリックし、「インポート」を選択します。
.sql
ファイルを選択して、「開始」をクリックします。
- 上記の方法で .sql ファイルをインポートする前に、必ずデータベースをバックアップしてください。
これらの方法は、Docker Compose を使用せずに MySQL に .sql ファイルをインポートするための代替手段として使用できます。最適な方法は、個々のニーズと要件によって異なります。
mysql docker docker-compose