MySQLのデータベースをバックアップ・復元する際に頻繁に使われるのが、mysqldump
というコマンドラインツールです。特にバックアップはしっかり取っているものの、「どうやってリストアするのか分からない」「既存のデータに上書きされないか不安」といった声をよく耳にします。本記事では、mysqldump
を使用して安全に、かつ確実にMySQLのデータをリストア(復元)する方法を、コマンドの書き方から具体的な注意点まで詳しく解説していきます。実務でも活用できる手順と知識を身につけて、トラブル時にも安心して対応できるようにしておきましょう。
mysqldumpとは何か?リストアに使う理由
mysqldump
は、MySQLやMariaDBのデータベースをバックアップ(エクスポート)およびリストア(インポート)するための標準的なコマンドラインツールです。
リストアに使うというと、「dumpという名前なのに?」と疑問に思う方もいるかもしれませんが、実際にはmysqldump
で作成されたSQLファイルをMySQLクライアントで再実行することで、バックアップ内容を元に戻すことができます。
このツールの特徴は以下の通りです。
- SQLファイル形式で出力されるため、人間が読める
- データだけでなく、テーブル構造(CREATE文)も含まれる
- 柔軟なオプション指定が可能
これらの特性により、細かい復元作業や選択的なリストアにも対応可能です。
基本的なリストア手順
リストア作業は、通常以下の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文など)が含まれていないか確認しましょう。または、テスト環境で一度リストアし、問題がないことを確認してから本番環境に適用するのが安全です。
特定のテーブルだけをリストアしたいときの方法
バックアップは全体から取っていても、リストアは特定のテーブルだけを復元したいケースもあります。その場合、以下のような手順を使うことが可能です。
方法1:ダンプファイルを分割
エディタで該当テーブルのCREATE文とINSERT文のみを抽出し、新しいSQLファイルを作成してリストアする方法です。
方法2:--tablesオプションを活用して個別にバックアップしておく
mysqldump -u root -p database_name table1 table2 > selected_tables.sql
mysql -u root -p database_name < selected_tables.sql
このようにしておけば、部分的なリストアも容易です。
mysqldumpリストア時によくあるエラーと対処法
エラー1:ERROR 1049 (42000): Unknown database
→ 対象のデータベースが存在していない場合です。あらかじめCREATE DATABASE
文で作成しておく必要があります。
エラー2:文字化け
→ mysqldump
とmysql
の両方で文字コード(--default-character-set=utf8mb4
など)を指定しておくと防げます。
bashコピーする編集するmysql --default-character-set=utf8mb4 -u root -p database_name < dump.sql
エラー3:外部キー制約エラー
→ 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
のリストア操作は、理解してしまえば難しいものではありません。万が一のときに備えて、正確な手順を知っておくことがシステム運用者や開発者にとって重要です。