MySQLのデータベースをバックアップ・復元する際に頻繁に使われるのが、mysqldump
というコマンドラインツールです。特にバックアップはしっかり取っているものの、「どうやってリストアするのか分からない」「既存のデータに上書きされないか不安」といった声をよく耳にします。本記事では、mysqldump
を使用して安全に、かつ確実にMySQLのデータをリストア(復元)する方法を、コマンドの書き方から具体的な注意点まで詳しく解説していきます。実務でも活用できる手順と知識を身につけて、トラブル時にも安心して対応できるようにしておきましょう。
mysqldump
は、MySQLやMariaDBのデータベースをバックアップ(エクスポート)およびリストア(インポート)するための標準的なコマンドラインツールです。
リストアに使うというと、「dumpという名前なのに?」と疑問に思う方もいるかもしれませんが、実際にはmysqldump
で作成されたSQLファイルをMySQLクライアントで再実行することで、バックアップ内容を元に戻すことができます。
このツールの特徴は以下の通りです。
これらの特性により、細かい復元作業や選択的なリストアにも対応可能です。
リストア作業は、通常以下の3ステップで行います。
mysql
コマンドでダンプファイルを読み込む以下に具体例を示します。
# データベースを新規作成
mysql -u root -p -e "CREATE DATABASE sample_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
# リストア実行
mysql -u root -p sample_db < sample_dump.sql
この方法では、sample_dump.sql
内のSQL文がそのままMySQLで実行され、元の状態が復元されます。
既存のデータベースに対してリストアを行う場合、以下の点に注意が必要です。
DROP DATABASE
やDROP TABLE
を含むダンプファイルの場合は要注意対処法:
ダンプファイルをエディタで開き、危険なSQL文(DROP文など)が含まれていないか確認しましょう。または、テスト環境で一度リストアし、問題がないことを確認してから本番環境に適用するのが安全です。
バックアップは全体から取っていても、リストアは特定のテーブルだけを復元したいケースもあります。その場合、以下のような手順を使うことが可能です。
エディタで該当テーブルのCREATE文とINSERT文のみを抽出し、新しいSQLファイルを作成してリストアする方法です。
mysqldump -u root -p database_name table1 table2 > selected_tables.sql
mysql -u root -p database_name < selected_tables.sql
このようにしておけば、部分的なリストアも容易です。
→ 対象のデータベースが存在していない場合です。あらかじめCREATE DATABASE
文で作成しておく必要があります。
→ mysqldump
とmysql
の両方で文字コード(--default-character-set=utf8mb4
など)を指定しておくと防げます。
bashコピーする編集するmysql --default-character-set=utf8mb4 -u root -p database_name < dump.sql
→ SET FOREIGN_KEY_CHECKS=0;
を先頭に追加すると一時的に外部キー制約を無効化してリストアできます。ただし、リストア後は必ず SET FOREIGN_KEY_CHECKS=1;
を実行しましょう。
定期的にリストアを行う必要がある場合、シェルスクリプトでの自動化がおすすめです。
#!/bin/bash
DB_USER="root"
DB_PASS="your_password"
DB_NAME="sample_db"
DUMP_FILE="/path/to/sample_dump.sql"
mysql -u $DB_USER -p$DB_PASS -e "CREATE DATABASE IF NOT EXISTS $DB_NAME;"
mysql -u $DB_USER -p$DB_PASS $DB_NAME < $DUMP_FILE
このようにしておけば、定期的な復元作業やテストデータ投入を効率化できます。
mysqldump
のリストア操作は、理解してしまえば難しいものではありません。万が一のときに備えて、正確な手順を知っておくことがシステム運用者や開発者にとって重要です。