開発環境のMySQLをdockerで動かすようにしたときのメモ

開発環境では、ローカル(PC)にMySQL使っていたのですが、dockerで動かすようにしました。 そのときのメモを残しておきます。

  • OS: Ubuntu 18.04 LTS
  • 事前準備: docker, docker-compose をインストールしておく

ローカルにインストールしているmysqlを削除する

参考: https://askubuntu.com/questions/172514/how-do-i-uninstall-mysql

sudo apt-get remove --purge 'mysql-server*' 'mysql-common'
sudo rm -r /etc/mysql
sudo rm -r /var/lib/mysql
sudo apt-get autoremove --purge

docker-compose を設定・起動

以下に合わせて、ディレクトリの構成をしておく、できたら、docker-compose up する

version: '3'
services:
  mysql:
    image: mysql:5.7
    volumes:
      - ./etc/mysql/conf.d:/etc/mysql/conf.d
      - ./var/lib/mysql:/var/lib/mysql
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    ports:
      - 3306:3306
  • 今回は、root(パスワードなし)を前提に構築しているが、ユーザ・パスワードを指定したい場合は environment を設定する必要がある。environment の値はこちらを参考にする https://hub.docker.com/_/mysql?tab=description

  • MySQLの設定 /etc/mysql/conf.dmysql.cnf を置くようにし、その中で設定する

MySQLのクライアントをインストール

sudo apt install mysql-client libmysqlclient-dev

mysql clientは localhost を指定するとunix socketで接続しようとするので、

mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
mysql -u root -h localhost
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

vim ~/.my.cnf に以下を設定し、localhostを指定したときはtcpで接続するようにする。 (接続時、明示的に127.0.0.1を設定すれば問題ないので任意)

[client]
protocol=TCP

以上〜