그래서 복제 스트림에 설정된 테스트 DB 서버가 있습니다. 이름 이상으로 슬레이브 데이터 디렉토리의 공간을 빠르게 채운 최적화가 이루어졌습니다. MySQL은 정당하게 더 많은 공간을 기다리고있었습니다.
이 datadir은 mysql의 datadir로만 사용되는 파일 시스템이므로 여유 공간이 없습니다.
복제 스트림의 일부가 아닌 4 기가 innodb 테스트 테이블이 있었기 때문에 그것이 작동하는지 확인하기 위해 무언가를 시도하고 테스트 환경이되어서 끔찍한 일이 발생하더라도 너무 걱정하지 않았다고 생각했습니다.
내가 취한 단계는 다음과 같습니다.
- 움직일 테이블을 플러시
- 아무것도 기록하지 않았고 복제 스트림에 없었더라도 읽기 잠금을 설정했습니다.
- .frm 및 .ibd를 일부 여유 공간이있는 파일 시스템에 복사했습니다.
- 테이블 잠금 해제
- 해당 테이블이 잘 렸습니다. 이렇게하면 최적화를 완료하기에 충분한 공간이 확보되어 복제가 다시 시작됩니다.
- 슬레이브 / 종료 mysql 중지
- tmp에서 파일을 데이터 디렉토리로 다시 복사하십시오.
- MySQL을 다시 시작
.err 로그에 아무것도 표시되지 않습니다. mydb를 연결하고 사용합니다. 쇼 테이블에서 내가 엉망인 테이블을 참조하십시오. 하지만 시도하면
select * from testtable limit 10;
오류가 발생합니다
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
내가 지금까지 말할 수있는 것에서 나는 다른 모든 테이블에서 잘 읽을 수 있으며 복제는 불만없이 다시 시작되었습니다.
이 시점부터 복구 할 수있는 작업이 있습니까? 필요하다면 처음부터 다시 만들 수는 있지만 다른 사람들이이 벤처에 대해 일반적으로 어떻게 생각하는지 궁금했습니다. 내가 취한 일련의 단계에 대해 더 완벽한 결과가 나오지 않았습니까?
이것이 테스트 서버가 아니라면 '실제로'할 수 없었으며 어떻게되는지 볼 수 없었습니까? 프로덕션 슬레이브에서 임시 공간을 확보하는 가장 좋은 방법은 무엇입니까?
Table 'X' doesn't exist in engine
. 모든 테이블에 대해 위의 방법을 수행해야합니까? 아니면 더 나은 방법으로 해결할 수 있습니까?