暂无图片
有个慢查询没有执行完成,如果执行了flush tables 会出现等待,但是mysqldump导出没有问题,底层也执行flush tablbes
我来答
分享
暂无图片 匿名用户
有个慢查询没有执行完成,如果执行了flush tables 会出现等待,但是mysqldump导出没有问题,底层也执行flush tablbes

有个慢查询没有执行完成,如果执行了flush tables 会出现等待,但是mysqldump导出没有问题,底层也执行flush tables,这个flush  为什么能成功?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
周波

  mysqldump是否执行flush table是由命令选项决定的,并非每次执行都会执行flush tables语句。
  当执行mysqldump转储数据时,带上哪些选项才会执行flush tables呢?
  (1) --lock-all-tables
  在执行mysqldump命令时,带上 --lock-all-tables选项,mysqldump会在数据转储开始时执行‘flush tables with read lock;’语句,尝试关闭所有所有数据库下所有已打开的表,并施加全局的读锁,直到数据转储结束,才释放锁;若此时数据库中任一张表还在被使用,mysqldump将会被阻塞,直到所有数据库中所有表都没有被访问。
  (2) --master-data(MySQL8.0.26弃用)或–source-data(自MySQL8.0.26启用)
  当执行mysqldump命令时,带上 --master-data选项,该选项会自动关掉 --lock-tables(对表施加本地读锁),打开 --lock-all-tables。
  (3) --master-data和 --single-transaction
  当执行mysqldump命令时,同时带上 --master-data和 --single-transaction选项时,全局读锁只在转储开始的一小段时间内获得。
  其它情况,mysqldump都不会执行flush tables with read lock来获取全局读锁,当数据转储时,存在慢查询,也不会阻塞mysqldump。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏