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。