1.環境構築
学習目標
- Docker コンテナーで MySQL サーバーを起動し、停止や再起動を行える
- MySQL Shell for VS Code 拡張機能からデータベースに接続し、SQL を実行できる
USE文で操作対象のデータベースを切り替えられる
本講義では、MySQL サーバーをローカルで動かし、VS Code から SQL を実行する環境を構築します。構成は次の通りです。
VS Code から MySQL Shell for VS Code で Docker コンテナー内の MySQL サーバーに接続し、kakeibo、bookstore、world の3つのデータベースに対して SQL を実行します。
1. Docker Desktop
Section titled “1. Docker Desktop”Docker Desktop は、コンテナー という仕組みでソフトウェアを動かすためのアプリケーションです。コンテナーは、ソフトウェア本体と必要な設定を1つにまとめたもので、起動すれば設定済みの環境がすぐに使えます。
MySQL サーバーは PC に直接インストールすることもできますが、コンテナーで動かすと、PC 上の他のソフトウェアに影響を与えず、不要になったら削除も簡単です。
1-1. インストール
Section titled “1-1. インストール”-
インストーラーをダウンロードする
Docker Desktop の公式ダウンロードページ からインストーラーをダウンロードして実行します。
-
Docker Desktop を起動する
インストール後、Docker Desktop を起動し、タスクトレイの Docker アイコン(クジラ)が安定した状態(アニメーションが止まった状態)になるまで待ちます。
1-2. 動作確認
Section titled “1-2. 動作確認”-
ターミナルを開く
VS Code のメニューから「ターミナル → 新しいターミナル」で開きます。
-
バージョンを確認する
以下のコマンドを順に実行します。
Terminal window docker --versiondocker compose version次のようにバージョン番号が表示されれば、Docker Desktop は正常に動作しています。
Docker version 27.3.1, build ce1234Docker Compose version v2.30.3-desktop.1
2. プロジェクトの準備
Section titled “2. プロジェクトの準備”本講義で使うファイルを1つのフォルダーにまとめて管理します。
2-1. フォルダーの作成
Section titled “2-1. フォルダーの作成”ターミナルで以下のコマンドを実行し、作業用のフォルダーを作成します。
mkdir sql-practicecd sql-practiceVS Code のメニューから「ファイル → フォルダーを開く」を選択し、作成した sql-practice フォルダーを開きます。
2-2. compose.yaml の作成
Section titled “2-2. compose.yaml の作成”compose.yaml は、Docker に対して「どのコンテナーを、どの設定で起動するか」を指示するファイルです。
VS Code のエクスプローラーで新しいファイルを作成し、以下の内容を書いて保存します。
services: mysql: image: mysql:8.4 container_name: sql-practice-mysql environment: MYSQL_ROOT_PASSWORD: root ports: - "3307:3306" volumes: - ./mysql/init:/docker-entrypoint-initdb.d:ro - mysql-data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 5s timeout: 5s retries: 5
volumes: mysql-data:設定項目の説明
image: 使用するコンテナーイメージ(コンテナーのテンプレート)。mysql:8.4は MySQL 8.4 系(LTS)を指定している。environment: コンテナー内の環境変数。MYSQL_ROOT_PASSWORDは管理者(root)のパスワード。ports: PC の 3307 番ポートを、コンテナー内の MySQL(3306 番ポート)につなげる。3306 は MySQL のデフォルトポートで、PC にすでに MySQL がインストールされていると衝突する可能性があるため、3307 にずらしている。volumes: コンテナーの外側にデータを保持する設定。./mysql/init:/docker-entrypoint-initdb.d:ro: PC 上の./mysql/initフォルダーをコンテナー内にマウントする。このフォルダー内の SQL ファイルは、コンテナー起動時に自動で実行される。mysql-data:/var/lib/mysql: Docker が管理する ボリュームmysql-dataに MySQL のデータを保存する。
healthcheck: MySQL が接続を受け付けられる状態かを確認する設定。mysqladmin pingが成功すると、docker compose psのSTATUSに(healthy)が表示される。
2-3. 初期化用 SQL の配置
Section titled “2-3. 初期化用 SQL の配置”MySQL のコンテナーには、コンテナー起動時に /docker-entrypoint-initdb.d/ 内の .sql ファイルを自動で実行する仕組みがあります。この仕組みで、3 つのデータベースをセットアップします。
sql-practice/mysql/init/ フォルダーを作成し、以下の3つのファイルをダウンロードして配置します。
- bookstore.sql: 書店データベース
- kakeibo.sql: 家計簿データベース
- world.sql: 世界の国・都市のデータベース
2-4. setup ファイルの配置
Section titled “2-4. setup ファイルの配置”書籍の各リスト用に、kakeibo データベースの初期状態を再現する SQL ファイルを配布しています。ファイル名は書籍のリスト番号と対応し、たとえば pre_list0302.sql はリスト 3-2 想定の初期状態です。特定のリストを試したいときに、対応するファイルを実行すれば kakeibo がそのリスト想定の状態にリセットされます。
- setup.zip をダウンロードする
sql-practice/直下に展開する(sql-practice/setup/chapXX/...となるように)
実行手順は 4-2. setup ファイルの実行 で扱います。
2-5. フォルダー構成
Section titled “2-5. フォルダー構成”ここまでで、フォルダー構成は次のようになります。
Directorysql-practice/
- compose.yaml
Directorymysql/
Directoryinit/
- bookstore.sql
- kakeibo.sql
- world.sql
Directorysetup/
Directorychap01/
- …
Directorychap02/
- …
- …
3. MySQL サーバーの起動と操作
Section titled “3. MySQL サーバーの起動と操作”MySQL サーバーを起動し、状態の確認や停止・初期化などの基本的な操作コマンドを確認します。
3-1. 起動
Section titled “3-1. 起動”sql-practice フォルダー内で、以下のコマンドを実行します。
docker compose up -dcompose.yaml に定義したコンテナーが起動し、その中で MySQL サーバーが立ち上がります。-d は「バックグラウンドで動かす」ためのオプションで、これを付けないとターミナルがコンテナーのログ表示に占有されます。
初回はコンテナーイメージをダウンロードするため数分かかります。2回目以降は数秒で起動します。
3-2. 状態の確認
Section titled “3-2. 状態の確認”以下のコマンドで、コンテナーの状態を確認します。
docker compose pssql-practice-mysql の STATUS が Up で、かつ (healthy) と表示されていれば、MySQL サーバーは利用可能な状態です。
NAME IMAGE STATUSsql-practice-mysql mysql:8.4 Up 30 seconds (healthy)3-3. 主なコマンド
Section titled “3-3. 主なコマンド”MySQL サーバーの起動・停止などに使う主なコマンドは以下の通りです。
| コマンド | 動作 |
|---|---|
docker compose up -d | コンテナーをバックグラウンドで起動 |
docker compose ps | コンテナーの状態を確認 |
docker compose stop | 一時停止 |
docker compose start | 再開(stop 後の再起動) |
docker compose down | コンテナーを削除(データは残る) |
docker compose down -v | コンテナーとデータ(mysql-data ボリューム)を両方削除 |
3-4. データの初期化
Section titled “3-4. データの初期化”./mysql/init の SQL ファイルは、mysql-data ボリュームが空のとき(初回起動時)にのみ実行されます。SQL を書き換えて反映したい場合や、データを初期状態に戻したい場合は、次の手順でボリュームを削除してから立ち上げ直します。
docker compose down -vdocker compose up -d4. VS Code からの接続
Section titled “4. VS Code からの接続”MySQL サーバーの起動を確認できたら、VS Code から接続できるようにします。
4-1. 初回接続と動作確認
Section titled “4-1. 初回接続と動作確認”-
拡張機能をインストールする
VS Code のアクティビティバーから拡張機能のアイコンをクリックし、検索窓に
MySQL Shell for VS Codeと入力します。Oracle が公開している拡張機能を選んで Install を押し、インストール完了後に再起動を求められたら再起動します。 -
データベース接続を追加する
アクティビティバーの MySQL Shell のアイコン(イルカ)をクリックし、DATABASE CONNECTIONS ビューにある「+」アイコンから新しい接続を追加します。以下の値を入力します。
項目 値 Caption local(任意の名前)Host Name 127.0.0.1Port 3307User Name rootDefault Schema 空欄 Test Connection で接続を確認します。パスワードを求められたら
rootと入力します。Connection successfulと表示されれば、OKを押して接続を保存します。 -
SQL を実行する
DATABASE CONNECTIONS に追加された接続をクリックすると、ノートブック形式のエディターが開きます。エディターに以下の SQL を入力します。
SHOW DATABASES;カーソルを SQL の行に置いた状態で
Ctrl + Enterを押します。画面下部に結果が表示されます。Database--------------------bookstoreinformation_schemakakeibomysqlperformance_schemasysworld
information_schema、mysql、performance_schema、sys は MySQL が内部で使うシステム用のデータベースです。これら以外に bookstore、kakeibo、world の3つが並んでいれば、初期化 SQL が正しく実行されています。
4-2. setup ファイルの実行
Section titled “4-2. setup ファイルの実行”書籍の特定のリストを試す前に、2-4 で配置した対応する setup ファイルを実行して、kakeibo をそのリスト想定の初期状態にします。
-
setup ファイルを MySQL Shell で開く
VS Code のエクスプローラーで
sql-practice/setup/chapXX/pre_listXXYY.sqlを右クリックし、Open with MySQL Shell を選びます。ファイルの内容が MySQL Shell のノートブックに読み込まれます。 -
実行する
ノートブック上で
Ctrl + Enterを押して実行します。