2013.08.05 18:43

PHP에서 MySQL이 연동 안 됐던 이유

블로그를 뒤져 APM을 설치 했는데 PHP 버전이 5.1이다. yum으로 설치 가능한 패키지 버전 중에 5.3이 있어서 업그레이드를 마음 먹었다. 구글링으로 찾아낸 어느 외국인의 블로그에서 간단하게 정리 된 포스팅을 보고 어렵지 않게 업그레이드가 가능했다. php하나를 구동하는데 여러 개의 프로그램들이 설치 됐다.

 

다음은 MySQL을 업그레이드 시작했다. 5.5버전을 RPM으로 설치 할 수 있었다. 데몬 실행도 문제 없고 mysql 실행도 잘 되고 있었다. 가벼운 마음으로 phpMyAdmin을 설치했는데 로그인이 되지 않는다. MySQL을 전혀 인식하지 못하는데 오류 번호를 검색하니 MySQL을 재설치 하라는 안내만 나온다. 하지만 MySQL을 몇 번을 재설치하고 다운그레이드까지 했는데도 phpinfo()에는 여전히 mysql 정보를 볼 수 없었다.

 

한참을 고생하다 문득 내가 사용했던 명령 라인 하나가 생각났다.

# yum remove mysql* mysql-*

"mysql"로 시작하는 yum 패키지를 제거하는 명령이다. 당연히 mysql만 제거 될거라 생각했다. 혹시나 하는 마음에 yum으로 설치 된 php와 mysql 프로그램들을 검색하게 됐다.

# yum list installed | grep -i mysql

yum으로 설치 된 패키지 중에서 이름에 mysql이 포함 된 프로그램들 목록이 뜬다. 나는 php5.3으로 업그레이드 하면서 분명히 php53-mysql을 설치한 기억이 있는데 목록에 없다. 아마도 mysql을 제거하는 중에 실수로 php-mysql까지 제거하게 된 듯 했다. 나는 다시 php53-mysql을 설치했다.

# yum install php53-myql

# service httpd restart

phpinfo()를 확인하니 MySQL이 제대로 연동 된다.

 

※ 원인이 php-mysql, php53-mysql 때문인지는 확실하지는 않다. php와 mysql이 연동되지 않아 고민하던 차에 우연하게 발견하게 된 방법으로 경우에 따라서는 다른 원인이 있을 수 있다. 다만 여러 개의 해결책 중 참고 정도 하면 될 거 같다.

 

■ MySQL 5.x에서 16바이트로 암호화가 된다면?

MySQL5.x을 설치 했는데 DB에 저장 된 비밀번호가 16Byte로 된 4.x 이전의 암호화 되고 있었다. 이럴 때는 my.cnf를 열어 설정을 바꿔주자.

//-- cafe24 가상서버호스팅일 때 

# vi /etc/my.cnf
[mysqld]

old_password = 0

# service mysqld restart

 

 

mysql>select password('123');

mysql>select old_password('123');

두 개의 명령어를 실행해 보면 차이를 알 수 있다. 첫번째 줄에서 암호화 된 문장이 41Byte로 출력 된다면 정상으로 설정이 된 상태다.

 

■ MySQL 데몬이 실행되지 않을 때

카페24에서 가상서버호스팅을 받았을 때 여느 독립서버와 차이가 있어서 조금 헤매게 된다. MySQL을 설치 했는데 데몬이 실행 되지 않는다면 my.cnf에서 socket 파일을 경로를 수정해보자.

# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/tmp/mysql.sock

 

[client]
port=3306
socket=/tmp/mysql.sock
default-character-set = utf8
# service mysqld start
        

Trackback 0 Comment 0