MySQL 또는 MariaDB의 ibdata1 축소하기

MySQL/MariaDB 운영시 ibdata1의 밑도 끝도 없는 사이즈가 부담되기 시작한다. 이 파일은 별도의 설정이 되지 않았다면, InnoDB Engine을 사용하는 Table의 Data가 저장된다. 이 파일의 문제는 해당 table의 data가 삭제되었음에도 불구하고 자동으로 축소가 되지 않는다. 빈공간은 다시 data로 채우는 것이다. 이를 축소하는 방법을 기록해본다.

  1. MySQL/MariaDB DB 백업
mysqldump -uroot -p -A > /backup/20190906_full_backup.sql
  1. MySQL/MariaDB 서비스 중지
systemctl stop mysql 또는 systemctl stop mariadb
  1. ibdata1 삭제
cd /var/lib/mysql
rm ./ibdata1
  1. MySQL/MariaDB 시작
systemctl start mysql 또는 systemctl start mariadb
  1. MySQL/MariaDB 복원
mysql -uroot -p < /backup/20190906_full_backup.sql

번외로 작업시 안정성(?)을 위해 다음과 같은 조치를 취해주는 것은 센스이다.

cp -arp /var/lib/mysql /backup/

이후 ibdata1의 무한한 확장을 막기위해 다음과 같은 설정을 추가로 고려할 수 있다.

# DB 별 ibdata 생성
innodb_file_per_table=1
# 또는
# ibdata 분할 생성
innodb_data_file_path=ibdata1:1500M;ibdata2:1500M;ibdata3:1500M;ibdata4:1000M:autoextend