mysqldumpコマンドを使ってデータベースやテーブル単位でバックアップ




この記事は最終更新日から2年以上経過しています。

mysqldumpを使うと全体バックアップ、データベース単位のバックアップ、テーブル単位のバックアップや定義のみ、データのみなどいろいろなバックアップを行うことができるのでとても便利です。
ただ、オプションがたくさんあるのでよく使う基本的なパターンについて整理しました。

バックアップ範囲を指定してバックアップ

基本オプション

すべてのコマンドで使用するオプションについてまず説明します。

mysqldump --user=[user_name] -p -A > [path/to/filename]

–user=[user_name]オプション


–user=[user_name]はユーザーを指定します。
-u [user_name]でも指定できます。
指定したユーザーはバックアップを実行できる権限が必要になります。
権限については以下を参照してください。

3.1.2 MySQL の権限をバックアップ管理者に与える
https://dev.mysql.com/doc/mysql-enterprise-backup/3.11/ja/mysqlbackup.privileges.html

-pオプション

-p、または–passwordオプションはパスワードを利用するために指定します。
上記オプションを指定してmysqldumpを実行するとパスワード入力待ちになるのでパスワードを押してreturnキーを押すとパスワードが正しければバックアップが開始されます。
-pパスワードテキスト、または–password=パスワードテキストと指定することもできますがコマンド履歴に残るのでおすすめしません。

では次の章からバックアップコマンドを説明します。

すべてのデータベースを対象にバックアップ

mysqldump --user=[user_name] -p -A > [path/to/filename]

特定のデータベースを対象にバックアップ

mysqldump --user=[user_name] -p [database_name] > [path/to/filename]

複数データベースを対象にバックアップ

mysqldump --user=[user_name] -p -B [database_name1] [database_name2] > [path/to/filename]

特定のテーブルを対象にバックアップ

mysqldump --user=[user_name] -p [database_name] [table_name] > [path/to/filename]

複数テーブルを対象にバックアップ

mysqldump --user=[user_name] -p [database_name] [table_name1] [table_name2] > [path/to/filename]

定義だけバックアップ

以下の例では全データベースの定義のみバックアップしています。

mysqldump --user=[user_name] -p -A -d > [path/to/filename]

データだけバックアップ

以下の例では全データベースのデータのみバックアップしています。

mysqldump --user=[user_name] -p -A -t > [path/to/filename]

mysqldumpを使ったバックアップの例をいくつか

例題用のデータベース構成

例題用データベース構成は以下とします。
データベースはdb1,db2の2つ存在します。
データベースdb1にはテーブルdb1_table1とdb1_table2が存在し、データベースdb2にはテーブルdb2_table1とdb2_table2が存在します。
また、バックアップを実行できるユーザーはrootユーザーとします。

例1:データベースdb1とデータベースdb2の定義とデータをすべてバックアップ

すべてのデータベースを対象としているため、以下のコマンドを実行することで[path/to/filename]に指定したパスへダンプファイルが出力されます。

mysqldump --user=root -p -A > [path/to/filename]

例2:データベースdb1のみバックアップ

特定データベースのみなので、データベース名を指定します。

mysqldump --user=root -p db1 > [path/to/filename]

例3:データベースdb1のテーブルdb1_table1のみバックアップ

例2にテーブル名を追加するだけです。

mysqldump --user=root -p db1 db1_table1 > [path/to/filename]

例3:データベースdb1の定義のみバックアップ

定義のみ取得したい場合は-dオプションを指定します。

mysqldump --user=root -p -d db1 > [path/to/filename]

例4:データベースdb1のテーブルdb1_table2のデータのみバックアップ

データのみ取得したい場合は-tオプションを指定します。

mysqldump --user=root -p -t db1 db1_table1 > [path/to/filename]

こんな感じでバックアップの範囲と、バックアップしたい内容(定義のみ・データのみ・定義もデータも両方)を指定すれば基本的なバックアップは取得することができます。