MySQLのバックアップとリストア完全ガイド|mysqldumpの使い方とベストプラクティス

1. mysqldumpとは?〜基本と主な用途〜

mysqldumpは、MySQLデータベースをテキスト形式でエクスポートするためのコマンドラインツールです。エクスポートされたファイルはSQL形式で保存され、リストア時にインポートすることで元のデータベースを復元可能です。

mysqldumpの主な用途

用途説明
データベースのバックアップデータ損失リスクに備え、定期的なバックアップを行うために使用します。
サーバー間のデータベース移行他サーバーへの移行に際し、mysqldumpのエクスポートファイルを使用してデータをスムーズに移行できます。
特定テーブルのバックアップデータベース全体ではなく、特定のテーブルのみをバックアップする際に活用できます。

2. 基本的な使い方:mysqldumpでバックアップを取得する

まず、mysqldumpを使用してデータベースのバックアップを取得する方法を確認しましょう。以下、一般的なバックアップ手法とオプションについて紹介します。

単一データベースのバックアップ

特定のデータベースをバックアップする基本コマンドです。

mysqldump -u [ユーザー名] -p [データベース名] > [出力ファイル名].sql

my_databaseをバックアップし、my_database_backup.sqlに保存する場合

mysqldump -u root -p my_database > my_database_backup.sql

ポイント:コマンド実行後、パスワード入力を求められます。パスワードを正しく入力するとバックアップが開始されます。

複数データベースのバックアップ

複数のデータベースをまとめてバックアップする場合、--databasesオプションを使用します。

mysqldump -u root -p --databases database1 database2 > multi_database_backup.sql

全データベースのバックアップ

MySQLサーバーのすべてのデータベースをバックアップするには、--all-databasesオプションを使用します。

mysqldump -u root -p --all-databases > all_databases_backup.sql

mysqldumpでよく使うオプション

オプション説明
--single-transactionInnoDBでトランザクション中のデータの整合性を保ちながらバックアップを取得します(MyISAMでは非推奨)。
--quickメモリ使用を抑えながらデータを1行ずつ取得します。
--routinesストアドプロシージャやファンクションを含めたバックアップが可能です。
--triggersトリガーも含めてバックアップを取得します。

3. リストア方法:バックアップファイルをMySQLにインポート

mysqldumpで取得したバックアップファイルを使って、データベースをリストアする方法を紹介します。

単一データベースのリストア

以下のコマンドを使用して、バックアップファイルを既存のデータベースにリストアします。

mysql -u [ユーザー名] -p [データベース名] < [バックアップファイル名].sql

my_database_backup.sqlmy_databaseにリストアする場合

mysql -u root -p my_database < my_database_backup.sql

確認方法:リストア完了後、MySQLにログインし、データベース内のテーブルが正しく復元されているかを確認します。

複数データベースのリストア

複数のデータベースが含まれるバックアップファイルをリストアする場合は、以下のコマンドを使用します。

mysql -u root -p < multi_database_backup.sql

よくあるリストアエラーと対処法

エラー内容対処方法
データベースが既に存在するエラーエクスポートファイルのCREATE DATABASE文を削除するか、既存データベースを削除してからリストアします。
権限不足エラーMySQL管理者権限で操作し、適切なアクセス権限を持つユーザーを設定してください。
ファイルサイズエラーmax_allowed_packetのサイズをMySQL設定ファイルで増加し、サーバーを再起動します。
文字コードエラーエクスポートとインポート時に同じ文字コード(例:--default-character-set=utf8)を指定します。

4. 応用編:mysqldumpの柔軟な活用方法

mysqldumpは、特定のテーブルのみやデータのみ、スキーマのみをエクスポートするなど、柔軟な活用が可能です。

特定のテーブルのみのバックアップ

特定のテーブルだけをバックアップするには、以下のようにテーブル名を指定します。

mysqldump -u root -p my_database my_table > my_table_backup.sql

データのみ、またはスキーマのみのバックアップ

  • データのみ--no-create-infoオプションでスキーマ(構造)を含まずにデータのみをエクスポートします。
  mysqldump -u root -p --no-create-info my_database > my_database_data_only.sql
  • スキーマのみ--no-dataオプションでデータを含まずにスキーマだけをエクスポートします。
  mysqldump -u root -p --no-data my_database > my_database_schema_only.sql

圧縮を利用したバックアップとリストア

大規模データベースのバックアップには、圧縮して保存する方法が便利です。

  • 圧縮してバックアップ
  mysqldump -u root -p my_database | gzip > my_database_backup.sql.gz
  • 圧縮ファイルからのリストア
  gunzip < my_database_backup.sql.gz | mysql -u root -p my_database

5. mysqldump使用時のベストプラクティス

mysqldumpを効率的かつ安全に活用するためのベストプラクティスを紹介します。

データ整合性を重視したバックアップ(–single-transaction)

InnoDBを使用しているデータベースで、データの整合性を保ちつつバックアップを取るには、--single-transactionオプションが便利です。

mysqldump -u root -p --single-transaction my_database > my_database_backup.sql

注意:このオプションは、InnoDBでの使用を前提としており、MyISAMではデータの整合性が保証されないため非推奨です。

メモリ消費を抑える(–quick)

大量のデータを扱う場合、--quickオプションでメモリ消費を抑えつつバックアップを行うことができます。1行ずつデータを読み込むため、大規模データベースのバックアップに有効です。

mysqldump -u root -p --quick my_database > my_database_backup.sql

自動化による定期バックアップ

mysqldumpによるバックアップは、cronジョブを設定することで自動化が可能です。以下の例では、毎日午前2時にバックアップを取得し、圧縮形式で保存する設定です。

0 2 * * * mysqldump -u root -p[パスワード] my_database | gzip > /path/to/backup/my_database_$(date +\%Y\%m\%d).sql.gz

注意点:パスワードのセキュリティ管理に留意し、可能であればMySQL設定ファイルなどを使用して安全に管理してください。

バックアップの定期検証

取得したバックアップファイルが正常にリストアできるか定期的に検証することが重要です。障害時にリストアできるか事前に確認しておくと、迅速な復旧が可能になります。

6. まとめ:mysqldumpを活用したデータ保護のベストプラクティス

mysqldumpは、MySQLデータベースのバックアップとリストアを効率的かつ安全に行うための強力なツールです。mysqldumpを活用することで、データの整合性を保ち、システム障害やデータ損失のリスクを最小限に抑えることが可能になります。

記事の要点まとめ

  1. mysqldumpの概要と用途:MySQLデータベースのバックアップや移行において、mysqldumpは非常に便利で、多用途に対応可能です。
  2. 基本的なバックアップとリストア方法:単一・複数データベース、特定テーブルのバックアップやリストアの手順を明確に理解しましょう。
  3. 応用的な使用方法:データのみ、スキーマのみのエクスポート、圧縮バックアップなど、さまざまなニーズに応じた活用が可能です。
  4. mysqldumpのベストプラクティス:整合性を保つ設定、定期的な自動バックアップの設定、そしてバックアップの検証が重要です。

mysqldumpを適切に使用することで、MySQLデータベースの信頼性を高め、データ保護体制を強化することができます。本記事の内容を参考に、mysqldumpを活用して信頼性の高いデータ保護を実現してください。