MySQL database 다른 서버로 이동
상황 : 홍보 및 공지용 웹페이지를 MySQL과 공개된 PHP보드로 개발되어 있다. 주기적으로 관리하고 있는데 갑자기 데이타베이스 연결자체가 되지 않아 사이트가 보이지 않는 문제가 발생하였다.
원인을 분석해보니 데이타베이스가 실행 도중 MySQL이 업데이트 되면서 MySQL설정파일이 깨졌기 때문에 서버 기동자체가 되지 않고 그 데이타베이스를 사용하는 간단한 홍보용 페이지들이 모두 기동되지 않는 문제가 발생하였다.
그래서 해당 데이타베이스 파일만 다른 서버에 MySQL에 이관하고 설정파일만 변경해주는 식으로 작업을 하기로 하였다.
해당 데이타베이스 자체에 접속자체도 안되는 상황이었지만 데이타베이스 파일은 그대로 보관되어 있어서 이 작업이 가능하였다.
1. 원본 데이타베이스 백업
sudo ls /var/lib/mysql/
유분투 12.04 운영체제를 사용하고 있다. apt-get(패퀴지 관리자)로 MySQL를 설치하고 특별한 옵션을 주지 않았다면 /var/lib/mysql/ 해당 경로에 데이타베이스파일들이 있다.
kangdr@kangdr-K8VM890:~$ sudo cp -rf /var/lib/mysql/[dbname] ~/[dbname]
데이타베이스 파일을 복사한다.
2. 원본 데이타베이스 다른 이관할 서버에 복사
이관할 서버로 복사한다. scp 프로그램을 사용하면 원격에 서버로 쉽게 파일을 복사할 수 있다.
sudo scp -r dbfolder / root@172.16.50.50:~/dbfolder
패스워드 입력창이 나오면 다른서버로 파일들이 복사가 된다.
3. 이관할 서버에 복사한 데이타베이스를 MySQL 데이타베이스가 모여있는 폴더로 이동 시킴
파일이 복사된 서버에서 MySQL를 설치되어 있다.
복사된 데이타베이스 폴더를 /var/lib/mysql/ 로 이동시킨다.(관지라 권한 필요)
sudo cp -rf dbfolder/ /var/lib/mysql/dbfolder
mysql console를 이용해서 현재 서버의 데이타베이스를 확인하면 복사된 데이타베이스가 추가된 것을 확인 할 수 있을 것이다.
mysql -uroot -p show databases; use database; show tables;
추가된 데이타베이스를 선택하고 다시 사용하려 하면 에러 아래와 같은 에러 메시지를 보여준다.
ERROR 1018 (HY000): Can't read dir of './dbname/' (errno: 13)
4. MySQL 파일들 권한 조정
해당 데이타베이스의 권한이 없어서 나는 에러이다. /var/lib/mysql/폴더에 가서 복사한 데이타베이스 파일들을 권한을 준다.
cd /var/lib/mysql/ ls -l chown mysql:mysql dbname/ -R
권한준 준 다음 데이타베이스안에 테이블를 조회하면 에러 메시지가 안나오면 정상적으로 이관이 완료된것 이다.
mysql -u user -p dbname -e 'show tables;'