본문 바로가기
Database/MYSQL

innochecksum — 오프라인 InnoDB 파일 체크섬 유틸리티

by 반화넬 2020. 9. 29.
반응형

innochecksum 은InnoDB파일에대한 체크섬을 인쇄 합니다. 이 도구는InnoDB테이블 스페이스 파일을읽고, 각 페이지의 체크섬을 계산하고, 계산 된 체크섬을 저장된 체크섬과 비교하고, 손상된 페이지를 나타내는 불일치를보고합니다. 원래는 정전 후 테이블 스페이스 파일의 무결성 확인 속도를 높이기 위해 개발되었지만 파일 복사 후에도 사용할 수 있습니다. 체크섬 불일치로 인해InnoDB실행중인 서버가 의도적으로 종료되기 때문에 프로덕션 서버가 손상된 페이지를 만날 때까지 기다리는 것보다이 도구를 사용하는 것이 좋습니다.

서버가 이미 연 테이블 스페이스 파일에는 innochecksum을 사용할 수 없습니다. 이러한 파일의CHECK TABLE경우 테이블 스페이스 내의 테이블을 확인하는데사용해야합니다. 서버가 이미 열려있는 테이블 스페이스에서 innochecksum 을 실행하려고 하면" Unable to lock file "오류가 발생합니다.

체크섬 불일치가 발견되면 일반적으로 백업에서 테이블 스페이스를 복원하거나 서버를 시작하고 mysqldump  사용 하여 테이블 스페이스 내의 테이블을 백업 하려고 시도합니다 .

다음 과 같이 innochecksum을 호출 하십시오.

shell> innochecksum [options] file_name

innochecksum 옵션

innochecksum 은 다음 옵션을 지원합니다. 페이지 번호를 참조하는 옵션의 경우 번호는 0부터 시작합니다.

  • --help, -?

    명령 줄 도움말을 표시합니다. 사용 예 :

    shell> innochecksum --help

  • --info, -I

    동의어 --help. 명령 줄 도움말을 표시합니다. 사용 예 :

    shell> innochecksum --info

  • --version, -V

    버전 정보를 표시합니다. 사용 예 :

    shell> innochecksum --version

  • --verbose, -v

    Verbose 모드; 5 초마다 진행률 표시기를 로그 파일에 인쇄합니다. 진행률 표시기가 인쇄 되려면를 사용하여 로그 파일을 지정해야합니다 --log option. verbose모드 를 켜려면 다음을 실행하십시오.

    shell> innochecksum --verbose

    상세 모드를 끄려면 다음을 실행하십시오.

    shell> innochecksum --verbose=FALSE

    --verbose옵션을 선택하고 --log옵션을 동시에 지정 될 수 있습니다. 예를 들면 :

    shell> innochecksum --verbose --log=/var/lib/mysql/test/logtest.txt

    로그 파일에서 진행률 표시기 정보를 찾으려면 다음 검색을 수행 할 수 있습니다.

    shell> cat ./logtest.txt | grep -i "okay"

    로그 파일의 진행률 표시기 정보는 다음과 유사하게 나타납니다.

    page 1663 okay: 2.863% done page 8447 okay: 14.537% done page 13695 okay: 23.568% done page 18815 okay: 32.379% done page 23039 okay: 39.648% done page 28351 okay: 48.789% done page 33023 okay: 56.828% done page 37951 okay: 65.308% done page 44095 okay: 75.881% done page 49407 okay: 85.022% done page 54463 okay: 93.722% done ...

  • --count, -c

    파일의 페이지 수를 인쇄하고 종료합니다. 사용 예 :

    shell> innochecksum --count ../data/test/tab1.ibd

  • --start-page=num, -s num

    이 페이지 번호에서 시작하십시오. 사용 예 :

    shell> innochecksum --start-page=600 ../data/test/tab1.ibd

    또는:

    shell> innochecksum -s 600 ../data/test/tab1.ibd

  • --end-page=num, -e num

    이 페이지 번호에서 끝납니다. 사용 예 :

    shell> innochecksum --end-page=700 ../data/test/tab1.ibd

    또는:

    shell> innochecksum --p 700 ../data/test/tab1.ibd

  • --page=num, -p num

    이 페이지 번호 만 확인하십시오. 사용 예 :

    shell> innochecksum --page=701 ../data/test/tab1.ibd

  • --strict-check, -C

    엄격한 체크섬 알고리즘을 지정하십시오. 옵션에는 innodb, crc32및이 포함됩니다 none.

    이 예에서는 innodb체크섬 알고리즘이 지정됩니다.

    shell> innochecksum --strict-check=innodb ../data/test/tab1.ibd

    이 예에서는 crc32체크섬 알고리즘이 지정됩니다.

    shell> innochecksum -C crc32 ../data/test/tab1.ibd

    다음 조건이 적용됩니다.

    • --strict-check 옵션을 지정하지 않으면 innochecksum이innodb , crc32및 에 대해 유효성을 검사 none합니다.

    • none옵션 을 지정하면에서 생성 한 체크섬 만 none허용됩니다.

    • innodb옵션 을 지정하면에서 생성 한 체크섬 만 innodb 허용됩니다.

    • crc32옵션 을 지정하면에서 생성 한 체크섬 만 crc32허용됩니다.

  • --no-check, -n

    체크섬을 다시 쓸 때 체크섬 확인을 무시하십시오. 이 옵션은 innochecksum --write 옵션 에서만 사용할 수 있습니다. 경우 --write옵션이 지정되지 않은, innochecksum이 종료됩니다.

    이 예에서는 innodb잘못된 체크섬을 대체하기 위해 체크섬을 다시 작성합니다.

    shell> innochecksum --no-check --write innodb ../data/test/tab1.ibd

  • --allow-mismatches, -a

    innochecksum이 종료 되기 전에 허용되는 최대 체크섬 불일치 수 입니다. 기본 설정은 0 인 경우이다 --allow-mismatches=N, N>=0, N불일치가 허용되고 innochecksum의 종료에 N+1.  --allow-mismatches0으로 설정 되면 첫 번째 체크섬 불일치 에서 innochecksum이 종료됩니다.

    이 예에서는 기존 innodb 체크섬이 --allow-mismatches1 로 설정 되도록 다시 작성됩니다 .

    shell> innochecksum --allow-mismatches=1 --write innodb ../data/test/tab1.ibd

    하여 --allow-mismatches1로 설정되어, 1000 페이지와 페이지 파일 (700)에 페이지 (600)에서 미스 매치가 다른 경우, 체크섬 페이지 0-599 및 601-699에 대한 업데이트된다. --allow-mismatches이 1로 설정되어 있기 때문에 체크섬은 첫 번째 불일치를 허용하고 두 번째 불일치에서 종료되며 600 페이지와 700-999 페이지는 변경되지 않습니다.

  • --write=name, -w num

    체크섬을 다시 작성하십시오. 유효하지 않은 체크섬을 다시 쓸 때 --no-check옵션과 함께 사용해야합니다 --write.  --no-check옵션은 innochecksum 에 유효하지 않은 체크섬의 확인을 무시하도록 지시 합니다. --no-check현재 체크섬이 유효한 경우 옵션 을 지정할 필요가 없습니다 .

    --write옵션을 사용할 때 알고리즘을 지정해야합니다 . --write옵션에 가능한 값은 다음 과 같습니다.

    • innodb:의 원래 알고리즘을 사용하여 소프트웨어에서 계산 된 체크섬 InnoDB.

    • crc32: crc32알고리즘을 사용하여 계산 된 체크섬 . 하드웨어 지원으로 수행 될 수 있습니다.

    • none: 상수입니다.

     --write옵션은 전체 페이지를 디스크에 다시 씁니다. 새 체크섬이 기존 체크섬과 동일하면 I / O를 최소화하기 위해 새 체크섬이 디스크에 기록되지 않습니다.

    innochecksum 은--write옵션이 사용될때 배타적 잠금을 얻습니다.

    이 예에서 crc32체크섬은 다음에 대해 작성됩니다 tab1.ibd.

    shell> innochecksum -w crc32 ../data/test/tab1.ibd

    이 예에서는 crc32잘못된 crc32 체크섬 을 대체하기 위해 체크섬을 다시 작성 합니다.

    shell> innochecksum --no-check --write crc32 ../data/test/tab1.ibd

  • --page-type-summary, -S

    테이블 스페이스의 각 페이지 유형 수를 표시합니다. 사용 예 :

    shell> innochecksum --page-type-summary ../data/test/tab1.ibd

    에 대한 샘플 출력 --page-type-summary:

    File::../data/test/tab1.ibd ================PAGE TYPE SUMMARY============== #PAGE_COUNT PAGE_TYPE =============================================== 2 Index page 0 Undo log page 1 Inode page 0 Insert buffer free list page 2 Freshly allocated page 1 Insert buffer bitmap 0 System page 0 Transaction system page 1 File Space Header 0 Extent descriptor page 0 BLOB page 0 Compressed BLOB page 0 Other type of page =============================================== Additional information: Undo page type: 0 insert, 0 update, 0 other Undo page state: 0 active, 0 cached, 0 to_free, 0 to_purge, 0 prepared, 0 other

  • --page-type-dump, -D

    테이블 스페이스의 각 페이지에 대한 페이지 유형 정보를 stderr또는에 덤프합니다 stdout. 사용 예 :

    shell> innochecksum --page-type-dump=/tmp/a.txt ../data/test/tab1.ibd

  • --log, -l

    innochecksum 도구에 대한 로그 출력입니다 . 로그 파일 이름을 제공해야합니다. 로그 출력에는 각 테이블 스페이스 페이지에 대한 체크섬 값이 포함됩니다. 압축되지 않은 테이블의 경우 LSN 값도 제공됩니다.  옵션은 이전 릴리스에서 사용 가능했던 옵션을 --log대체합니다 --debug. 사용 예 :

    shell> innochecksum --log=/tmp/log.txt ../data/test/tab1.ibd

    또는:

    shell> innochecksum -l /tmp/log.txt ../data/test/tab1.ibd

  • - 선택권.

    -표준 입력에서 읽을 옵션을 지정하십시오 . 경우 -옵션이 때 누락 된 " 표준 읽기 "가 예상된다 innochecksum 의지 출력 innochecksum의 것을 나타내는 사용 정보 " - " 옵션이 생략되었다. 사용 예 :

    shell> cat t1.ibd | innochecksum -

    이 예에서 innochecksum  원본 파일 을 변경하지 않고 crc32체크섬 알고리즘을 씁니다 . a.ibdt1.ibd

    shell> cat t1.ibd | innochecksum --write=crc32 - > a.ibd

여러 사용자 정의 테이블 스페이스 파일에서 innochecksum 실행

다음 예제는 여러 사용자 정의 테이블 스페이스 파일 ( 파일) 에서 innochecksum 을 실행하는 방법을 보여줍니다 .ibd.

" test " 데이터베이스 에있는 모든 테이블 스페이스 ( ) 파일에 대해 innochecksum  실행 합니다. .ibd

shell> innochecksum ./data/test/*.ibd

파일 이름이 " t "로 시작하는 모든 테이블 스페이스 파일 ( 파일)에 대해 innochecksum  실행 .ibd합니다 .

shell> innochecksum ./data/test/t*.ibd

디렉토리의 모든 테이블 스페이스 파일 ( 파일)에 대해 innochecksum  실행 .ibd합니다 data.

shell> innochecksum ./data/*/*.ibd

노트

cmd.exe 와 같은 Windows 쉘 은 glob 패턴 확장을 지원하지 않기 때문에 여러 사용자 정의 테이블 스페이스 파일 에서 innochecksum  실행하는 것은 Windows 운영 체제에서 지원되지 않습니다. Windows 시스템에서는 각 사용자 정의 테이블 스페이스 파일에 대해 innochecksum을 별도로 실행해야합니다. 예를 들면 :

cmd> innochecksum.exe t1.ibd cmd> innochecksum.exe t2.ibd cmd> innochecksum.exe t3.ibd

여러 시스템 테이블 스페이스 파일에서 innochecksum 실행

기본적으로 InnoDB시스템 테이블 스페이스 파일 ( ibdata1) 은 하나만 있지만이 innodb_data_file_path옵션을 사용하여 시스템 테이블 스페이스에 대한 여러 파일을 정의 할 수 있습니다 . 다음 예에서 시스템 테이블에 대한 세 개의 파일을 사용하여 정의됩니다 innodb_data_file_path옵션을 : ibdata1, ibdata2,와 ibdata3.

shell> ./bin/mysqld --no-defaults --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"

세 개의 파일 ( ibdata1, ibdata2및 ibdata3)은 하나의 논리 시스템 테이블 스페이스를 형성합니다. 실행하려면 innochecksum 하나 개의 논리적 시스템 테이블 스페이스를 형성 여러 파일에 innochecksum는 필요로 -하나 개의 파일을 생성하기 위해 여러 파일을 연결하는 것과 같습니다 표준 입력에서의 테이블 스페이스 파일을 읽을 수있는 옵션을 선택합니다. 위에 제공된 예의 경우 다음 innochecksum 명령이 사용됩니다.

shell> cat ibdata* | innochecksum -

참고하여주십시오 innochecksum의 에 대한 자세한 내용은 옵션 정보 " - " 옵션을 선택합니다.

노트

cmd.exe 와 같은 Windows 쉘 은 glob 패턴 확장을 지원하지 않으므로 동일한 테이블 스페이스의 여러 파일에서 innochecksum  실행하는 것은 Windows 운영 체제에서 지원되지 않습니다. Windows 시스템에서 innochecksum 은 각 시스템 테이블 스페이스 파일에 대해 별도로 실행되어야합니다. 예를 들면 :

cmd> innochecksum.exe ibdata1

cmd> innochecksum.exe ibdata2

cmd> innochecksum.exe ibdata3

 

 

참고 : dev.mysql.com/doc/refman/8.0/en/innochecksum.html

반응형