Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 pt-findp 명령입니다.
프로그램:
이름
pt-find - MySQL 테이블을 찾고 GNU 찾기와 같은 작업을 실행합니다.
개요
사용법: pt-find [옵션] [데이터베이스]
pt-find는 MySQL 테이블을 검색하고 GNU 찾기와 같은 작업을 실행합니다. 기본 동작
데이터베이스 및 테이블 이름을 인쇄하는 것입니다.
MyISAM 엔진을 사용하여 하루 이상 전에 생성된 모든 테이블을 찾고 해당 테이블을 인쇄합니다.
이름 :
pt-find --ctime +1 --engine MyISAM
InnoDB 테이블을 찾아 MyISAM으로 변환:
pt-find --engine InnoDB --exec "ALTER TABLE %D.%N ENGINE=MyISAM"
name_sid_pid 네이밍에 따라 더 이상 존재하지 않는 프로세스에 의해 생성된 테이블 찾기
규칙을 선택하고 제거합니다.
pt-find --connection-id '\D_\d+_(\d+)$' --server-id '\D_(\d+)_\d+$' --exec-plus "DROP TABLE %s"
테스트 및 정크 데이터베이스에서 빈 테이블을 찾아 삭제합니다.
pt-find --empty 정크 테스트 --exec-plus "DROP TABLE %s"
총 크기가 XNUMXGB 이상인 테이블 찾기:
pt-find --tablesize +5G
모든 테이블을 찾아 총 데이터 및 인덱스 크기를 인쇄하고 가장 큰 테이블을 먼저 정렬
(그런데 정렬은 다른 프로그램입니다).
pt-find --printf "%T\t%D.%N\n" | 정렬 -rn
위와 같지만 이번에는 후손을 위해 데이터를 데이터베이스에 다시 삽입합니다.
pt-find --noquote --exec "sysdata.tblsize(db, tbl, size) 값('%D', '%N', %T)에 삽입"
위험
Percona Toolkit은 성숙하고 실제 세계에서 입증되었으며 잘 테스트되었지만 모든 데이터베이스
도구는 시스템과 데이터베이스 서버에 위험을 초래할 수 있습니다. 이 도구를 사용하기 전에
부디:
· 도구 설명서 읽기
· 도구의 알려진 "버그" 검토
· 비프로덕션 서버에서 도구 테스트
· 프로덕션 서버 백업 및 백업 확인
기술
pt-find는 지정한 테스트를 통과하는 MySQL 테이블을 찾고 작업을 실행합니다.
당신이 지정합니다. 기본 조치는 데이터베이스 및 테이블 이름을 STDOUT에 인쇄하는 것입니다.
pt-find는 GNU find보다 간단합니다. 복잡한 표현식을 지정할 수 없습니다.
명령 행에서.
pt-find는 가능한 경우 SHOW TABLES를 사용하고 필요한 경우 SHOW TABLE STATUS를 사용합니다.
OPTION 타입
세 가지 유형의 옵션이 있습니다. 일부 동작을 결정하는 일반 옵션 또는
환경; 테이블 목록에 테이블을 포함해야 하는지 여부를 결정하는 테스트
설립하다; pt-find가 찾은 테이블에 작업을 수행합니다.
pt-find는 표준 Getopt::Long 옵션 구문 분석을 사용하므로 이중 대시를 사용해야 합니다.
GNU find와 달리 긴 옵션 이름 앞에 있습니다.
옵션
이 도구는 추가 명령줄 인수를 허용합니다. "시놉시스" 및 사용법을 참조하십시오.
자세한 내용은 정보를 참조하십시오.
-- 묻고 통과
MySQL에 연결할 때 암호를 묻습니다.
--대소문자를 구분하지 않음
모든 정규식 검색이 대소문자를 구분하지 않도록 지정합니다.
--문자셋
짧은 형식: -A; 유형: 문자열
기본 문자 집합입니다. 값이 utf8이면 STDOUT에서 Perl의 binmode를 utf8로 설정하고,
mysql_enable_utf8 옵션을 DBD::mysql에 전달하고 SET NAMES UTF8을 실행합니다.
MySQL에 연결합니다. 다른 모든 값은 utf8 레이어 없이 STDOUT에서 binmode를 설정합니다.
MySQL에 연결한 후 SET NAMES를 실행합니다.
--구성
유형: 배열
이 쉼표로 구분된 구성 파일 목록을 읽으십시오. 지정된 경우 첫 번째 항목이어야 합니다.
명령줄의 옵션입니다.
--데이터 베이스
약식: -D; 유형: 문자열
이 데이터베이스에 연결합니다.
--일 시작
시간을 측정합니다("--mmin" 등의 경우).
현재 시간.
--기본 파일
약식: -F; 유형: 문자열
주어진 파일에서 mysql 옵션만 읽으십시오. 절대 경로 이름을 지정해야 합니다.
--도움
도움말을 표시하고 종료합니다.
--주인
짧은 형식: -h; 유형: 문자열
호스트에 연결합니다.
--또는
테스트를 AND가 아닌 OR로 결합하십시오.
기본적으로 테스트는 테스트 사이에 AND가 있는 것처럼 평가됩니다. 이 옵션
OR로 전환합니다.
옵션 구문 분석은 pt-find 자체에서 구현되지 않으므로 복잡한 옵션을 지정할 수 없습니다.
괄호가 있는 표현식과 OR 및 AND가 혼합된 표현식.
--비밀번호
짧은 형식: -p; 유형: 문자열
연결할 때 사용할 비밀번호입니다. 비밀번호에 쉼표가 포함된 경우 이스케이프해야 합니다.
백슬래시 포함: "exam\,ple"
--pid
유형: 문자열
주어진 PID 파일을 생성합니다. PID 파일이 이미 존재하고 도구가 시작되지 않습니다.
포함된 PID가 현재 PID와 다릅니다. 그러나 PID 파일의 경우
존재하고 여기에 포함된 PID가 더 이상 실행되지 않으면 도구가 PID를 덮어씁니다.
현재 PID가 있는 파일 PID 파일은 도구가 종료될 때 자동으로 제거됩니다.
--포트
약식: -P; 유형: 정수
연결에 사용할 포트 번호입니다.
--[no]따옴표
기본값: 예
MySQL의 표준 백틱 문자로 MySQL 식별자 이름을 인용합니다.
인용은 테스트가 실행된 후와 작업이 실행되기 전에 발생합니다.
--set-vars
유형: 배열
이 쉼표로 구분된 "변수=값" 쌍 목록에서 MySQL 변수를 설정합니다.
기본적으로 도구는 다음을 설정합니다.
wait_timeout=10000
명령줄에 지정된 변수는 이러한 기본값을 재정의합니다. 예를 들어,
"--set-vars wait_timeout=500"을 지정하면 기본값 10000이 무시됩니다.
도구는 경고를 인쇄하고 변수를 설정할 수 없는 경우 계속합니다.
--소켓
짧은 형식; 유형: 문자열
연결에 사용할 소켓 파일입니다.
--사용자
약식: -u; 유형: 문자열
현재 사용자가 아닌 경우 로그인을 위한 사용자입니다.
--번역
버전을 표시하고 종료합니다.
--[no]버전 확인
기본값: 예
Percona Toolkit, MySQL 및 기타 프로그램의 최신 버전을 확인하십시오.
이것은 두 가지 추가 기능이 있는 표준 "자동 업데이트 확인" 기능입니다.
특징. 먼저 이 도구는 로컬 시스템의 다른 프로그램 버전을 확인합니다.
자체 버전에 추가. 예를 들어 모든 MySQL 서버의 버전을 확인합니다.
Perl 및 Perl 모듈 DBD::mysql에 연결됩니다. 둘째, 확인하고 경고한다.
알려진 문제가 있는 버전에 대해. 예를 들어 MySQL 5.5.25에는 치명적인 버그가 있었고
5.5.25a로 재발매되었습니다.
모든 업데이트 또는 알려진 문제는 도구의 일반 출력 전에 STDOUT에 인쇄됩니다.
이 기능은 도구의 정상적인 작동을 방해해서는 안 됩니다.
자세한 내용은 다음을 방문하십시오. .
시험 준비 프로그램
대부분의 테스트는 SHOW TABLE STATUS 출력 열에 대해 일부 기준을 확인합니다. 숫자
인수는 n보다 크면 +n, n보다 작으면 -n, 정확하게는 n으로 지정할 수 있습니다.
N. 모든 숫자 옵션은 k, M 또는 G(1_024,
각각 1_048_576 및 1_073_741_824). 모든 패턴은 Perl 정규 표현식입니다.
('man perlre' 참조) SQL LIKE 패턴으로 지정되지 않은 경우.
날짜와 시간은 모두 동일한 순간을 기준으로 측정되며, pt-find가 처음으로
데이터베이스 서버는 지금 몇시입니까? 모든 날짜 및 시간 조작은 SQL에서 수행되므로
5일 전에 수정된 테이블을 찾으라고 말하면 SELECT로 변환됩니다.
DATE_SUB(CURRENT_TIMESTAMP, 간격 5일). "--day-start"를 지정하면 물론
대신 CURRENT_DATE를 기준으로 합니다.
그러나 테이블 크기 및 기타 메트릭은 한 순간에 일관성이 없습니다. 할 수 있습니다
MySQL이 모든 SHOW 쿼리를 처리하는 데 약간의 시간이 걸리며 pt-find는 아무 것도 할 수 없습니다.
그것에 대해. 이러한 측정은 촬영된 시간을 기준으로 합니다.
이 목록에 없는 테스트가 필요한 경우 버그 보고서를 제출하면 pt-find를 개선하겠습니다.
당신을 위한. 정말 쉽습니다.
--autoinc
유형: 문자열; 그룹: 테스트
테이블의 다음 AUTO_INCREMENT는 n입니다. 이것은 Auto_increment 열을 테스트합니다.
--avgrowlen
유형: 크기; 그룹: 테스트
테이블 평균 행 길이는 n바이트입니다. 이는 Avg_row_length 열을 테스트합니다. 지정된
크기는 Avg_row_length가 NULL인지 테스트하기 위해 "NULL"일 수 있습니다.
--체크섬
유형: 문자열; 그룹: 테스트
테이블 체크섬은 n입니다. 체크섬 열을 테스트합니다.
--cmin
유형: 크기; 그룹: 테스트
n분 전에 테이블이 생성되었습니다. 이것은 Create_time 열을 테스트합니다.
--대조
유형: 문자열; 그룹: 테스트
테이블 데이터 정렬은 패턴과 일치합니다. 데이터 정렬 열을 테스트합니다.
--열 이름
유형: 문자열; 그룹: 테스트
테이블의 열 이름이 패턴과 일치합니다.
--열 유형
유형: 문자열; 그룹: 테스트
테이블의 열이 이 유형과 일치합니다(대소문자 구분 안 함).
유형의 예는 다음과 같습니다. varchar, char, int, smallint, bigint, decimal, year, timestamp,
텍스트, 열거형.
--논평
유형: 문자열; 그룹: 테스트
테이블 주석이 패턴과 일치합니다. 이는 주석 열을 테스트합니다.
--연결 ID
유형: 문자열; 그룹: 테스트
테이블 이름에 존재하지 않는 MySQL 연결 ID가 있습니다. 이것은 테이블 이름을 테스트합니다.
무늬. 이 테스트의 인수는 다음을 캡처하는 Perl 정규식이어야 합니다.
다음과 같은 숫자: (\d+). 테이블 이름이 패턴과 일치하면 이러한 캡처된 숫자
일부 프로세스의 MySQL 연결 ID로 간주됩니다. 연결이 되지 않는 경우
SHOW FULL PROCESSLIST에 따라 존재하는 경우 테스트는 true를 반환합니다. 연결 ID인 경우
pt-find 자체 연결 ID보다 큰 경우 테스트는 안전을 위해 false를 반환합니다.
왜 이것을 하시겠습니까? MySQL 문 기반 복제를 사용하는 경우
아마도 임시 테이블이 야기할 수 있는 문제를 알고 있을 것입니다. 해결하도록 선택할 수 있습니다.
이것은 임시 테이블 대신 고유한 이름을 가진 실제 테이블을 생성함으로써 가능합니다. 일방 통행
이렇게 하려면 테이블 끝에 연결 ID를 추가하면 됩니다.
scratch_table_12345. 이렇게 하면 테이블 이름이 고유하고 다음을 수행할 수 있습니다.
연결된 연결을 찾으십시오. 그리고 아마도 가장 중요한 것은
연결이 더 이상 존재하지 않으면 정리하지 않고 연결이 끊어진 것으로 간주할 수 있습니다.
이 테이블은 제거 후보입니다.
이것이 제가 스크래치 테이블을 관리하는 방법이며, pt-find에 이 테스트를 포함시킨 이유입니다.
"--connection-id"에 사용하는 인수는 "\D_(\d+)$"입니다. 다음이 있는 테이블을 찾습니다.
끝에 밑줄과 숫자가 아닌 문자가 오는 일련의 숫자
(후자의 기준은 끝에 날짜가 있는 테이블을 검사하는 것을 방지합니다.
사람들은 다음과 같은 경향이 있습니다: 예를 들어 baron_scratch_2007_05_07). 유지하는 것이 좋다.
스크래치 테이블은 물론 분리됩니다.
이렇게 하면 사용자 pt-find가 PROCESS 권한을 가지고 실행되는지 확인하십시오!
그렇지 않으면 동일한 사용자의 연결만 볼 수 있으며 일부 테이블을 생각할 수 있습니다.
아직 사용 중일 때 제거할 수 있습니다. 안전을 위해 pt-find는 다음을 확인합니다.
너.
"--server-id"도 참조하십시오.
--createopts
유형: 문자열; 그룹: 테스트
테이블 생성 옵션은 패턴과 일치합니다. 이것은 Create_options 열을 테스트합니다.
--ctime
유형: 크기; 그룹: 테스트
n일 전에 테이블이 생성되었습니다. 이것은 Create_time 열을 테스트합니다.
--데이터프리
유형: 크기; 그룹: 테스트
테이블에는 n바이트의 여유 공간이 있습니다. 이것은 Data_free 열을 테스트합니다. 지정된 크기
Data_free가 NULL인지 테스트하기 위해 "NULL"일 수 있습니다.
--데이터 크기
유형: 크기; 그룹: 테스트
테이블 데이터는 n바이트의 공간을 사용합니다. 이것은 Data_length 열을 테스트합니다. 지정된
크기는 Data_length가 NULL인지 테스트하기 위해 "NULL"일 수 있습니다.
--dblike
유형: 문자열; 그룹: 테스트
데이터베이스 이름은 SQL LIKE 패턴과 일치합니다.
--dregex
유형: 문자열; 그룹: 테스트
데이터베이스 이름이 이 패턴과 일치합니다.
--비어있는
그룹: 테스트
테이블에 행이 없습니다. 행 열을 테스트합니다.
--엔진
유형: 문자열; 그룹: 테스트
테이블 스토리지 엔진은 이 패턴과 일치합니다. 이는 엔진 열을 테스트하거나
이전 버전의 MySQL, Type 열.
--기능
유형: 문자열; 그룹: 테스트
함수 정의는 패턴과 일치합니다.
--인덱스 크기
유형: 크기; 그룹: 테스트
테이블 인덱스는 n바이트의 공간을 사용합니다. 이렇게 하면 Index_length 열이 테스트됩니다. 그만큼
지정된 크기는 Index_length가 NULL인지 테스트하기 위해 "NULL"일 수 있습니다.
--kmin
유형: 크기; 그룹: 테스트
n분 전에 테이블을 확인했습니다. 이는 Check_time 열을 테스트합니다.
--ktime
유형: 크기; 그룹: 테스트
n일 전에 테이블을 확인했습니다. 이는 Check_time 열을 테스트합니다.
--mmin
유형: 크기; 그룹: 테스트
테이블이 n분 전에 마지막으로 수정되었습니다. 이는 Update_time 열을 테스트합니다.
--m시간
유형: 크기; 그룹: 테스트
테이블이 n일 전에 마지막으로 수정되었습니다. 이는 Update_time 열을 테스트합니다.
--절차
유형: 문자열; 그룹: 테스트
프로시저 정의는 패턴과 일치합니다.
--rowformat
유형: 문자열; 그룹: 테스트
테이블 행 형식이 패턴과 일치합니다. 이것은 Row_format 열을 테스트합니다.
--행
유형: 크기; 그룹: 테스트
테이블에는 n개의 행이 있습니다. 행 열을 테스트합니다. 지정된 크기는 "NULL"이 될 수 있습니다.
행이 NULL인 곳을 테스트합니다.
--서버 ID
유형: 문자열; 그룹: 테스트
테이블 이름에는 서버 ID가 포함됩니다. 이름 지정을 사용하여 임시 테이블을 생성하는 경우
규칙은 "--connection-id"에 설명되어 있지만 서버의 서버 ID도 추가합니다.
어떤 테이블이 생성되었는지 확인한 다음 이 패턴 일치를 사용하여 테이블이
생성된 서버에만 삭제됩니다. 이것은 테이블이
사용 중인 슬레이브에 실수로 떨어뜨린 경우(서버 ID가
복제가 작동하려면 모두 고유해야 함).
예를 들어, 마스터(서버 ID 22)에서 다음과 같은 테이블을 생성합니다.
scratch_table_22_12345. 슬레이브(서버 ID 23)에 이 테이블이 표시되면
그러한 연결 12345가 없으면 안전하게 삭제할 수 있다고 생각합니다. 하지만
이름이 서버 ID와 "--server-id '\D_(\d+)_\d+$'", 테이블과 일치하도록 강제합니다.
노예에게 떨어지지 않을 것입니다.
--테이블 크기
유형: 크기; 그룹: 테스트
테이블은 n바이트의 공간을 사용합니다. 이것은 Data_length와 Index_length의 합을 테스트합니다.
열.
--tbllike
유형: 문자열; 그룹: 테스트
테이블 이름은 SQL LIKE 패턴과 일치합니다.
--tblregex
유형: 문자열; 그룹: 테스트
테이블 이름이 이 패턴과 일치합니다.
--tblversion
유형: 크기; 그룹: 테스트
테이블 버전은 n입니다. 버전 열을 테스트합니다.
--방아쇠
유형: 문자열; 그룹: 테스트
트리거 작업 문이 패턴과 일치합니다.
--트리거 테이블
유형: 문자열; 그룹: 테스트
"--trigger"는 테이블 일치 패턴에 정의됩니다.
--보다
유형: 문자열; 그룹: 테스트
CREATE VIEW는 이 패턴과 일치합니다.
ACTIONS
"--exec-plus" 작업은 다른 모든 작업 이후에 발생하지만 그렇지 않은 작업은
불확실한 순서. 결정론이 필요한 경우 버그 보고서를 제출하면 추가하겠습니다.
기능.
--exec
유형: 문자열; 그룹: 작업
찾은 각 항목에 대해 이 SQL을 실행합니다. SQL은 이스케이프 및 형식화를 포함할 수 있습니다.
지시문("--printf" 참조).
--exec-dsn
유형: 문자열; 그룹: 작업
"--exec"로 SQL을 실행할 때 사용할 DSN을 키-값 형식으로 지정하고
"--exec-plus". 지정되지 않은 모든 값은 명령줄 인수에서 상속됩니다.
--exec-plus
유형: 문자열; 그룹: 작업
한 번에 모든 항목에 대해 이 SQL을 실행합니다. 이 옵션은 "--exec"와 다릅니다. 있다
이스케이프 또는 서식 지정 지시문이 없습니다. 에 대한 특별한 자리 표시자가 하나만 있습니다.
데이터베이스 및 테이블 이름 목록, %s. 찾은 테이블 목록이 조인됩니다.
쉼표와 함께 %s를 배치할 때마다 대체됩니다.
예를 들어, 찾은 모든 테이블을 삭제하는 데 사용할 수 있습니다.
드롭 테이블 %s
이것은 일종의 GNU find의 "-exec command {} +" 구문과 같습니다. 다만 완전히 그렇지는 않다
숨은. 그리고 명령줄 구문 분석기를 작성할 필요가 없습니다.
--인쇄
그룹: 작업
데이터베이스와 테이블 이름을 인쇄하고 그 뒤에 개행 문자를 입력하십시오. 이것이 기본 동작입니다.
다른 조치가 지정되지 않은 경우.
--printf
유형: 문자열; 그룹: 작업
'\' 이스케이프 및 '%' 지시문을 해석하여 표준 출력에 형식을 인쇄합니다.
이스케이프는 \n 및 \t와 같은 백슬래시 문자입니다. Perl은 이것을 해석하므로 다음을 수행할 수 있습니다.
Perl이 알고 있는 이스케이프를 사용하십시오. 지시문은 %s로 대체되었으며 현재
작성 시 필드 너비 또는
정렬(그렇게 하는 방법에 대해 숙고하고 있지만).
다음은 지시어 목록입니다. 대부분은 단순히
테이블 상태를 보여줍니다. 열이 NULL이거나 존재하지 않으면 빈 문자열이 표시됩니다.
출력. 다음 목록에 없는 문자가 뒤에 오는 % 문자는
버려집니다(하지만 다른 문자는 인쇄됨).
CHAR 데이터 소스 참고 사항
---- ------------------ ------------- --------------
Auto_increment
Avg_row_length
c 체크섬
C 생성_시간
D 데이터베이스 테이블이 있는 데이터베이스 이름
d 데이터_길이
E 엔진 이전 버전의 MySQL에서는 Type입니다.
F 데이터_무료
f 주석 필드에서 구문 분석된 Innodb_free
나는 Index_length
K체크_시간
L 대조
M 최대_데이터_길이
N 이름
오 코멘트
P Create_options
R 행 형식
S 행
T 테이블_길이 데이터_길이+인덱스_길이
U 업데이트_시간
V 버전
dsn 옵션
이러한 DSN 옵션은 DSN을 만드는 데 사용됩니다. 각 옵션은 "option=value"와 같이 주어집니다.
옵션은 대소문자를 구분하므로 P와 p는 동일한 옵션이 아닙니다. 있을 수 없다
"=" 앞이나 뒤에 공백이 있고 값에 공백이 포함되어 있으면 따옴표로 묶어야 합니다.
DSN 옵션은 쉼표로 구분됩니다. 자세한 내용은 percona-toolkit 맨페이지를 참조하십시오.
· ㅏ
dsn: 문자 집합; 복사: 예
기본 문자 집합입니다.
· NS
dsn: 데이터베이스; 복사: 예
기본 데이터베이스.
· NS
dsn: mysql_read_default_file; 복사: 예
주어진 파일에서 기본 옵션만 읽기
· h
dsn: 호스트; 복사: 예
호스트에 연결합니다.
· NS
dsn: 비밀번호; 복사: 예
연결할 때 사용할 비밀번호입니다. 비밀번호에 쉼표가 포함된 경우 이스케이프해야 합니다.
백슬래시 포함: "exam\,ple"
· 피
dsn: 포트; 복사: 예
연결에 사용할 포트 번호입니다.
· NS
dsn: mysql_socket; 복사: 예
연결에 사용할 소켓 파일입니다.
· 유
dsn: 사용자; 복사: 예
현재 사용자가 아닌 경우 로그인을 위한 사용자입니다.
환경
환경 변수 "PTDEBUG"는 STDERR에 대한 자세한 디버깅 출력을 활성화합니다. 사용하려면
디버깅하고 모든 출력을 파일로 캡처하려면 다음과 같이 도구를 실행하십시오.
PTDEBUG=1 pt-찾기 ... > 파일 2>&1
주의: 디버깅 출력은 방대하고 수 메가바이트의 출력을 생성할 수 있습니다.
시스템 요구 사항
Perl, DBI, DBD::mysql 및 모든 시스템에 설치해야 하는 몇 가지 핵심 패키지가 필요합니다.
합리적으로 새로운 버전의 Perl.
onworks.net 서비스를 사용하여 온라인에서 pt-findp 사용
