InnoDB와 MyISAM을 함께 사용하는 mysqldump는 상호 배타적 인 것으로 취급됩니다. 이유는 다음과 같습니다.
mysqldump가 진행되는 동안 mysql에 로그인 할 수 있으면 다음과 같은 내용이 표시됩니다.
SELECT /* SQL_NO_CACHE */ * FROM tblname
기본적으로 mysqldump는 다음을 수행합니다.
- 모든 데이터베이스는 알파벳 순서로 덤프됩니다
- 데이터베이스 당 덤프 된 모든 테이블은 알파벳 순서로 덤프됩니다 (스토리지 엔진에 관계없이).
다른 데이터베이스 활동이없는 MySQL 인스턴스에 적합합니다. InnoDB 테이블과 MyISAM 테이블은 서로 영향을 미치지 않습니다.
--single-transaction
all-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>;