나는 이것과 비슷한 다른 게시물을 발견했지만 mysqldump의 이러한 옵션에 대한 약간의 추가 정보를 원했습니다. --single-transaction과 -lock-tables는 상호 배타적 인 연산이라는 것을 이해했습니다. 다음은 이러한 옵션에 관한 나의 질문입니다.--single-transaction - mysqldump의 --lock-tables 옵션 - 내부적으로 어떤 일이 발생합니까?
a) --lock-tables 옵션을 사용한다고 가정하십시오. 이 경우 mysqldump는 모든 테이블에 대해 읽기 잠금을 획득한다. 따라서 테이블에 쓰려고하는 다른 프로세스는 차단 된 (대기) 상태가됩니다. 그러나 mysqldump가 정말로 오랜 시간이 걸린다면 대기중인 프로세스는 무기한으로 계속 기다리고 있을까?
예를 들어이 테스트를 시도했습니다. MY_TEST라는 mysql 데이터베이스 테이블에 Java (JDBC) 프로그램을 작성했습니다. 나는 mysql 콘솔에 로그인하여 "LOCK TABLES MY_TEST READ;" 명령을 수동으로 실행하십시오. 따라서 Java 프로세스는 잠금이 해제 될 때까지 대기하는 것을 차단합니다. 내 질문은 읽기 잠금이 오랜 시간 동안 릴리스되지 않는 경우 거기에 연결 시간이나 같은 문제가있을 것입니다? 나는 2 분 동안 기다렸다가 어떤 에러도 발견하지 못했고 자바 프로세스는 "UNLOCK 테이블"명령을 사용하여 잠금이 해제되면 정상적으로 계속 진행되었습니다. 이 동작은 java mysql 드라이버와 관련이 있습니까? 아니면 mysql 드라이버를 사용하는 C 프로그램에서 동일한 것을 기대할 수 있습니까?
b) 두 번째 질문은 --single-transaction 옵션입니다. 필자는 10 개의 InnoDB 테이블을 가지고 있다고 가정하고, 그 중 3 개의 테이블은 서로 관련되어 있고 (FK 사용) 나머지는 독립적이지만 여전히 InnoDB 엔진을 사용하고 있습니다. 단일 거래는 FK를 사용하여 상호 관련이있는 3 개의 테이블에만 적용됩니까? 또는 세 독립 테이블의 상태가 3 개의 상호 종속 테이블을 덤프 할 때의 상태와 정확히 일치 할 것으로 기대할 수 있습니다.