本番環境や開発環境のDBに対して何か作業をするときは必ずバックアップを取って作業するのが基本(というか絶対)だと思いますが、その時に用いるdumpコマンドについて簡単に紹介します。
やること
① MySQLのDBサーバーにあるテーブルのバックアップを作成する(dumpする)
② バックアップをテーブルに反映させる(restoreする)
実際にやってみる
①テーブルのバックアップを作成する(dumpする)
$ mysqldump -h ホスト名 -u ユーザー名 -p データベース名 > xxx.sql
これでxxx.sql
というバックアップファイルが現在のディレクトリに保存されます。
(-p
はパスワードを指定して認証するという意味です)
なお上記のコマンドの場合はデータベース全体がバックアップされます。
一方でテーブルを指定する場合は、
$ mysqldump -h ホスト名 -u ユーザー名 -p データベース名 テーブル名1 テーブル名2 > xxx.sql
とすれば指定したテーブルのみバックアップを作成することができます。
その他、オプションはたくさんあるのでデータが大きい時などは必要に応じて参照されたく思います。
②バックアップをテーブルに反映させる(restoreする)
dumpしたsqlファイルをデータベースに反映させるときは、
$ mysql -h ホスト名 -u ユーザー名 -p データベース名 < xxx.sql
とすることで先ほどのxxx.sql
というバックアップファイルがデータベースに反映されます。
これにより、「テーブルやカラムを誤って削除してしまった..」というときに、バックアップ時の状態に復旧することができます。
が、テーブル同士で外部キー制約が設定されている場合、export時の順番や各テーブルを構築する順番によっては「そんなテーブルのカラムはないよ」といったエラーが発生する場合があるかと思います。
※外部キー制約を一時的に無効にしておく
この外部キー制約によるエラーを解消するには、バックアップしたsqlファイルを編集しても良いですが..外部キー制約の設定を一時的に無効にすると楽です。
データベースにアクセスした状態で、
mysql> SET FOREIGN_KEY_CHECKS=0;
で外部キー制約をいったん無効にして、この状態で先ほどのrestoreの作業を行うとエラーにならずに実行することができるはずです。
作業が完了したら、
mysql> SET FOREIGN_KEY_CHECKS=1;
で戻すことも忘れずに。
繰り返しになってしまいますがdump, restoreコマンドの各種オプションなどは種類が多いのと、本番環境やステージ環境のDBに対する操作の場合は特に、公式マニュアルを参照されたく思います。
以上、最後までお読みいただきありがとうございました〜。