SQLステートメントの挙動を勉強するためにMySQLだけの環境がほしかったのでDockerで作成しました。
少し前に利用していたものですが、今も使えるのでここに認めておきます。
概要
達人に学ぶSQL徹底指南書を読んでSQLを勉強していましたが、やはり直接SQLを叩いて学びたいので環境を用意しました。
この書籍の第2版ではウィンドウ関数について記述されています。ウィンドウ関数が対応しているMySQLのバージョンは8.0以上が必要なのでご注意ください。
対応したこと
- linux内の日本語入出力に対応
- mysqlの日本語利用に対応
- viを導入してmysql入力を楽に
今回使う書籍がtable定義で日本語を多用するので少し苦労しました。
構成
.
├── Dockerfile
├── data
└── docker-compose.yml
Dockerfile
FROM mysql:5.6
RUN apt-get update && \
apt-get install -y locales vim && \
rm -rf /var/lib/apt/lists/* && \
echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \
locale-gen ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN { \
echo '[mysqld]'; \
echo 'character-set-server=utf8mb4'; \
echo 'collation-server=utf8mb4_general_ci'; \
echo '[client]'; \
echo 'default-character-set=utf8mb4'; \
} > /etc/mysql/conf.d/charset.cnf
docker-compose.yml
mysql:
build: .
dockerfile: Dockerfile-MySQL
environment:
MYSQL_ROOT_PASSWORD: root #rootユーザ用のパスワード
MYSQL_USER: user #作業ユーザ名
MYSQL_PASSWORD: password #作業ユーザ用のパスワード
MYSQL_DATABASE: test #作成するDB名
TZ: "Asia/Tokyo"
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
Docker起動
docker-compose build
docker-compose up -d
コンテナ内にログイン
docker-compose exec mysql # コンテナ内に入る
docker-compose exec mysql mysql -u root -p # mysqlにrootとしてログイン password: root
docker-compose exec mysql mysql -u user -p # mysqlにuserとしてログイン password: password
文字コードを確認してみましょう。
mysql> use test
Database changed
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
MySQL内でviを起動
以下でviが起動
mysql> \e
CREATE TABLE `test_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
`income` int(11) DEFAULT NULL,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
:wq
でviから抜けるとmysql>
に戻るので以下のように;
とエンターを入力すると実行されます。
mysql> \e
mysql> ;