MySQL/MariaDBコンソールでのデータベースバックアップ・復旧完全ガイド

MySQL/MariaDBコンソールでのデータベースバックアップ・復旧完全ガイド

🎯 核心解決策(すぐに使用可能)

ホスティングや制限的な環境でGUIツールなしでコンソールからデータベースをバックアップ・復旧する際に使用するコマンドです。

最も多く使用されるパターン

1. 単一データベースバックアップ(最も一般的)

# 基本バックアップ
mysqldump -u[ユーザー名] -p[パスワード] [データベース名] > backup.sql

# 実際の使用例
mysqldump -umyuser -pmypassword mywebsite_db > website_backup_20230620.sql

2. 単一データベース復旧

# 基本復旧
mysql -u[ユーザー名] -p[パスワード] [データベース名] < backup.sql

# 実際の使用例
mysql -umyuser -pmypassword mywebsite_db < website_backup_20230620.sql

3. 全データベースバックアップ(サーバー移行時)

# 全データベースバックアップ
mysqldump -u[ユーザー名] -p[パスワード] --all-databases > full_backup.sql

# 実際の使用例
mysqldump -uroot -pmypassword --all-databases > full_server_backup_20230620.sql

⚠️ 重要な使用法注意事項

  • -uと-pの後にスペースなしでユーザー名とパスワードを続けて記述
  • パスワードに特殊文字がある場合はシングルクォートで囲む:-p'my@pass!'
  • バックアップファイル名に日付を含めることを推奨:backup_YYYYMMDD.sql

📚 詳細説明

背景と必要性

現代のデータベース管理では、phpMyAdmin、MySQL Workbench、DBeaverなどのGUIツールが便利なバックアップ・復旧機能を提供しています。しかし、次のような状況ではコンソールコマンドが必須です:

  • ホスティング環境:共有ホスティングでSSHアクセスのみ可能な場合
  • サーバー自動化:crontabを利用した定期バックアップ設定
  • 大容量データ:GUIツールのタイムアウトやメモリ制限
  • リモートサーバー:ネットワーク制約でGUIアクセスが困難な環境

技術的詳細

mysqldumpオプション詳細説明

# 構造のみバックアップ(データ除外)
mysqldump -u[ユーザー名] -p[パスワード] --no-data [DB名] > structure_only.sql

# データのみバックアップ(構造除外)
mysqldump -u[ユーザー名] -p[パスワード] --no-create-info [DB名] > data_only.sql

# 圧縮バックアップ(容量節約)
mysqldump -u[ユーザー名] -p[パスワード] [DB名] | gzip > backup.sql.gz

# 特定テーブルのみバックアップ
mysqldump -u[ユーザー名] -p[パスワード] [DB名] [テーブル名] > table_backup.sql

復旧時の注意事項

# データベースが存在しない場合、まず作成
mysql -u[ユーザー名] -p[パスワード] -e "CREATE DATABASE IF NOT EXISTS [DB名];"

# その後復旧実行
mysql -u[ユーザー名] -p[パスワード] [DB名] < backup.sql

実際の活用事例

1. 定期バックアップ自動化(crontab)

# crontab -e で編集
# 毎日午前2時にバックアップ
0 2 * * * /usr/bin/mysqldump -umyuser -pmypass mydb > /backup/daily_$(date +\%Y\%m\%d).sql

# 毎週日曜日午前3時に全体バックアップ
0 3 * * 0 /usr/bin/mysqldump -umyuser -pmypass --all-databases > /backup/weekly_$(date +\%Y\%m\%d).sql

2. サーバー間データ移行

# 元のサーバーでバックアップ
mysqldump -uolduser -poldpass production_db > migration_backup.sql

# ファイル転送(scpを使用)
scp migration_backup.sql user@newserver:/tmp/

# 新しいサーバーで復旧
mysql -unewuser -pnewpass production_db < /tmp/migration_backup.sql

3. エラー処理とトラブルシューティング

よく発生するエラーと解決方法:

# エラー:Access denied
# 解決:ユーザー権限確認
GRANT SELECT, SHOW DATABASES ON *.* TO 'username'@'localhost';

# エラー:Unknown database
# 解決:データベースをまず作成
mysql -u[ユーザー名] -p[パスワード] -e "CREATE DATABASE [DB名];"

# エラー:Table doesn't exist
# 解決:外部キー制約を一時的に解除してから復旧
mysql -u[ユーザー名] -p[パスワード] -e "SET FOREIGN_KEY_CHECKS=0;"
mysql -u[ユーザー名] -p[パスワード] [DB名] < backup.sql
mysql -u[ユーザー名] -p[パスワード] -e "SET FOREIGN_KEY_CHECKS=1;"

4. 大容量データベース処理

# 進行状況を表示しながらバックアップ
mysqldump -u[ユーザー名] -p[パスワード] [DB名] | pv > backup.sql

# 圧縮と同時にバックアップ(ディスク容量節約)
mysqldump -u[ユーザー名] -p[パスワード] [DB名] | gzip > backup.sql.gz

# 圧縮ファイルから直接復旧
gunzip < backup.sql.gz | mysql -u[ユーザー名] -p[パスワード] [DB名]

結論

コンソールを利用したMySQL/MariaDBバックアップと復旧は、ホスティング環境や自動化が必要な状況で非常に有用です。特に-u-pオプションの後にスペースなしでユーザー名とパスワードを続けて書くことが重要なポイントです。

次のステップとして推奨する内容:

  • 定期バックアップスクリプトの作成とcrontabの設定
  • バックアップファイルの暗号化とリモートストレージへのアップロード
  • 復旧テスト環境の構築と検証プロセスの確立

データは企業の生命線です。定期的なバックアップと復旧テストを通じて安全なデータ管理を実践しましょう。