본문 바로가기
BackEnd/Database

[mysql] Ubuntu 18.04.4 mysql 설치, 외부 접속을 위한 기본 셋팅

by 푸고배 2021. 1. 7.

Mysql 설치

Ubuntu Server에 mysql을 설치하고, 외부 연결을 위해 환경설정을 한다.

아래의 명령어로 Server에 mysql을 설치한다.

 

sudo apt-get update
sudo apt-get install mysql-server

 

mysql_secure_installation 설정

 

설치를 마쳤으면 다음 명령어를 이용해 mysql 설정을 변경한다.

 

sudo mysql_secure_installation

 

1. ... Would you like to setup VALIDATE PASSWORD plugin? (Press y|Y for Yes, any other key for No:)

 

강화된 패스워드 생성 플러그인을 설정할 것인가? (Yes는 y, 나머지 키는 No로 간주)

설정하고자하는 root 비밀번호를 두번 입력해준다.(한번은 password 확인용)

 

2. Remove anonymous users? (Press y|Y for Yes, any other key for No:)

 

익명의 사용자를 제거할 것인가? (Yes는 y, 나머지 키는 No로 간주)

yes로 설정하면 mysql 로그인 시 -u 옵션을 반드시 명시해야한다.

 

3. Disallow root login remotely? (Press y|Y for Yes, any other key for No:)

 

root 권한으로 외부 로그인 시 허용할 것인가? (Yes는 y, 나머지 키는 No로 간주)

나는 외부에서 해당 Databases을 이용할 것이라 no,

만일 Databases를 해당 서버에서만 쿼리, 제어한다면 yes를 선택

 

4. Remove test databases and access to it? (Press y|Y for Yes, any other key for No:)

 

mysql 설치 시 기본으로 생성되는 test DB를 제거할 것인가? (Yes는 y, 나머지 키는 No로 간주)

 

5. Reloading privileges tables now? (Press y|Y for Yes, any other key for No:)

 

privileges talbe를 재로드 할 것인가?

설정한 값을 재로드를 통해 지금 적용할 것인가

 

Mysql 외부 접속 허용하기

아래 명령어를 입력하고, 위에서 설정한 비밀번호로 Mysql에 로그인한다.

sudo mysql -u root -p

 

다음 명령어로 User별 현재 허용된 접근 Host 정보를 얻을 수 있다.

SELECT Host,User,plugin,authentication_string FROM mysql.user;

1. 모든 IP 허용하기

※ 참고로 %은 모든 아이피를 포함하지만, localhost는 포함되지 않는다.

 

방법 1 : GRANT

GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%' IDENTIFIED BY '패스워드';

방법 2 : INSERT+GRANT+FLUSH

INSERT INTO mysql.user (host,user,password,ssl_cipher, x509_issuer, x509_subject) VALUES ('%','아이디',password('패스워드'),'','','');
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%';
FLUSH PRIVILEGES;

 

2. 특정 IP 대역 허용

 

ex) 111.222.xxx.xxx

 

방법 1 : GRANT

GRANT ALL PRIVILEGES ON *.* TO '아이디'@'111.222.%' IDENTIFIED BY '패스워드';

방법 2 : INSERT+GRANT+FLUSH

INSERT INTO mysql.user (host,user,password,ssl_cipher, x509_issuer, x509_subject) VALUES ('111.222.%','아이디',password('패스워드'),'','','');
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'111.222.%';
FLUSH PRIVILEGES;

 

3. 특정 IP 1개 허용

 

ex) 111.222.33.44

 

방법 1 : GRANT

GRANT ALL PRIVILEGES ON *.* TO '아이디'@'111.222.33.44' IDENTIFIED BY '패스워드';

방법 2 : INSERT+GRANT+FLUSH

INSERT INTO mysql.user (host,user,password,ssl_cipher, x509_issuer, x509_subject) VALUES ('111.222.33.44','아이디',password('패스워드'),'','','');
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'111.222.33.44';
FLUSH PRIVILEGES;

 

5. LISTEN IP 대역 변경하기

모든 IP를 허용한 경우에 다음과 같이 원래 상태로 복구할 수 있다.

DELETE FROM mysql.user WHERE Host='%' AND User='아이디';
FLUSH PRIVILEGES;

 

 

5. LISTEN IP 대역 변경

 

아래 명령어를 통해서 mysqld의 Local Address와 Foreign Address를 확인한다.

sudo netstat -ntlp | grep mysqld

Local Address는 서버 내의 IP 주소이며, Foreign Address는 네트워크로 연결이 이루어진 IP주소이다.

명렁어를 실행하면 Local Address IP가 127.0.0.1로 기본설정 되어 있을 것이다. 

외부접속을 위해서는 Local Address IP를 0.0.0.0으로 모든 IP 허용으로 변경이 필요하다.

 

다음 명령어를 실행한다.

sudo vi /etc/mysql/my.cnf

 

만약 my.cnf 내부의 내용이 아래와 같다면, 다음 경로의 파일로 접근한다.

sudo vi  /etc/mysql/mysql.conf.d/mysqld.cnf 

 

해당 부분의 bind-address 부분을 아래와 같이 수정한다. (기본값은 127.0.0.1로 설정되어 있다.)

#bind-address            = 127.0.0.1
bind-address            = 0.0.0.0

 

변경한 값 적용을 위해 mysql를 재실행한다.

service mysql restart

 

아래 명령어로 Local Address가 0.0.0.0으로 변경되었는지 확인한다.

netstat -ntlp | grep mysqld

 

 

참고자료 : 

 

MySQL 원격 접속 허용 - 제타위키

다음 문자열 포함...

zetawiki.com

 

반응형

댓글