LoginSignup
19
13

More than 1 year has passed since last update.

Docker環境のMySQLでダンプファイルをインポートする方法

Last updated at Posted at 2021-03-10

こんにちは、JeffTechです。

この記事で実現できること

  • Docker環境のMySQLにダンプファイルをインポート
  • Docker&Laravel環境でのDB接続

説明

今回はリモート接続しているDBからダンプしたダンプファイルを、自分のローカルのDocker環境でMySQLにインポートするときに、少し苦労したので備忘録程度で説明していきます。
なお、すでにdocker-compose.ymlやDockerfileなどは作られており、docker-comopse up -dが行える状態から説明します。

開発環境

  • Laravel6
  • MySQL 5.7
  • Docker

実装の流れ

  1. コンテナにダンプファイルをコピー
  2. コンテナの起動とコンテナに入る
  3. ダンプファイルをDBにインポート
  4. .envの編集

実装

インポートをする前にリモートのDBからデータをダンプしてきてください。
私の場合Macを使っているのでSequel Aceという、データベースをCUI操作できるアプリケーションを使い、DBに接続してデータをダンプしてきました。

コンテナにダンプファイルをコピー

それでは早速やってみます。
まずは、コンテナにダンプファイルをコピーしていきます。

$ docker cp ダンプファイルフルパス コンテナ名:/tmp/ダンプしたファイル名

わからない場合は、例として下記の場合も併せて見てみてください。
ダンプしてきたファイル名:dump.sql
ダンプしてきたファイルパス:/Users/username/Downloads/dump.sql
データベースのコンテナ名:db(docker-compose.ymlで記述されている)
の場合は下記のコマンドを実行してください。

// こちらは上記のコマンドの実例です
$ docker cp /Users/username/Downloads/dump.sql db:/tmp/dump.sql

コンテナの起動とコンテナに入る

docker-compose.ymlがあるディレクトリ で、下記のコマンドを実行してください。

$ docker-compose up -d

これでコンテナの起動ができましたので、コンテナに入るために下記のコマンドを実行してください。

$ docker-compose exec コンテナ名 bash

root@111abc2222de:/#みたいな感じの画面になっていればOKです。
ここでコマンドを叩くことができます。
コンテナ名は、docker-compose.ymlを見ていただければ、わかります。
ちなみに私のはこんな感じです。

docker-compose.yml
version: "3"
services:

  ー省略ー

  db:
      image: mysql:5.7
      container_name: db
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: database
        MYSQL_USER: username
        MYSQL_PASSWORD: password
        TZ: 'Asia/Tokyo'

        ー省略ー

container_name: dbとなっているので、今回の例であればコンテナ名はdbとなります。

ダンプファイルをDBにインポート

インポートは下記のコマンドをコンテナに入っている状態で実行してください。

$ mysql -u docker-compose.ymlで決めたユーザー名 -p データベース名 < /tmp/ダンプファイル名

パスワードを聞かれるので、docker-compose.ymlで決めたパスワードを入力してエンターを押すと、ダンプファイルがインポートされます。
ちなみに、パスワード入力時はキーボードを叩いても何も表示されませんが、それで大丈夫です。

今回の例でいくと下記のようになります。

# こちらは上記のコマンドの実例です
$ mysql -u username -p database < /tmp/dump.sql

.envの編集

最後にLaravelがインストールされているディレクトリ にある.envのDB設定のところを以下のように編集してください。

DB_CONNECTION=mysql
DB_HOST=docker-compose.ymlで決めたコンテナ名
DB_PORT=docker-compose.ymlで決めたポート番号
DB_DATABASE=docker-compose.ymlで決めたデータベース名
DB_USERNAME=docker-compose.ymlで決めた名前
DB_PASSWORD=docker-compse.ymlで決めたパスワード

今回は以下のようなdocker-compose.ymlだと仮定していますので、

docker-compose.yml
version: "3"
services:

  ー省略ー

  db:
      image: mysql:5.7
      container_name: db
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: database
        MYSQL_USER: username
        MYSQL_PASSWORD: password
        TZ: 'Asia/Tokyo'

        ー省略ー

これを例にした場合の.envはの下記のようになります。

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=username
DB_PASSWORD=password

最後に

なかなかMySQLにインポートできず困りましたが、これで簡単にインポートできるはずです。ぜひやってみてください。

少しでも役に立った!という時は、いいねをポチッとして
フォローしてくださると嬉しいです、、、笑

役に立たなかった時は、怒らないでコメント頂けますと幸いです笑

Twitterもやってますので、よかったら見てみてくださいね!
https://twitter.com/jefftechsaku

19
13
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
19
13