MySQL 외부 접속 허용 설정

1. 문제상황
  • MySQL을 설치하면 기본적으로 로컬(localhost)에서만 접속이 가능하고 외부에서는 접속이 불가능하게 되어 있다.
외부에서 접속해보면 다음과 같은 오류 메시지가 나온다.
Host '135.79.246.80' is not allowed to connect to this MySQL server
  • Toad for MySQL과 같은 DB 관리 도구를 사용하여 DB에 원격으로 접속하려면 허용해주는 로컬 작업이 필요하다.
  • 여기서는 root를 원격에서 접속할 수 있도록 설정한다. 이것을 응용하면 다른 계정에도 적용할 수 있다..

2. 확인

  • 로컬에서 접속하여 아래 쿼리를 날려보면 localhost가 나온다.
mysql> SELECT Host,User,authentication_string FROM mysql.user;
+----------------+------------------+-------------------------------------------+
| Host           | User             | authentication_string                     |
+----------------+------------------+-------------------------------------------+
| localhost      | root             | *8024A6913C57E024BDFC6E813A57DFB924E6803A |
| 127.0.0.1      | root             | *8024A6913C57E024BDFC6E813A57DFB924E6803A |
| ::1            | root             | *8024A6913C57E024BDFC6E813A57DFB924E6803A |
| localhost      | debian-sys-maint | *02CE4A6D8F13BE579AC2468F0357B9D1468025A7 |
+----------------+------------------+-------------------------------------------+
즉 root 계정으로는 로컬에서만 접속가능하다.
(같은 방법으로 root 대신 다른 사용자명도 조회할 수 있다.)

3 변경

모든 IP 허용
INSERT INTO mysql.user (host,user,authentication_string,ssl_cipher, x509_issuer, x509_subject) VALUES ('%','root',password('패스워드'),'','','');
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
IP 대역 허용 ( 예: 111.222.xxx.xxx )
  • 다음과 같이 설정하면 111.222로 시작하는 모든 IP가 허용된다.
INSERT INTO mysql.user (host,user,authentication_string,ssl_cipher, x509_issuer, x509_subject) VALUES ('111.222.%','root',password('패스워드'),'','','');
GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.%';
FLUSH PRIVILEGES;
특정 IP 1개 허용 ( 예: 111.222.33.44 )
INSERT INTO mysql.user (host,user,authentication_string,ssl_cipher, x509_issuer, x509_subject) VALUES ('111.222.33.44','root',password('패스워드'),'','','');
GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.33.44';
FLUSH PRIVILEGES;

4 원래 상태로 복구

  • 모든 IP를 허용한 경우 다음과 같이 원래 상태로 복구할 수 있다.
DELETE FROM mysql.user WHERE Host='%' AND User='root';
FLUSH PRIVILEGES;

5. LISTEN IP 대역 변경

16px-Crystal_Clear_app_xmag.svg.png MySQL bind-address 변경 문서를 참고하십시오.
root@zetawiki:~# netstat -ntlp | grep mysqld
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      7931/mysqld
root@zetawiki:~# vi /etc/mysql/my.cnf
#bind-address            = 127.0.0.1
bind-address            = 0.0.0.0
root@zetawiki:~# service mysql restart
mysql stop/waiting
mysql start/running, process 8190
root@zetawiki:~# netstat -ntlp | grep mysqld
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      8190/mysqld

 

Advertisements

MySQL root 비밀번호 초기화

  • 작업 조건
    • Linux에서 MySQL root 비밀번호 분실
  • 작업 내용
    • MySQL root 비밀번호 초기화
  • 작업 과정

    1 mysqld 중지

    [root@localhost ~]# service mysqld stop
    Stopping MySQL:                                            [  OK  ]
    

    2 mysqld_safe 실행

    • 인증 생략 옵션 + 안전모드로 데몬 실행
    /usr/bin/mysqld_safe --skip-grant &
    /usr/bin/mysqld_safe --skip-grant-tables &
    
    [root@localhost ~]# /usr/bin/mysqld_safe --skip-grant-tables &
    [1] 32055
    Starting mysqld daemon with databases from /var/lib/mysql
    

    → 이제 패스워드 없이 MySQL에 접속할 수 있게 되었다.

    3 새 패스워드 지정

    mysql 콘솔로 연결

    /usr/bin/mysql -u root mysql
    

    다음 SQL 명령어를 입력하여 원하는 패스워드로 변경한다.

    # 5.7 버전 미만
    UPDATE mysql.user SET password=PASSWORD('패스워드') WHERE user='root'; 
    FLUSH PRIVILEGES; 
    quit
    
    # 5.7 버전 이상
    UPDATE mysql.user SET authentication_string=PASSWORD('패스워드') WHERE user='root'; 
    FLUSH PRIVILEGES;
    quit
    • 선택 사항
    • 작업 과정 중 참고사항
    • 작업 중 발생한 문제 해결
  • 작업과 관련된 주제
  • 참고 문헌

MySQL root 계정 비밀번호 변경

  • 작업 조건
  • 작업 내용
    • MySQL root 계정 비밀번호 변경
  • 작업 과정
    1. MySQL에 root 계정으로 접근

    mysql -u root -p

    2. root 비밀번호 변경을 위해 데이터베이스로 mysql을 지정한다.

    mysql> use mysql;

    3. root 계정의 암호를 변경한다.

    mysql> update user set password=password(‘원하는 암호’) where user=’root’;

    4. MySQL 종료

    mysql> exit

    5. MySQL 서버를 재가동(Restart)

      • 선택 사항
        • root 계정 비밀번호 확인(Optional)
          mysql> select host, user, password from user;
      • 작업 과정 중 참고사항
      • 작업 중 발생한 문제 해결
  • 작업과 관련된 주제
  • 참고 문헌