MySQL 원격접속과 루트패스분실 및 소켓에러에 대한 팁
[MySQL 원격접속사용하기]
DB서버가 분리되어 운영될 때 원격의 호스트가 해당 디비서버에 접속하기 위한 설정방법이다.
+ 원격의 디비에 접속하기위한 Host1, Host2, Host3가 있고 DB서버인 Host4가 있다고 가정했을 때..
원격디비서버에서 User테이블에 원격접속을 허용할 호스트를 입력해주고 DB 테이블에서 사용자에게
지정된 모든 호스트를 지정해주거나 원하는 호스트를 지정해 주면 됩니다.
+ DB 서버설정하기.
sueni@bbung ...]# mysql -uroot -p mysql
password: *********
# manpage라는 하나의 사용자를 등록 후 해당사용자에 대한 정보로 원격에서 접속하도록 설정해
보겠다.
먼저 DB를 하나 만들도록 합니다.
mysql> create database manpage;
mysql> insert into user (host,user,password) values (\localhost\,\manpage\,password(\manpage\));
mysql> insert into user (host,user,password) values (\Host1\,\manpage\,password(\manpage1\));
mysql> insert into user (host,user,password) values (\Host2\,\manpage\,password(\manpage2\));
mysql> insert into user (host,user,password) values (\Host3\,\manpage\,password(\manpage3\));
# 위에서 패스워드에 1,2,3이 붙은것은 하나의 사용자에 대해 호스트별로 패스워드를 다르게 줄수 있
다는것을 보여주는 것입니다.
# DB 테이블 정보입력
mysql> insert into db values
(\localhost\,\manpage\,\manpage\,\y\,\y\,\y\,\y\,\y\,\y\,\y\,\y\,\y\,\y\);
# 해당사용자의 user테이블에 지정된 모든 원격지 호스트에 대한 접속을 허용하도록 설정한다.
mysql> update db set host=\%\ where db=\manpage\;
mysql> flush privileges
# manpage 사용자에게 지정된 호스트를 보도록 하자.
mysql> select host,user from user where user=\manpage\;
+------------------------+---------+
| host | user |
+------------------------+---------+
| localhost | manpage |
| Host1 | manpage |
| Host2 | manpage |
| Host3 | manpage |
+------------------------+---------+
# Host1,2,3에 대해 각각의 사용자 홈계정에 다음과 같은 index.php파일을 만들어서 테스트해보자.
<?
$db_conn = mysql_connect(\원격DB호스트\, \User\, \Passwd\);
mysql_select_db(\DB이름\, \$db_conn\);
if (!$db_conn) { echo \디비연결실패\; }
else { echo \디비연결성공\; }
?>
위와 같은 파일을 만들어 테스트해보면 각각의 호스트마다 서로다른 패스워드로 원격접속이 가능함
을 볼수 있다.
원격디비접속은 생각외로 쉽다. :)
+ 팁 :
+ MySQL Root 패스워드 분실시...
실행중인 MySQL 데몬을 정지시킨 후 -Sg (Skip GrantTable)옵션을 주고 MySQL을 기동한다.
sueni@bbung ...]# /etc/rc.d/init.d/mysqld stop 또는
sueni@bbung ...]# mysqladmin -uroot -p shutdown
sueni@bbung ...]# safe_mysqld -Sg --language=korean &
sueni@bbung ...]# mysql
위와 같이 Sg 옵션을 주면 사용자 권한을 체크하지 않으므로 MySQL에 접속이 가능해진다.
mysql> update user set password=password(\root\) where user=\root\;
위와 같이 Root 패스워드를 업데이트한 후 MySQL데몬을 Sg 옵션없이 정상적으로 기동하도록한다.
+ MySQL Socket 에러 발생시...
다음 내용은 웹서핑중 소켓에러에 대한 해결방법을 모아놓은 것입니다.
[에러 내용] :
Warning: Can\t connect to local MySQL server through socket \/home/manpage/mysql.sock\ (111) in
...
111에러발생...
[문제의 원인]
실제로 mysqld 에 의한 socket 파일은 /tmp/mysql.sock 에 존재하는데 PHP 나 mysql 과 같은 프로그램들은
그 파일을 /var/lib/mysql/mysql.sock 에서 찾는다.
그러니 당연히 mysqld 와 의사소통이 될리가 없고, 접속이 안된다고 에러가 납니다.
[해결방법]
1. ln -sf /tmp/mysql.sock /var/lib/mysql/mysql.sock
이 해결법은 가장 간단하게 할 수 있지만 문제점은 리부팅 되고 나면 그때마다 다시 이 soft link 를 걸어 줘야 합니다.
왜냐하면 이 파일은 일반적인 파일이 아닌 unix socket 파일이기 때문입니다.
2. msyqld 기동시에 --socket=/var/lib/mysql/mysql.sock 라는 옵션을 추가
이 방법은 강제적으로 소켓 파일을 원하는 디렉토리에 만들도록 해 줍니다.
그러므로 mysqld 의 소켓파일이 저 디렉토리에 생성만 된다면 문제는 해결이 되겠지요.
3. PHP 연동시 client 측에서 socket 파일의 위치를 지정해 주는 방법
$conn = mysql_connect(\localhost:/tmp/mysql.sock\,\db_user\,\db_passwd\);
이 방법은 클라이언트 측에서 서버측의 소켓파일의 위치를 명시해 주는 방법입니다.
/var/lib/mysql.sock 위치로 보아 MySQL이 RPM을 설치되어 있을때에 해당하는 것 같습니다.
그리고 소켓에러 발생은 MySQL이 정상적으로 기동되지 않았을때에도 발생을 합니다.
+GNU GPL. Linux chobo. www.manpage.biz 오수영:)
|