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