SQL 서버 원격 접속 중 생긴 문제 해결 과정 🔧
MySQL을 설치하고 포트를 3306번 포트에서 3307번 포트로 변경하는 작업을 진행했다. 그 뒤 로컬 환경인 맥OS에서 가상 환경인 리눅스에 켜져있는 MySQL 서버에 접속하는 원격 접속 테스트를 진행했다. 포트를 3307번으로 바꾼 이유는 원래 기존에 로컬에서 쓰던 mysql 서버와 같은 포트이기 때문에, 혹시 모를 오류를 대비해서 3307번 포트를 썼다. 알아보니 3307은 의미 있는 포트가 아니었기 때문에 3307로 변경 후 진행했다.
포트를 변경하는 방법 (3306→3307) 📝
포트를 변경하려면 /etc/mysql/my.cnf
경로의 파일에 포트를 적어주면 된다. nano /etc/mysql/my.cnf
를 통해 나노 에디터로 수정했는데, 원한다면 vim 에디터 등을 사용해도 된다.
[mysqld]
port = 원하는 포트번호
문제 상황 | MySQL 설치 후 로컬 환경(MacOS)에서 원격 접속이 안되는 문제 🚫
MySQL 워크벤치가 아닌 JetBrain에서 만든 DataGrip이라는 프로그램에서 원격 접속 테스트를 진행했는데 테스트가 안 되는 현상이 벌어졌다.
굳이 원격 접속을 하려는 이유는 리눅스 환경이 우분투 데스크탑이 아닌 우분투 서버 환경이기도 하고, GUI로 데이터를 보는 것이 직관적이기 때문에 원격 접속해서 로컬에서 GUI로 보기 위해 내린 결정이다.
이 문제를 해결하기 위해서 아래의 방법들을 시도했고 해결했다. 스포일러를 먼저하자면 MySQL은 기본적으로 root 계정으로 원격 접속을 허가하지 않는다는 점과 가상 환경의 IP 주소를 사용해야한다는 점이다.
시도한 방법 1. mysql 서버가 잘 켜져있는지 확인한다. 🔍
sudo systemctl status mysql
로 DB 서버가 제대로 켜져있는지 확인했으나, 제대로 켜져있는 것을 확인함.
시도한 방법 2. 포트 바인딩 문제인지 확인 🔍
/etc/mysql/my.cnf
경로의 파일에 bind-address = 0.0.0.0 추가했으나 아직 테스트 연결이 안되는 것을 확인
시도한 방법 3. 방화벽 문제인지 확인 🔍
sudo ufw allow 3307/tcp
명령어로 3307 포트의 tcp 연결을 열도록 하고, sudo iptables -L -n | grep 3307
명령어로 확인 후 테스트 연결 시도했으나 안되는 것을 확인
시도한 방법 4. DB에 새로운 유저를 추가해서 진행 🔍
위와 같은 방법들을 시도해보면서 알아보니 MySQL은 기본적으로 root 유저의 원격접속을 허가하지 않는다는 것을 알게 되었다. 새로운 유저 remoteUser를 만들어서 권한을 지정한 후에 해당 유저로 원격 접속을 시도하기로 했다. 새로운 유저 만드는 방법은 다음과 같다.
// 새로운 유저를 만드는 쿼리문 이름과 비밀번호를 각각 입력해줘야함
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
// 모든 데이터베이스에 대한 모든 권한을 부여함
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;
// 특정 DB에만 접근 가능하도록 하는 쿼리문
-- GRANT ALL PRIVILEGES ON specific_database.* TO 'newuser'@'%';
// 변경 사항 적용
FLUSH PRIVILEGES;
새로운 유저 생성 후 테스트, 실패했다.
시도한 방법 5. 가상 환경의 ip 주소를 확인 🔍
이전에 시도한 방법 4는 맞는 것을 확인했다. root 계정은 사용하지 못하기 때문에 새로운 계정을 만들어 사용해야하는 것은 맞지만, 호스트 주소를 로컬 환경의 주소로 되어있었기 때문에 테스트 연결이 실패하는 것을 볼 수 있다.
ifconfig
명령어로 가상환경의 ip 주소를 확인했다. ip 주소가 두 개가 뜨는데 위에 있는 주소는 외부와의 네트워크 통신을 하는데 사용하고 아래의 로컬 호스트는 루프백 인터페이스로, 내부와 통신하는데 사용된다고 한다.
따라서, 외부에서 사용되는 주소를 DB 서버 호스트로 입력하고 테스트 연결 시도, 성공한 것을 확인할 수 있다.
가린 주소는 MAC 주소 등을 가린 것이다. 😱
와! 성공! 💡
'Web > Backend' 카테고리의 다른 글
[DB] Sequelize에서 You have an error in your SQL syntax 에러 해결 방법 (0) | 2024.09.21 |
---|---|
[Pug] mixin pug 파일 html로 변환하는 방법 pug.compile 메서드 (0) | 2024.08.29 |
oraciondev 님의 블로그 입니다.
안녕하세요