pt-online-schema-changep - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 pt-online-schema-changep 명령입니다.

프로그램:

이름


pt-online-schema-change - 테이블을 잠그지 않고 ALTER 테이블.

개요


사용법: pt-online-schema-change [옵션] DSN

pt-online-schema-change는 읽기 또는 쓰기를 차단하지 않고 테이블의 구조를 변경합니다.
DSN에서 데이터베이스와 테이블을 지정합니다. 읽기 전에 이 도구를 사용하지 마십시오.
문서화하고 백업을 주의 깊게 확인하십시오.

sakila.actor에 열을 추가합니다.

pt-online-schema-change --alter "ADD COLUMN c1 INT" D=sakila,t=배우

sakila.actor를 InnoDB로 변경하여 논블로킹에서 효과적으로 OPTIMIZE TABLE을 수행합니다.
패션은 이미 InnoDB 테이블이기 때문입니다.

pt-online-schema-change --alter "ENGINE=InnoDB" D=sakila,t=actor

위험


Percona Toolkit은 성숙하고 실제 세계에서 입증되었으며 잘 테스트되었지만 모든 데이터베이스
도구는 시스템과 데이터베이스 서버에 위험을 초래할 수 있습니다. 이 도구를 사용하기 전에
부디:

· 도구 설명서 읽기

· 도구의 알려진 "버그" 검토

· 비프로덕션 서버에서 도구 테스트

· 프로덕션 서버 백업 및 백업 확인

기술


pt-online-schema-change는 MySQL이 내부적으로 테이블을 변경하는 방식을 에뮬레이트하지만 작동합니다.
변경하려는 테이블의 사본에. 이것은 원래 테이블이
잠겨 있고 클라이언트는 그 안의 데이터를 계속 읽고 변경할 수 있습니다.

pt-online-schema-change는 변경할 테이블의 빈 복사본을 생성하여 작동합니다.
원하는 대로 변경한 다음 원본 테이블에서 새 테이블로 행을 복사합니다. 때
복사가 완료되면 원본 테이블을 옮기고 새 테이블로 교체합니다. 에 의해
기본적으로 원본 테이블도 삭제됩니다.

데이터 복사 프로세스는 데이터의 작은 청크에서 수행되며,
특정 시간 내에 실행되도록 합니다("--chunk-time" 참조). 이 과정은 매우
pt-table-checksum과 같은 다른 도구가 작동하는 방식과 유사합니다. 데이터 수정
복사하는 동안 원본 테이블은 새 테이블에 반영됩니다.
새 테이블의 해당 행을 업데이트하기 위해 원본 테이블에 트리거를 생성합니다.
트리거 사용은 트리거가 이미 정의된 경우 도구가 작동하지 않음을 의미합니다.
책상 위에.

도구가 새 테이블에 데이터 복사를 마치면 원자 "RENAME TABLE"을 사용합니다.
원본 테이블과 새 테이블의 이름을 동시에 바꾸는 작업입니다. 이 완료 후,
도구는 원래 테이블을 삭제합니다.

외래 키는 도구의 작동을 복잡하게 만들고 추가 위험을 초래합니다. 기술
외래 키가 참조할 때 원본 테이블과 새 테이블의 이름을 원자적으로 바꾸는 것은 작동하지 않습니다.
테이블에. 도구는 스키마 다음에 새 테이블을 참조하도록 외래 키를 업데이트해야 합니다.
변경이 완료되었습니다. 이 도구는 이를 수행하기 위해 두 가지 방법을 지원합니다. 당신은 읽을 수있다
이에 대한 자세한 내용은 "--alter-foreign-keys-method" 문서를 참조하십시오.

외래 키도 일부 부작용을 일으킵니다. 최종 테이블에는 동일한 외래 키가 있습니다.
ALTER에서 다르게 지정하지 않는 한 원래 테이블로 인덱스
문), 개체 이름을 피하기 위해 개체 이름을 약간 변경할 수 있습니다.
MySQL과 InnoDB의 충돌.

안전을 위해 "--execute" 옵션을 지정하지 않는 한 도구는 테이블을 수정하지 않습니다.
기본적으로 활성화되어 있지 않습니다. 이 도구는 예방을 위한 다양한 기타 조치를 지원합니다.
원치 않는 로드 또는 기타 문제(예: 복제본 자동 감지,
다음 안전 확인을 사용합니다.

· 대부분의 경우 기본 키 또는 고유 인덱스가 없으면 도구 작동이 거부됩니다.
테이블에 있습니다. 자세한 내용은 "--alter"를 참조하십시오.

· 도구는 복제 필터를 감지하면 작동을 거부합니다. 보다
자세한 내용은 "--[no]check-replication-filters"를 참조하십시오.

· 도구는 지연된 복제본을 관찰하는 경우 데이터 복사 작업을 일시 중지합니다.
복제 중. 자세한 내용은 "--max-lag"를 참조하세요.

· 도구는 서버에 너무 많은 부하가 감지되면 작업을 일시 중지하거나 중단합니다. 보다
자세한 내용은 "--max-load" 및 "--critical-load"를 참조하십시오.

· 도구는 "innodb_lock_wait_timeout=1" 및 (MySQL 5.5 이상용)을 설정합니다.
"lock_wait_timeout=60" 모든 잠금의 희생양이 될 가능성이 더 높도록
다른 트랜잭션을 방해할 가능성이 적습니다. 이러한 값은
"--set-vars"를 지정하여 변경했습니다.

· 도구는 외래 키 제약 조건이 테이블을 참조하는 경우 테이블 변경을 거부합니다.
"--alter-foreign-keys-method"를 지정합니다.

· 이 도구는 "Percona XtraDB 클러스터" 노드에서 MyISAM 테이블을 변경할 수 없습니다.

퍼 코나 엑스트라DB 클러스터


pt-online-schema-change는 Percona XtraDB 클러스터(PXC) 5.5.28-23.7 이상에서 작동하지만
두 가지 제한 사항이 있습니다. InnoDB 테이블만 변경할 수 있고 "wsrep_OSU_method"는
"TOI"(전체 주문 격리)로 설정해야 합니다. 호스트가
클러스터 노드이고 테이블이 MyISAM이거나 MyISAM("ENGINE=MyISAM")으로 변환 중이거나
"wsrep_OSU_method"가 "TOI"가 아닌 경우. 이러한 검사를 비활성화할 수 있는 방법은 없습니다.

출력


이 도구는 활동에 대한 정보를 STDOUT에 인쇄하므로 그것이 무엇인지 볼 수 있습니다.
행위. 데이터 복사 단계에서는 "--progress" 보고서를 STDERR에 인쇄합니다. 당신은 얻을 수 있습니다
"--print"를 지정하여 추가 정보.

"--statistics"를 지정하면 다양한 내부 이벤트 수에 대한 보고서가 다음 위치에 인쇄됩니다.
다음과 같이 끝납니다.

# 이벤트 수
# ====== =====
# 삽입 1

옵션


"--dry-run" 및 "--execute"는 상호 배타적입니다.

이 도구는 추가 명령줄 인수를 허용합니다. "시놉시스" 및 사용법을 참조하십시오.
자세한 내용은 정보를 참조하십시오.

--바꾸다
유형: 문자열

ALTER TABLE 키워드가 없는 스키마 수정입니다. 여러 수행할 수 있습니다
쉼표로 지정하여 테이블을 수정합니다. MySQL을 참조하십시오.
ALTER TABLE의 구문에 대한 매뉴얼입니다.

다음과 같은 제한 사항이 적용되며 시도할 경우 도구가 실패하게 됩니다.
예측할 수 없는 방법:

· 거의 모든 경우에 PRIMARY KEY 또는 UNIQUE INDEX가
테이블. 이는 도구가 DELETE 트리거를 생성하여
프로세스가 실행되는 동안 업데이트된 새 테이블.

주목할만한 예외는 PRIMARY KEY 또는 UNIQUE INDEX가 다음에서 생성되는 경우입니다.
현존하는 ALTER 절의 일부로; 이 경우 다음을 사용합니다.
DELETE 트리거에 대한 열입니다.

· "RENAME" 절을 사용하여 테이블 이름을 바꿀 수 없습니다.

· 새 이름으로 열을 삭제하고 다시 추가하여 열 이름을 변경할 수 없습니다. 도구
원래 열의 데이터를 새 열에 복사하지 않습니다.

· 기본값이 없는 열을 추가하고 NOT NULL로 만들면 도구는
실패합니다. 기본값을 추측하지 않기 때문입니다. 다음을 지정해야 합니다.
태만.

· "DROP FOREIGN KEY constraint_name"은 "_constraint_name"을 지정해야 합니다.
실제 "constraint_name"보다. MySQL의 제한으로 인해 pt-online-schema-
변경은 다음을 생성할 때 외래 키 제약 조건 이름에 선행 밑줄을 추가합니다.
새 테이블. 예를 들어 이 제약 조건을 삭제하려면 다음을 수행합니다.

제약 조건 `fk_foo` 외래 키(`foo_id`) 참조 `bar`(`foo_id`)

"--alter "DROP FOREIGN KEY _fk_foo""를 지정해야 합니다.

· 이 도구는 MySQL 5.0에서 "LOCK IN SHARE MODE"를 사용하지 않습니다.
복제를 중단하는 슬레이브 오류:

쿼리로 인해 마스터와 슬레이브에서 다른 오류가 발생했습니다. 마스터 오류:
'잠금을 시도할 때 교착 상태가 발견되었습니다. 트랜잭션을 다시 시작해 보십시오'(1213),
슬레이브 오류: '오류 없음'(0). 기본 데이터베이스: 'pt_osc'.
쿼리: 'INSERT INTO pt_osc.t (id, c) VALUES ('730', '새 행')'

MyISAM이 InnoDB가 아니기 때문에 MyISAM 테이블을 InnoDB로 변환할 때 오류가 발생합니다.
트랜잭션이지만 InnoDB는 트랜잭션입니다. MySQL 5.1 이상에서 이 경우를 처리합니다.
그러나 테스트는 MySQL 5에서 시간의 5.0% 오류를 재현합니다.

이것은 다음과 유사한 MySQL 버그입니다.http://bugs.mysql.com/bug.php?id=45694>이지만
MySQL 5.0에는 수정 사항이나 해결 방법이 없습니다. "공유 모드 잠금" 없이 테스트
시간의 100%를 통과하므로 데이터 손실 또는 복제 중단 위험이
무시할 만하다.

Be 확인 확인 전에, 테이블 if 사용 MySQL의 5.0 그리고 변환 마이이삼
이노디비!

--외부 키 변경 방법
유형: 문자열

새 테이블을 참조하도록 외래 키를 수정하는 방법. 외래 키
변경될 테이블 참조는 특별히 다루어져야 합니다.
올바른 테이블을 계속 참조하십시오. 도구가 원본 테이블의 이름을
새로운 것이 그 자리를 차지하도록 하고, 외래 키는 이름이 바뀐 테이블을 "따릅니다".
대신 새 테이블을 참조하도록 변경해야 합니다.

이 도구는 이를 달성하기 위해 두 가지 기술을 지원합니다. 자동으로 "자식을 찾습니다.
변경될 테이블을 참조하는 "테이블"입니다.

자동
가장 적합한 방법을 자동으로 결정합니다. 이 도구는 "rebuild_constraints"를 사용합니다.
가능한 경우(자세한 내용은 해당 방법에 대한 설명 참조) 그렇지 않은 경우
"drop_swap"을 사용합니다.

재구축_제약
이 방법은 "ALTER TABLE"을 사용하여 외래 키 제약 조건을 삭제하고 다시 추가합니다.
새 테이블을 참조하십시오. 다음 중 하나 이상이 아닌 한 이것이 선호되는 기술입니다.
"하위" 테이블이 너무 커서 "ALTER"가 너무 오래 걸립니다. 도구
하위 테이블의 행 수를 현재 속도와 비교하여 결정합니다.
이 도구는 이전 테이블에서 새 테이블로 행을 복사할 수 있습니다. 만약
도구는 하위 테이블이 이전보다 짧은 시간에 변경될 수 있다고 추정합니다.
"--chunk-time"이면 이 기술을 사용합니다. 추정을 위해
하위 테이블을 변경하는 데 필요한 시간, 도구는 행 복사 속도를 곱합니다.
MySQL의 "ALTER TABLE"이 일반적으로 훨씬 빠르기 때문에 "--chunk-size-limit"로
행을 복사하는 외부 프로세스보다

MySQL의 제한으로 인해 외래 키는 다음과 같은 이름을 갖지 않습니다.
그들이 이전에 한 ALTER. 이 도구는 외래 키의 이름을 변경해야 합니다.
재정의하여 이름 앞에 밑줄을 추가합니다. 경우에 따라 MySQL
또한 외래 키에 필요한 인덱스의 이름을 자동으로 바꿉니다.

드롭_스왑
외래 키 검사를 비활성화(FOREIGN_KEY_CHECKS=0)한 다음 원본 테이블을 삭제합니다.
새 테이블의 이름을 해당 위치로 바꾸기 전에. 이건 보통이랑 달라
원자 "RENAME"을 사용하는 이전 테이블과 새 테이블을 교체하는 방법입니다.
클라이언트 응용 프로그램에서 감지할 수 없습니다.

이 방법은 더 빠르고 차단하지 않지만 두 가지 이유로 더 위험합니다.
첫째, 원래 테이블을 삭제하고 테이블 이름을 바꾸는 사이의 짧은 시간 동안
임시 테이블, 변경할 테이블이 단순히 존재하지 않고 쿼리
그것에 대해 오류가 발생합니다. 둘째, 오류가 있고 새
테이블을 이전 테이블의 위치로 이름을 바꿀 수 없으면 너무 늦습니다.
이전 테이블이 영구적으로 사라지기 때문에 중단합니다.

이 방법은 "--no-swap-tables" 및 "--no-drop-old-table"을 강제 적용합니다.

없음
이 방법은 "swap"이 없는 "drop_swap"과 같습니다. 모든 외래 키
원래 테이블을 참조하면 이제 존재하지 않는 테이블을 참조하게 됩니다. 이것은
일반적으로 "SHOW ENGINE INNODB"에 표시되는 외래 키 위반을 일으킵니다.
STATUS", 다음과 유사합니다.

인덱스 `idx_fk_staff_id` 튜플에 추가하려고 합니다.
데이터 튜플: 2개 필드;
0: 렌 1; 05진수 XNUMX; 오름차순;;
1: 렌 4; 80000001진수 XNUMX; 오름차순;;
그러나 상위 테이블 `sakila`.`staff_old`
또는 해당 .ibd 파일이 현재 존재하지 않습니다!

원래 테이블(이 경우 sakila.staff)의 이름이
sakila.staff_old 그리고 떨어졌다. 외래 키 제약 조건을 처리하는 이 방법
데이터베이스 관리자가 도구의 내장 기능을 비활성화할 수 있도록 제공됩니다.
원하는 경우 기능.

--[no]스왑 전 분석
기본값: 예

이전 테이블과 교체하기 전에 새 테이블에서 ANALYZE TABLE을 실행하십시오. 기본적으로,
이것은 MySQL 5.6 이상을 실행할 때만 발생하며 "innodb_stats_persistent"는
가능합니다. MySQL에 관계없이 활성화 또는 비활성화하려면 옵션을 명시적으로 지정하십시오.
버전 및 "innodb_stats_persistent".

이것은 InnoDB 옵티마이저 통계와 관련된 잠재적으로 심각한 문제를 피합니다.
알림을 받는 테이블이 사용 중이고 도구가 빠르게 완료되면 새 테이블이
스왑 후 옵티마이저 통계가 없습니다. 이로 인해 빠른 인덱스 사용이 발생할 수 있습니다.
옵티마이저 통계가 업데이트될 때까지 전체 테이블 스캔을 수행하는 쿼리(일반적으로
10 초). 테이블이 크고 서버 사용량이 많은 경우 정전이 발생할 수 있습니다.

-- 묻고 통과
MySQL에 연결할 때 암호를 묻습니다.

--문자셋
짧은 형식: -A; 유형: 문자열

기본 문자 집합입니다. 값이 utf8이면 STDOUT에서 Perl의 binmode를 utf8로 설정하고,
mysql_enable_utf8 옵션을 DBD::mysql에 전달하고 SET NAMES UTF8을 실행합니다.
MySQL에 연결합니다. 다른 모든 값은 utf8 레이어 없이 STDOUT에서 binmode를 설정합니다.
MySQL에 연결한 후 SET NAMES를 실행합니다.

--[no]확인-변경
기본값: 예

지정된 "--alter"를 구문 분석하고 의도하지 않은 동작 가능성에 대해 경고합니다.
현재 다음을 확인합니다.

열 이름 변경
도구의 이전 버전에서 "CHANGE COLUMN name
new_name"을 사용하면 해당 열의 데이터가 손실됩니다. 이제 도구는
alter 문을 사용하고 이러한 경우를 포착하려고 시도하므로 이름이 변경된 열은 다음과 같아야 합니다.
원본과 동일한 데이터. 그러나 이 작업을 수행하는 코드는 전체 코드가 아닙니다.
SQL 파서가 끊어졌으므로 먼저 "--dry-run" 및 "--print"를 사용하여 도구를 실행해야 합니다.
이름이 바뀐 열을 올바르게 감지하는지 확인하십시오.

기본 키 삭제
"--alter"에 "DROP PRIMARY KEY"(대소문자 및 공백 구분 안 함)가 포함된 경우 경고
"--dry-run"이 지정되지 않으면 인쇄되고 도구가 종료됩니다. 변경
기본 키는 위험할 수 있지만 도구에서 처리할 수 있습니다. 도구의 트리거,
특히 DELETE 트리거는 기본 키 변경에 가장 큰 영향을 받습니다.
도구가 트리거에 기본 키를 사용하는 것을 선호하기 때문입니다. 당신은해야
먼저 "--dry-run" 및 "--print"로 도구를 실행하고 트리거가 다음과 같은지 확인하십시오.
수정합니다.

--체크-간격
유형: 시간; 기본값: 1

"--max-lag" 확인 사이의 수면 시간.

--[no]체크-플랜
기본값: 예

안전을 위해 쿼리 실행 계획을 확인하십시오. 기본적으로 이 옵션을 사용하면 도구가 실행됩니다.
소량의 데이터에 액세스하기 위한 쿼리를 실행하기 전에 EXPLAIN하지만
MySQL이 잘못된 실행 계획을 선택하면 많은 행에 액세스할 수 있습니다. 여기에는 다음이 포함됩니다.
청크 경계 및 청크 쿼리 자체를 결정하는 쿼리. 나타나면
MySQL이 잘못된 쿼리 실행 계획을 사용하면 도구는
테이블.

이 도구는 여러 휴리스틱을 사용하여 실행 계획이 잘못된지 여부를 확인합니다. 그만큼
첫 번째는 EXPLAIN이 MySQL이 원하는 인덱스를 사용하여 액세스하려고 한다고 보고하는지 여부입니다.
행. MySQL이 다른 인덱스를 선택하면 도구는 쿼리를 안전하지 않은 것으로 간주합니다.

이 도구는 또한 MySQL이 보고서에 사용할 인덱스의 양을 확인합니다.
질문. EXPLAIN 출력은 key_len 열에 이를 표시합니다. 도구는 다음을 기억합니다.
가장 큰 key_len이 표시되고 MySQL이 더 작은 key_len을 사용할 것이라고 보고하는 청크를 건너뜁니다.
인덱스의 접두사. 이 휴리스틱은 다음이 있는 청크를 건너뛰는 것으로 이해할 수 있습니다.
다른 청크보다 나쁜 실행 계획.

이 도구는 잘못된 실행으로 인해 청크를 처음 건너뛸 때 경고를 인쇄합니다.
각 테이블에서 계획하십시오. 다음 청크는 자동으로 건너뜁니다.
도구 출력의 SKIPPED 열에서 건너뛴 청크 수입니다.

이 옵션은 각 테이블과 청크에 일부 설정 작업을 추가합니다. 작업은 아니지만
MySQL에 방해가 되므로 서버로 더 많은 왕복이 발생하여
시간. 청크를 너무 작게 만들면 오버헤드가 상대적으로 커집니다. 그것
따라서 청크를 너무 작게 만들지 않는 것이 좋습니다.
완료하는 데 매우 오랜 시간이 걸립니다.

--[no]복제 필터 확인
기본값: 예

서버에 복제 필터가 설정되어 있으면 중단됩니다. 이 도구는 서버를 찾습니다
binlog_ignore_db 및 replicate_do_db와 같은 복제를 필터링하는 옵션. 그 경우
이러한 필터를 찾으면 오류와 함께 중단됩니다.

복제본이 필터링 옵션으로 구성된 경우 다음과 같은 일이 발생하지 않도록 주의해야 합니다.
복제본이 아닌 마스터에 있는 데이터베이스 또는 테이블을 수정하려면
복제가 실패할 수 있기 때문입니다. 복제에 대한 자세한 내용은
규칙, 참조http://dev.mysql.com/doc/en/replication-rules.html>.

--체크-슬레이브-래그
유형: 문자열

이 복제본의 지연이 "--max-lag" 미만이 될 때까지 데이터 복사를 일시 중지합니다. 값은
연결 옵션("--port", "--user",
등.). 이 옵션은 일반적인 찾기 동작을 재정의하고 지속적으로
연결된 모든 복제본에서 복제 지연을 모니터링합니다. 모니터링을 원하지 않는 경우
ALL 복제본이지만 둘 이상의 복제본을 모니터링하려면 다음을 사용하십시오.
이 옵션 대신 "--recursion-method" 옵션에 대한 DSN 옵션.

--청크 인덱스
유형: 문자열

청크 테이블에 이 인덱스를 사용하십시오. 기본적으로 도구는 가장 많이 선택합니다.
청킹에 적합한 인덱스. 이 옵션을 사용하면 원하는 인덱스를 지정할 수 있습니다.
선호하다. 색인이 없으면 도구가 기본값으로 돌아갑니다.
인덱스를 선택하는 동작. 이 도구는 SQL 문에 인덱스를 추가합니다.
"FORCE INDEX" 절. 이 옵션을 사용할 때는 주의하십시오. 인덱스를 잘못 선택하면
나쁜 성능을 유발합니다.

--청크 인덱스 열
유형 : int

"--chunk-index"의 가장 왼쪽에 있는 이 열만 사용하십시오. 이것은
복합 인덱스이며 MySQL 쿼리 최적화 프로그램에 버그가 있는 경우에 유용합니다.
(플래너) 인덱스를 사용하여 위치를 찾는 대신 넓은 범위의 행을 스캔합니다.
시작점과 끝점을 정확하게 이 문제는 때때로 다음이 있는 인덱스에서 발생합니다.
4개 이상과 같은 많은 열. 이 경우 도구에서 경고를 인쇄할 수 있습니다.
"--[no]check-plan" 옵션과 관련이 있습니다. 도구에 첫 번째만 사용하도록 지시
인덱스의 N 열은 경우에 따라 버그에 대한 해결 방법입니다.

--청크 크기
유형: 크기; 기본값: 1000

복사된 각 청크에 대해 선택할 행 수입니다. 허용되는 접미사는 k, M, G입니다.

이 옵션은 청크 크기를 조정하는 기본 동작을 재정의할 수 있습니다.
청크가 정확히 "--chunk-time"초 안에 실행되도록 동적으로 시도합니다. 이 때
옵션이 명시적으로 설정되지 않은 경우 기본값이 시작점으로 사용되지만 이후
즉, 도구는 이 옵션의 값을 무시합니다. 이 옵션을 명시적으로 설정하면
그러나 동적 조정 동작을 비활성화하고 모든 청크를 만들려고 시도합니다.
정확히 지정된 행 수.

미묘함이 있습니다. 청크 인덱스가 고유하지 않으면 청크가
원하는 것보다 클 것입니다. 예를 들어 테이블이 인덱스에 의해 청크 분할된 경우
주어진 값의 10,000을 포함하는 경우 일치하는 WHERE 절을 작성할 방법이 없습니다.
1,000개의 값만 있고 해당 청크의 크기는 최소 10,000행입니다. 이러한
"--chunk-size-limit" 때문에 청크를 건너뛸 수 있습니다.

--청크 크기 제한
유형: float; 기본값: 4.0

원하는 청크 크기보다 훨씬 큰 청크를 복사하지 마십시오.

테이블에 고유 인덱스가 없으면 청크 크기가 정확하지 않을 수 있습니다. 이 옵션
부정확성에 대한 최대 허용 한계를 지정합니다. 이 도구는 에게
청크에 얼마나 많은 행이 있는지 추정하십시오. 해당 추정치가 원하는 청크를 초과하는 경우
크기에 제한을 곱하면 도구가 청크를 건너뜁니다.

이 옵션의 최소값은 1이며, 이는 청크가 다음보다 클 수 없음을 의미합니다.
"--청크 크기". 1을 지정하고 싶지 않을 것입니다.
EXPLAIN은 예상치이며 실제 행 수와 다를 수 있습니다.
큰 덩어리. 값을 0으로 지정하여 대형 청크 검사를 비활성화할 수 있습니다.

도구는 또한 이 옵션을 사용하여 다음을 참조하는 외래 키를 처리하는 방법을 결정합니다.
변경할 테이블. 자세한 내용은 "--alter-foreign-keys-method"를 참조하세요.

--청크 타임
유형: float; 기본값: 0.5

청크 크기를 동적으로 조정하여 각 데이터 복사 쿼리를 실행하는 데 이렇게 오래 걸립니다.
이 도구는 복사 속도(초당 행 수)를 추적하고 각 후 청크 크기를 조정합니다.
데이터 복사 쿼리이므로 다음 쿼리는 이 시간(초)이 소요됩니다.
실행하다. 초당 쿼리의 기하급수적으로 감소하는 이동 평균을 유지하므로
서버 부하 변화로 인해 서버 성능이 변경되면 도구는
빠르게 적응합니다.

이 옵션을 XNUMX으로 설정하면 청크 크기가 자동 조정되지 않으므로 쿼리 시간이
다양하지만 쿼리 청크 크기는 그렇지 않습니다. 동일한 작업을 수행하는 또 다른 방법은
기본값으로 두지 않고 "--chunk-size"에 대한 값을 명시적으로 지정합니다.

--구성
유형: 배열

이 쉼표로 구분된 구성 파일 목록을 읽으십시오. 지정된 경우 첫 번째 항목이어야 합니다.
명령줄의 옵션입니다.

--임계 부하
유형: 배열; 기본값: Threads_running=50

모든 청크 후에 SHOW GLOBAL STATUS를 검사하고 로드가 너무 높으면 중단합니다. 그만큼
옵션은 쉼표로 구분된 MySQL 상태 변수 및 임계값 목록을 허용합니다. 안
선택적 "=MAX_VALUE"(또는 ":MAX_VALUE")는 각 변수를 따를 수 있습니다. 주어지지 않을 경우,
도구는 시작 시 현재 값을 검사하고 두 배로 늘려 임계값을 결정합니다.

자세한 내용은 "--max-load"를 참조하십시오. 이 옵션은 다음을 제외하고 유사하게 작동합니다.
옵션은 도구의 작업을 일시 중지하는 대신 중단하며 기본값은
임계값을 지정하지 않으면 다르게 계산됩니다. 이 옵션의 이유는 다음과 같습니다.
원래 테이블의 트리거가 서버에 너무 많은 부하를 추가하는 경우의 안전 확인
가동 중지 시간이 발생합니다. 아마도 Threads_running의 단일 값은 없을 것입니다.
모든 서버에 대해 잘못되었지만 기본값 50은
작업을 즉시 취소해야 함을 나타내는 대부분의 서버.

--데이터 베이스
약식: -D; 유형: 문자열

이 데이터베이스에 연결합니다.

--기본 엔진
새 테이블에서 "ENGINE"을 제거합니다.

기본적으로 새 테이블은 원래 테이블과 동일한 테이블 옵션으로 생성되며,
따라서 원래 테이블이 InnoDB를 사용하는 경우 새 테이블은 InnoDB를 사용합니다. 특정
복제와 관련된 경우에는 이를 사용하는 복제본에 의도하지 않은 변경이 발생할 수 있습니다.
같은 테이블에 대한 다른 엔진. 이 옵션을 지정하면 새 테이블이
시스템의 기본 엔진으로 생성되어야 합니다.

--기본 파일
약식: -F; 유형: 문자열

주어진 파일에서 mysql 옵션만 읽으십시오. 절대 경로 이름을 지정해야 합니다.

--[no]드롭-새-테이블
기본값: 예

원본 테이블 복사에 실패하면 새 테이블을 삭제하십시오.

"--no-drop-new-table" 및 "--no-swap-tables"를 지정하면 변경된 새 복사본이 남습니다.
원본 테이블을 수정하지 않고 테이블의 "--new-table-name"을 참조하십시오.

--no-drop-new-table은 "alter-foreign-keys-method drop_swap"과 함께 작동하지 않습니다.

--[아니요]드롭-오래된 테이블
기본값: 예

이름을 바꾼 후 원본 테이블을 삭제합니다. 원래 테이블을 만든 후
새 테이블이 자리를 차지할 수 있도록 성공적으로 이름이 변경되었으며 오류가 없으면
도구는 기본적으로 원본 테이블을 삭제합니다. 오류가 있으면 도구가 종료됩니다.
제자리에 원래 테이블.

"--no-swap-tables"가 지정되면 삭제할 이전 테이블이 없습니다.

--[no]드롭 트리거
기본값: 예

이전 테이블에 트리거를 놓습니다. "--no-drop-triggers"는 "--no-drop-old-table"을 강제 실행합니다.

-건조
새 테이블을 만들고 변경하되 트리거를 만들거나 데이터를 복사하거나
원래 테이블.

--실행하다
설명서를 읽었으며 테이블을 변경하고 싶다고 표시하십시오. 당신은해야합니다
테이블을 변경하려면 이 옵션을 지정하십시오. 그렇지 않으면 도구는 수행만 수행합니다.
일부 안전 확인 및 종료. 이렇게 하면 설명서를 읽었는지 확인하는 데 도움이 됩니다.
이 도구를 사용하는 방법을 이해합니다. 문서를 읽지 않았다면 다음을 수행하십시오.
이 옵션을 지정하지 마십시오.

--힘
이 옵션은 alter-foreign-keys-method = none 을 사용하는 경우 확인을 건너뜁니다.
외래 키 제약 조건을 위반할 수 있습니다.

--도움
도움말을 표시하고 종료합니다.

--주인
짧은 형식: -h; 유형: 문자열

호스트에 연결합니다.

--최대-흐름-ctl
유형 : 플로트

--max-lag와 다소 유사하지만 PXC 클러스터용입니다. 평균 클러스터 소요 시간 확인
흐름 제어를 위해 일시 ​​중지하고 표시된 백분율을 초과하면 도구를 일시 중지합니다.
옵션에서. 0 값은 *any* 흐름 제어일 때 도구를 일시 중지합니다.
활동이 감지됩니다. 기본값은 흐름 제어 검사 없음입니다. 이 옵션을 사용할 수 있습니다
PXC 버전 5.6 이상용.

--최대 지연
유형: 시간; 기본값: 1초

모든 복제본의 지연이 이 값보다 작아질 때까지 데이터 복사를 일시 중지합니다. 각 데이터 후-
복사 쿼리(각 청크), 도구는 모든 복제본의 복제 지연을 확인하여
Seconds_Behind_Master를 사용하여 연결합니다. 복제본이 다음보다 지연되는 경우
이 옵션의 값을 입력하면 도구는 "--check-interval"초 동안 휴면 상태가 됩니다.
그런 다음 모든 복제본을 다시 확인하십시오. "--check-slave-lag"를 지정하면 도구만
모든 서버가 아닌 해당 서버의 지연을 검사합니다. 정확하게 제어하고 싶다면
도구가 모니터링하는 서버는 "--recursion-method"에 DSN 값을 사용합니다.

이 도구는 복제본이 지연을 멈출 때까지 영원히 기다립니다. 복제본이 중지되면
도구는 복제본이 시작될 때까지 영원히 기다립니다. 모든 작업이 완료되면 데이터 복사가 계속됩니다.
복제본이 실행 중이고 너무 많이 지연되지 않습니다.

이 도구는 기다리는 동안 진행률 보고서를 인쇄합니다. 복제본이 중지되면 다음을 인쇄합니다.
즉시 진행 보고서를 보고한 다음 모든 진행 보고서 간격마다 다시 보고합니다.

--최대 하중
유형: 배열; 기본값: Threads_running=25

모든 청크 후에 SHOW GLOBAL STATUS를 검사하고 상태 변수가 있으면 일시 중지합니다.
임계 값보다 높습니다. 이 옵션은 쉼표로 구분된 MySQL 목록을 허용합니다.
상태 변수. 선택적 "=MAX_VALUE"(또는 ":MAX_VALUE")는 각각을 따를 수 있습니다.
변하기 쉬운. 지정되지 않은 경우 도구는 현재를 검사하여 임계값을 결정합니다.
값을 20% 증가시킵니다.

예를 들어 Threads_connected가 너무 높을 때 도구를 일시 중지하려면
"Threads_connected"를 지정할 수 있으며 도구는 현재 값을 확인합니다.
작업을 시작하고 해당 값에 20%를 추가합니다. 현재 값이 100이면 도구는
Threads_connected가 120을 초과하면 일시 중지하고 120 미만이면 작업을 재개합니다.
다시. 110과 같은 명시적 임계값을 지정하려는 경우 다음 중 하나를 사용할 수 있습니다.
"Threads_connected:110" 또는 "Threads_connected=110".

이 옵션의 목적은 공구가 공구에 너무 많은 부하를 추가하는 것을 방지하는 것입니다.
섬기는 사람. 데이터 복사 쿼리가 방해가 되거나 잠금 대기를 유발하는 경우
서버의 다른 쿼리는 차단 및 대기하는 경향이 있습니다. 이로 인해 일반적으로
Threads_running이 증가하고 도구는 SHOW GLOBAL을 실행하여 이를 감지할 수 있습니다.
각 쿼리가 완료된 직후 STATUS입니다. 이에 대한 임계값을 지정하면
변수를 사용하면 쿼리가 정상적으로 실행될 때까지 기다리도록 도구에 지시할 수 있습니다.
다시. 그러나 이것은 대기열을 막지는 않습니다. 그것은 서버에게만 기회를 줄 것입니다
대기열에서 복구합니다. 대기 중인 것을 발견하면
청크 시간.

--새 테이블 이름
유형: 문자열; 기본값: %T_new

교체되기 전의 새 테이블 이름입니다. %T는 원래 테이블 이름으로 대체됩니다.
기본값이 사용되면 도구는 이름 앞에 최대 10개의 "_"(밑줄)를 붙입니다.
고유한 테이블 이름을 찾습니다. 테이블 이름이 지정된 경우 도구는 접두사를 사용하지 않습니다.
"_"를 포함하므로 테이블이 존재하지 않아야 합니다.

--비밀번호
짧은 형식: -p; 유형: 문자열

연결할 때 사용할 비밀번호입니다. 비밀번호에 쉼표가 포함된 경우 이스케이프해야 합니다.
백슬래시 포함: "exam\,ple"

--pid
유형: 문자열

주어진 PID 파일을 생성합니다. PID 파일이 이미 존재하고 도구가 시작되지 않습니다.
포함된 PID가 현재 PID와 다릅니다. 그러나 PID 파일의 경우
존재하고 여기에 포함된 PID가 더 이상 실행되지 않으면 도구가 PID를 덮어씁니다.
현재 PID가 있는 파일 PID 파일은 도구가 종료될 때 자동으로 제거됩니다.

--플러그인
유형: 문자열

"pt_online_schema_change_plugin" 클래스를 정의하는 Perl 모듈 파일. 플러그인
pt-online-schema-의 많은 부분에 연결할 수 있는 Perl 모듈을 작성할 수 있습니다.
변화. 이를 위해서는 Perl 및 Percona Toolkit 규칙에 대한 충분한 지식이 필요합니다.
이 설명서의 범위를 벗어납니다. 가지고 있다면 Percona에 문의하십시오.
질문이 있거나 도움이 필요합니다.

자세한 내용은 "플러그인"을 참조하세요.

--포트
약식: -P; 유형: 정수

연결에 사용할 포트 번호입니다.

--인쇄
SQL 문을 STDOUT으로 인쇄합니다. 이 옵션을 지정하면 대부분의
도구가 실행하는 명령문. 이 옵션을 "--dry-run"과 함께 사용할 수 있습니다.
예.

--진전
유형: 배열; 기본값: 시간,30

행을 복사하는 동안 진행률 보고서를 STDERR로 인쇄합니다. 값은 쉼표로 구분됩니다.
두 부분으로 된 목록. 첫 번째 부분은 백분율, 시간 또는 반복일 수 있습니다. 그만큼
두 번째 부분은 업데이트를 인쇄해야 하는 빈도를 백분율, 초 단위로 지정합니다.
또는 반복 횟수.

--조용한
약식: -q

메시지를 STDOUT에 인쇄하지 마십시오("--progress" 비활성화). 오류 및 경고는
여전히 STDERR로 인쇄됩니다.

--재귀
유형 : int

복제본을 검색할 때 계층 구조에서 반복되는 수준 수입니다. 기본값은
무한. "--recursion-method"도 참조하십시오.

--재귀 메서드
유형: 배열; 기본값: 프로세스 목록, 호스트

복제본 검색을 위한 기본 재귀 방법입니다. 가능한 방법은 다음과 같습니다.

방법 사용
==============================
프로세스 목록 보기 프로세스 목록
호스트 쇼 슬레이브 호스트
dsn=DSN 테이블의 DSN
없음 노예를 찾지 마십시오

SHOW SLAVE HOSTS는 신뢰할 수 없기 때문에 processlist 방법이 기본값입니다.
그러나 서버가 비표준 포트를 사용하는 경우 호스트 방법이 더 잘 작동할 수 있습니다.
3306). 이 도구는 일반적으로 올바른 작업을 수행하고 모든 복제본을 찾지만
선호하는 방법이며 먼저 사용됩니다.

hosts 메소드를 사용하려면 report_host, report_port,


dsn 방법은 특별합니다. 다른 DSN 문자열을 읽을 테이블을 지정합니다.
지정된 DSN은 D 및 t 또는 데이터베이스 한정 t를 지정해야 합니다. DSN 테이블
다음과 같은 구조를 가져야 합니다.

테이블 `dsns` 생성(
'아이디' INT(11) NULL이 아닌 AUTO_INCREMENT,
`부모_ID` INT(11) 기본 NULL,
`dsn` varchar(255) NULL이 아님,
기본 키 (`id`)
);

도구가 복제 지연에 대해 호스트 10.10.1.16 및 10.10.1.17만 모니터링하도록 하려면,
"h=10.10.1.16" 및 "h=10.10.1.17" 값을 테이블에 삽입합니다. 현재,
DSN은 id로 정렬되지만 id 및 parent_id는 무시됩니다.

--set-vars
유형: 배열

이 쉼표로 구분된 "변수=값" 쌍 목록에서 MySQL 변수를 설정합니다.

기본적으로 도구는 다음을 설정합니다.

wait_timeout=10000
innodb_lock_wait_timeout=1
lock_wait_timeout=60

명령줄에 지정된 변수는 이러한 기본값을 재정의합니다. 예를 들어,
"--set-vars wait_timeout=500"을 지정하면 기본값인 10000이 재정의됩니다.

도구는 경고를 인쇄하고 변수를 설정할 수 없는 경우 계속합니다.

--잠
유형: float; 기본값: 0

각 청크를 복사한 후 휴면 시간(초)입니다. 이 옵션은 다음과 같은 경우에 유용합니다.
"--max-lag" 및 "--max-load"에 의한 제한은 불가능합니다. 작은, XNUMX초 미만
0.1과 같은 값을 사용해야 합니다. 그렇지 않으면 도구에서 복사하는 데 시간이 오래 걸릴 수 있습니다.
큰 테이블.

--소켓
짧은 형식; 유형: 문자열

연결에 사용할 소켓 파일입니다.

--통계
내부 카운터에 대한 통계를 인쇄합니다. 얼마나 많은 경고가 있는지 확인하는 데 유용합니다.
INSERT의 수에 비해 억제되었습니다.

--[no]스왑 테이블
기본값: 예

원래 테이블과 변경된 새 테이블을 교환합니다. 이 단계는 온라인
새 스키마가 있는 테이블을 테이블로 대체하여 스키마 변경 프로세스
원래 테이블. 원래 테이블이 "이전 테이블"이 되고 도구에서 드롭합니다.
"--[no]drop-old-table"을 비활성화하지 않는 한.

--시도
유형: 배열

중요한 작업을 시도하는 횟수입니다. 다음과 같은 이유로 특정 작업이 실패하는 경우
치명적이고 복구 가능한 오류가 발생하면 도구는 기다렸다가 작업을 다시 시도합니다. 이것들은
기본 시도 횟수 및 대기 시간과 함께 재시도되는 작업
시도 사이(초):

작업 시도 대기
======================== ====
생성_트리거 10 1
드롭_트리거 10 1
copy_rows 10 0.25
스왑 테이블 10 1
update_foreign_keys 10 1
분석 테이블 10 1

기본값을 변경하려면 다음과 같이 새 값을 지정하십시오.

--create_triggers:5:0.5,drop_triggers:5:0.5 시도

그러면 도구가 5로 "create_triggers" 및 "drop_triggers"를 0.5번 시도합니다.
시도 사이의 두 번째 대기. 따라서 형식은 다음과 같습니다.

작업:시도:대기[,작업:시도:대기]

세 값을 모두 지정해야 합니다.

대부분의 작업은 MySQL 5.5 이상에서만 영향을 받습니다.
메타데이터 잠금 때문에 "lock_wait_timeout"("--set-vars" 참조). "copy_rows"
작동은 "innodb_lock_wait_timeout"에 의해 MySQL의 모든 버전에서 영향을 받습니다.

트리거 생성 및 삭제의 경우 각 "CREATE"에 시도 횟수가 적용됩니다.
트리거마다 TRIGGER", "DROP TRIGGER" 문이 있습니다. 행 복사의 경우 번호
시도 횟수는 전체 테이블이 아닌 각 청크에 적용됩니다. 테이블 교환의 경우 숫자
일반적으로 "RENAME TABLE"이 하나만 있기 때문에 시도 횟수는 일반적으로 한 번만 적용됩니다.
성명. 외래 키 제약 조건 재구축의 경우 시도 횟수는 다음에 적용됩니다.
각 명령문("rebuild_constraints"에 대한 "ALTER" 명령문)
"--alter-foreign-keys-method"; "drop_swap" 방법에 대한 다른 명령문).

다음 오류가 발생하면 도구는 각 작업을 다시 시도합니다.

잠금 대기 시간 초과(innodb_lock_wait_timeout 및 lock_wait_timeout)
교착 상태 발견
쿼리가 종료됨(KILL QUERY )
연결이 끊어졌습니다(KILL CONNECTION )
MySQL 연결 끊김

연결이 끊기거나 끊긴 경우 도구가 자동으로 다시 연결됩니다.

실패 및 재시도는 "--statistics"에 기록됩니다.

--사용자
약식: -u; 유형: 문자열

현재 사용자가 아닌 경우 로그인을 위한 사용자입니다.

--번역
버전을 표시하고 종료합니다.

--[no]버전 확인
기본값: 예

Percona Toolkit, MySQL 및 기타 프로그램의 최신 버전을 확인하십시오.

이것은 두 가지 추가 기능이 있는 표준 "자동 업데이트 확인" 기능입니다.
특징. 먼저 이 도구는 로컬 시스템의 다른 프로그램 버전을 확인합니다.
자체 버전에 추가. 예를 들어 모든 MySQL 서버의 버전을 확인합니다.
Perl 및 Perl 모듈 DBD::mysql에 연결됩니다. 둘째, 확인하고 경고한다.
알려진 문제가 있는 버전에 대해. 예를 들어 MySQL 5.5.25에는 치명적인 버그가 있었고
5.5.25a로 재발매되었습니다.

모든 업데이트 또는 알려진 문제는 도구의 일반 출력 전에 STDOUT에 인쇄됩니다.
이 기능은 도구의 정상적인 작동을 방해해서는 안 됩니다.

자세한 내용은 다음을 방문하십시오. .

플러그인


"--plugin"으로 지정된 파일은 다음과 같은 클래스(예: 패키지)를 정의해야 합니다.
"new()" 서브루틴이 있는 "pt_online_schema_change_plugin". 이 도구는
이 클래스의 인스턴스를 호출하고 이 클래스가 정의하는 모든 후크를 호출합니다. 후크가 필요하지 않지만
플러그인이 없으면 별로 유용하지 않습니다.

이러한 후크는 다음 순서대로 정의된 경우 호출됩니다.

INIT
before_create_new_table
after_create_new_table
before_alter_new_table
after_alter_new_table
before_create_트리거
after_create_triggers
before_copy_rows
after_copy_rows
before_swap_tables
after_swap_tables
before_update_foreign_keys
after_update_foreign_keys
before_drop_old_table
after_drop_old_table
before_drop_트리거
이전_종료
get_slave_lag

각 후크에는 다른 인수가 전달됩니다. 후크에 전달되는 인수를 확인하려면
다음과 같이 도구의 소스 코드에서 후크 이름을 검색합니다.

# --플러그인 훅
if ( $plugin && $plugin->can('init') ) {
$플러그인->초기화(
orig_tbl => $orig_tbl,
child_tables => $child_tables,
이름이 바뀐_cols => $renamed_cols,
노예 => $노예,
slave_lag_cxns => $slave_lag_cxns,
);
}

모든 후크 호출 앞에 "# --plugin hook" 주석이 있습니다.

질문이 있거나 도움이 필요하면 Percona에 문의하십시오.

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; 복사: 예

연결에 사용할 소켓 파일입니다.

· NS

dsn: 테이블; 복사: 아니요

변경할 테이블.

· 유

dsn: 사용자; 복사: 예

현재 사용자가 아닌 경우 로그인을 위한 사용자입니다.

환경


환경 변수 "PTDEBUG"는 STDERR에 대한 자세한 디버깅 출력을 활성화합니다. 사용하려면
디버깅하고 모든 출력을 파일로 캡처하려면 다음과 같이 도구를 실행하십시오.

PTDEBUG=1 pt-온라인-스키마-변경 ... > 파일 2>&1

주의: 디버깅 출력은 방대하고 수 메가바이트의 출력을 생성할 수 있습니다.

시스템 요구 사항


Perl, DBI, DBD::mysql 및 모든 시스템에 설치해야 하는 몇 가지 핵심 패키지가 필요합니다.
합리적으로 새로운 버전의 Perl.

이 도구는 MySQL 5.0.2 이상 버전에서만 작동합니다.
트리거를 지원합니다.

onworks.net 서비스를 사용하여 온라인에서 pt-online-schema-changep 사용



최신 Linux 및 Windows 온라인 프로그램