programing

매우 큰 SQL 파일(MySQL)을 Import할 때 단일 커밋

newsource 2022. 9. 17. 10:43

매우 큰 SQL 파일(MySQL)을 Import할 때 단일 커밋

Windows 상에서 대용량 SQL 파일(2.5 Gb 이상)을 MySQL 데이터베이스로 복원하려고 합니다.

이러한 파일을 편집하여 다음과 같은 텍스트를 추가할 수 없습니다.SET autocommit=0;파일의 선두에 표시됩니다(Import 시간을 단축하는 데 필요).

저도 사용할 수 없습니다.source(매우 느린 속도) 화면에 출력되며 파일에 오류가 있더라도 실행이 계속됩니다.예:

mysql> CREATE DATABASE IF NOT EXISTS dbname;
mysql> USE dbname;
mysql> SET autocommit=0;
mysql> source file.sql;
mysql> COMMIT;

현재 세션에만 적용되는 SQL 파일을 가져오기 전후에 임의 명령을 실행할 수 있습니까?다음 두 가지 작업을 모두 시도했지만 Windows에서 작동하지 않습니다(두 번째 작업은 모두 무시됩니다).

mysql -u username -p -e "SET autocommit=0;" dbname < file.sql

또는,

mysql -u username -p < initial_commands.sql < file.sql

가능하면 글로벌을 변경하고 싶지 않습니다.autocommit이 작업을 수행할 때마다 설정을 변경한 후 다시 변경해야 합니다(또한 최종판이 없으면 이 작업이 제대로 작동하지 않을 수도 있습니다).COMMIT;).

아마도 사용하는 방법이 있을 것이다.BEGIN ... COMMIT;자동 커밋을 끄는 대신?

이런 일을 해야 하는 사람들의 제안이 있으면 좋겠습니다!

제 답변이 늦었지만, 미래의 독자들에게 도움이 될 수도 있습니다.

저도 같은 문제가 있었습니다.MySQL 명령어 옵션에서 MySQL 문서를 읽을 때, 나는 당신이 다음을 사용할 수 있다는 것을 알았다.--init-command파라미터를 지정합니다.

따라서 명령줄은 다음과 같습니다.-v(상세 및 옵션입니다.

mysql --init-command="SET autocommit=0;" -v < sql_file.sql
(echo set autocommit=0; && type file.sql && echo. && echo commit;) | mysql -u username -p passwd

입력 리다이렉션 대신 파이프를 사용하고 명령에 에코를 사용하고 에코를 사용합니다.새로운 행의 경우

당신의 목표는 역효과를 낼 수 있습니다.즉, 전체 로드를 단일 트랜잭션으로 변환하는 것이 증분 커밋하는 것보다 느릴 수 있습니다.

set autocommit=0모든 삽입(및 기타 쓰기)이 이후(이후까지)commit)의 가능성을 기록해야 합니다.ROLLBACK처음에 일반 로깅 메커니즘은 많은 쓰기를 수행할 수 있습니다.하지만, 어느 순간, 더 복잡한 메커니즘이 작용합니다.여기에는 데이터베이스의 가장 느린 부분인 디스크 I/O가 훨씬 더 많이 필요합니다.

다른 방법으로는 "commit" 프로세스의 중요한 부분인 fsync를 잘라내어 커밋된 트랜잭션을 플러시하는 방법이 있습니다. innodb_flush_log_at_trx_commit제어하고 있습니다.디폴트는=1"안전"을 위해.많은 사람들이 와 함께 달린다=2보안성은 떨어지지만 fsync는 1초에 한 번으로 제한합니다."검사" 부분은 정전이 발생한 경우 마지막 1초 동안 실행된 트랜잭션이 실제로 디스크에 유지된 상태로 클라이언트에 확인 응답되었을 수 있다는 것입니다.

이 있기 때문에,한 3 행의 「3..bat스크립트(파일):

mysql -e 'SET GLOBAL innodb_flush_log_at_trx_commit = 2'
mysql dbname < file.sql
mysql -e 'SET GLOBAL innodb_flush_log_at_trx_commit = 1'

언급URL : https://stackoverflow.com/questions/42243320/single-commit-when-importing-very-large-sql-files-mysql