민서네집

[MySQL] 원격 접속이 안될때 확인할 사항 본문

Database/MySQL

[MySQL] 원격 접속이 안될때 확인할 사항

브라이언7 2015. 1. 29. 10:12

* Linux 버전: Ubuntu 12.04.5 LTS Server


* 우분투 한국 커뮤니티: http://www.ubuntu-kr.org/


* Documentation:  https://help.ubuntu.com/


< Ubuntu에서 MySQL 설치하기 >


http://jacking.tistory.com/1116


http://security.ubuntu.com/ubuntu/pool/main/m/mysql-5.5/libmysqlclient18_5.5.40-0ubuntu0.12.04.1_amd64.deb


http://jaesu.tistory.com/entry/ubuntu-mysql-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0


MySQL 검색 >


sudo apt-cache search mysql-server


MySQL 설치 >


sudo apt-get install mysql-server

=> 404 에러 남


Ubuntu Linux에서 MySQL을 설치하는 가장 쉬운 방법


http://www.rackspace.com/knowledge_center/article/installing-mysql-server-on-ubuntu


Ubuntu package manager


sudo aptitude install mysql-server


root Password 설정.


설치 완료.


설치된 버전: Server version: 5.5.41-0ubuntu0.12.04.1 (Ubuntu)


< Booting 시에 자동으로 MySQL 실행되도록 설정 >


sudo /usr/sbin/update-rc.d mysql defaults


방화벽을 open 해야 외부 machine에서 mysql Server로 접근할 수 있다.


iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT


< Ubuntu: Stat / Stop / Restart Iptables Firewall Service >


http://www.cyberciti.biz/faq/ubuntu-start-stop-iptables-service/


Cafe24의 가상서버 호스팅을 이용하는 경우 방화벽 설정 메뉴가 따로 있어서, 이 방화벽이 활성화 되어 있는지, 활성화 되어 있으면 MySQL의 3306포트가 Open 되어 있는지 확인해 봐야 한다.

MySQL의 설정 파일(my.cnf) 확인

< my.cnf 파일의 위치 확인하는 법 >


mysqld --verbose --help | grep -A 1 'Default options'

나의 경우는 /etc/mysql/my.cnf 여기에 있었다.


여기서 


bind-address           = 127.0.0.1


외부에서 접속하기 위해서는 이 줄을 comment 처리한다.

mysql> show variables like 'skip_networking';


+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+

skip_networking 의 Value 가 ON 으로 조회된다면, my.cnf 파일에서

skip_networking = ON 으로 설정한 부분을 찾아서 지운다.

< mysql service 재시작 >


sudo service mysql restart


외부에서 접속할 User 만들기


CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'Password';


CREATE USER 'testuser'@'%' IDENTIFIED BY 'Password';


# testuser User 에게 testdb DB에 대한 모든 권한을 부여함.

GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost' WITH GRANT OPTION;


# 외부에서 접속하기 위해서 'testuser'@'%' User 에 대해서 다시 GRANT 해 줌.

GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'%' WITH GRANT OPTION;


# 권한 확인

SHOW GRANTS FOR 'testuser';


mysql> select user, host, password from mysql.user;


+------------------+----------------------+-------------------------------------------+

| user             | host                 | password                                  |

+------------------+----------------------+-------------------------------------------+

| testuser         | %                    |    |

| testuser         | localhost            | *1122333445566778899012345678901234567890 |

+------------------+----------------------+-------------------------------------------+


위 처럼 조회 시 host '%' 에 대해서 password 가 지정이 안되어 있는지 확인해 본다.

# testuser User 에 대해서 password 를 다음과 같이 다시 지정해 준다.
mysql> update mysql.user set password=password('Password') where user='testuser';

# 다시 MySQL 사용자를 조회해 본다.
mysql> select user, host, password from mysql.user;

+------------------+----------------------+-------------------------------------------+

| user             | host                 | password                                  |

+------------------+----------------------+-------------------------------------------+

| testuser         | %                    | *1122333445566778899012345678901234567890 |

| testuser         | localhost            | *1122333445566778899012345678901234567890 |

+------------------+----------------------+-------------------------------------------+

위 처럼 host '%' 에 대해서 password 가 동일하게 지정되어 있어야 외부에서 원격 접속이 가능하다.

mysql> flush privileges;

[접속 확인하기] 외부 PC에서 Command Line 으로 접속해 보았을때

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -htestuser.cafe24.com -utestuser
-p
Enter password: ****************
ERROR 1130 (HY000): Host '61.32.208.***' is not allowed to connect to this MySQL
 server

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -htestuser.cafe24.com -utestuser
-p
Enter password: ****************
ERROR 1045 (28000): Access denied for user 'testuser'@'61.32.208.***' (using passwor
d: YES)


위 두 경우는 ERROR 메시지가 다르다. 


위의 경우(에러 메시지: ERROR 1130 (HY000))는 접근 권한이 없는 경우.

아래 경우(에러 메시지: ERROR 1045 (28000))는 Password 가 틀린 경우.


몇 시간 동안의 삽질의 결론은, 원격으로 접속하기 위해서는 HOST '%'에 대해서도 사용자를 따로 생성하고, GRANT 도 따로 해 주고 나서 다시 password 를 password() 함수를 이용해서 다시 update 해 주어야 한다는 점이다.


그 후에,

mysql> flush privileges;

를 해 주던지 아니면 MySQL 서버를 재기동할 것.


Comments