MySQL이 안될 때 재설치 전에 반드시 읽어야 할 글
들어가며
많은 사람들이 인터넷에 있는 가이드 글을 따라 MySQL Server를 설치한 후에 MySQL이 안될 때 정말 난감함을 느낀다.
분명 가이드 글과 같이 설치하고 실행까지 마쳤는데 예상과 달리 정상적으로 동작하지 않는 상황은 생각보다 훨씬 자주 발생한다.
처음 데이터베이스를 접하는 단계에서는 특히 더 그렇다.
단순한 설정 하나가 빠져 있거나 잘못 구성되어 있을 뿐인데, 전체 흐름이 한 번에 막혀버리기 때문이다. 그 상태에서 원인을 찾지 못하면 같은 자리를 몇 시간씩 맴도는 경우도 부지기수다.
정말 간단한 이유로 작동이 되지 않는 경우도 많은데, 그런 경우 이유를 찾아내고 해결한 후에도 찾았다라는 쾌감보다 허탈감이 더 클 정도다.
경험상 MySQL이 동작하지 않는 상황의 대부분은 특정 하나의 원인이라기보다, 실행 환경과 구조에 대한 이해 부족에서 비롯된다.
설치가 잘못된 것이 아니라, 설치 이후의 환경이 제대로 구성되지 않은 것이다.
이 둘의 차이를 이해하는 것이 문제 해결의 출발점이다.
이 글에서는 MySQL이 안될 때 가장 흔하게 마주치는 문제들을 중심으로, 무엇을 먼저 확인해야 하는지 그리고 왜 그 문제가 발생하는지를 함께 정리한다.
단순히 해결 명령어를 나열하는 것이 아니라, 구조적으로 이해하고 대응할 수 있는 기준을 세우는 것을 목표로 한다.
MySQL 서버가 실제로 실행 중인지 먼저 확인하라
MySQL을 처음 접하는 사람들이 가장 많이 놓치는 부분이 바로 이것이다.
MySQL은 단순히 실행하는 프로그램이 아니라, 항상 백그라운드에서 돌아가고 있어야 하는 서버 프로세스다.
즉, 설치를 완료했다고 해서 자동으로 실행되는 것이 아니며, 서버가 올라와 있지 않은 상태에서는 어떤 명령어도 정상적으로 동작하지 않는다.
가장 먼저 해야 할 일은 mysqld 프로세스가 현재 실행 중인지 확인하는 것이다.
macOS나 Linux 환경이라면 다음 명령어로 확인할 수 있다. 보통 정상 실행 중인 경우 아래와 같이 화면 결과가 노출 된다.
ps aux | grep mysqldWindows 환경이라면 작업 관리자에서 MySQL 관련 프로세스가 실행 중인지 확인하거나, 서비스 목록에서 MySQL 서비스의 상태를 점검하면 된다. 만약 프로세스가 떠 있지 않다면 서버를 직접 실행해야 한다.
Homebrew로 설치한 경우라면
brew services start mysql
시스템 서비스로 등록된 경우라면
sudo systemctl start mysql
명령으로 시작할 수 있다.
중요한 것은 명령어 자체보다, MySQL이 서버 구조로 동작한다는 사실을 이해하는 것이다.
이 전제가 잡혀 있어야 이후의 문제들도 같은 맥락에서 접근할 수 있다.
서버가 실행되지 않는다면 로그를 먼저 열어라
서버를 실행하려 했는데 오류가 발생하거나 실행 자체가 되지 않는다면, 많은 사람들이 같은 명령어를 반복해서 실행하는 실수를 저지른다. 이 방식으로는 문제가 해결되지 않는다. MySQL은 실행 과정에서 오류가 발생하면 반드시 로그 파일에 원인을 남긴다. 따라서 로그를 확인하는 것이 가장 빠른 해결 방법이다.
로그 파일의 위치는 운영체제와 설치 방식에 따라 다르지만, 일반적으로 다음 경로에서 확인할 수 있다.
- macOS (Homebrew):
/usr/local/var/mysql/또는/opt/homebrew/var/mysql/ - Linux:
/var/log/mysql/error.log - Windows:
C:\ProgramData\MySQL\MySQL Server X.X\Data\
로그 파일을 열면 어느 시점에, 어떤 이유로 실행이 실패했는지가 명확하게 기록되어 있다. 권한 문제인지, 포트 충돌인지, 데이터 디렉토리 문제인지를 로그 한 줄로 파악할 수 있다. 실력 있는 개발자일수록 문제가 생겼을 때 가장 먼저 로그를 확인하는 습관이 잡혀 있다. MySQL 트러블슈팅도 예외가 아니다.
mysql 명령어가 인식되지 않는다면 PATH 설정을 점검하라
터미널에 mysql 명령어를 입력했을 때 command not found 오류가 뜬다면, 많은 사람들이 설치가 잘못된 것이라고 오해한다. 그러나 대부분의 경우 MySQL은 정상적으로 설치되어 있다. 문제는 설치된 실행 파일의 경로가 시스템 PATH에 등록되어 있지 않다는 것이다.
PATH는 운영체제가 명령어를 실행할 때 어느 디렉토리를 탐색할지를 정의하는 환경 변수다. MySQL 실행 파일이 PATH에 포함되지 않으면, 아무리 정상적으로 설치되어 있어도 터미널은 해당 명령어를 찾지 못한다.
해결 방법은 간단하다. MySQL 실행 파일이 위치한 경로를 PATH에 추가하면 된다. macOS Homebrew 기준으로는 다음과 같이 설정할 수 있다.
export PATH="/usr/local/opt/mysql/bin:$PATH"
이 설정을 ~/.zshrc 또는 ~/.bash_profile에 추가하고 source 명령으로 적용하면 된다.
설치를 재시도하기 전에 반드시 이 부분을 먼저 확인하는 것이 시간을 아끼는 방법이다.
포트 충돌이 발생하고 있지는 않은지 확인하라
MySQL은 기본적으로 3306 포트를 사용한다. 이미 동일한 포트를 점유하고 있는 프로세스가 존재한다면, MySQL 서버는 시작되지 않는다. 이 경우 별도의 오류 메시지 없이 그냥 실행이 안 되는 것처럼 보이기 때문에 원인을 찾기가 더 어렵다.
포트 충돌 여부는 다음 명령어로 확인할 수 있다. 필자의 경우는 3306으르 MySQL이 사용 중이기 때문에 아래와 같은 결과가 확인 됐다. 만약 아래에 MySQL이 아닌 다른 프로세스가 나온다면 해당 프로세스의 포트를 변경하는 것을 추천한다.
lsof -i :3306
출력 결과에 다른 프로세스가 잡혀 있다면, 해당 프로세스를 종료하거나 MySQL의 포트 설정을 변경해야 한다.
다만 주의할 점은 검색 시 화면이 위와 같이 나오더라도 이전에 실행했던 MySQL 프로세스가 정상적으로 종료되지 않은 채 좀비 프로세스로 남아 있는 경우도 있다는 것이다. 만약 위와 같이 나오는제 접속이 되지 않는 경우 해당 프로세스를 직접 kill하고 다시 시작해야 한다. 프로세스 kill 명령어 등에 대해서는 아래 글을 참고하면 좋다.

포트 설정을 변경하려면 MySQL 설정 파일인 my.cnf 또는 my.ini에서 port 값을 수정하면 된다. 다만 포트를 변경하면 클라이언트 접속 시에도 동일한 포트를 명시해야 하므로, 가능하다면 기존 프로세스를 정리하고 기본 포트를 유지하는 것이 관리 측면에서 더 편리하다.
권한 설정 문제를 간과하지 마라
macOS나 Linux 환경에서 MySQL을 운영할 때 권한 문제는 꽤 자주 발생한다. MySQL은 내부적으로 데이터를 저장하는 디렉토리에 접근해야 하는데, 이 디렉토리의 소유권이나 권한이 잘못 설정되어 있으면 서버가 시작되지 않거나 실행 도중 갑자기 종료되는 현상이 나타난다.
일반적으로 MySQL 데이터 디렉토리는 mysql 사용자 계정이 소유해야 하며, 적절한 읽기/쓰기 권한이 부여되어 있어야 한다. 권한 문제가 의심된다면 다음 명령어로 소유권을 확인하고 필요시 수정한다.
ls -la /usr/local/var/mysql/
sudo chown -R mysql:mysql /usr/local/var/mysql/
재설치를 반복하는 것으로는 이 문제가 해결되지 않는다. 권한 설정은 설치와 무관하게 별도로 관리되는 영역이기 때문이다. 특히 sudo 권한으로 MySQL을 실행하다가 일반 사용자로 전환하거나, 디렉토리를 수동으로 이동한 이후에 이런 문제가 자주 발생한다.
데이터 디렉토리가 정상적으로 초기화되었는지 점검하라
MySQL은 실행 시 내부적으로 사용할 데이터 영역을 필요로 한다. 이 영역이 정상적으로 초기화되어 있지 않으면 서버는 시작조차 되지 않는다. 설치 과정 중 오류가 발생했거나 초기화 도중 강제 종료된 경우에 이런 문제가 나타난다.
데이터 디렉토리 초기화는 다음 명령어로 수행할 수 있다.
mysqld --initialize --user=mysql
이 명령을 실행하면 초기 데이터 디렉토리가 생성되고, 임시 root 비밀번호가 로그에 출력된다. 이 비밀번호는 최초 로그인 후 반드시 변경해야 한다. 초기화 과정이 정상적으로 완료되었다면 이후 서버 실행도 대부분 정상적으로 이루어진다.
주의할 점은 이미 데이터가 존재하는 디렉토리에 초기화 명령을 실행하면 기존 데이터가 덮어씌워질 수 있다는 것이다. 운영 중인 환경에서는 이 명령을 함부로 실행하지 않아야 하며, 반드시 데이터 백업 이후에 진행해야 한다.
마무리하며
MySQL 트러블슈팅은 처음에는 막막하게 느껴지지만, 기본 구조를 이해하고 나면 접근 방식이 단순해진다. 서버가 실행 중인지, 명령어 경로가 올바른지, 포트가 충돌하지 않는지, 권한과 디렉토리 설정이 정상인지. 이 네 가지 기준을 순서대로 점검하는 것만으로도 대부분의 문제는 해결할 수 있다.
중요한 것은 오류가 발생했을 때 당황해서 재설치부터 시도하는 것이 아니라, 로그를 열고 현재 상태를 정확히 파악하는 습관을 들이는 것이다. 로그는 MySQL이 스스로 남기는 진단서다. 그 진단서를 읽을 수 있다면 문제 해결의 절반은 이미 끝난 것이다.
MySQL이 어떤 구조로 동작하는지를 이해하면, 앞으로 어떤 새로운 오류가 발생하더라도 같은 기준으로 접근할 수 있다. 특정 명령어를 외우는 것보다, 데이터베이스 서버가 어떻게 올라가고 어떻게 연결되는지의 흐름을 머릿속에 그릴 수 있어야 한다. 그 흐름이 잡히는 순간부터 MySQL은 더 이상 두려운 도구가 아니라 익숙하게 다룰 수 있는 도구가 될 것이다.


Add your first comment to this post