現在 Django を勉強しているのですが、データベースに MySQL を利用することとしました。
そこで、docker-compose を使用して MySQL 環境を構築しましたので、その手順を記します。
環境
macOS Big Sur: 11.2.1
Docker: 20.10.2, build 2291f61
Docker-Compose: 1.27.4, build 40524192
事前準備
ディレクトリの作成
docker-compose を使用して MySQL 環境構築する前に、あらかじめディレクトリーを作成します。
以下のディレクトリー構成にします。
docker |---mysql |---data |---sql
data ディレクトリは、MySQL のデータ永続化用です。
また、sql ディレクトリは、MySQL 起動時の初期化スクリプト置き場です。
それでは、ターミナルで docker ディレクトリに移動し、以下のようにコマンドを入力してディレクトリを作成します。
% mkdir mysql % mkdir mysql/data % mkdir mysql/sql
MySQL の設定ファイル作成
続いて、MySQL の設定ファイル my.cnf を作成します。my.cnf ファイルは、先ほど作成した mysql ディレクトリー直下に作成します。
$ vi mysql/my.cnf
my.cnf は以下の通りです。
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4
docker-compose ファイルの作成
最後に docker-compose ファイルを作成します。
docker-compose.yml ファイルは、docker ディレクトリと同じ階層に作成します。
% vi ../docker-compose.yml
docker-compose.yml は以下のように編集します。
version: '3' services: mysqldb: image: mysql:5.7 container_name: mysql_container environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: my_testdb MYSQL_USER: docker MYSQL_PASSWORD: docker TZ: 'Asia/Tokyo' volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/docker-entrypoint-initdb.d ports: - "3306:3306" command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
作成したディレクトリ構成の確認
作成したディレクトリ構成は以下の通りです。
docker |---mysql |---data |---my.cnf |---sql docker-compose.yml
MySQL データベースへの接続
準備ができたら、以下の docker-compose コマンドを実行して MySQL データベースを作成・起動します。
% docker-compose up -d
動作確認
MySQL の起動確認
以下のように、「docker ps -a」コマンドを実行して、起動していることを確認します。
% docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES debde6edc937 mysql:5.7 "docker-entrypoint.s…" 19 seconds ago Up 18 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_container
MySQL への接続
次に、ターミナルから以下のコマンドを実行して MySQL へ接続します。
接続に成功すると、パスワードを聞いてきますので、root ユーザーのパスワードを入力します。
% mysql -h 127.0.0.1 -P 3306 -u root -p Enter password:
MySQL 接続時に command not found: mysql が発生した場合の対応
もし MySQL に接続するときに、以下のようにエラーが発生した場合は、MySQL Client をインストールしていないことが原因と思われます(筆者はこのエラーが発生しました)。
zsh: command not found: mysql
この場合は、以下のように brew コマンドで インストール可能な MySQL クライアントを探します。
% brew search mysql ==> Formulae automysqlbackup mysql-client@5.7 ✔ mysql@5.6 mysql mysql-connector-c++ mysql@5.7 mysql++ mysql-sandbox mysqltuner mysql-client mysql-search-replace
「mysql@5.7」という文字列があれば、インストール可能です。
以下のコマンドを実行して、MySQL クライアントをインストールします。
% brew install mysql-client@5.7
環境変数に MySQL クライアントを追加する
MySQLクライアントをインストールした場合は、環境変数に追加しておきましょう。
zsh の場合は vi で ~/.zshrc を開きます。
vi ~/.zshrc
~/.zshrc を開いたら、以下のように EXPORT を追加します。
export PATH="$PATH:/usr/local/opt/mysql-client@5.7/bin"
bash の場合は vi で ~/.bashrc を開きます。
vi ~/.bashrc
~/.bashrc を開いたら、以下のように EXPORT を追加します。
export PATH="$PATH:/usr/local/opt/mysql-client@5.7/bin"
インストールが完了したら、再度接続をしてみましょう。
データベースの作成
接続ができたら、以下のコマンドを実行して、test_db というデータベースを作成します。
mysql> CREATE DATABASE test_db; Query OK, 1 row affected (0.01 sec)
データベースが作成できたら、以下のコマンドを実行してデータベースを切り替えます。
mysql> USE test_db; Database changed
テーブルの作成
続いて、以下のコマンドを実行して test_tbl を作成します。
mysql> CREATE TABLE test_tbl ( -> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name TEXT NOT NULL -> ); Query OK, 0 rows affected (0.05 sec)
次に、以下のコマンドで、作成したテーブルにデータを追加します。
INSERT INTO test_tbl (name) VALUES ("HIRO"),("Steve"),("michel");
データの取得
最後に、以下のコマンドを実行して、テーブルにデータが追加されているかを確認します。
mysql> select * from test_tbl; +----+--------+ | id | name | +----+--------+ | 1 | HIRO | | 2 | Steve | | 3 | michel | +----+--------+ 3 rows in set (0.00 sec)
MySQL から切断する
最後に以下のコマンドを実行して、MySQL から切断しましょう。
mysql> \q Bye
まとめ
思ったより簡単に、Docker を使用して MySQL 環境を構築することができました。
MySQL に接続できない時は「あれ?」となりましたが、単なる MySQL クライアントの入れ忘れだったのでほっとしました。
これで自分専用の MySQL 環境ができたので、プログラミング言語と合わせて勉強を進められそうです。
コメント