我确实找到了与此类似的其他帖子,但想了解有关 mysqldump 的这些选项的一些额外信息。我知道 --single-transaction 和 --lock-tables 是互斥的操作。以下是我关于这些选项的问题。
a) 假设我选择使用 --lock-tables 选项。在这种情况下,mysqldump 获取所有表的读锁。因此,任何其他尝试写入表的进程都将进入阻塞(等待)状态。但是如果 mysqldump 需要很长时间,正在等待的进程会继续无限期地等待吗?
例如,我尝试了这个实验——我有一个 Java (JDBC) 程序写入一个名为 MY_TEST 的 mysql 数据库表。我登录到 mysql 控制台并发出“LOCK TABLES MY_TEST READ;” 手动命令。所以Java进程被阻塞等待锁被释放。我的问题是,如果长时间没有释放读锁,是否会出现连接超时或任何此类问题?我等了两分钟,没有发现任何错误,一旦使用“UNLOCK tables”命令释放锁,java进程就会正常继续。这种行为是 java mysql 驱动程序特有的,还是我可以从使用 mysql 驱动程序的 C 程序中得到同样的结果?
b)我的第二个问题是关于 --single-transaction 选项。假设我有 10 个 InnoDB 表,其中 3 个表相互关联(使用 FK),其他表相互独立但仍在使用 InnoDB 引擎。单个事务是否仅适用于使用 FK 相互关联的 3 个表?或者我可以期望 7 个独立表的状态与 3 个相互依赖的表被转储时的状态完全相同。