2010-06-13 4 views
0

"손실 된"정보를 검색하는 데 사용해야하는 1G MySQL binlog 파일이 7 개 있습니다. 로그에서 특정 INSERT 문만 가져와야합니다 (예 : INSERT INTO table SET field1 = "로 시작하는 구문). 방금 mysqlbinlog를 실행하면 (데이터베이스 당 - 짧은 형식 사용) 수백 메가 바이트의 텍스트 파일을 얻습니다. 그러면 다른 프로그램과 구문 분석하는 것이 거의 불가능합니다.MySQL BinLog 문 검색

로그에서 특정 SQL 문을 검색하는 방법이 있습니까? 나는 부수적 인 정보 (타임 스탬프, 자동 증분 # 등)가 필요 없다. 난 그냥 특정 문자열과 일치하는 SQL 문 목록이 필요합니다. 이상적으로, 난 그냥 같은 그 SQL 문, 나열하는 텍스트 파일을 가지고 싶다 :

INSERT INTO table SET field1='a'; 
INSERT INTO table SET field1='tommy'; 
INSERT INTO table SET field1='2'; 

내가 텍스트 파일에서 mysqlbinlog를 실행하고 문자열을 기반으로 결과를 분석하여 해당를 얻을 수를하지만, 텍스트 파일이 너무 큽니다. 스크립트를 실행하면 시간이 초과되고 텍스트 편집기에서 열 수 없습니다.

미리 도움을 주셔서 감사합니다.

답변

2

나는 답변을 얻지 못했지만 내가 무엇을 얻었는지 말할 것입니다. 1. mysqlbinlog를 텍스트 파일로 바꾼다 2. fgets를 사용하여 로그의 각 라인을 읽는 PHP 스크립트를 만들었다. 3. 각 라인을 반복하면서 스크립트는 stristr 함수 을 사용하여 구문 분석한다. 4. 라인이 문자열을 찾고, 파일에 줄을 기록합니다.

mysqlbinlog와 PHP 스크립트를 실행하는 데 시간이 걸리지 만 더 이상 시간이 초과되지 않습니다. 원래 PHP에서는 fread를 사용했지만 전체 파일을 메모리로 읽어 들여 스크립트가 큰 (1G) 로그 파일에서 충돌하게 만들었습니다. 이제는 실행하는 데 몇 분이 걸립니다 (max_execution_time 변수를 더 크게 설정했습니다).하지만 매력처럼 작동합니다. fgets는 한 번에 한 줄씩 표시되므로 거의 메모리를 차지하지 않습니다.