Computer Science/Troubleshooting

[MySQL] MySQL 원격(외부)접속 허용하기(Ubuntu, Windows)

_혀니 2022. 8. 10. 21:52
728x90
반응형

MySQL database 원격 접속 허용 방법

I. Ubuntu

1. my.cnf(5.7) 혹은 mysqld.cnf(8.0) 파일 찾기

/etc/mysqll/mysql.conf.d/mysqld.cnf 파일을 열어서
bind address = 127.0.0.1 부분을 찾아
bind address = 0.0.0.0 으로 수정

2. mysql 재시작

systemctl restart mysql

3. 서버 내 방화벽에서 3306번 포트 허용

4. 유저 생성 및 권한 부여

use mysql;
create user '{유저명}'@'%' identified by '{비밀번호}';
grant all privileges on {db이름}.* to '{유저명}'@'%' identified by '{비밀번호}';



II. Windows

  • Windows를 서버로 사용하는 사람은 아마 거의 없겠지만... 어릴 때의 내가 삽질했던 기억이 있어서 작성해둔다.
  • 유사 에러
    • ERROR 2003
    • WINERROR 10061
  • 사용환경: Win10, mysql 8.0

1. 유저 IP 활성화

SERVER -> USERS and PRIVILEGES에서
원격 접속을 활성화하고자 하는 계정의 'Limit to Hosts Matching' 부분을 %0.0.0.0으로 바꾼다.
특정 IP의 접속만을 원하면 저기에 특정 IP 주소를 작성한다.

2. 접속 권한

GRANT ALL PRIVILEGES ON *.* TO '유저 이름'@'%';
flush privileges;

유저에게 접속 권한을 준다.

3. 방화벽

  • Win 10 기준
    1. 제어판 -> 시스템 및 보안 -> Windows Defender 방화벽 -> 고급 설정 -> 인바운드 규칙 에 들어간다.
    2. 오른쪽 메뉴의 작업인 '새 규칙' 클릭.
    3. 만들려는 규칙 종류: 프로그램
    4. 다음 프로그램 경로 -> C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (중요한 것은 mysqld.exe 파일을 찾는 것이다. 내 컴퓨터에는 윗줄의 경로로 지정되어 있다).
    5. 연결 허용
    6. 규칙이 적용되는 시기: 모두 체크
    7. 이름과 설명은 마음대로 하고 마치면 규칙이 추가된다. 설정 완료!

4. 기타 윈도우에서 적용할 수 없는 것들

  • 윈도우에서는 my.cnf가 없다. 대신 my.ini 파일이 존재한다.
    • C:\ProgramData\MySQL\MySQL Server 8.0\my.ini 대부분 컴퓨터는 이 경로에 존재한다(리눅스는 my.cnf가 맞다).
  • 우선 검색하면 많이들 나오는 bind_address는 윈도우의 my.ini 파일에 없다.
    • SHOW VARIABLES WHERE Variable_name = 'bind_address'; 
      을 실행시키면 알 수 있다.
      • 웬만해서는 *로 되어있을 것이며, 설정을 바꾼다고 해서 바뀌는 것은 없다.
  • skip-networking 은 무엇인가?
    • 윈도우의 my.ini 파일에서 찾아보면 해당 옵션이 주석 처리된 것을 볼 수 있다. 주석 처리를 한 채 두어야 한다!
    • skip-networking을 활성화하면 소켓으로만 통신한다. 결국 외부 접속을 막는 셈이다.
    • 삽질 과정에서 활성화해야한다고 글을 잘못 읽고 주석 처리를 해제했더니 윈도우의 소켓 에러(10061)가 발생했다.
    • 주석 처리가 되어있다면 처리한 채 두자.


+ pymysql 사용하여 파이썬과의 연동 시, host = ' ' <- 이부분에 들어갈 것은 localhost도 127.0.0.1도 아니고 내 컴퓨터 IP도 아니고 hostname도 아닌 것 같다. 가장 유력한 건 ```SQL SHOW VARIABLES WHERE Variable_name = 'hostname'; ``` 이 문장을 실행시켰을 때 뜨는 value(내 컴퓨터 이름) 이 유력해 보이는데 이부분은 팀원과 테스트했을 때 안돼서 잘 모르겠다. 해결되면 업데이트하려고 한다. >> 2022 7 12 이게 왜 이래야 하는지 해답을 찾았다... 추후 업데이트

728x90
반응형