Info2softは、ウェブサイトでより快適で適切な閲覧体験を提供するためにCookieを使用しています。 プライバシーポリシー
Loading...
MySQLデータベースのバックアップは、ハードウェア障害、人為的ミス、サイバー脅威からデータを守るために不可欠です。この記事では基本的なコマンドラインツールから高度なエンタープライズ向けソリューションまで複数の手段を紹介し、用途に合った方式を選択できるように解説します。MySQLではダウンタイムとデータ損失を最小限に抑えるため、定期的なバックアップとポイントインタイムリカバリ(PITR)を組み合わせることが推奨されています。
自環境に最適な戦略を選ぶためには、各バックアップ方式の技術的な違いを把握する必要があります。それぞれバックアップ速度、ストレージコスト、リカバリ時間のバランスが異なります。
基本概念を理解した上で、具体的なツールと戦略を用いたMySQL環境のバックアップ方法を見ていきます。以下の手法は標準のコマンドラインユーティリティから高度なエンタープライズソリューションまでを対象としています。
一般的な手法から専門的な手法へ順に記載していますので、自身のインフラとRTO、RPOなどのリカバリ目標に合った運用方法を選択できます。
mysqldumpはMySQLに標準搭載されている論理バックアップツールです。データベースを再構築するためのCREATE、INSERTコマンドを含むSQLスクリプトを生成します。
手順ガイド:
特定のデータベースをバックアップするには下記コマンドを実行します。MySQLデータを安全にバックアップする基本的な方法です。
mysqldump -u [username] -p [database_name] > backup.sql
mysqldumpは既定でテーブルをロックします。InnoDBテーブルの場合は–single‑transactionを使用し、書き込みをブロックせずに一貫性のあるバックアップを取得します。
mysqldump -u [username] -p --single-transaction --quick [database_name] > backup_innodb.sql
mysqldump -u [username] -p --all-databases > full_server_backup.sql
mysql -u [username] -p [database_name] < backup.sql
メリット:
デメリット:
適した用途:
小規模~中規模データベース(通常50GB未満)、開発環境、異なるサーバー間のデータ移行時。
フルバックアップが特定時点(例:午前2時)のデータを保存するのに対し、バイナリログ(binlogs)はそれ以降に発生したデータベースのすべての変更を記録します。ポイントインタイムリカバリ(PITR)にはバイナリログが不可欠で、クラッシュや人為的ミスの直前の秒までデータベースを復元可能にします。
手順ガイド:
MySQL設定ファイル(my.cnfまたはmy.ini)を確認し、[mysqld]セクションに下記の記述を追加した後サービスを再起動します。
[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
server_id = 1
expire_logs_days = 7 #7日より古いログを自動削除
手法1でフルバックアップを取得する際、現在のバイナリログ位置を記録します。mysqldumpに–master‑data=2オプションを指定します。
mysqldump -u root -p --all-databases --master-data=2 --single-transaction > full_backup.sql
バイナリログはディスク上の物理ファイルです。クラウドストレージや別ディスクなど安全な場所へ単純にコピーします。
rsync -av /var/log/mysql/mysql-bin.* /backup/location/
復元時はまずフルバックアップを読み込み、続いてmysqlbinlogユーティリティを使用し特定時点までの変更を再生します(例:午前10時のDROP TABLE事故の直前まで)。
# 1.フルバックアップを復元
mysql -u root -p < full_backup.sql
# 2.特定時刻までbinlogを再生
mysqlbinlog --stop-datetime="2023-10-27 09:59:59" /var/log/mysql/mysql-bin.000001 | mysql -u root -p
メリット:
デメリット:
適した用途:
1時間のデータ損失も許容できない基幹本番環境(ECサイト、銀行系アプリケーションなど)。
データベースが50GBを超える規模になると、mysqldumpのような論理バックアップは処理速度が遅くなります。Percona XtraBackupは物理バックアップ向け業界標準のオープンソースツールです。論理出力とは異なり、サーバー稼働中にディスク上の実データファイルをコピーします。InnoDBテーブルのトランザクション一貫性を保つホットバックアップ技術により、ダウンタイムなしでデータベースをバックアップできる効率的な手段として広く利用されています。
手順ガイド:
MySQLのバージョンに合ったバージョンをインストールします(例:MySQL 8.0にはXtraBackup 8.0)。
sudo apt-get install percona-xtrabackup-80
下記コマンドを実行し、データファイルを対象ディレクトリへコピーします。
xtrabackup --backup --target-dir=/data/backups/full --user=root --password=your_password
手順2でコピーした生ファイルはコピー実行中にデータベースが書き込みを行うため一貫性がありません。redoログをデータファイルに適用するprepare処理を実行する必要があります。この手順を省略すると復元データが破損する可能性があります。
xtrabackup --prepare --target-dir=/data/backups/full
復元時はMySQLサービスを停止し、データディレクトリを空にした後、準備済みのファイルをコピーバックします。
systemctl stop mysql
rm -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/data/backups/full
#権限修正(必須)
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql
メリット:
デメリット:
適した用途:
大規模エンタープライズデータベース(50GB~TBクラス)、ダウンタイムを許容できない高負荷本番サーバー、高速なRTOが求められる環境。
厳格なコンプライアンス環境で運用する組織、またはMySQL商用版を利用する場合、MySQL Enterprise Backupが公式ソリューションとなります。Percona XtraBackupと同様のホットバックアップ機能を備え、Oracleによる公式サポートとMySQLエコシステムとの深い統合が得られます。ベンダーの直接サポートを受けながらMySQLデータベースをバックアップできる信頼性の高い手段です。
手順ガイド:
前述のオープンソースツールと異なり商用ライセンスが必要です。Oracle Software Delivery Cloudからパッケージをダウンロードし、バックアップコマンドラインツールがインストールされていることを確認します。
mysqlbackup --version
mysqlbackup --defaults-file=/etc/my.cnf --user=root --password=secret --backup-dir=/data/backups/full backup-and-apply-log
Enterprise Backupは変更されたページを追跡する効率的な増分バックアップに対応します。
mysqlbackup --defaults-file=/etc/my.cnf --incremental --incremental-base=dir:/data/backups/full --backup-dir=/data/backups/inc backup
復元時はサーバーを停止しcopy‑backコマンドを使用します。
systemctl stop mysqld
mysqlbackup --defaults-file=/etc/my.cnf --backup-dir=/data/backups/full copy-back
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
メリット:
デメリット:
適した用途:
認証済みソフトウェア、24時間365日ベンダーサポート、MySQL Enterpriseエコシステムとのシームレスな連携を必要とする大企業、金融機関、政府機関。
標準的なコピーベースのバックアップに数時間を要するTBクラスの巨大データセットを扱う場合、LVMまたはZFSを利用したファイルシステムスナップショットが有効です。ファイルを一つずつコピーする代わりに、OSのストレージレイヤーを利用しファイルシステムの仮想的な「凍結」イメージを作成します。データベースサイズに関わらず数秒で完了する、物理的なMySQLバックアップの高速な手法の一つです。
手順ガイド:
スナップショットの一貫性を確保するため、データベースファイルを安定した状態にします。コマンドラインセッションを開きグローバルリードロックを実行します。
FLUSH TABLES WITH READ LOCK;
最初のターミナルはロックを保持したまま、別のターミナルウィンドウを開きます。Logical Volume Manager(LVM)を使用しスナップショットを作成します。
#構文:lvcreate -L [サイズ] -s -n [スナップショット名] [元ボリュームパス]
lvcreate -L 10G -s -n mysql_backup_snap /dev/vg0/mysql_data
スナップショットコマンドが完了したら(通常即時)、最初のターミナルに戻りロックを解除します。アプリケーションは再び完全に書き込み可能になります。
UNLOCK TABLES;
スナップショットは凍結された参照イメージです。データを保護するためマウントし、ファイルをリモート先へコピーします。
mount /dev/vg0/mysql_backup_snap /mnt/snapshot
tar -czf /backup/location/mysql_backup.tar.gz /mnt/snapshot
#後始末
umount /mnt/snapshot
lvremove /dev/vg0/mysql_backup_snap
メリット:
デメリット:
適した用途:
メンテナンスウィンドウの最小化が最優先の超大規模データベース(VLDB)、または本番データベースをステージング環境へ迅速にクローンする場面。
高負荷環境では、最適化されたバックアップスクリプトでもプライマリサーバーのパフォーマンス低下(レイテンシ)を引き起こす場合があります。レプリケーションベースの戦略では、本番データをリアルタイムでミラーリングするセカンダリMySQLサーバー(レプリカ)を構築し、バックアップ処理をこのセカンダリサーバー上で実行します。これにより本番プライマリサーバーはバックアップ中の負荷やロックの影響を一切受けません。
手順ガイド:
バックアップ前にレプリカがプライマリに完全に追いついていることを確認します。レプリカサーバーのコマンドラインにログインします。
SHOW REPLICA STATUS\G
バックアップ中にデータが変更されないよう、レプリケーションのSQLスレッドを停止します。これによりレプリカは新しい更新に対し「凍結」した状態になりますが、マスターとの接続は維持されます。
STOP REPLICA SQL_THREAD;
データが静的になったので、レプリカサーバー上で任意のバックアップ手法(mysqldumpまたはxtrabackupなど)を実行します。
#レプリカ上でmysqldumpを使用する例
mysqldump -u [username] -p --all-databases > /backup/replica_backup.sql
バックアップ完了後、レプリケーションスレッドを再起動します。レプリカはバックアップ期間中にマスターで発生したすべての変更を自動的に取得・適用します。
START REPLICA SQL_THREAD;
メリット:
デメリット:
適した用途:
プライマリサーバーのパフォーマンス低下を一切許容できない24時間365日稼働の高可用アプリケーション、または災害復旧(DR)サイトを構築する組織。
すべての管理者がコマンドラインインターフェースに慣れているわけではありません。初心者や簡易な共有ホスティング環境を管理する場合は、GUI(グラフィカルユーザーインターフェース)ツールがクリック操作でMySQLデータをバックアップする手段を提供します。代表的なツールは公式デスクトップクライアントのMySQL WorkbenchとWebベースのphpMyAdminです。
手順ガイド:
MySQL Workbench(公式デスクトップツール)
phpMyAdmin(Webベース)
手動スクリプトや個別ツールの管理が複雑になるエンタープライズ環境では、i2Backupのような集中型自動プラットフォームが理想的なソリューションとなります。
i2Backupは物理、仮想、クラウド環境にまたがる構造化・非構造化データを扱うプロ向けデータ保護プラットフォームです。バラバラなバックアップタスクを脱却し、最新の分散アーキテクチャによる「設定したら放置」の統一された運用フローを実現します。
i2Backupの主な機能
メリット:
デメリット:
データベース管理の世界では、バックアップの価値は最後に成功した復元テストによって決まります。プロフェッショナルなMySQLバックアップ運用を行うため、業界で実証済みの下記ベストプラクティスに従ってください。