예산에 따른 다운 타임없는 MySQL 백업


14

현재 MySQL 백업 시나리오는 DB를 두 번째 서버에 복제하고 해당 서버에서 mysqldump를 실행하여 테이블 또는 행 잠금에서 중단 시간을 제거하는 것입니다. 이것은 잘 작동하지만 두 번째 서버의 경우 월 $ 150입니다 (호주 호스팅은 미국보다 훨씬 비쌉니다).

나는 이것에 대해 많은 질문을 읽었습니다. 대부분의 사람들은 예약 된 백업에 대한 도움이 필요하며 필요한 것은 아닙니다. 다운 타임없이 mysqldump (바람직하게는 4 시간마다)가 필요합니다. db는 ~ 7GB 압축되지 않으므로 mysqldump는 서버에 따라 시간이 걸릴 수 있습니다.

나는 같은 머신으로 복제하는 것을 고려했지만, 슬레이브가 필요한 메모리에 많이 들어가기를 원하지 않았습니다. DB별로 메모리 사용량을 제한 할 수 있는지 잘 모르겠습니다. 어느 쪽이든, 이것은 db를 덤프하는 동안 서버에 부하를 줄 것입니다.

방금이 http://www.zmanda.com/quick-mysql-backup.html을 읽었 으며 좋아 보입니다. 연간 300 달러가 괜찮아서 많은 시간을 절약 할 수 있습니다.

불행히도 Amazon의 RDS에는 복제 할 수 없지만 마이크로 RC2 인스턴스에는 복제 할 수 있지만 복제는 인터넷을 통해 이루어지며 핑은 ~ 220ms입니다.

LVM 스냅 샷에 대해 이야기하는 몇몇 사람들이 좋은 옵션이라고 생각했습니다. 나는이 옵션에 대해 많은 것을 모른다.

의견은 크게 감사하겠습니다.


웹 사이트는 무엇입니까? 그것이 무엇을하는지 설명하십시오
jamespo

한 달에 150 달러보다 훨씬 저렴한 가격으로 서버를 구입할 수 있습니다. 7GB는 그렇게 많은 데이터처럼 들리지 않습니다. 일회용 128MB 서버 는 한 달에 최소 $ 1.50, 더 인상적인 1GB 서버 는 약 $ 20에 구입할 수 있습니다 . 쿼리 캐시가 필요하지 않으므로 GB RAM과 SSD가있는 서버로 많은 쓰기 작업을 쉽게 처리 할 수 ​​있습니다.
Xeoncross

서버를 먼저 종료하지 않으면 LVM 스냅 샷은 일관된 이미지를 제공하지 않습니다. 핫 스냅 샷을 수행하고 파일을 다시 작성하려고 시도 할 수 있지만 위험합니다.
symcbean

답변:


10

innodb 테이블을 사용하면

http://www.percona.com/docs/wiki/percona-xtrabackup:start

잠금없이 도구로 가져올 수있는 데이터베이스 덤프가 필요합니다. 나는 당신이 myisam 테이블을 가지고 있다면 그것들을 잠급니다.


일부 MyISAM 테이블이 있지만 자주 사용되지 않으므로 잠그는 것이 좋습니다. 의견을 보내 주셔서 감사합니다.
Christian

퍼 코나 바위 btw!
기독교

5

innodb 또는 완전히 거래되는 다른 백엔드를 사용하는 경우을 사용할 수 있습니다 mysqldump --single-transaction .... 나는 이것을 아주 큰 (~ 100GB) 데이터베이스에서 좋은 결과로 사용했습니다. 데이터베이스에로드가 많은 경우 몇 시간 이 걸릴 수 있지만 테이블을 잠그지 않고 작동합니다. 복제가 일반적으로 더 좋지만 때로는 멋진 솔리드 덤프 파일이 필요합니다. mysql 복제 슬레이브도 덤프 할 수 있습니다.

mysqldump 페이지에서 (트랜잭션으로 유출되는 작업에 대한주의 사항을 참고하십시오) :

 ·   --single-transaction

   This option sends a START TRANSACTION SQL statement to the server
   before dumping data. It is useful only with transactional tables
   such as InnoDB, because then it dumps the consistent state of the
   database at the time when BEGIN was issued without blocking any
   applications.

   When using this option, you should keep in mind that only InnoDB
   tables are dumped in a consistent state. For example, any MyISAM or
   MEMORY tables dumped while using this option may still change
   state.

   While a --single-transaction dump is in process, to ensure a valid
   dump file (correct table contents and binary log coordinates), no
   other connection should use the following statements: ALTER TABLE,
   CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE. A
   consistent read is not isolated from those statements, so use of
   them on a table to be dumped can cause the SELECT that is performed
   by mysqldump to retrieve the table contents to obtain incorrect
   contents or fail.

여호수아, 나는 당신이 'myself'라는 오타를 보았고 자연스럽게 mysql을 입력하기 때문에 'myself'를 입력 하기가 너무 어렵다는 것을 알았습니다. 나는 현재 슬레이브 머신에서 4 시간마다 mysqldump를 수행합니다. 단일 트랜잭션은 좋은 옵션처럼 보입니다. 감사합니다!
Christian

도 잘 잡았다. :)
Joshua Hoblitt

mysqldump가 그러한 큰 데이터베이스에서 좋은 옵션이라고 생각하지 않습니다. 덤프하는 데 몇 시간이 걸리면 복원하는 데 몇 주가 걸릴 수 있습니다. 복원 시간과이를 완료하는 데 필요한 리소스를 테스트하십시오!
Baron Schwartz

고마워 Baron, 몇 주가 아니라 여전히 상당한 시간이 걸리는 데 약간의 시간이 걸립니다. 새 서버를받을 때 시간이 얼마나 걸리는지 살펴 보겠습니다. 파일의 복사본이 훨씬 더 효과적 일 수 있습니다.
Christian

2

대기 시간이 긴 연결을 통해 미국의 저렴한 VPS로 복제하는 데 많은 문제가 발생하지 않습니다. 대기 시간이 길다는 것은 실제로 그렇게 큰 문제가되지 않아야합니다. 복제는 슬레이브가 몇 시간 뒤 떨어질 때에도 빠르게 따라 잡을 수 있도록 설계되었습니다 . 즉, 비동기 적으로 작동 할 수 있습니다.

호주의 호스팅 계획에서 많은 발신 대역폭을 견딜 수있는 한.

대기 시간이 긴지 여부에 대한 훨씬 자세한 응답은 다음과 같습니다.


1
나는 그것이 얼마나 많은 대역폭을 사용할 것인지 전혀 모른다. 어쩌면 나는 지금 얼마나 많은 박스가 사용되는지 확인하기 위해 박스들 사이의 트래픽을 모니터링해야한다.
Christian

1
EBS 위에서 mysql을 실행하려고하면 "실망"할 수 있습니다. 복제에 사용하기 전에 성능을 테스트하는 것이 좋습니다.
Joshua Hoblitt

그것에 감사드립니다. 내가 그것에 의존하기 시작하기 전에 확실히 그것을 느낄 것입니다-이것이 내가 취하는 접근법이라면.
Christian

1

실제로 데이터베이스를 실제로 내보내는 데 걸리는 시간 만 가동 중지 시간입니다. 느리게 충분한 시간 동안 수행하면 아무런 문제가 없습니다. 해당 예산에서 실제로 기대하는 IT 부서는 무엇입니까?

최대 5-10 분 내에 7GB 데이터베이스를 mysqldump 할 수 있고 읽기 / 쓰기 잠금을 해제하면 가동 중지 시간이 종료됩니다. 그런 다음 새 서버로 7GB 파일을 전송하는 가장 효과적인 방법을 찾을 수 있습니다 (읽기 : 고압축). 새 서버에서 파일을 전송하고 MySQL로 가져올 시간이 충분합니다. 그런 다음, 마스터 로그 정보를 입력하고 복제를 시작하십시오. 케이크 조각이어야합니다!

MySQL 문서는 환상적입니다 : http://dev.mysql.com/doc/refman/5.0/en/replication.html


또한 복제는 많은 대역폭을 사용하지 않습니다. 4 시간마다 mysqldump-ing보다 더 나은 호출이 될 것입니다.
누가

누가 IT 부서를 언급 했습니까? 이것은 단지 내 웹 사이트입니다. :) 현재 백업을 위해 복제하고 있지만 150p / m에서 최상의 접근 방식을 확신하지 못합니다. 명시된 바와 같이 EC2 마이크로 인스턴스의 옵션이 있습니다.
Christian

@Christian P는 무엇입니까? 나는 그것이 무엇인지 모르지만 m 당 단일 p의 150 $는 비싸 보입니다. 8 |
TehShrike

@TehShrike, p / m = 한 달에. 호주 호스팅은 미국 호스팅보다 훨씬 비쌉니다. 또한 두 번째 서버를 동일한 네트워크에서 속도와 전송을 위해 대역폭 허용 한도로 계산하지 않도록 유지하려고했습니다.
Christian

1

DB별로 메모리 사용량을 제한 할 수 있는지 잘 모르겠습니다.

물론 가능합니다-다른 /etc/my.cnf로 슬레이브를 실행하면됩니다.

nice / renice 및 taskset을 사용하여 마스터 및 슬레이브에서 스케줄링 우선 순위 / CPU 선호도를 조작하는 작업을 수행 할 수도 있습니다 (Linux 서버라고 가정).

그러나 복제는 인터넷을 통해 이루어지며 핑은 ~ 220ms입니다.

지연 시간은 관련성이 거의 없습니다. 중요한 것은 대역폭입니다. 세션 데이터를 복제하지 않는다고 가정 할 때 데이터베이스 대역폭은 HTTP 대역폭보다 몇 배나 작습니다.

가동 중지 시간없이 [일관된 데이터베이스 백업] (바람직하게는 4 시간마다)을 작성해야합니다.

그러나 당신이 논의하는 전략은 그 당시의 어떤 것도 회복을 허용하지 않습니다.

가장 저렴한 옵션은 동일한 컴퓨터의 슬레이브가 될 것입니다. 재구성 할 수있는 것 이상의 성능에 부정적인 영향을 미치는 경우 현재 호스팅 패키지를 업그레이드하십시오.

연결이 끊긴 슬레이브 (현재 서버에서 bin 로그 활성화)를 실행할 수도 있습니다. 백업을 가져 와서 로컬 머신에서 백업을 복원 한 다음 회전 할 때 bin 로그를 복사 한 후 로컬 DBMS에서 롤 포워드하십시오 .


좋은 답변 감사합니다. 내가보고있는 새로운 서버는 동일한 컴퓨터에서 슬레이브를 허용하기에 충분한 메모리를 가지고 있지만 binlogs가 복사 / 롤 포워드되는 아이디어를 정말로 좋아합니다. 다시 감사합니다!
Christian

1

나의 제안:

1-두 번째 계정 / 서버를 유지하고 원래 계정 / 서버의 데이터베이스에 복제를 구현하십시오.

2-두 번째 계정 / 서버로의 복제를 중지하십시오.

3-며칠 동안 성능을 모니터링하십시오. 사용량이 가장 많은 기간을 포함 할 수있을 정도로 오래 모니터하십시오.

4-주요 성능 문제가있는 경우 이전 설정으로 전환 할 준비를하십시오. 이것이 두 번째 계정을 유지 한 이유입니다.

5-원래 계정에서 더 많은 용량 / 업그레이드 서버를 구입하십시오. 이것은 내가 믿는 두 대의 서버를 지불하는 것보다 저렴해야합니다.

6-두 번째 계정을 취소하십시오.

행운을 빕니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.