仅在 Linux 上出现 AWS RDS `flush tables` 错误的 mysqldump

回答 2 浏览 3363 2023-01-20

我有一个使用mysqldump从AWS RDS的MariaDB导出数据的过程,这个过程已经在Concourse的docker-image中成功运行了好几年。

从两天前的晚上开始,这个过程开始失败,并出现了错误。

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

AWS的官方解释似乎是,因为他们不允许主用户有超级权限或GLOBAL READ LOCK,如果设置了 --master-data选项,mysqldump就会失败。

我没有设置这个选项。我正在用这些标志运行。

mysqldump -h ${SOURCE_DB_HOST} ${SOURCE_CREDENTIALS} ${SOURCE_DB_NAME} --single-transaction --compress | grep -v '^SET .*;$' > /tmp/dump.sql

mysqldump在我的本地Mac上执行时工作正常。但在Linux环境下,它失败了,因为它无法执行FLUSH TABLES WITH READ LOCK。

我的问题是,有人知道如何在linux上禁用mysqldump中的FLUSH TABLES WITH READ LOCK命令吗?

编辑:很高兴接受下面@sergey-payu的回答,因为他已经解决了我的问题,但这里有一个MySQL错误报告的链接,以利于其他任何人遇到这个问题https://bugs.mysql.com/bug.php?id=109685

cjashwell 提问于2023-01-20
这几天我也面临着类似的问题。AWS做了一些事情。我有多个账户,所有的账户都发生了这种情况。我的错误如下:mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'root'@'%' (using password: YES) (1045)Kiran M 2023-01-21
谢谢你提供这些信息。在这种情况下,我将与AWS支持部门联系。cjashwell 2023-01-21
bugs.mysql.com/bug.php?id=109685#c5301232023-02-21上报告说,即将有一个修复。"从即将发布的MySQL Server 5.7.42 / 8.0.33版本开始修复,这里是文档团队提议的更新日志条目。5.7.42:在mysqldump中,使用--single-transaction需要RELOADFLUSH_TABLES的权限和mysqldump v5.7.41。现在这个要求只适用于gtid_mode=ON(默认为OFF)和--set-gtid-purged = ON|AUTO(默认为AUTO)时。[...]"cueedee 2023-02-28
2 个回答
#1楼 已采纳
得票数 21

几天前我也遇到了同样的问题。我的mysqldump脚本多年来一直工作得很好,直到它开始给我带来Access denied; you need (at least one of) the RELOAD privilege(s) for this operation错误。我的第一直觉是授予这个权限。但在那之后,我开始得到Access denied for user 'user'@'%' (using password: YES) (1045)错误,这在AWS文档中是记载的。经过几个小时的调查,发现这是mysql最新的5.7.41版本的一个错误(它是1月17日发布的,正是我们开始出现错误的时候)。降级到5.7.40版本解决了这个问题。有趣的是,5.7.41 changelog并没有列出任何接近FLUSH TABLES WITH READ LOCK或默认值的东西。

Sergey Payu 提问于2023-01-22
你有关于这个错误的参考资料吗? 谢谢Maxxer 2023-01-25
我提交了一个错误给Ubuntu,他们指向109685上游。109701也可能是相关的。Maxxer 2023-01-27
对于任何在Ubuntu上想要回滚的人,我是这样做的。sudo apt-get install mysql-client-8.0=8.0.19-0ubuntu5之后是sudo apt-get install mysql-client-core-8.0=8.0.19-0ubuntu5 这将使你得到mysqldump 8.0.19版本,它修复了这个问题> 我还搁置了两个软件包。sudo apt-mark hold mysql-client-8.0sudo apt-mark hold mysql-client-core-8.0Panda 2023-01-27
在回答我自己的评论时,如果有人在ubuntu 22.04中遇到这种情况,根据apt-cache madison,需要修复的版本是初始的jammy,即8.0.28-0ubuntu4theist 2023-01-30
在我的例子中(ubuntu 22.04托管在AWS中)apt-get install mysql-client-core-8.0=8.0.28-0ubuntu4 mysql-client-8.0=8.0.28-0ubuntu4; apt-mark hold mysql-client-core-8.0 mysql-client-8.0注意,你的可用软件包可能会因发行版/可用存储库等而不同。对于任何基于apt的发行版来说,一个通用的解决方案是用apt-cache madison <package>检查可用的版本,看看为你的系统提供了哪些版本theist 2023-02-07
#2楼
得票数 -1

根据5.7.41版本的更新日志。

当同时使用选项--single-transaction和-set-gtid-purged=ON时,mysqldump备份的数据和GTIDs是不一致的。这是因为GTID_EXECUTED是在转储结束时获取的,这时服务器上的GTID可能已经增加。修正了这个问题后,在转储开始时执行了FLUSH TABLES WITH READ LOCK,并在转储结束后立即获取GTID_EXECUTED,以确保其值与mysqldump获取的快照一致。

Donghoon Lee 提问于2023-02-02
Donghoon Lee 修改于2023-02-02