LoginSignup
12
12

More than 5 years have passed since last update.

dockerを使って好きなバージョンのMySQLを使う

Last updated at Posted at 2018-02-25

Qiita初投稿です!
すでにたくさん記事が上がっている内容ですので、この記事は自分の日記のように書きたいと思います。

きっかけ

先日、MySQLのバージョン5.6と5.7の差によって以下のようなエラーが起こりました。

# ActiveRecord::StatementInvalid: Mysql2::Error: Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'column_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by:

手元ではMySQL5.7を使っていたのですが、会社ではMySQL5.6.38を使っていたためです。

自分のlocalのMySQLバージョンを5.6に下げる、という対応でもよかったのですが、
会社の先輩に「dockerでバージョン共存させてみたら?」と言われたのでやってみました。

dockerやMySQLはすでに設定済という前提で進めます。
記事の最後にRailsアプリからDB HOSTの向き先を変えるところも紹介しますが、Rails5を使っています。

docker-machineの作成

以下のコマンドで作成・確認します

$ docker-machine create --driver virtualbox dev

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
dev    -        virtualbox   Running   tcp://192.168.99.100:2376           v18.02.0-ce

ここでSTATERunningになっていなかったら再起動します。

MySQLをインストール

バージョンを指定しつつ、dockerにMySQLをインストールします。

$ docker pull mysql:5.7
$ docker pull mysql:5.6.38

$ docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
mysql                             5.7                 f0f3956a1dd7        6 days ago          409MB
mysql                             5.6.38              15a5ee52ec53        2 months ago        299MB

コンテナを起動

バージョン5.6の方で、コンテナ・MySQLの起動までやってみます。

$ docker run --name mysql5.6.38 -p 3307:3306 -e MYSQL_DATABASE=xxx -e MYSQL_USER=root -e MYSQL_ROOT_PASSWORD=xxx -d mysql:5.6.38
f1e8e25e6db7c26bc28dd2c3816ba5aj5b9d1504dc74f67e206566ed112g3b4a

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
f1e8e25e6db7        mysql:5.6.38        "docker-entrypoint.s…"   58 seconds ago      Up 58 seconds       0.0.0.0:3307->3306/tcp   mysql5.6.38

$ mysql -h$(docker-machine ip dev) -P3307 -uroot -pxxx
#いろいろ書かれる
・
・
・
mysql>

Railsのデータベースへの向き先を変える

development環境とtest環境のみ向き先を変えたいので、
dotenvというgemを利用します。

Gemfile
gem 'dotenv-rails'
.env
DB_HOST=192.168.99.100
DB_PORT=3307
database.yml
host: <%= ENV['DB_HOST'] || '127.0.0.1' %>
port: <%= ENV['DB_PORT'] || 3306 %>

.envファイルはgit管理されていないので、手元で開発するときはENV['XXX']を読み、本番環境では'127.0.0.1'などを読みます。

これで無事にRailsアプリをMySQL5.6.38で管理できるようになりました!

会社で開発するたびにdockerを起動するのが面倒(普段dockerを使わない人)だなぁと思うので、模索中です。

参考にさせていただいた記事

DockerでMySQL複数バージョンを共存させる
Railsで開発環境のデータベースだけdockerにしてみる
環境によって変わる設定値はdotenvを使うと便利

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12