oak-online-alter-table를 이용하여 중단 없이 MySQL 테이블 변경하기

MySQL에서 테이블을 변경하면 테이블이 잠긴다. 그리고 데이터양에 따라 테이블 변경에 걸리는 시간이 달라진다. 그래서 데이터양이 많아지면 테이블을 변경시 서비스가 중단되는 경우가 발생할 수 있다.

중단 없이 MySQL 테이블을 변경할 수 있도록 해주는 툴로 아래의 것들이 있다.
openark-kit의 oak-online-alter-table
Percona Toolkit의 pt-online-schema-change
Facebook이 만든 online schema change for MySQL

이 중 oak-online-alter-table 의 사용 방법을 간단히 알아본다. 환경은 CentOS 6.4 이다.

설치

openark-kit을 사용하기 위해서는 2.3 버전 이상의 python과 python-mysql 모듈이 설치되어 있어야 한다.

python 설치

yum install python

python-mysql 모듈 설치

yum install MySQL-python

openark kit 설치
https://code.google.com/p/openarkkit/ 에서 최신 버전을 다운로드 받는다.

wget https://openarkkit.googlecode.com/files/openark-kit-###-1.noarch.rpm
sudo rpm -i openark-kit-###-1.noarch.rpm

실행

world 데이터베이스의 City 테이블에 Population 컬럼에 인덱스를 거는 경우.

oak-online-alter-table --database=world --table=City --alter="ADD KEY(Population)"

기본적으로 –user, –password, –socket, –port 옵션 값을 지정해줄 필요가 있다. 커맨드에 직접 추가해주거나 설정 파일을 만들어서 할 수 있다.
파일로 하는 경우에는 아래의 형식에 맞추어 파일을 작성하고 –defaults-file 옵션에 해당 파일의 경로를 지정해주면 된다.

#config.cfg
[client]
user=test
password=testpw
socket=/var/lib/mysql/mysql.sock
port=3306
oak-online-alter-table --database=world --table=City --alter="ADD KEY(Population)" --defaults-file=config.cfg

파일로 하지 않는 경우엔 다음과 같이 해주면 된다.

oak-online-alter-table --database=world --table=City --alter="ADD KEY(Population)" --user=test --password=testpw --socket=/var/lib/mysql/mysql.sock

 

leaderboard-728x90

 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.