こんにちは、JeffTechです。
この記事で実現できること
- Docker環境のMySQLにダンプファイルをインポート
- Docker&Laravel環境でのDB接続
説明
今回はリモート接続しているDBからダンプしたダンプファイルを、自分のローカルのDocker環境でMySQLにインポートするときに、少し苦労したので備忘録程度で説明していきます。
なお、すでにdocker-compose.ymlやDockerfileなどは作られており、docker-comopse up -dが行える状態から説明します。
開発環境
- Laravel6
- MySQL 5.7
- Docker
実装の流れ
- コンテナにダンプファイルをコピー
- コンテナの起動とコンテナに入る
- ダンプファイルをDBにインポート
- .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
を見ていただければ、わかります。
ちなみに私のはこんな感じです。
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
だと仮定していますので、
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