Oct 302014
 

1. 서론
  mysql 데이터베이스의 파티션이 커지면 데이터베이스 파일을 새로운 파티션에 옮기고 심볼릭 링크를 걸어서 용량을 확보하는 방법이 있다. 한편 우분투에서는 apparmor라고 하는 권한 관리 시스템이 존재하여서, 심볼릭 링크 후에 새로운 경로(파티션)에 대한 권한을 줄 필요가 있다.
  여기서 apparmor가 설치된 mysql 환경에서 어떻게 파티션을 만들고, 공간을 확장하는지 알아 본다.
 
2. 수행 방법
1) 추가할 디스크 마운팅 및 포멧
 # fdisk -l      // 파티션 할당 상태 확인
 # fdisk /dev/xvdb  // /dev/xvdb : 추가된 디스크 주소
    n 누루고 파티션 설정(primary partition, cylinder etc)
    w 눌러서 저장
 # mkfs.ext4 /dev/xvdb1     // ext4로 포멧
 # mount /dev/xvdb1 /mnt/mysql_disk1   // 마운팅
 
 # blkid     // 추가된 /dev/xvdb1 의 UUID 확인
 # vi /etc/fstab    // 재부팅시 바로 자동 마운팅을 위해 설정
  UUID=<> /mnt/mysql_disk1 ext4 rw 0 0     # 제일 아래줄에 추가
 # df -h     // 디스크 용량 확인
 
2) Apparmor 설정파일 변경 [1]
 – 우분투는 접근관리를 좀 더 잘 하기 위해 파일에 권한을 사용자 단위로 지정하는 것이 아니라, 실행되어 있는 프로그램이 어디에 접근할 수 있는지를 설정함으로써 해결하고자 하였다. 이 편이 관리 측면에서 더 이득이 크다.
 
 # vi /etc/apparmor.d/user.sbin.mysqld
      # 제일 아래줄에 추가
      /mnt/mysql_disk1/mysql_data r,
      /mnt/mysql_disk1/mysql_data/** rwk,
 
3) sql 서버 종료
     # service mysql stop
4) 데이터파일을 새로 저장할 큰 용량의 디스크로 복사 (ubuntu mysql은 /var/lib/mysql 에 있음)
     # cd /var/lib/mysql
     # cp -R * /mnt/mysql_disk1/mysql_data
5) 기존 파일 백업
     # mv /var/lib/mysql /var/lib/mysql_bak
6) 심볼릭 링크 연결
     # cd /var/lib
     # ln -s /mnt/mysql_disk1/mysql_data mysql
7) sql 서버 다시 켜기
     # service mysql start
8) DB에 잘 접속되나 테스트
 
3. 정 리
 파일 복사하는데 꽤 시간이 걸리기 때문에 추후에는 mysql서버를 하나 더 준비하여 데이터를 옮기도록 작업하는 것이 더 좋을 것으로 예상된다. 그리고 데이터 베이스 파일을 하나로 하지 않고 여러개로 나누어서, 파일 단위로 심볼릭 링크를 걸어서 해결하는 방향이 더 좋을 것이라고 생각한다.
 
4. 관련 자료
[1] Recover an Innodb mysql database from an EBS on Ec2, Stack Exchange : http://dba.stackexchange.com/questions/57424/recover-an-innodb-mysql-database-from-an-ebs-on-ec2
[2] https://blogs.oracle.com/jsmyth/entry/running_out_of_physical_disk