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
참고자료 :
'BackEnd > Database' 카테고리의 다른 글
[MongoDB] 자주 쓰는 명령어(Command) (0) | 2021.08.23 |
---|---|
[Database] MongoDB(NoSQL) VS MySQL(SQL) (0) | 2021.08.20 |
[ArangoDB] ArangoDB 데이터베이스 import 및 export (0) | 2021.06.05 |
[Neo4j] 그래프 Database Neo4j의 Cypher 언어 (0) | 2021.05.25 |
댓글