如果我使用 mysqldump --single-transaction,根据文档,它应该使用读锁刷新表以获得一致的状态,然后启动事务,并且不应该等待写入者。
但是,我昨晚发现了以下情况:
摘自显示完整的进程列表:
数百个……
Command: Query
Time: 291
State: Waiting for table flush
Info: insert into db_external_notification.....
Run Code Online (Sandbox Code Playgroud)
那么这个:
Command: Query
Time: 1204
State: Sending data
Info: SELECT /*!40001 SQL_NO_CACHE */ * FROM `db_external_notification`
Run Code Online (Sandbox Code Playgroud)
其余线程处于睡眠状态
有谁知道这些插入物在等什么?我没有看到任何 FLUSH 表或 DDL 或手册中提到的任何可能导致查询等待的内容。
完整的 mysqldump 命令
mysqldump --quick --add-drop-table --single-transaction --master-data=2 -uxx -pxx dbname
Run Code Online (Sandbox Code Playgroud)
我猜 --quick 在这里是多余的,可能是早期的遗留物,这个脚本很旧,但不应该伤害任何东西