서버의 현재로드에 영향을주지 않도록 MySQL 덤프 속도를 줄이려면 어떻게해야합니까?
MySQL 덤프를 수행하는 것은 충분히 쉽지만 복제를 설정하려는 라이브 전용 MySQL 서버가 있습니다. 이렇게하려면 복제 슬레이브로 가져올 데이터베이스 덤프가 필요합니다.
문제는 내가 덤프를 할 때 발생하고 MySQL은 그것에 완전히 힘을 쏟고 리소스를 연결하는 사이트에 묶습니다. 라이브 연결에 우선 순위가 부여되는 낮은 우선 순위 상태로 덤프 쿼리를 제한하는 방법이 있는지 궁금합니다. 외부 사이트의로드가 전체 덤프를 수행하려는 MySQL의 노력에 영향을받지 않는다는 아이디어입니다.
저는 수만 개의 테이블이있는 매우 큰 데이터베이스를 가지고 있으며 그중 일부는 수천만 개의 항목에 최대 5GB의 데이터를 가지고 있습니다. (저는 인기있는 서비스를 운영하고 있습니다) ... 저는 이러한 데이터베이스를 백업 할 때 항상 골칫거리였습니다. 기본 mysqldump를 사용하면 서버 부하가 통제 불능 상태가되고 모든 것을 잠그고 사용자에게 영향을줍니다. 프로세스를 중지하려고하면 테이블이 손상되고 해당 테이블을 복구하는 동안 많은 다운 타임이 발생할 수 있습니다.
나는 지금 ...
mysqldump -u USER -p --single-transaction --quick --lock-tables=false DATABASE | gzip > OUTPUT.gz
dev.mysql.com 의 mysqldump 참조 에 따르면 ...
큰 테이블을 덤프하려면 --single-transaction 옵션을 --quick과 결합해야합니다.
InnoDB 인 데이터베이스에 의존하는 것에 대해서는 아무 말도하지 않습니다. 저는 myISAM이고 이것은 저에게 아름답게 작동했습니다. 서버로드는 거의 영향을받지 않았으며 전체 프로세스 동안 내 서비스가 롤렉스처럼 실행되었습니다. 대용량 데이터베이스가 있고 백업이 최종 사용자에게 영향을 미치는 경우 ... 이것이 해결책입니다. ;)
InnoDB 테이블을 사용하는 경우 mysqldump에 --single-transaction 및 --quick 옵션을 사용하십시오.
nice 및 gzip 명령을 사용하여 가장 낮은 우선 순위로 명령을 실행하십시오.
nice -n 10 ionice -c2 -n 7 mysqldump db-name | gzip > db-name.sql.gz
mysqldump 명령 앞에 다음을 붙일 수 있습니다.
ionice -c3 nice -n19 mysqldump ...
낮은 IO 및 CPU 우선 순위에서 실행되므로 영향을 제한해야합니다.
이것은 MySQL 실행 사이의 시간 만 지연시킬 것입니다. 스크립트 자체는 이전처럼 여전히 집중적이며 스크립트 사이에 더 긴 휴식 시간이 있습니다.
'developer tip' 카테고리의 다른 글
저장 프로 시저를 만들지 않고 Oracle에서 여러 행을 어떻게 하나로 연결할 수 있습니까? (0) | 2021.01.05 |
---|---|
C ++에서 동적 배열을 어떻게 초기화합니까? (0) | 2021.01.05 |
Django는 애플리케이션의 모델 목록을 가져옵니다. (0) | 2021.01.05 |
Bash에서 숫자로 문자열 정렬 (0) | 2021.01.05 |
범례 Python Matplotlib의 특정 항목 만 표시 (0) | 2021.01.05 |