概要
Movable Type(MT)などデータ量が多いCMSのMySQLバックアップでは、単に mysqldump を実行しただけだと、
文字化け・権限エラー・復元時の不整合が発生することがあります。
本資料では、実際に発生した障害を踏まえ、
安全にDBダンプを取得するためのオプションと注意点を整理します。
推奨コマンド(汎用例)
mysqldump \
--ssl-mode=REQUIRED \
-h <DB_HOST> \
-u <DB_USER> -p \
--no-tablespaces \
--hex-blob \
--set-gtid-purged=OFF \
--default-character-set=utf8mb4 \
<DATABASE_NAME> \
> ~/db_backup/dump_$(date +"%Y%m%d_%H%M%S").sql
各オプションの意味と障害事例
–no-tablespaces
MySQL 5.7.31 以降では、mysqldump が tablespace 情報を取得する際に
INFORMATION_SCHEMA.FILES を参照し、PROCESS 権限が必要になります。
権限がない場合、以下のエラーが発生します。
Access denied; you need (at least one of) the PROCESS privilege(s)
対策として --no-tablespaces を指定します。
–hex-blob
BLOB / VARBINARY カラムを含む場合、オプションなしでは
Invalid utf8 character string 警告や文字化けが発生することがあります。
--hex-blob により 16進表記で安全に出力できます。
–set-gtid-purged=OFF
GTID 有効環境では、GTID 情報がダンプに含まれることで
復元先で不整合やエラーが起きることがあります。
単純なバックアップ用途では OFF を指定します。
–default-character-set=utf8mb4
文字コードを明示しない場合、環境差により文字化けが発生する可能性があります。
MTでは utf8mb4 を明示指定するのが安全です。
まとめ
mysqldump はオプションを適切に指定しないと、以下の問題が発生します。
- PROCESS 権限不足によるダンプ失敗
- バイナリデータの文字化け
- GTID 情報による復元エラー
- 文字コード不一致による文字化け
上記を回避するため、本資料のコマンドを基本形として運用することを推奨します。