MySQL이 TCP/IP로 연결되지 않는 문제 해결
1. 문제 상황
인텔리제이에서 MySQL 데이터베이스에 연결하지 못했다는 오류가 발생해서,
mysql 내부에서 port 번호를 검색해보았는데, 3306으로 나오지 않고, 0으로 나왔다.
1
2
3
4
5
6
7
8
parkjinhong@bagjinhong-ui-MacBookPro ~ % mysql -u root -p
mysql> SHOW VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
1 row in set (0.01 sec)
2. MySQL 서버의 포트를 3306으로 지정하여 접속해보기
1
2
3
4
5
6
7
8
parkjinhong@bagjinhong-ui-MacBookPro ~ % mysql -u root -p --port=3306
mysql> SHOW VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
1 row in set (0.00 sec)
이렇게 해도 똑같이 포트 번호가 0으로 나왔다…
3. TCP/IP로 접속하지 못했다는 문제 발견
port 값이 0으로 표시되는 것은, MySQL이 TCP/IP 포트를 사용하지 않고 유닉스 도메인 소켓을 통해 통신하고 있다는 의미라는 것을 알았다.
그래서 MySQL 설정 파일에서 포트를 활성화하려고 해보았다.
1
2
3
4
sudo nano /etc/mysql/my.cnf
[mysqld]
port = 3306 # 포트 번호 설정
bind-address = 127.0.0.1 # 로컬 접속만 허용
이렇게 my.cnf 파일을 설정하고, 서버를 재시작해보았다.
1
2
3
4
5
6
7
mysql> SHOW VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
1 row in set (0.00 sec)
결과는 똑같았다..
4. homebrew를 이용하지 않고, oracle 홈페이지에서 다운로드
혹시나 homebrew에서 설치하고, 실행했기 때문에, 발생한 문제가 아닐까.. 하고
모두 삭제한 뒤, oracle 홈페이지에서 설치하여 실행해보았다.
관련 파일 다 삭제..
1
2
3
4
5
parkjinhong@bagjinhong-ui-MacBookPro ~ % brew services stop mysql
parkjinhong@bagjinhong-ui-MacBookPro ~ % brew uninstall mysql
parkjinhong@bagjinhong-ui-MacBookPro ~ % sudo rm -rf /usr/local/var/mysql
parkjinhong@bagjinhong-ui-MacBookPro ~ % sudo rm -rf /usr/local/etc/my.cnf
parkjinhong@bagjinhong-ui-MacBookPro ~ % brew cleanup
MySQL 설치!
1
2
3
4
5
6
7
8
parkjinhong@bagjinhong-ui-MacBookPro ~ % /usr/local/mysql/bin/mysql -u root -p
mysql> SHOW VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
1 row in set (0.00 sec)
결과는 같았다…
설정 파일을 계속 바꾸면서 시도해보았지만, 계속 실패했다..
그러다가 그냥 homebrew가 더 편할 것 같다는 생각에 다시 MySQL을 삭제하고, homebrew로 설치하고 실행해보았다.
1
2
3
4
5
6
7
8
9
10
mysql> SHOW VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> exit
Bye
결과는 같았다..ㅎㅎ
5. 해결됐다..?
1
2
3
4
5
6
7
parkjinhong@bagjinhong-ui-MacBookPro ~ % sudo mysql.server restart
Shutting down MySQL
.2024-09-17T04:28:57.6NZ mysqld_safe mysqld from pid file /opt/homebrew/var/mysql/bagjinhong-ui-MacBookPro.local.pid ended
[1] + done mysqld_safe --skip-grant-tables
SUCCESS!
Starting MySQL
............. ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/bagjinhong-ui-MacBookPro.local.pid).
그냥 sudo mysql.server restart
명령어를 실행해봤는데, 위와 같은 메시지가 나왔다.
그리고 포트 번호를 검색해보았더니..
1
2
3
4
5
6
7
8
parkjinhong@bagjinhong-ui-MacBookPro ~ % mysql -u root -p
mysql> SHOW VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.01 sec)
드디어…
이유는 모르겠지만, 3306이 나왔다!!
6. 왜??
1
2
3
4
Shutting down MySQL
.2024-09-17T04:28:57.6NZ mysqld_safe mysqld from pid file /opt/homebrew/var/mysql/bagjinhong-ui-MacBookPro.local.pid ended
[1] + done mysqld_safe --skip-grant-tables
SUCCESS!
MySQL이 성공적으로 중지되었음을 의미한다.
1
2
Starting MySQL
............. ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/bagjinhong-ui-MacBookPro.local.pid).
MySQL 서버가 시작을 시도했지만 초기에는 실패했음을 나타낸다.
MySQL 서버가 시작되었지만, PID 파일을 업데이트하지 못한 것이다.
7. 왜 해결되었는가..?
서버 재시작 과정에서 남아 있던 잠금 파일 제거!!
서버를 재시작하면서 MySQL이 남아있던 잠금 파일이나 프로세스 파일을 삭제했거나, 리소스가 해제되어서 정상적으로 서버가 시작될 수 있었던 것이다.
근데 그러면 brew services restart mysql
라는 명령어도 10번은 반복한 것 같았는데,,,
왜 이 명령어는 통하지 않고, sudo mysql.server restart
는 통했던 것일까?
둘의 차이점
sudo mysql.server restart
는 MySQL 서버를 직접 수동으로 제어하는 방법이고,
brew services restart mysql
은 Homebrew를 통한 서비스 관리 방식이다.
brew services restart mysql
은 Homebrew가 관리하는 MySQL 인스턴스를 재시작한다. Homebrew로 MySQL을 설치하면 MySQL 설정이 Homebrew의 경로에 맞춰져있다. 이 경우 Homebrew에서 관리하는 my.cnf 설정 파일이 제대로 TCP/IP 설정을 반영하지 않았던 것 같다.
반면, sudo mysql.server restart
는 MySQL의 기본 설치 경로와 설정 파일(my.cnf)을 사용할 가능성이 높다. 이 설정 파일은 TCP/IP 설정이 올바르게 되어 있어서, 이 명령으로 서버를 시작할 때는 TCP/IP 연결이 제대로 활성화된 것이다..
그리고, brew services restart mysql
은 MySQL을 시작할 때 권한 문제나 특정 경로 문제로 인해 TCP/IP 설정이 반영되지 않거나 적용되지 않을 수 있지만, sudo mysql.server restart
는 MySQL을 더 직접적으로 제어해서, 시스템에서 설정한 모든 환경을 읽어들일 가능성이 높다.
아직 확실하게 왜 해결되었는지 찾지 못했지만, 확실하게 restart하려고 할 때는 sudo mysql.server restart
를 사용해봐야겠다..!