MySQL データベースのバックアップと復元の方法
MySQL データベースにデータを保存していて、それを失いたくない場合は、定期的にバックアップを取る必要があります。この記事では、コンソールを通じて MySQL データベースのバックアップを素早く取り、それを復元する方法を学びます。また、データを別のサーバーに移すこともできます。
- コマンドラインでバックアップを取る方法(mysqldump を使用)
- 圧縮して MySQL データベースのバックアップを取る方法
- バックアップから MySQL データベースを復元する方法
- adminer によるバックアップと復元
コマンドラインでバックアップを取る方法(mysqldump を使用)
コンソール(SSH)を通じてサーバーにアクセスできる場合、バックアップを素早く取って元に戻すことができます。これにより、データベースのダンプ(ダンプとはデータベースのテキスト版)を素早く作成し、phpmyadmin、adminer などよりも速く元に戻せます。データベースのダンプは、データベースのコピーを作成するための SQL コマンドで構成されます。ダンプを作成するコマンドは次のとおりです。
$ mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]
[uname] — データベースのユーザー名(root の可能性あり)
[pass] — ユーザーのパスワード。特殊な記号やスペースがなければ続けて書けます。例えば -proot、-ppassword
[dbname] — データベースの名前
[backupfile.sql] — バックアップが保存されるファイルの名前
[--opt] — mysqldump コマンドのオプション。省略して書かなくてもよい
Drupal のデータベースがあり、ユーザー名が root、パスワードが password、ファイル名が backup.sql だとすると、コマンドは次のようになります。
$ mysqldump -u root -ppassword DrupalDB > backup.sql
パスワードを省略できます。パスワードにスペースやその他の特殊記号(#!,-_)が含まれる場合は、パスワードを別途入力する必要があり、コマンドは次のようになります。
$ mysqldump -u root -p DrupalDB > backup.sql
個別のテーブルをバックアップすることもできます。このためには、テーブルをスペースで区切って列挙します。例えば nodes users:
$ mysqldump -u root -p DrupalDB nodes users > backup.sql
個別のテーブルをバックアップするほか、複数のデータベースを一度にバックアップすることもできます。このためには --databases パラメータを指定します。これによりスペースで区切って必要なデータベースを指定できます。
$ mysqldump -u root -p --databases DrupalDB Drupal7 Drupal8 > backup.sql
MySQL サーバーを完全に移したい場合は、--all-databases パラメータを使ってすべてのデータをコピーできます。
$ mysqldump -u root -p --all-databases > alldb_backup.sql
mysqldump コマンドには、いくつかの便利なパラメータもあります。
--add-drop-table — このバックアップを展開する前にテーブルを削除できます(つまり、ダンプに同じテーブルの CREATE TABLE の前に DROP TABLE の SQL クエリが追加されます)。
--no-data — データなしでデータベースの構造だけをコピーできます。例えば、Drupal で数十万件の不要なレコードを持つことがあるキャッシュテーブルをコピーするときに便利です。
--add-lock — LOCK TABLES と UNLOCK TABLES を追加できます。データベースのサイズが大きい場合、テーブルが長時間ロックされることがあります。
圧縮して MySQL データベースのバックアップを取る方法
おそらく最も適したオプションです。10〜20 倍に圧縮でき、大きなデータベースのバックアップがかなり小さいサイズになるからです。圧縮には gzip コマンドを使用します。
$ mysqldump -u root -p DrupalDB | gzip -9 > backup.sql.gz
ファイルを解凍したい場合(データベースを復元するのではなく、単に解凍する)は、このコマンドを使用します。
$ gunzip backup.sql.gz
バックアップから MySQL データベースを復元する方法
ダンプからデータベースを復元するには、空のデータベースが必要です。adminer や phpmyadmin でテーブルを削除できます。--add-drop-table パラメータを使用した場合は、テーブルが自動的に削除されて入れ替わるので、事前に何も削除する必要はありません。ダンプからデータベースを復元するコマンドは次のとおりです。
$ mysql -u root -p DrupalDB < backup.sql
圧縮されたバックアップがあった場合は、このコマンドを使用します。
gunzip < backup.sql.gz | mysql -u root -p DrupalDB
Adminer によるバックアップと復元(PhpMyAdmin の代替)
Adminer は PhpMyAdmin の代替です。機能は同じですが、1 つの小さなファイルの形で作られていて、非常に便利です。
単にファイルをサイトのルートにコピーして、ブラウザからアクセスします。
http://あなたのサイト名/adminer-4.2.1.php(便利のため adminer.php に名前を変更できます):
認証して、必要なデータベースに入ります。私の場合は Drupal7 です。
次に エクスポート(Dump)をクリックしてデータを出力します。しかも、不要なキャッシュデータを出力しないこともできます。
ダンプを元に戻すには、インポート(Import)タブを使用します。


