2016-09-14 8 views
0

이 케이스에 대한 새로운 의견이 필요합니다. 어떤 생각이라도 감사합니다.큰 percona에서 많은 행을 삭제하십시오 mysql db

입력 : Tb (테라 바이트)가 필요한 거대한 percona mysql (5.5) 데이터베이스가 있습니다. innodb 엔진 테이블. 해당 크기의 2/3 이상이 가능한 한 빨리 삭제되어야합니다. 또한 마스터 - 슬레이브 구성이 있습니다.

  • 행을하지 않으려면 선택

    1. 정지 복제 : 슬레이브 서버의 각 테이블에 대해 실행 (생산 중단을 피하기 위해) : 빠른 나는 다음과 같은 솔루션을 고려하고 있음을 달성하기위한 방법으로

    2. 원본 테이블의 이름을 "table_old"로 바꾸고 새 테이블 - 이름을 수정하려면
    3. 원본 테이블을 삭제하십시오. "table_old"
    4. 복제 시작

    문제는 우리가 많은 FK 제약이 있다는 것입니다. 또한이 과정에서 복제를 중단하는 것이 두렵습니다.

    질문 : 1)이 솔루션에서 FK 제약 조건으로 인해 발생할 수있는 잠재적 문제는 무엇입니까? 2) 복제를 중단하지 않으려면 어떻게해야합니까? 3) 의견? 대체 솔루션?

    미리 감사드립니다.

  • 답변

    0

    잠시 동안 db를 오프라인으로 설정할 수 있다면 (단, 아무도 당신을 제외한 db에 액세스 할 수 없습니다.) 솔루션과 함께 갈 수 있지만 이전에 관련된 FK를 삭제하고 이후에 다시 만들어야합니다. 복사 작업시 번호가 변경되는 AUTO_INCREMENT 열도 확인해야합니다.

    데이터베이스를 온라인으로 원한다면 FK가 필요합니다. 거대한 로그 테이블과 비슷한 문제가 있습니다. 모든 레코드를 한 번에 삭제하려고하면 데이터베이스가 잠기거나 테이블이 손상됩니다.

    그래서 느린 접근 방법으로 클러스터 된 기본 키를 사용하여 테이블에서 행의 일괄 처리를 삭제하는 절차를 만든 다음 매 n 초마다 실행되도록 예약했습니다.