MyISAM과 혼합하여 mysqldump 중에 InnoDB 테이블이 잠겼습니까?


9

내 mysql 서버의 백업 솔루션을 찾고 있는데 가능한 다운 타임이 적습니다. 나는 다음을 가지고있다 :

  • MySQL 서버
  • 그들은 복제되지 않습니다
  • 각 서버는 자체를 나타냅니다

이 수가 증가 할 수 있으므로 마스터 / 슬레이브 복제를 설정하는 것은 좋은 생각이 아닙니다.

내가 볼 수있는 가장 쉬운 백업 방법은 "automysqlbackup"과 같은 소프트웨어와 함께 mysqldump를 사용하는 것입니다. 가장 중요한 데이터는 InnoDB를 사용합니다. 내 InnoDB 테이블은 꽤 무겁습니다.

질문은 : 서버의 모든 데이터베이스에 mysqldump를 수행하면 Innodb 테이블이 잠길까요?

답변:


7

InnoDB와 MyISAM을 함께 사용하는 mysqldump는 상호 배타적 인 것으로 취급됩니다. 이유는 다음과 같습니다.

mysqldump가 진행되는 동안 mysql에 로그인 할 수 있으면 다음과 같은 내용이 표시됩니다.

SELECT /* SQL_NO_CACHE */ * FROM tblname

기본적으로 mysqldump는 다음을 수행합니다.

  • 모든 데이터베이스는 알파벳 순서로 덤프됩니다
  • 데이터베이스 당 덤프 된 모든 테이블은 알파벳 순서로 덤프됩니다 (스토리지 엔진에 관계없이).

다른 데이터베이스 활동이없는 MySQL 인스턴스에 적합합니다. InnoDB 테이블과 MyISAM 테이블은 서로 영향을 미치지 않습니다.

--single-transactionall-InnoDB MySQL 인스턴스에 대해 사용하면 체크 포인트가 생성되고 동일한 시점에서 모든 테이블이 덤프됩니다. MyISAM 테이블에 도달하면 모든 베팅이 해제됩니다. MyISAM 이후의 모든 InnoDB 테이블이 다른 특정 시점에서 덤프 될 수 있습니다.

InnoDB와 MyISAM의 혼합에 대해 일관된 특정 시점 덤프를 갖기 위해 옵션이 있습니다

옵션 1

아무도 TCP / IP를 통해 로그인 한 다음 mysqldump를 통해 로그인 할 수 없도록 mysql을 다시 시작하십시오.

service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart 

옵션 # 2

모든 MyISAM 테이블이 읽기 전용 인 경우 --single-transaction을 사용하는 mysqldump 만

옵션 # 3

MyISAM 테이블을 작성하는 경우-단일 트랜잭션으로는 충분하지 않습니다

다음을 수행해야합니다.

mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql

mysqldump가 완료된 직후, mysql에 로그인하고 수행하십시오 show processlist;. query SELECT SLEEP(86400)를 찾고 프로세스 ID를 찾고 실행하십시오.KILL <procidnumn>;


5

mysqldump --single-transaction테이블을 잠그지 않지만 MyISAM 테이블은이 옵션으로 일관된 덤프를 보장하지 않습니다. 그것은 더 나은 사용에있어 mydumper, mydumperMyISAM 테이블을 잠그고 덤프 일관성이 있도록 이노을 잠그지 않습니다.


와,이 훌륭한 도구에 감사합니다! mydumper를 사용하여 매일, 매주, 매월 백업을 자동화 할 수있는 도구에 익숙하십니까? mydumper와 함께 "automysqlbackup"과 같은 것이 있습니까? 감사.
tounano

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