目次
MySQL DB をつくる
1. 準備
ディレクトリ構成
$ tree mmm mmm ├── Dockerfile-mysql └── docker-compose.yml
設定ファイル
-
Dockerfile-mysql
Dockerfile-mysqlFROM mysql:5.7.12 # `5.7.12` は自分の使いたいイメージのタグ RUN apt-get clean && apt-get update && apt-get install -y locales locales-all vim # ↑のイメージそのままだと vi も vim も入っていなくて不便だったので vim も入れておく RUN locale-gen ja_JP.UTF-8 ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:en ENV LC_ALL ja_JP.UTF-8 RUN ln -sf /usr/share/zoneinfo/Japan /etc/localtime
-
docker-compose.yml
docker-compose.ymlversion: '3' services: db: container_name: mmm_db build: context: . dockerfile: Dockerfile-mysql # 文字コードの設定をしておく command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci restart: always volumes: - "db-data:/var/lib/mysql" environment: MYSQL_ROOT_PASSWORD: mmm MYSQL_DATABASE: mmm MYSQL_USER: mmm MYSQL_PASSWORD: mmm ports: - "3306:3306" # 大事。ここを書いておかないと、 compose の外から繋げない。 volumes: db-data:
2. 起動
# mmm 直下で実行する $ docker-compose up
SQLAlchemy の設定
mysqlclient
接続文字列
mysql+mysqldb://mmm:mmm@127.0.0.1:3306/mmm?charset=utf8mb4 # mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
事前準備
Python3 他のインストール
sudo apt-get install python3-dev default-libmysqlclient-dev #Debian / Ubuntu
sudo yum install python3-devel mysql-devel #Red Hat / CentOS
brew install mysql-connector-c # macOS (Homebrew) (Currently, it has bug. See below)
macOS の場合はバグあるらしくちょっと小細工が必要
/usr/local/bin/mysql_config
を編集しないといけない (PyPI の Project description, GitHub の README に書いてある)
mysql_config
は$ which mysql_config
で探せる
PyMySQL
接続文字列
mysql+pymysql://mmm:mmm@127.0.0.1:3306/mmm?charset=utf8mb4 # mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
mysql-connector-python
接続文字列
mysql+mysqlconnector://mmm:mmm@127.0.0.1:3306/mmm?charset=utf8mb4" # mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
使ったメモ
mysqlclient |
PyMySQL |
mysql-connector-python |
|
---|---|---|---|
準備 ※1 |
ただの Python3 だけでは済まない、
|
ただの Python3 だけで済む
|
ただの Python3 だけで済む |
[Note] Aborted connection ※2 |
|
|
|
SQLAlchemy のおし具合 |
|
|
|
わたしの感想 |
|
install が手軽でよい。 |
install が手軽でよい。ほかはとくになし。 |
aodag さんに教えてもらったことメモ |
sqlalchemy で使うなら pymysql 使っとけ(断言) |
※ 1.
python3-dev
が必要 or 不要な理由も aodag さんに教えていただきました。ありがとうございました。
※ 2. [Note] Aborted connection ...
-
B.6.2.10 Communication Errors and Aborted Connections
db_1 | 2019-03-24T06:38:23.691896Z 2 [Note] Aborted connection 2 to db: 'mmm' user: 'mmm' host: '172.27.0.1' (Got an error reading communication packets)
クライアントの接続方法とか切断方法に何か問題があるらしい
わたしの場合、同じコードでもドライバーによって出たり出なかったりする
ログレベルを下げると出なくなる
同じ事象のひとが世界中にけっこういる
このログが出ていても、(ワーニングログがたくさん出ること以外に)「困った!」というひとはあまりいなそう