(참고) MySQL 서버의 db 로케이션 이동

원래 MySQL의 기본 DB 로케이션인 /var/lib/mysql 으로 데이터를 쌓아두고 있었는데, 하드디스크를 하나 더 장만하게 되며 datadir을 옮기게 되었습니다.

원래 그렇게 어려운 것이 아니고 그냥 /var/lib/mysql에 있던 파일들을 몽땅 새 datadir에 옮기며 mysql서버 설정(/etc/mysql/my.cnf)을 다시 잡아주며 소소한 몇 가지만 처리하면 되는거지만, 요 소소한 몇 가지가 빼먹기 쉬운 것이라 글타래 남깁니다.

Step 1)
mysql서버를 정지시킨 뒤에 기존 /var/lib/mysql에 있는 파일들을 모두 새 로케이션으로 복사합니다.

[code:29il8x5y]sudo /etc/init.d/mysql stop
sudo cp -rp /var/lib/mysql /home/DataWareHouse/.mysqldb[/code:29il8x5y]
(참고:새로 산 하드디스크를 /home/DataWareHouse 로 마운트하였습니다)

Step 2)
새로운 DB 폴더의 소유자 및 권한을 수정합니다. MySQL서버 DB에 MySQL서버가 접근하기 위해서는 DB폴더의 소유자를 mysql:mysql로 해야합니다(우분투에서는 mysql:adm이더군요)

[code:29il8x5y] sudo chown -R mysql:adm /home/DataWareHouse/.mysqldb
sudo chmod -R 777 /home/DataWareHouse/.mysqldb[/code:29il8x5y]

Step 3)
여기가 제가 헤맨 부분인데, 이걸 몰라서 며칠동안 버벅였습니다.
언제부터인지는 모르겠지만 apparmor가 mysql서버를 감독하고 있더군요(찾아보니 우분투 8.04부터라네요)

apparmor의 mysql데몬의 설정파일을 엽니다.

[code:29il8x5y] vi /etc/apparmor.d/usr.sbin.mysqld [/code:29il8x5y]
그리고 다음 구문을 추가한 뒤 저장합니다.

[code:29il8x5y] /home/DataWareHouse/.mysqldb r,
/home/DataWareHouse/.mysqldb/** rwk, [/code:29il8x5y]
그리고 apparmor를 재기동.

[code:29il8x5y]/etc/init.d/apparmor restart[/code:29il8x5y]

Step 4)
마지막으로 mysql설정인 /etc/mysql/my.cnf를 수정합니다.

[code:29il8x5y]vi /etc/mysql/my.cnf[/code:29il8x5y]
datadir=/var/lib/mysql로 잡혀있던 기본설정을 수정

[code:29il8x5y]datadir = /home/DataWareHouse/.mysqldb[/code:29il8x5y]
mysql서비스 재실행

[code:29il8x5y]/etc/init.d/mysql restart[/code:29il8x5y]

정상적으로 서비스가 기동되면 기존 /var/lib/mysql에 있던 파일들을 삭제합니다.
sudo rm -r /var/lib/mysql/*

만약 Step 2또는 3를 빼먹게 된다면 mysqld 기동시 다음과 같은 에러메세지가 나올겁니다.

[quote:29il8x5y] …
May 22 22:18:06 geek-desktop mysqld[10937]: … [Warning] Can’t create test file /home/DataWareHouse/.mysqldb/geek-desktop.lower-test
May 22 22:18:06 geek-desktop mysqld[10937]: … [Warning] Can’t create test file /home/DataWareHouse/.mysqldb/geek-desktop.lower-test

…mysqld: Can’t 어쩌구저쩌구 (Errcode: 13)
May 22 22:18:06 [ERROR] Aborting

May 22 22:18:06 [Note] …/mysqld: Shutdown complete[/quote:29il8x5y]

우분투 10.10에서는 location 위와 같은 과정을 성실히 수행했음에도 불구하고, 정상적으로 mysql 서비스가 시작되지 않는경우가 발생할 수 있습니다(현재 경험중)

http://ubuntuforums.org/showthread.php?t=1467115&page=3

이에 관해서는 좀 더 확인해 본 다음에 다시 글을 올리도록 하겠습니다.

(갱신)

datadir 을 기존의 로케이션에 두었을 때에는 문제없이 작동합니다.

그러나 새로운 로케이션으로 설정하였을 때에는 서비스가 시작하지 않더군요.

문제를 해결하도록 노력하였으나, 제가 예전에 전술한 방법으로는 이뤄지지 않았습니다.

이후 기존 로케이션으로 서비스를 시작 후 mysqldump를 이용하여 백업, 우분투 10.10 re-install 후 mysql 새로 설치, datadir을 새로운 로케이션으로 설정, mysqldump 된 자료들을 복구하는 방식으로 DB 저장소를 이전하였습니다.

관련하여 어떤 것이 문제인 지는 명확하지 않습니다. 아마도 제가 기존에 설치했던 보안 패키지 중에, 확인되지 않은 무언가가 apparmor와 같은 역할을 했는지도 모르겠습니다.