포트가 열려있나 확인하고 포트를 열어줍시다
# sudo ufw allow [DB 포트 번호]
sudo ufw allow 3306
다음으로 DB가 localhost에서만 접속할 수 있게 되어있진 않은가 확인해야합니다.
netstat -lntp
-l
: listen, 연결 가능 상태인 경우만 출력한다
-n
: number, 포트 번호를 같이 출력한다
-t
: tcp, tcp 연결만 출력한다
p
: 프로그램 이름을 출력한다
위 이미지처럼 127.0.0.1
번으로 시작하면 localhost만 접속 가능한 상태입니다. 이 경우 환경파일을 수정해줘야합니다.
vim /etc/mysql/mariadb.conf.d/50-server.cnf
mariadb야 언제까지 mysql로 쓸거야
bind-address 부분이 127.0.0.1
로 되어있었을텐데 이 부분을 0.0.0.0
으로 수정합니다.
0.0.0.0
은 모든 ip가 접근할 수 있도록 설정하는 것이고, 특정 ip만 허용하려면 1.2.3.4
,5.6.7.8
처럼 허용할 ip를 ,
로 이어주면 됩니다.
다음으로 mariadb를 재시작해주면 됩니다.
service mysql restart
mysql.user table에 유저의 host 정보가 들어있습니다. mysql 데이터베이스에 접근하려면 root로 접속해야합니다.
# 로그인
mariadb -u root -p
# 유저명과 호스트주소를 출력
select user,host from mysql.user;
만약 host가 localhost라면 데이터베이스를 외부에서 접근할 수 없습니다. host를 특정 ip 또는 %
로 설정해야 데이터베이스에 어떤 외부 ip에서든 접근할 수 있습니다. 특정 ip에서만 접속하게 하려면 특정 ip로 호스트를 설정하면 됩니다.
# 유저 삭제
# drop user '[유저명]'@'[호스트]';
drop user 'dev2820'@'localhost';
# 유저 생성
# create user '[유저명]'@'%' identified by '[비밀번호]';
create user 'dev2820'@'%' identified by '1234';
# DB 접근 권한 주기
# grant all privileges on [DB].[table] to '[유저명]'@'[호스트]';
grant all privileges on test_db.* to 'dev2820'@'%';
이제 외부 ip에서 접근하면 됩니다.
HeidiSQL로 접속해보겠습니다.
굿