LoginSignup
3
2

More than 5 years have passed since last update.

【Windows】Dockerでmysqlのデータ領域をローカルにバックアップする際の注意点

Last updated at Posted at 2018-05-18

結論

Windows上でdocoker-machineを使ってmysqlのデータ領域をローカルにバックアップするときは、トップレベルに定義したvolumesを使わないといけない(ただし無理やり回避することは可能)。
※docker for Mac の場合は問題なし

ダメな例


version: "3"
services:
    db:
        image: mysql:latest
        volumes:
            - ./.data/db:/var/lib/mysql
            - ./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql
        ・・・

OKな例

version: "3"
services:
    db:
        image: mysql:latest
        volumes:
            - db-data:/var/lib/mysql
            - ./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql
        ・・・
volumes:
    db-data:

問題

以下の記事を参考にdockerでwordpress開発環境の構築をしました。
docker-compose を使って WordPress テーマ開発環境を構築しよう – PSYENCE:MEDIA
上記の記事ではトップレベルのvolumes内で定義したvolumesを使う方法が紹介されていました
Docker の Data Volume まわりを整理する

この方法だと、ローカルの中で永続化されているのでdokcer-compose down -vなどでvolumeごと削除すると永続化したデータが消えます。
なので、更新するごとにdocker exec -it dbコンテナ名 sh -c 'mysqldump データベース名 -u データベースユーザ名 -pデータベースパスワード 2> /dev/null' > db-data/mysql.dump.sqlとして、データを保存しないといけません。

手元にデータを置いておきたかったのでトップレベルのvolumesを使わずに、ホスト側のディレクトリに保存することに。
公式のやり方もこっちだったので以下を参考に。
クイックスタート・ガイド:Docker Compose と Wordpress — Docker-docs-ja 17.06.Beta ドキュメント

しかし、このやり方だとWindowsでdocker-toolboxを使っている場合(Windowsは大体そうだと思いますが)上手くいきません。
(なお、手元のdocker for macでは上手く動きました)
以下の記事に詳しくまとまっています。無理やり回避する方法も載っているので、どうしてもhost側に置きたい場合はどうぞ。
docker composeでMySQLのデータ領域をローカルにマウントする | WEB EGG

まとめ

volumesトップレベル定義 host側のディレクトリにマウント(通常の方法)
Windows docker-toolbox ×
docker fot mac
3
2
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
3
2