【MySQL】データベースのバックアップとリストア(復元):mysqldumpコマンド
2022.04.08 /
本記事ではデータベースで最も普及しているRDBMSのMySQLにおける、データベースをバックアップ・リストア(復元)する方法について解説していきます。
Webアプリケーションなどでデータベースを利用している場合、定期的にバックアップを取得しておく必要があります。また万が一のためにリストア(復元)もできるようにしておくべきです。
本記事を通して、バックアップの取得方法やデータ移行、リストアの方法について理解を深めましょう。
ここで利用するコマンドはmysqldumpコマンドです。またMariaDBでもここで紹介している方法で同じようにバックアップやリストアが可能です。
本記事で取り上げているデータベースはMySQL(MariaDB)です。データベースについて詳しくは以下記事をご参照ください。
データベースとは?機能と特徴(SQLite、MySQL、TinyDB)
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」といったものも存在します。
それぞれ動作が異なっていますので、ご自身にあったバックアップ方法を見つけてください。