mysqldump で「Couldn’t execute ‘FLUSH TABLES WITH READ LOCK’」エラーが発生するようになったので調査対応する

DB関連・MySQL

こんにちは!ひこにきです

現在稼働しているシステムで crontab で定期的に mysqldump で論理バックアップを取得していたのですが、いつの間に下記のエラーが発生するようになってました

エラーの内容 Couldn’t execute ‘FLUSH TABLES WITH READ LOCK’

エラーの詳細内容

mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'xx_user'@'%' (using password: YES) (1045)

以下は バックアップで実行していたmysqldumpコマンドです

mysqldump --single-transaction -u${DB_USER} -h${DB_HOST} -p${DB_PW} ${DB_NM} | gzip > ${GZFILE}

原因

正直、mysqldump が権限エラーになる要因はまったく思い当たらなかったのですが、直近では php のアップグレード対応で各パッケージモジュールを更新したことでしょうか

mysqldump の バージョン確認
mysqldump --version
mysqldump  Ver 10.13 Distrib 5.7.43, for Linux (x86_64)

むむぅ、、色々調査してみると mysql の bugfix に以下の記述がありました

5.7.42:
With mysqldump, using --single-transaction required either the RELOAD or FLUSH_TABLES privilege with mysqldump v5.7.41. 
This requirement now only applies when gtid_mode=ON (defaults to OFF) and with --set-gtid-purged =ON|AUTO (defaults to AUTO).
参考:https://bugs.mysql.com/bug.php?id=109685

記載の通り –single-transaction を指定する場合に RELOAD もしくは FLUSH_TABLES の権限が必要になったとのこと、そしてその条件は gtid_mode=ON でかつ –set-gtid-purged が ON もしくは AUTO の場合必要とのことでした

エラーの解消方法

–set-gtid-purged の デフォルトは AUTO なので mysqldump のオプションで –set-gtid-purged=OFF を指定することで対応します

以下のようにコマンドを修正してエラー解消されました!

mysqldump --single-transaction --set-gtid-purged=OFF -u${DB_USER} -h${DB_HOST} -p${DB_PW} ${DB_NM} | gzip > ${GZFILE}

mysqldump(client側ツール)のアップデートでまさかの権限エラーになるとは思いもしませんでした、、、

サーバー側の設定など調査し始めたらハマりそうな事象ですね

同様の事象が発生した際に参考になれば幸いです!

タイトルとURLをコピーしました