pt-online-schema-change (이하 pt-osc) 를 사용하면 대량건의 변경작업을 lock 을 적게 사용하면서 완료할수있다.
pt-osc 동작 방식
1. 변경할 스키마가 적용된 새로운 임시 테이블(보통 _new 접두사 포함)을 생성
2. 원본 테이블에 대한 트리거를 걸어 원본 데이터를 chunk 단위로 복사, 실시간 변경사항까지 신규 테이블에 반영
3. 데이터 복사가 완료되면 원본 테이블과 새로운 임시 테이블의 이름을 바꾸는 RENAME 수행.
4. 자동으로 임시 테이블을 DROP하여 정리. 온라인 상태에서 스키마 변경을 완료
즉, 아주짧은 시간의 lock (rename 시점) 으로, 온라인 변경 작업을 가능하게 설계된 도구이다.
percona toolkit 설치
sudo yum install -y perl perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-TermReadKey
wget https://downloads.percona.com/downloads/percona-toolkit/3.6.0/binary/tarball/percona-toolkit-3.6.0_x86_64.tar.gz
tar xvf percona-toolkit-3.6.0_x86_64.tar.gz
cd percona-toolkit-3.6.0/bin
./pt-online-schema-change --version
테스트 시나리오
대량건을 가진 big table 의 collate 변경 작업 utf8mb4_general_ci -> utf8mb4_unicode_ci
CREATE TABLE big_table (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
description VARCHAR(255) COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
INSERT INTO big_table (description)
SELECT CONCAT('sample text ', seq)
FROM (SELECT @rownum:=@rownum+1 AS seq FROM information_schema.COLUMNS, (SELECT @rownum:=0) r LIMIT 100000) t;
EOF
./pt-online-schema-change \
--host=127.0.0.1 \
--port=3306 \
--user=mydba \
--password=Mydba123! \
--alter "MODIFY COLUMN description VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL" \
--recursion-method=none \
--execute \
D=mytest,t=big_table

show create table mytest.big_table; 로 확인해보면 collate 가 변경되어있다.
'생계 > MySQL' 카테고리의 다른 글
| mysql cli 자동완성 취소 (0) | 2025.11.28 |
|---|---|
| mysql multi master 에 대해 알아보자 (0) | 2025.01.01 |
| [ mysql ] 날짜 파티션 검색 시 (첫번째) 파티션 프루닝 안되는 현상 (0) | 2024.12.24 |
| mysql 참조 제약 조건 생성시 자동 인덱스 생성 테스트 (0) | 2024.12.24 |
| [mysql] auto_increment 에 대해 알아보자 (0) | 2024.11.25 |