2017-03-07 1 views
3

두 개의 큰 SQL 파일이 각각 약 8GB 있습니다. 그러나 최신 백업에서 한 파일에 300MB의 데이터가 누락 된 것으로 나타났습니다.2 개의 큰 sql 파일을 비교하고 데이터를 복구하기위한 차이점을 찾으십시오.

필자는 단지 누락 된 데이터를 비교하기 때문에 일시적인 데이터인지 또는 사라진 중요한 데이터인지 확인할 수 있습니다.

우분투 14.04에서 diff를 통해 두 파일을 비교할 때 항상 메모리 할당 오류가 발생합니다. 나는 또한 메모리 솔루션 그 이상을 허용하는 다른 시도를했지만 여전히 도움이되지 못했다.

sql1에는 있지만 sql2에는없는 모든 데이터를 sql3이라는 새 파일로 수집하려고합니다.

도와주세요!

EDIT : 최근 Simple MySQl-Server에서 Percona XtraDB Cluster로 옮겼습니다. 많은 테이블이 MyISAM에서 INNODB로 변환되었습니다. 그래서, 그 이유는 mysqldump SQL 파일에서 300MB 감소에 대한 이유가 될 수 있습니까? 나는 SQL이 SQL이 될 것이기 때문에 이것을 심각하게 의심하지만, INNODB SQL 코드는 어떠한 경우에도 감소합니까? 이것에 대한 전문가의 조언이 도움이 될 것입니다.

+0

하나의 테이블 또는 여러 테이블에 있습니다. – sumit

+0

@sumit 모든 데이터베이스. 하지만, 그것은 중요하지 않습니다, 나는 단지 두 번째 SQL 파일에서 누락 된 줄을보고 싶지만 첫 번째 SQL 파일에 존재한다고 생각합니다. – rsharpy

+0

Red-Gate SQL Compare는이를 수행 할 수있는 훌륭한 도구입니다. http://www.red-gate.com/products/mysql/mysql-compare/ – vanloc

답변

0

많은 양의 데이터를 처리 할 때 SQL 덤프 비교는 상당히 어렵습니다. 나는 다음을 시도합니다 :

  1. 가져 오기 각 SQL 파일 데이터를 자체 데이터베이스
  2. 사용 방법 중 하나는 (I 스키마가 동일 가정) 데이터베이스 내용을 비교 here을 표시로. 예 : 데이터 조작은 데이터베이스에 저장 될 때 훨씬 빠르며 또한 손실 된 데이터를 쉽게 사용할 수있는 이점이 있기 때문에, 비교 Toad for MySql

이렇게 빠를 것이다. 예 :

SELECT * 
FROM db1.sometable 
WHERE NOT EXISTS (SELECT 1 
        FROM db2.sometable 
        WHERE db1.sometable.pkcol = db2.sometable.pk2) 

은 정확한 누락 된 정보를 편리한 방법으로 반환합니다.

+0

당신의 솔루션은 diff를 제안합니다. 나는 이미 시도했는데 파일이 너무 커서 충분한 메모리가 없기 때문에 메모리 할당 오류가 발생합니다. . 153 개의 데이터베이스가 있는데 1을 1로 비교할 수 없습니다. – rsharpy

+0

@rsharpy - 아니요, 첫 번째 대답은 건너 뜁니다. [this] (http://stackoverflow.com/a/225790/2780791) 또는 아래에서 다른 방법을 시도해보십시오. 언급 한 바와 같이, 첫 번째는 자체 데이터베이스의 각 SQL에서 데이터를 가져 와서 데이터베이스 수준에서 비교를 수행해야합니다. 덤프 데이터는 조작하기가 더 어렵습니다. – Alexei

+0

@Alexei 감사합니다. 먼저 SQL 파일을 서버로 가져 와서 각 데이터베이스를 다른 버전과 비교할 때 많은 시간이 필요합니다. 그러나 2 SQL 파일의 줄 차이 보고서에 대한 간단한 줄을 알게되면 놓친 내용을 빨리 이해할 것입니다. – rsharpy

관련 문제