MySQL 8.0.32中mysqldump需要"reload/flush_tables权限"问题的解决方案
2023-03-27 10:15 abce 阅读(840) 评论(0) 编辑 收藏 举报在MySQL Server 8.0.32, Oracle修复了Bug #105761:
"mysqldump make a non-consistent backup with ‐‐single-transaction option"
这引起了用户的一波抱怨,他们无法再使用mysqldump程序进行备份,因为缺乏所需的权限。
Bug #109701 "Fix for #33630199 in 8.0.32 introduces regression when ‐‐set-gtid-purged=OFF"
Bug #109685 "mysqldump has incompatible change in MySQL 8.0.32″
之后,Oracle承认了这个问题,甚至在MySQL Server 8.0.32版本说明中增加了一个新的段落。
Limitation: This fix adds a requirement for the RELOAD privilege when using ‐‐single-transaction to execute FLUSH TABLES WITH READ LOCK; the MySQL team is investigating a solution. (Bug #33630199, Bug #105761)
Percona Server for MySQL 8.0.32-24对这个问题提出一个更好的方案。
下面将详细描述mysqldump程序在创建转储时使用的机制。
名词解释
·STWCS – START TRANSACTION WITH CONSISTENT SNAPSHOT
·FTWRL – FLUSH TABLES WITH READ LOCK
1.开启了GTID模式
mysqldump命令行参数 |
MySQL Server 8.0.31中的mysqldump |
MySQL Server 8.0.32中的mysqldump |
Percona Server 8.0.32中的mysqldump |
--single-transaction --set-gtid-purged=OFF |
STWCS |
FTWRL STWCS |
STWCS |
--single-transaction --set-gtid-purged=ON |
STWCS |
FTWRL STWCS |
STWCS |
2.未开启GTID模式
mysqldump命令行参数 |
MySQL Server 8.0.31中的mysqldump |
MySQL Server 8.0.32中的mysqldump |
Percona Server 8.0.32中的mysqldump |
--single-transaction |
STWCS |
FTWRL STWCS |
STWCS |
综上所述,当不开启gtid时,使用Percona Server的mysqldump程序(MySQL 8.0.32)和"‐‐single-transaction"命令行参数是安全的。当开启gtid时,使用Percona Server的mysqldump程序(MySQL 8.0.32)和"‐‐single-transaction ‐‐set-gtid-purged=OFF"命令行参数是安全的。创建这些转储不依赖于向MySQL发送FTWRL,因此备份用户不需要要RELOAD/FLUSH_TABLES特权。
另一方面,Percona Server for MySQL 8.0.32使用mysqldump工具时,"‐‐single-transaction ‐‐set-gtd-purged=On",只有STWCS语句(没有FTWRL)会被发送到MySQL,这保证了只有在使用Percona Server for MySQL(而不是Oracle MySQL Server)时结果一致。这是因为Percona Server for MySQL有额外的代码补丁,而Oracle MySQL Server没有。
基本上,当你在MySQL 8.0.32的实例上使用Percona Server的mysqldump工具时,"‐‐single-transaction ‐‐set-GTID-purged=ON",你会得到旧的(错误的)8.0.31行为,它不能保证快照和被PURGE的GTID集是同步的。
如果你确实需要在Oracle MySQL Server实例上运行mysqldump"‐‐single-transaction ‐‐set-gtid-purged=ON",并且你想要获得数据的一致快照,你别无选择,只能使用MySQL Server 8.0.32的mysqldump二进制文件。在这种情况下,你的用户需要具有RELOAD或FLUSH_TABLES特权。
请注意,这些建议只是临时解决方案,在Oracle正确修复这些错误之前可以使用(这些修复目前计划包含在即将推出的MySQL Server 8.0.33中)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2021-03-27 如何调整PostgreSQL的 Out-Of-Memory Killer设置