Я нашел другие посты, похожие на это, но хотел немного больше информации об этих опциях mysqldump. Я понял, что --single -action и --lock-таблицы являются взаимоисключающими операциями. Ниже приведены мои вопросы относительно этих опций.
a) Предположим, я выбрал опцию --lock-tables. В этом случае mysqldump получает блокировку чтения для всех таблиц. Таким образом, любой другой процесс, пытающийся записать данные в таблицы, перейдет в состояние блокировки (ожидания). Но если mysqldump займет действительно много времени, будут ли процессы, которые ожидают, продолжать ждать бесконечно?
Я попробовал этот эксперимент для примера - у меня есть программа Java (JDBC), пишущая в таблицу базы данных mysql с именем MY_TEST. Я вошел в консоль mysql и выдал «LOCK TABLES MY_TEST READ;» Команда вручную. Таким образом, Java-процесс заблокирован в ожидании снятия блокировки. Мой вопрос: будет ли время ожидания соединения или такая проблема, если блокировка чтения не будет снята в течение длительного времени? Я ждал две минуты и не заметил никакой ошибки, и процесс java продолжился нормально после снятия блокировки с помощью команды «UNLOCK tables». Это специфическое поведение для драйвера Java MySQL или я могу ожидать то же самое от программы на C, использующей драйвер MySQL?
b) Мой второй вопрос касается опции --single -action. Предположим, у меня есть 10 таблиц InnoDB, из которых 3 таблицы связаны друг с другом (с использованием FK), а другие независимы, но все еще используют движок InnoDB. Применяется ли отдельная транзакция только к 3 таблицам, которые связаны между собой с помощью FK? или могу ли я ожидать, что состояние 7 независимых таблиц будет точно таким, каким оно было при сбросе 3 взаимозависимых таблиц.