MySQL 데이터베이스를 백업하지만 우선 순위가 낮은 방법은 무엇입니까?


15

데이터베이스를 백업하고 싶지만 하루 동안 서버에로드가 있습니다. 백업이 동일한 서버에서 실행되는 아파치 및 다른 데이터베이스에 영향을 미치지 않는 것이 중요합니다.

mysqldump 명령 을 사용할 수 있지만 우선 순위가 낮은 명령을 실행하십시오.

어떻게해야합니까?

업데이트 : 외모가 좋아 간단하게 작동하지 않습니다 mysqldump는 좋은를 사용하여 mysqldump를 스폰 새로운 프로세스 때문이다.


mysqlhotcopy를 보셨습니까?

@fsb mysqlhotcopy는 OP가 원하는 것을 어떻게 지원합니까?
Tomas

답변:


8

서버의 쓰기로드에 대처할 수있는 예비 서버가있는 경우 해당 서버에 대한 복제를 설정 한 다음 슬레이브 서버에서 백업 할 수 있습니다. 또한 백업을 수행하는 동안 복제를 중지하고 데이터베이스 서버에 영향을주지 않고 모든 데이터베이스 또는 하나의 데이터베이스에있는 모든 테이블에서 일관된 데이터 스냅 샷을 얻을 수 있다는 이점이 있습니다. 리소스가있는 경우 항상 MySQL 백업에 권장되는 설정입니다.

좋은 보너스로, 당신은 느린 장기 실행 쿼리에 사용할 수있는 읽기 전용 슬레이브가 있습니다.


불행히도이 옵션은 가장 효과가있는 것처럼 보이지만 주 서버에 미치는 영향을 최소화하려는 경우 유일한 옵션입니다.
andyuk

2
작업에 영향을 미치지 않으려는 경우 올바르게 중지 된 백업을 얻는 유일한 방법입니다. 속도가 느려 mysqldump지면 긴 잠금이 유지되거나 테이블이 동기화되지 않습니다.
Dan Carley

15

앤디, 지금까지는 해결책을 찾을 시간이 충분하다고 생각합니다. 나는 최근에 tsheets 에서 나에게 잘 작동하는 이것에 대한 해결책을 제시했으며 그것을 공유 할 것이라고 생각했다.

cstream 은 UNIX dd와 같은 범용 스트림 처리 도구로 일반적으로 명령 줄 구성 파이프에 사용됩니다. cstream을 유용하게 만드는 것은 모든 입력에 대해 최대 대역폭을 지정할 수 있다는 것입니다. 이것은 다음과 같은 간단한 명령으로 mysqldump 명령의 디스크 IO를 제한 할 수 있음을 의미합니다.

mysqldump --single-transaction --quick -u <USER> -p<PASS> <Database> | cstream -t 1000000 > backup.sql

모든 InnoDB 테이블을 사용하는 데이터베이스를 백업한다고 가정하면 위의 명령은 안전하고 (다른 쿼리에는 영향을 미치지 않음) 디스크 읽기를 초당 1MB로 제한하면서 mysqldump를 수행합니다. -t 매개 변수를 사용하여 환경이 고객 경험에 영향을주지 않고 백업을 수행 할 수있는 값으로 대역폭을 조정하십시오.


방금 테스트를 거쳐 매력처럼 작동합니다! Brandon을 공유해 주셔서 감사합니다!
sucotronic

4

그러나 당신은 또한 pv ( http://linux.die.net/man/1/pv )로 이것을 할 수 있어야합니다

mysqldump-단일 트랜잭션 --quick -u -p | pv --rate-limit 1m> 대상 (또는 | nc 또는 | tar cfj backup.bz2-)

이것에 대한 좋은 점은 진행 상황을 모니터링하기위한 다양한 옵션과 이미 실행중인 프로세스에 옵션을 전달할 수있는 -R 옵션입니다. 전송 속도를 변경하려면 --rate-limit


1

innodb를 사용한다면 --throttle 옵션으로 xtrabackup 을 시도 할 수 있습니다 .

ionion을 보고 mysqldump를 실행할 수 있습니다.

또는 mysql에서 바이너리 로깅을 활성화하고 매주 / 밤 주당 한 번 전체 덤프를 실행하고 bin 로그를 1-2 시간마다 안전한 위치에 복사하려고합니다. 백업 전용 목적의 읽기 전용 슬레이브도 옵션입니다.


0

Linux 또는 다른 * nix 변형에서 실행중인 경우 다음을 사용하여 수행 할 수 있습니다.

좋은 -n ## mysqldump

이렇게하면 예약 우선 순위가 낮아집니다. -n 인수가 생략되면 nice 우선 순위의 기본값은 -20 (가장 높은 우선 순위)에서 19 (가장 낮은 우선 순위) 범위입니다 ..


0

cron.d / mysql_dump :

17 22 * * * backup touch /home/backup/all_databases.sql && chmod 600 /home/backup \ 
/all_databases.sql && ionice -n 7 /usr/bin/mysqldump -u root -ppassword --opt --all- \
databases > /home/backup/all_databases.sql && nice -n 20 bzip2 -f \
/home/backupall_databases.sql

입출력 우선 순위에 대한 ionice 및 CPU 우선 순위에 좋습니다.

vmstat 5를 실행하고 WA라는 열을 확인하십시오. 높은 값은 CPU가 I / O를 기다리고 있음을 의미합니다. CPU로드가 적 으면 ionice를 사용하십시오.

업데이트 응답 :

당신이 맞는 것 같습니다. 멋지지 않은 mysql을 호출합니다. 나는 이것을 위해 renice를 사용할 수 있고 그것이 실행 된 후에 좋은 가치를 설정할 수 있다고 생각합니다.

유용한 스크립트를 만들기 위해 atm을 덤프 할만 큼 큰 데이터베이스가 없습니다.

링크에서 알 수 있듯이 복제는 한 가지 방법입니다. Anthoer 호스트에서 복제, 중지 및 덤프


0

MySQL 데이터를 LV에 넣고 niced mylvmbackup 작업을 사용 하여 LV의 스냅 샷을 작성하고 MySQL 데이터 파일을 tars 합니다. 이런 식으로 테이블을 잠그지 않고 IO로드에 대한 응용 프로그램에 미치는 영향을 최소화합니다.


0

사용량이 많은 시간에는 항상 실행하지 마십시오. 어떤 우선 순위를 사용하든 덤프에는 여전히 모든 테이블에 대한 잠금이 필요합니다.


사실이 아닙니다. 테이블이 InnoDB 인 경우 읽기 위해 잠금이 설정되지 않습니다.
dr01
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.