AutoMysqlBackup --lock-tables=false

AutoMysqlBackup --lock-tables=false

AutoMysqlBackup스크립트를 사용하여 애플리케이션의 일일 백업을 수행하려고 합니다 . 안타깝게도 첫 번째 시도에서는 제가 생각했던 대로 잘 되지 않았습니다.

스크립트가 해당 --lock-tables=true매개변수를 사용하고 있어서 내 애플리케이션이 작동하지 않는 것 같습니다.

이 경우 스크립트가 테이블을 잠그지 않도록 하려면 어떻게 해야 합니까? (내 응용 프로그램이 계속 실행될 수 있도록)?

감사해요.

답변1

좋습니다. 소프트웨어에 너무 익숙하지는 않지만 다음과 같습니다.

  • 쉘 스크립트이므로 (이론적으로) 편집이 간단합니다. 물론 약 2200줄의 쉘 스크립트이다.
  • 제 생각에는 --lock-tables가 --opt에서 온 것 같습니다.매우Quick View) 기능 상단에 있습니다 parse_configuration. --skip-lock-tables거기에 추가하시면 됩니다 .
  • 이는 mysql 유틸리티를 사용하므로 .my.cnf일반적인 방법으로 추가할 수도 있습니다.

일반적으로 말하면:

  • InnoDB가 아닌 MyISAM을 사용하고 있으므로 트랜잭션이 없습니다. 따라서 를 사용할 수 없습니다 --single-transaction.
  • 따라서 일관성을 보장하려면 잠금이 필요합니다. 잠금이 있더라도 보장되지는 않습니다(그냥 가능성이 높을 뿐입니다). 그러나 이는 정상적인 작동에서 보장되는 한도에 불과합니다. InnoDB를 진지하게 고려하십시오(그러나 먼저 문서를 읽고 조사한 다음 애플리케이션이 중단되지 않는지 테스트하십시오).
  • 잠금을 비활성화하면 다음을 수행할 수 있습니다.
    1. 백업 시작
    2. 테이블 A를 백업합니다.
    3. A의 레코드를 삭제하고 B의 하위 레코드를 삭제합니다.
    4. 백업 테이블 B.
    5. 이제 백업에는 존재하지 않는 B의 레코드를 가리키는 A의 레코드가 포함됩니다. 즉, 일관성이 없습니다.
  • 더 널리 사용되는 MySQL 백업 솔루션도 있습니다. 어쩌면 이 중 하나로 전환해야 할 수도 있습니다. 더 많은 사람들이 사용하는 소프트웨어에 대한 도움말을 찾는 것이 더 쉽습니다(그리고 테스트도 더 잘 되는 경향이 있습니다).
  • 당신은 할 수생각하다백업이 있지만 실제로 성공적으로 복원할 때까지 백업을 수행하지 않습니다. 가급적이면 베어 메탈(새로 포맷된 하드 드라이브)에서 복원하는 것이 좋습니다. 이상적으로는 이 작업을 정기적으로 수행할 수 있으며 자동화하는 것이 더 좋습니다. 이는 MySQL에만 국한된 것이 아니며 다음과 함께 작동합니다.모두지원.

해결책이 있습니다(InnoDB로 전환하는 것 외에): 슬레이브 서버에서 백업을 수행할 수 있습니다. SLAVE STOP SQL_THREAD기본 테이블은 중요하지 않기 때문에 백업 중에 모든 테이블을 잠그거나 모든 테이블을 잠그면 문제가 되지 않습니다. 이는 다운타임이 없는 솔루션입니다. 너~해야 한다어쨌든, 메인 서버에 장애가 발생할 경우를 대비해 이 서버를 핫/핫 대기로 사용하세요.

가동 중지 시간을 최소화하는 또 다른 솔루션이 있습니다. 데이터베이스를 LVM 볼륨에 놓고 작업을 수행하고 FLUSH TABLES WITH READ LOCKLVM 스냅샷을 찍은 다음 읽기 잠금을 해제합니다(연결을 끊으면 이렇게 됩니다). 그런 다음 스냅샷에서 백업할 수 있습니다. 이것이 "다른 기계를 구입할 여유가 없습니다" 솔루션입니다.

답변2

  1. Innodb의 경우 conf 파일에 CONFIG_mysql_dump_single_transaction='yes'를 추가하면 됩니다.

  2. MyISAM 엔진의 경우 automysqlbackup 파일에 --skip-add-locks를 추가해야 합니다. 다음과 같이 parse_configuration 함수를 찾아 배열 값을 추가합니다.

확인해 보니 잘 작동됩니다.

변화

구문 분석(){
    # mysqldump에 대한 OPT 문자열(man mysqldump 참조)
    opt=('--참조 이름' '--opt')

도착하다

구문 분석(){
    # mysqldump에 대한 OPT 문자열(man mysqldump 참조)
    opt=( '--quote-names' '--opt' '--skip-add-locks' '--skip-add-drop-table')

관련 정보