LoginSignup
74
74

More than 3 years have passed since last update.

ローカルから直接Dockerのデータベースを操作する

Last updated at Posted at 2019-08-10

概要

ローカルから直接Docker内にあるデータベース(MySQL)をダンプ/リストアなどの操作をする方法です。
Dcokerのコマンド + MySQLのコマンドを組み合わせるだけです。

本文

以下の定数はコマンド等で確認してください。
CONTAINER_NAME : Dockerのコンテナ名。$ docker psで確認する。
USER_NAME : Docker内のデータベースのユーザ名
PASSWORD : Docker内のデータベースのパスワード
DATABASE_NAME : Docker内のデータベース名

ローカルから直接Dockerのデータベースに接続

$ docker exec -it CONTAINER_NAME mysql -u USER_NAME -p

ローカルから直接Dockerのデータベースを操作

データベース作成の例。
-eのオプションでは自由にSQLコマンドを実行できます。

$ docker exec -it CONTAINER_NAME  mysql -u USER_NAME -p -e'CREATE DATABASE IF NOT EXISTS DATABASE_NAME;'

ローカルから直接Dockerのデータベースをダンプ

ダンプとは、テーブルなどのデータベースの情報をSQL文の形で出力することです。
バックアップのようなものです。

$ docker exec -it CONTAINER_NAME mysqldump -u USER_NAME -pPASSWORD DATABASE_NAME > dump.sql

ローカルから直接Dockerにあるダンプファイルをリストア

リストアとは、ダンプされたファイルからデータベースを復元することです。

$ docker exec -it CONTAINER_NAME mysql -u USER_NAME -p DATABASE_NAME -e"$(cat dump.sql)"


本題は以上です。

補足

個人的によく使うDockerとMySQLのコマンドも記載しておきます。

Dockerコマンド

コンテナに接続

$ docker exec -it CONTAINER_NAME bash

オプションの意味は以下です。
-i : アタッチしていなくても STDIN をオープンにし続ける
-t : 疑似ターミナル (pseudo-TTY) の割り当て
exec — Docker-docs-ja 17.06.Beta ドキュメント

ローカルへファイルをコピー

$ docker cp <コンテナID>:path/to/container/dump.sql path/to/local/dump.sql

cp — Docker-docs-ja 17.06.Beta ドキュメント

MySQLコマンド

MySQLに接続

$ mysql -u USER_NAME -p

ダンプ

$ mysqldump -u USER_NAME -p DATABASE_NAME > dump.sql

特定のテーブルを指定することもできます。

$ mysqldump -u USER_NAME -p DATABASE_NAME TABLE_NAME > dump.sql

バックアップとしてダンプするときは、--single-transactionオプションをつけます。
このオプションをつけるとトランザクションを利用してくれるので、バックアップを開始〜終了まで整合性のとれたデータであることを保証してくれます。

$ mysqldump --single-transaction -u USER_NAME -p DATABASE_NAME > dump.sql

MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム

リストア

$ mysql -u USER_NAME DATABASE_NAME < dump.sql

最後に

記事に間違いや不明な点があれば遠慮なくご指摘ください。

74
74
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
74
74