mysqldump を用いた Movable Type DB ダンプの注意事項

概要

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 情報による復元エラー
  • 文字コード不一致による文字化け

上記を回避するため、本資料のコマンドを基本形として運用することを推奨します。