MySQL8.0.34でmysqldumpで「A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions」の警告
久し振りに MySQL で mysqldump する機会があったのでメモ。
現在利用しているのは MySQL8.0.34 ですが、実際には AWS の Aurora MySQL をつかっているので、パラメータグループの値によって設定が調整されています。
また、MySQL8.0.x の中でも非推奨項目が増えたり、挙動が変わっている部分があるのでハマりやすそうです。
今回は、mysqldump コマンド実行時に、以下の警告に遭遇したので対処したいと思います。
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don’t want to restore GTIDs, pass –set-gtid-purged=OFF. To make a complete dump, pass –all-databases –triggers –routines –events.
Warning: A dump from a server that has GTIDs enabled will by default include the GTIDs of all transactions, even those that were executed during its extraction and might not be represented in the dumped data. This might result in an inconsistent data dump.
In order to ensure a consistent backup of the database, pass –single-transaction or –lock-all-tables or –master-data.
mysqldumpコマンド
mysqldump のコマンドで意識することは少ないのですが、オプション指定をしない場合はシンプルに以下のような感じ。
(認証部分は、ここでは省略してベタでコマンド書いてます)
mysqldump -u hoge -p -h [HOST] [DB] > [出力ファイルパス]
今回は警告を受けたので、警告の内容から必要なオプションを特定。
また、レプリケーションやブルーグリーンデプロイなどの機会もあるので、その辺りのパラメータの設定は変更しない前提とします。
警告の内容
警告の内容を日本語で訳すと以下の内容となります。
警告: GTID が有効なサーバーからの部分ダンプには、デフォルトですべてのトランザクションの GTID が含まれます。これには、データベースの抑制された部分を変更したトランザクションも含まれます。GTID をリストアしたくない場合は、–set-gtid-purged=OFF を指定します。完全なダンプを作成するには、–all-databases –triggers –routines –events を指定します。
警告: GTID が有効になっているサーバーからのダンプには、デフォルトですべてのトランザクションの GTID が含まれます。これには、抽出中に実行され、ダンプされたデータに反映されない可能性のあるトランザクションも含まれます。その結果、データのダンプに不整合が生じる可能性があります。
データベースのバックアップの整合性を確保するには、–single-transaction または –lock-all-tables または –master-data を指定します。
今回は単なる 10 レコード程度のデータのバックアップですし、リストアすることになったも GTID を意識する必要はありません。
ということで、以下のオプションで回避します。
(他のオプションもいくつか利用していますが、ここでは省略します)
–set-gtid-purged=OFF
mysqldump -u hoge -p -h [HOST] [DB] \
--set-gtid-purged=OFF > [出力ファイルパス]