CircleCIのmysqlで複数DBを作る方法、そしてcircleci/mysqlの機能制限について

やりたかったこと

CircleCIで複数のMySQL DBを立てたかった。

困ったところ

mysqlオフィシャルDockerイメージ( https://hub.docker.com/_/mysql )では使えても、 circleci/mysql のイメージ( https://hub.docker.com/r/circleci/mysql )では使えない機能が多いせいで悩んだ。
以下に詰まりどころを挙げる。これらの2つは circleci/mysql で使えない。

  1. volumes が使えないので.sqlファイルのマウント・流し込みが効かない
  2. ports も指定できないので複数の circleci/mysql イメージを立てると2つ目以降はポート3306で衝突して死ぬ

対応策

他ポートにバインドされたイメージを作ってあげるか、愚直にexecuteする以外はございません…
自分は愚直にexecuteするほうを選びました。

version: 2

definitions:
  workspace: &workspace
    working_directory: ~/working_directory
    docker:
      - image: circleci/python
      - image: circleci/mysql:5.7
        environment:
          MYSQL_USER: root
          MYSQL_ROOT_HOST: "%"
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
commands:
  set_up:
    steps:
      - run:
          name: execute sql
          command: |
              mysql -h 127.0.0.1 -u root -e "<SQL>"

-h 127.0.0.1 は以下のエラー対策。付けないと出ちゃう。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

参考

https://qiita.com/piggydev/items/d02f94c6f3cc7e39e625