매우 큰 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
'programing' 카테고리의 다른 글
PHP에서 JavaScript로 JSON을 반환하시겠습니까? (0) | 2022.09.17 |
---|---|
Python으로 이메일 보내는 방법 (0) | 2022.09.17 |
Composer를 자체 업데이트할 수 없습니다. (0) | 2022.09.17 |
상대 경로에서 모듈 가져오기 (0) | 2022.09.17 |
Jest의 it와 test의 차이점은 무엇입니까? (0) | 2022.09.17 |