MySQL8.0.32と5.7.41のmysql-clientだとAmazon RDS/Auroraに--single-transactionオプションつけたmysqldumpが実行できない

Created
2023/1/26 4:46
技術本部 サービスリライアビリティグループ(SRG)の鬼海(@fat47)です。
#SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
本記事は、SRG 内にある DBWG(DBワーキンググループ)が全社内向けに提供しているデータベースに関する資料を公開します。
なにかの役に立てば幸いです。
 

概要


タイトルにある通りですが、2023年1月にリリースされた最新バージョンだと、mysqldumpの--single-transactionオプションを利用したときの挙動が変わったため、Amazon RDS/Auroraで実行ができません。
 

対象のバージョン


MySQL8.0.32
MySQL5.7.41
 

mysqldumpの挙動が変更


MySQL8.0.32のリリースノートには下記のように書いてあります。
The data and the GTIDs backed up by mysqldump  were inconsistent when the options --single-transaction  and --set-gtid-purged=ON  were both used. It was because in between the transaction started by mysqldump  and the fetching of GTID_EXECUTED , GTIDs on the server could have increased already. With this fixed, a FLUSH TABLES WITH READ LOCK  is performed before the fetching of GTID_EXECUTED  to ensure its value is consistent with the snapshot taken by mysqldump
📖
--single-transaction と --set-gtid-purged=ON のオプションを両方使用した場合、mysqldump でバックアップされたデータと GTID に矛盾が発生しました。これは、mysqldumpによって開始されたトランザクションとGTID_EXECUTEDのフェッチの間に、サーバ上のGTIDが既に増加している可能性があったためです。この修正により、FLUSH TABLES WITH READ LOCK が GTID_EXECUTED のフェッチの前に実行され、その値が mysqldump が取得したスナップショットと一致することが確認されました。
なぜか5.7.41のリリースノートには何も書かれていませんが、同様の修正が入っている模様です。
 

つまりなにが都合悪くなる?


Aurora環境で--single-transactionのオプションを指定したmysqldumpが利用できなくなります。
'FLUSH TABLES WITH READ LOCK’が権限不足でAuroraでは実行できない為です。
もしかしてオンプレ環境のMySQLでもmysqldump中ずっとFLUSH TABLES WITH READ LOCKが有効になるのか!?と思い検証しましたが、流石にそんなことはなくmysqldump中も更新処理は動きました。
 

回避方法


—single-transactionオプションを利用しないという手がまずあります。
下記のAmazon公式記事は、RDSに対して—master-dataオプションを利用した際にFLUSH TABLES WITH READ LOCK が実行されるので利用できない。という記事になります。
 
事象としては今回と同じになるので、ここで記載された2つの解決方法は以下の通りです。
  • アプリケーションを停止して更新がない状態でmysqldumpを実行する
  • リードレプリカのレプリケーションを停止してmysqldumpを実行する
 
論理バックアップが必要なときはmysqldumpではなく、MySQL Shell Dump Utilityを利用するのも解決策の一つかと思います。
こちらのほうが並列でダンプ・リストアが動くので高速です。
8.0.22以降のMySQL shellであればFLUSH TABLES WITH READ LOCKが取得できなかったら、かわりにLOCK TABLES ... READをつかって一貫性のあるバックアップを取得することができるので、RDS/Auroraでも実行可能です。
 

終わりに


SRG では一緒に働く仲間を募集しています。 ご興味ありましたらぜひこちらからご連絡ください。
 
このエントリーをはてなブックマークに追加