2012-01-13
우선 필자의 환경은 centos 5.5라는걸 밝혀둔다.

mysql 포트 변경법

1. my.cnf 열어서 포트 변경(보통 /etc/my.cnf에 위치한다)
[mysqld] port=8888

보통 mysql을 기본설치 하였다면(centos 패키지 관리자로 설치한걸 뜻함) 기본포트는 3306으로 되어 있을것이고, my.cnf파일을 열어보아도 port=3306이라는 문구가 보통은 보이지 않을것이다. 안보일때는 위의 port=8888(자신이원하는포트)를 추가하면 되는것이다.

2. mysql 재시작
centos 기준으로 터미널을 열고 # service mysqld restart 해주면 된다. 환경이 다르더라도 mysqld 파일을 찾아서 재시작해주면 될것이다.

3. iptables에서 자신이 추가한 포트 열기
이부분은 방화벽 설정을 해제한 유저라면 사용할필요가 없지만.. 그렇게 사용하는 유저는 없을거라고 본다..
iptables 파일을 열고
-A INPUT -m state --state NEW -m udp -p udp --dport 8888 -j ACCEPT
이런식으로 해당포트를 허용해주면 된다.

4. iptables 재시작
터미널을 열고 # service iptables restart 해주면 된다.

참고로 위의 3,4번은 x윈도우를 사용하는 유저라면
시스템 -> 관리 -> 보안수준 및 방화벽 -> 해당포트 추가
라는 식으로 해도 상관은 없다.

위의 포트설정은 mysql접속을 내부 서버에서 했을때는 딱히 해줄 필요가 없다.
하지만 외부에서 mysql을 접속해서 사용하게 하기 위해서 설정 해놓는 것이다.
3306포트가 기본적인 설정 포트이기 때문에 보안상 다른 포트로 바꾼뒤 사용하는 경우가 종종 있다.

php에서 해당 mysql 접속은 mysql_connect() 함수를 이용하고,
해당 db 접속은 mysql_select_db()을 이용한다.
우선 예제부터 보자.
$con = mysql_connect('localhost', 'mysql아이디', 'mysql비밀번호');
//$con = mysql_connect('해당서버아이피:포트', 'mysql아이디', 'mysql비밀번호');
if (!$con) echo 'mysql접속실패 : '.mysql_error(); // 접속실패시 에러출력해주는것
else echo 'mysql접속완료';

$db=mysql_select_db("test", $con);
if(!$db) echo 'db연결실패 : '.mysql_error(); // 연결실패시 에러출력해주는것
else echo "db연결완료";

mysql_close($con); //접속종료
위의 예제중 1번째 줄의 접속방식이 보통의 해당서버에서 해당서버의 msyql에 접속할때 쓰는 방식이고 2번째 줄의 방식이 다른서버에서 해당 mysql서버로 접속할때 쓰는 방식이다.
필자가 위해서 한 예제에 따르면
mysql_connect('123.12.123.12:8888', 'mysql아이디', 'mysql비밀번호')
의 식으로 포트를 넣어주면 되겠다.

그리고 해당 db 접속시에 해당 db는 있는데 접속이 되질 않는다면, 보통 2가지 이유 때문에 안되는 것이다.
1. 접속한 아이디가 해당 db에 대한 권한이 없다.
2. 접속한 db의 host 설정이 안되어 있다.

이경우에는 root권한으로 접속해서 mysql이라는 db의 db라는 테이블에서
insert into db values('%','해당db','사용자', 'y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');
라는식으로 추가를 해주면 된다.

그리고 grant가 아닌 insert나 update를 이용한 권한 부여는 mysql을 재시작하거나,
flush privileges 명령어로 권한설정을 다시 불러와주어야 적용 이 제대로 된다는걸 알아두기 바란다.

간단히 설명하자면...
%는 모든 원격접속을 허용한다는것이다. 보통은 localhost로 되어 있는 녀석들이 많을것이다. 특정 ip를 적어주면 해당 ip만 접속을 허용하게 된다.
해당db에는 설정을 해줄 db를 적으면 되고, 사용자에는 접속한 사용자ID를 적으면 된다.
나머지 'y'로 되어 있는것들은 접근후에 select나 insert등등의 허용을 설정하는 Select_priv 와 같은 항목들이다. 허용하고 싶은 항목은 'y'로 허용하지 않을 항목은 'n'로 해놓으면된다.