目次:
なぜMySQLデータベースのバックアップが必須なのか?
「昨日まで普通に動いていたのに、今朝サーバーが起動しない」。こんな言葉を聞いたことがある、あるいは身をもって経験したことはありませんか?システム運用において「まさか」は必ず起こります。そして、その「まさか」が起きたときにMySQLデータベースのバックアップがなければ、貴重なデータは一瞬で失われ、ビジネスそのものが立ち行かなくなる可能性もあるのです。
では、なぜバックアップがこれほどまでに必須なのでしょうか。その理由を具体的に見ていきましょう。
1. ハードウェア障害は予告なく発生する
ディスク故障や電源トラブル、OSクラッシュなど、ハードウェア障害は突然訪れます。MySQLのデータファイルが破損し、サービスが停止することも決して珍しくありません。こうした事態でも、MySQLデータベースのバックアップがあれば、障害直前の状態にデータを復元できます。
2. ヒューマンエラーは誰にでも起こる
「DROP TABLEをうっかり実行してしまった」「UPDATEで重要な値をすべて書き換えてしまった」。MySQLバックアップが重視される最大の理由のひとつが、この人為的ミスです。経験豊富なエンジニアでも、疲れや注意力の低下からミスを犯します。MySQLのバックアップがあれば、バックアップ時点の状態にデータベースを復元することで、致命的なデータ損失を防げます。
3. サイバー攻撃やランサムウェアの脅威
データベースを標的とした攻撃やランサムウェア被害は後を絶ちません。攻撃者はデータを暗号化し、身代金を要求します。このようなケースでも、MySQLデータベースのバックアップを別の場所に保持していれば、攻撃前の状態に復元でき、身代金を支払うことなくシステムを復旧させられます。
4. バージョンアップや移行時の安全網
MySQLのバージョンアップやサーバー移行は必須タスクですが、常にリスクを伴います。MySQLバックアップを事前に取得しておけば、万が一失敗しても元の状態に簡単に復元できます。
5. バックアップは「復元テスト」で完結する
バックアップは取得して終わりではありません。せっかくMySQLデータベースのバックアップを取得しても、実際に復元できなければ意味がありません。復元テストを定期的に実施し、バックアップファイルが使える状態かを検証することが、真のデータ保護につながります。
まずはここから!MySQLデータベースのバックアップ方法
は実際に、どのような方法でバックアップを取ればよいのでしょうか。ここでは、初心者の方でも取り組みやすい4つの手法を、簡単なものから応用へと段階を追ってご紹介します。
方法1:mysqldumpコマンドを使ってバックアップ
MySQLに標準で搭載されているmysqldumpは、データベースの内容をSQL文として出力する論理バックアップの代表格です。特別なインストールが不要で、コマンドひとつで即座にバックアップが取れる手軽さが最大の魅力。小~中規模のデータベースや、移行を目的としたバックアップに最適です。
ステップ 1:ターミナルを開き、以下のコマンドを実行します。
mysqldump -u ユーザー名 -p データベース名 > バックアップファイル.sql
ユーザー名とデータベース名はご自身の環境に合わせて置き換えてください。
ステップ 2:パスワードを求められたら、MySQLのユーザーパスワードを入力します。
ステップ 3:バックアップが完了すると、指定したファイル名(例:バックアップファイル.sql)にSQL文が出力されます。
ステップ 4:サービスを停止せずにバックアップを取りたい場合は、「--single-transaction」オプションを追加します。
mysqldump -u ユーザー名 -p --single-transaction データベース名 > backup.sql
方法2:Linuxのcronを利用してバックアップ
日々の手動バックアップ作業から解放される自動バックアップの仕組みを導入しましょう。Linuxのcronというスケジューラー機能を使えば、mysqldumpの実行を自動化できます。一度設定してしまえば、サーバーが毎日決まった時間にバックアップを取ってくれるため、うっかり忘れを完全に防止できます。
ステップ 1:バックアップ用のシェルスクリプトを作成します。例えば、/home/user/backup.shというファイルに以下の内容を記述します。
#!/bin/bash
mysqldump -u ユーザー名 -pパスワード データベース名 > /backup/db_$(date +%Y%m%d).sql
ステップ 2:作成したスクリプトに実行権限を付与します。
chmod +x /home/user/backup.sh
ステップ 3:cronにタスクを登録します。
crontab -e
ステップ 4:エディタが開いたら、以下の行を追加します。
0 2 * * * /home/user/backup.sh
保存して終了すれば、設定完了です。以降、指定した時間に自動バックアップが実行されるようになります。
方法3:Percona XtraBackupで物理的にバックアップ
データベースが大規模化し、mysqldumpでは時間がかかりすぎる場合におすすめなのが、物理バックアップツールのPercona XtraBackupです。MySQLのデータファイルを直接コピーする方式のため、大規模データベースでも高速に処理でき、サービスを停止せずにバックアップを取るオンラインバックアップにも対応しています。
ステップ 1:Percona XtraBackupをインストールします。例:
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo yum install percona-xtrabackup-24
ステップ 2:全量バックアップを実行します。
xtrabackup --backup --target-dir=/path/to/backup --user=root --password=パスワード
ステップ 3:バックアップが完了したら、--prepareフェーズを実行してバックアップを一貫性のある状態にします。
xtrabackup --prepare --target-dir=/path/to/backup
方法4:サードパーティツールでクラウドにバックアップ
ここまで紹介した3つの方法は、いずれもバックアップファイルをサーバー内やローカルに保存する前提でした。しかし、サーバー自体がダウンした場合を考えると、バックアップ先をクラウドにしておくことが非常に重要です。
ここではMultCloudというサードパーティ製のツールを使い、MySQLのバックアップをクラウドストレージに直接保存する方法をご紹介します。
MultCloudはGoogle DriveやDropboxなど40種類以上のクラウドサービスを統合管理できるプラットフォームで、MySQLデータベースのバックアップをFTPやデータベースから直接クラウドへ転送できる「ウェブサイトバックアップ」機能を備えています。
ステップ 1:MultCloudの公式サイトにアクセスし、無料アカウントを作成します。
ステップ 2:左メニューの「クラウドを管理する」から、バックアップ先として使いたいクラウドストレージ(例:Google Drive)を選択し、アカウント連携を完了させます。
ステップ 3:左メニューの「ウェブサイトバックアップ」をクリックし、「バックアップ対象のウェブサイト」からバックアップしたいサイトを追加します。
FTP/SFTPサーバーとデータベースサーバーの認証情報(IPアドレス・ポート・ユーザー名・パスワード)を入力すれば完了です。
ステップ 4:バックアップ対象として、ファイル全体に加えてデータベースも選択します。データベースのみを選択することも、ファイルとデータベースの両方を選択することも可能です。
ステップ 5:保存先として先ほど連携したクラウドストレージを選び、「今すぐバックアップ」ボタンをクリックします。
MultCloudの「ウェブサイトバックアップ」機能には、以下のような便利なオプションも用意されています。
- スケジュール機能:バックアップの実行頻度を「毎日」「毎週」「毎月」から選択できます。これを設定すれば、MySQL自動バックアップの環境が完成します。サイトの更新頻度に合わせて最適なスケジュールを選ぶことで、バックアップ作業から完全に手が離せます。
- メール通知機能:バックアップタスクが完了したタイミングで、指定したメールアドレスに完了通知を送信できます。
- フィルタ機能:特定の拡張子を持つファイルだけをバックアップ対象に含めたり、逆に除外したりすることが可能です。
サイト間バックアップ:クラウドストレージだけでなく、別のWebサイト(FTP接続情報を持つ別のサーバー)をバックアップ先として設定することもできます。サイト移行時やテスト環境の作成に非常に役立つ機能です。
さらに、MultCloudは以下の機能を提供しています。
- クラウド転送:大量のファイルを高速であるクラウドから別のクラウドに転送可能です。スケジュール設定やファイルフィルター機能を利用して効率的に管理できます。
- チーム転送:ビジネス向けクラウドアカウント間で、対応するユーザーリストを使用してデータを移行できます。
- クラウド同期:ワンクリックでクラウド間のデータを同期可能です。リアルタイム同期やシンプル同期などの4つの基本モードに加え、6つの高度な一方向同期モード(サブスクライバーのみ利用可)を選択できます。
- クラウドバックアップ:オフライン機能を備えたクラウド間のバックアップが可能です。便利なバックアップバージョン管理でデータを安全に保管できます。
- リモートアップロード:オンラインファイルのリンクをMultCloudに入力するだけで、直接クラウドに保存可能。
- メールからPDFへ:メールをPDFに変換し、添付ファイル付きでローカルまたはクラウドに保存できます。
MySQLデータベースのバックアップからの「復元」手順
ここまで、さまざまなMySQLデータベースのバックアップ手法をご紹介してきました。しかし、バックアップはあくまで「手段」であり、最終的な目的はデータを確実に復元することにあります。ここからは、各バックアップ方法に対応した復元手順を、シンプルにわかりやすく解説していきます。
mysqldumpでバックアップしたデータを復元
MySQLデータベースのバックアップでおなじみのmysqldumpは、復元もコマンド一発で完了します。「mysql -u ユーザー名 -p データベース名 < バックアップファイル.sql」を実行するだけで、SQL文がデータベースに流し込まれ、元の状態が戻ってきます。小規模なデータベースやテスト環境では、この手軽さが何よりの強みです。
cronで取得したバックアップを手動復元
cronで自動バックアップされたファイルは、日付付きのSQLファイルとしてサーバー内に蓄積されていきます。復元時は、目的の日時のファイルを選び、mysqldumpと同様のmysqlコマンドを手動で実行するだけです。日頃からバックアップファイルの保存場所や命名ルールを整理しておくことで、障害発生時にも慌てずに素早くリストアできます。
Percona XtraBackupによる物理バックアップの復元
オンラインバックアップに対応したPercona XtraBackupの復元は、--prepareでバックアップデータを一貫性のある状態に整えた後、--copy-backでMySQLのデータディレクトリにコピーするという2段階のプロセスを踏みます。
この物理コピー方式は大規模なデータベースほどその高速性を発揮しますが、復元後はデータディレクトリの所有者をmysqlユーザーに変更することを忘れずに行いましょう。
サードパーティツールでクラウドから復元
MultCloudでクラウドバックアップしたデータを元に戻す手順はとてもシンプルです。タスクリストから該当のバックアップタスクを探し、右端のメニューから「戻す」を選択し、表示されたポップアップで復元バージョンと復元先(元の場所か新しい場所か)を指定して「戻す」をクリックするだけです。
復元を始める前に、復元先のサーバーやデータベースへのアクセス権限を改めて確認し、現在のサイト状態を別途保存しておくことで、MySQLデータベースのバックアップからの安全で確実なデータ復旧を実現できます。
まとめ
本記事では、MySQLデータベースのバックアップの必要性から、mysqldump・cron・Percona XtraBackup・クラウドツール(MultCloud)という4つの手法と、それぞれに対応した復元手順までを段階的に解説しました。どの手法にも一長一短があり、自動バックアップやオンラインバックアップ、クラウドバックアップを組み合わせることで、障害時にも迅速かつ確実なデータ復旧が可能になります。
なお、MultCloudは本記事で紹介したサイトバックアップのほかにも、異なるクラウドストレージ間でのファイル同期(一方向・双方向)やクラウド間の直接転送など、多様なクラウド管理機能を備えています。
よくある質問
1.MySQLのデータベースはどこに保存されますか?
MySQLのデータベースファイルは、OSによって保存場所が異なります。Linuxではデフォルトで「/var/lib/mysql」、Windowsでは「C:\ProgramData\MySQL\MySQL Server X.X\Data」に保存されます。ただし、MySQLの設定ファイル(my.cnfやmy.ini)でdatadirを変更すれば、任意の場所に保存先を変更することも可能です。
2. MySQLデータベースのバックアップの種類にはどのようなものがありますか?
MySQLのバックアップは大規模な物理バックアップと論理バックアップの2種類に分けられます。物理バックアップはデータファイルを直接コピーする方式で、高速かつ大規模DBに適しています。一方、論理バックアップ(mysqldumpなど)はSQL文として出力する方式で、移植性が高く異なるバージョン間の移行に強いのが特徴です。
3.バックアップ中にテーブルがロックされてしまうのはなぜですか?
mysqldumpはデフォルトで、バックアップ中のデータ整合性を保つためにテーブルをロックします。特にMyISAMテーブルではこの動作が顕著です。この問題を回避するには、--single-transactionオプションを使用してください。このオプションを使えば、InnoDBテーブルに対してロックなしで一貫性のあるオンラインバックアップが可能になります。
4.cronでバックアップが実行されません。なぜですか?
cronでバックアップが実行されない主な原因は、cronサービスが起動していない、cron式の文法ミス、スクリプトに実行権限がない、環境変数(特にPATH)が引き継がれないの4つです。まずcrontab -lでタスクが登録されているか確認し、スクリプト内でMySQLのフルパスを指定するか、環境変数を明示的に設定してみてください。
5.「Too many open files」エラーが発生しました。どうすればいいですか?
このエラーは、MySQLが同時に開くことのできるファイル数の上限に達したときに発生します。対策としては、MySQLのopen_files_limitを増やす、table_open_cacheの値を小さくして一度に開くファイル数を減らす方法を行います。OSレベルのファイルディスクリプタ制限も合わせて確認し、必要に応じて引き上げてください。
6.クラウドバックアップのメリットは何ですか?
クラウドバックアップの最大のメリットは、サーバー障害や災害時でもデータを安全に保護できる点です。オンプレミス環境がダウンしても、クラウド上のバックアップから迅速に復元できます。
また、自動バックアップの設定や世代管理も容易で、運用負荷を大幅に軽減できます。さらに、MultCloudのようなツールを使えば、異なるクラウドストレージ間でのバックアップ管理も一括で行え、バックアップ先の柔軟な選択が可能になります。
MultCloudがサポートするクラウド
-
Google Drive
-
Google Workspace
-
OneDrive
-
OneDrive for Business
-
SharePoint
-
Dropbox
-
Dropbox Business
-
MEGA
-
Google Photos
-
iCloud Photos
-
FTP
-
box
-
box for Business
-
pCloud
-
Baidu
-
Flickr
-
HiDrive
-
Yandex
-
NAS
-
WebDAV
-
MediaFire
-
iCloud Drive
-
WEB.DE
-
Evernote
-
Amazon S3
-
Wasabi
-
ownCloud
-
MySQL
-
Egnyte
-
Putio
-
ADrive
-
SugarSync
-
Backblaze
-
CloudMe
-
MyDrive
-
Cubby
