이진 로그를 사용하여 실행중인 경우 비교적 높은 신뢰성으로 확인할 수 있습니다.
먼저 바이너리 로그가 실제로 활성화되어 있는지 확인하려면 다음을 실행하십시오.
SHOW BINARY LOGS;
활성화되어 있으면 다음과 같은 출력이 표시됩니다.
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
그렇지 않으면 오류 메시지가 나타납니다.
이제 이진 로그가 활성화되면 성공적인 커밋도 이진 로그에 기록됩니다. 나는 "커밋"이라고 말하지만 사실은 MyISAM과 같은 트랜잭션이 아닌 테이블에서도 작성된 성공적인 작업입니다. 그러나 솔직히 말하면 쿼리 결과에 대해 확실하게하기 위해 InnoDB와 같은 트랜잭션 엔진을 사용하고 있거나 다른 것을 확신 할 수 없기를 바랍니다.
이제 바이너리 로그가 켜져 있고 테이블이 트랜잭션 적 (InnoDB)이라고 가정하면 쿼리가 성공적으로 완료되면 바이너리 로그에 기록됩니다.
이제 관련 바이너리 로그를 찾아서 쿼리를 찾아야합니다. 검색어를 찾으면 좋습니다! 그렇지 않은 경우- 아마도 없을 것입니다. 곧 설명하겠습니다.
어떤 바이너리 로그에 쿼리가 포함되어 있습니까? 일반적으로 데이터 디렉토리에서 이진 로그 파일 자체를 확인하십시오. 타임 스탬프를 찾으십시오. 전원이 켜지면 새로운 이진 로그가 만들어졌습니다. 그것을 찾아라. 쿼리는 아마도 그 이전 의 이진 로그에 있을 것 입니다 . 이것은 추측이다. 그것은 또한 그 전에 하나 일 수도 있습니다. 그러나 그것은 좋은 추측입니다.
이제 mysqlbinlog유틸리티를 사용하여 다음과 같이 명령 행에서 실행하십시오.
mysqlbinlog mysql-bin.000245
파일 이름을 쿼리를 포함 할 것으로 의심되는 이름으로 바꾸십시오.
이 바이너리 로그 파일의 모든 쿼리를 표준 출력으로 출력합니다. 유닉스에서 grep쿼리를 찾는 데 사용 하십시오.
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
Windows에서는 행운을 빕니다. 메모장 ++ 또는 다른 것으로 열어 수동으로 검색하십시오.
쿼리가 있습니까? 훌륭합니다 . 커밋되었음을 알고 있습니다.
쿼리가 없습니까? sync_binlogparam 을 확인해야합니다 . 그것은인가 1 ? 그런 다음 이진 로그에없는 쿼리 ==> 쿼리가 커밋되지 않았습니다. 그러나 1sync_binlog 이 아닌 경우 바이너리 로그가 디스크로 플러시되기 직전과 직후에 충돌이 발생할 수 있으므로 쿼리가 아직 바이너리 로그에 커밋되지 않았을 가능성이 있습니다 . 그런 다음 다른 방법으로 되돌려 야합니다.commit
다음과 같은 사람들이 있습니다 (그리고 다시 InnoDB를 사용하고 있습니다) : 쿼리 결과를 식별 할 수있는 단일 행을 찾으십시오. InnoDB를 사용하면 "모두 또는 아무것도"얻습니다. 쿼리의 영향을받는 단일 행을 확신 할 수있는 경우 쿼리가 완료되었는지 확인할 수 있습니다.
편집 : 물론 느린 로그가 활성화되면 완료 후에도 긴 쿼리가 기록 될 것으로 예상 할 수 있습니다 ...
행운을 빕니다!