생계/MySQL2025. 11. 23. 14:19
반응형

 
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 가 변경되어있다. 
 
 

반응형
Posted by 돌고래트레이너