두 서버 간에 전체 MySQL 데이터베이스를 복사하는 방법은 무엇입니까?

두 서버 간에 전체 MySQL 데이터베이스를 복사하는 방법은 무엇입니까?

두 시스템 간에는 양호한 연결이 있습니다(MySQL 5.5.28).

mysqldump -u root -p'password' --all-databases | ssh root@SERVERNAME mysql -u root -p'password' --all-databases

내가 알 수 있는 한, 이 원라이너는 서버 #A에서 MySQL 덤프를 가져온 다음 해당 덤프를 서버 #B에 복사한 다음 "서버 #B로 가져오는" 것과 같습니다.

1분기: 데이터베이스에 다른 건 없나요? 이것이 가장 빠른 방법인가요? :) 아니면 더 빠른 것이 있나요? 이 모든 일이 진행되는 동안 뭔가 문제가 생길까요?

2분기:서버 #B에서의 전송이 완전히 성공했는지 테스트하는 방법은 무엇입니까? 두 데이터베이스가 "비트별로" 동일한지 확인하는 방법은 무엇입니까?

답변1

먼저, 어떤 스토리지 엔진을 사용하는지가 매우 중요하다는 점을 깨달아야 합니다.

두 mysql 서버의 버전이 동일하다고 가정합니다. 그런 다음 MyISAM 테이블에서 mysqlhotcopy를 사용할 수 있습니다. 이는 매우 빠르지만 이 방법은 MyISAM 테이블로 제한됩니다. mysqlhotcopy는 파일을 직접 복사하기 때문에 두 데이터베이스가 "비트별로" 동일하면 diff.

버전 5.5.5부터 INNODB가 기본 스토리지 엔진입니다. INNODB 스토리지 엔진을 사용하면 상황이 다르게 보입니다. 이 경우에는 사용할 수 mysqlhotcopy없습니다 mysqldump.

.을 사용하면 몇 가지 문제가 발생할 수 있습니다 mysqldump. 예를 들어, 서버 #A의 데이터베이스에 존재하지 않는 테이블 뷰가 있는 경우 mysql은 파이프라인 오른쪽에 존재하지 않는 테이블 뷰를 생성하려고 시도하지만 실패합니다. 이 경우 이 옵션을 사용하면 중단을 방지할 수 있습니다 --force.

mysql --force ...

전체 mysql 데이터베이스를 복사 mysqldump하고 두 서버의 덤프를 비교한 결과 덤프의 타임스탬프만 다르다는 것을 발견했습니다. 이것이 당신의 해결책이 될 수 있습니다.

당신이 봐야 할 다른 옵션이 있습니다 mysqldump. 예를 들어 나는 이렇게 생각했다.

--add-drop-database
--add-drop-table
--single-transaction    ( for transactional tables only (like INNODB))

관련 정보