【MySQL】データベースのバックアップとリストア(復元):mysqldumpコマンド

時計 2022.04.08 / 時計

【MySQL】データベースのバックアップとリストア(復元):mysqldumpコマンド

本記事ではデータベースで最も普及しているRDBMSのMySQLにおける、データベースをバックアップリストア(復元)する方法について解説していきます。

Webアプリケーションなどでデータベースを利用している場合、定期的にバックアップを取得しておく必要があります。また万が一のためにリストア(復元)もできるようにしておくべきです。

本記事を通して、バックアップの取得方法やデータ移行、リストアの方法について理解を深めましょう。

ここで利用するコマンドはmysqldumpコマンドです。またMariaDBでもここで紹介している方法で同じようにバックアップやリストアが可能です。

本記事で取り上げているデータベースはMySQL(MariaDB)です。データベースについて詳しくは以下記事をご参照ください。

mysqldumpコマンド

mysqldumpコマンドとは

mysqldumpコマンドはデータベース内のテーブルやデータをファイルとしてバックアップ・リストアするためのコマンドです。

バックアップやリストアするデータが大量にある場合、データ量に比例して時間がかかります。

mysqldumpコマンドにより生成されたダンプファイルには、CREATE TABLE文やINSERT文といったSQLが記載されています。
つまりSQL形式でデータが出力されるため、別のサーバーにも容易にデータベースを復元できます。

またSQLであれば比較的簡単に修正・変更ができるため、リストア先のデータベースに合わせて修正することもできます。

mysqldumpコマンドはMySQLログイン後に使用するのではなく、その前のコマンドラインで使用します。

mysqldumpコマンドの使用方法

mysqldumpコマンドは以下の構文に沿って使用します。

構文

mysqldump [オプション] データベース名 [テーブル名]

テーブルを指定しない場合は、すべてのテーブルが出力対象となります。複数のテーブルを指定する場合は、カンマで区切って指定します。

mysqldumpコマンドのオプション

以下にmysqldumpコマンドで指定できる主なオプション一覧を記します。

オプション 説明
-u ユーザー名 接続するユーザー名を指定
-p パスワードをコマンド実行後に入力
-p パスワード 接続するユーザーのパスワードを指定
-h ホスト名 稼働しているホスト名を指定
-A(-all-databases) すべてのデータベースを指定
-d データベースの定義のみ
--single-transaction テーブルをロックせずにひとつのトランザクションとしてダンプ
--lock-tables ダンプ前にテーブルをロック
-lock-all-tables(-x) ダンプ前にすべてのテーブルをロック

MySQLのバックアップ取得

MySQLのデータベースを指定してバックアップを取得する場合、以下のようにmysqldumpコマンドを使用します。

構文

mysqldump [オプション] データベース名 [テーブル名] > 出力するファイル名

実際に私がバックアップを取得する際は次のようにオプションを指定します。ここではDBユーザー名root、DB名office54、バックアップのファイル名office54.dumpとしています。

mysqldump –-single-transaction -u root -p office54 > office54.dump

バックアップするデータベースがInnoDB互換であれば—single-transactionを指定することで、一貫性のとれたバックアップが取得できます。

上記の指定方法だと、出力されたバックアップファイルは現在のディレクトリ内に保存されます。

すべてのデータベースのバックアップを取得したい場合は-A(-all-databases)を指定します。

mysqldump –-single-transaction -u root -p -x -all-databases > office54.dump

MySQLのリストア(復元)

MySQLのデータベースをリストア(復元)する場合、以下のようにmysqldumpコマンドを使用します。

構文

mysqldump [オプション] データベース名 [テーブル名] < 出力するファイル名

データベースを指定してリストアする場合は次のようにコマンドを実行します。

mysqldump -u root -p office54 < office54.dump

すべてのデータベースをリストアする場合は次のようにコマンドを実行します。

mysqldump -u root -p < office54.dump

まとめ

本記事「【MySQL】データベースのバックアップとリストア(復元):mysqldumpコマンド」はいかがでしたか。

MySQLでデータベースをバックアップするコマンドはmysqldump以外にも「mysqlpump」や「percona xtrabackup」といったものも存在します。

それぞれ動作が異なっていますので、ご自身にあったバックアップ方法を見つけてください。