logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

MySQL データベースのバックアップと復元の方法

03/12/2019, by Ivan

MySQL データベースにデータを保存していて、それを失いたくない場合は、定期的にバックアップを取る必要があります。この記事では、コンソールを通じて MySQL データベースのバックアップを素早く取り、それを復元する方法を学びます。また、データを別のサーバーに移すこともできます。

コマンドラインでバックアップを取る方法(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://www.adminer.org/

単にファイルをサイトのルートにコピーして、ブラウザからアクセスします。

http://あなたのサイト名/adminer-4.2.1.php(便利のため adminer.php に名前を変更できます):

認証して、必要なデータベースに入ります。私の場合は Drupal7 です。

drupal adminer

次に エクスポート(Dump)をクリックしてデータを出力します。しかも、不要なキャッシュデータを出力しないこともできます。

adminer export

ダンプを元に戻すには、インポート(Import)タブを使用します。

adminer import