MacOS에서 Homebrew 기반으로 MySQL을 설치하는 과정에서 다음과 같은 오류가 발생했다.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/homebrew/var/mysql/mysql.sock' (2)
내부 서버는 실행 중이라고 표기되지만 실제로는 소켓 파일이 존재하지 않아 접속이 불가능한 상태였다. 초기화 실패, 데이터 디렉토리 충돌, 라이브러리 경로 오류까지 다양한 원인이 겹쳐 문제 해결이 예상보다 오래 걸렸다.
본 글에서는 문제 발생 원인과 해결 과정을 정리한다.
Homebrew로 MySQL 설치 후 접속을 시도했다.
mysql -u root
그러나 다음 오류가 발생했다.
Can't connect to local MySQL server through socket '/opt/homebrew/var/mysql/mysql.sock' (2)
이 문제는 MySQL 서버가 실제로 실행 중인지 여부와, 서버가 사용하는 소켓 파일의 위치가 일치하지 않아 발생한 것이었다.
MySQL 9.x 설치 과정에서 의존성(protobuf) 버전 충돌이 발생했고, 서버 초기화도 실패했다.
특히 mysqld 실행 시 다음과 같은 라이브러리 로딩 오류가 출력되었다.
Library not loaded: /opt/homebrew/opt/protobuf/lib/libprotobuf-lite.29.2.0.dylib
Homebrew의 rolling 업데이트 특성 상 의존성 버전이 바뀌면서 MySQL이 필요로 하는 버전과 맞지 않는 상황이었다.
문제를 해결하기 위해 MySQL을 완전히 제거하고 8.4 버전으로 재설치했다.
기존 MySQL 정지
brew services stop mysql
데이터 디렉토리 삭제
sudo rm -rf /opt/homebrew/var/mysql
MySQL 8.4 설치
brew install mysql@8.4
데이터베이스 초기화
/opt/homebrew/opt/mysql@8.4/bin/mysqld --initialize-insecure \
--user=yujin \
--basedir=/opt/homebrew/opt/mysql@8.4 \
--datadir=/opt/homebrew/var/mysql
서비스 시작
brew services start mysql@8.4
여기까지는 모든 과정이 정상적으로 완료되었다.
brew services info mysql@8.4 명령어 결과, 서비스는 Running 상태로 표시되었다.
Running: ✔
PID: 893
하지만 소켓 파일이 생성되지 않아 접속은 여전히 불가능했다.
이는 MySQL 서버가 /opt/homebrew/.../mysql.sock 대신 다른 위치에 소켓을 생성하고 있었기 때문이다.
다음 명령으로 소켓 위치를 검색했다.
sudo find / -name "mysql.sock*" 2>/dev/null
출력 결과는 다음과 같았다.
/System/Volumes/Data/private/tmp/mysql.sock
/System/Volumes/Data/private/tmp/mysql.sock.lock
즉 MySQL 서버가 소켓을 /tmp/mysql.sock 에 생성하고 있었던 것이다.
이는 macOS의 보안 구조 및 Homebrew MySQL 8.4의 기본 설정 때문에 흔히 발생하는 동작이다.
소켓 경로를 직접 지정해 접속하면 문제가 해결된다.
mysql -u root -S /tmp/mysql.sock
그러나 이 방법은 매번 -S 옵션을 붙여야 하기 때문에 근본적인 해결은 아니다.
MySQL 서버와 클라이언트가 동일한 소켓 경로를 사용하도록 my.cnf 파일을 수정했다.
sudo nano /opt/homebrew/etc/my.cnf
아래 설정을 작성했다.
[client]
socket = /opt/homebrew/var/mysql/mysql.sock
[mysqld]
socket = /opt/homebrew/var/mysql/mysql.sock
pid-file = /opt/homebrew/var/mysql/mysql.pid
datadir = /opt/homebrew/var/mysql
작성 후 MySQL을 재시작했다.
brew services restart mysql@8.4
소켓 파일 생성 여부 확인:
ls -al /opt/homebrew/var/mysql | grep sock
소켓 파일이 정상 생성된 것을 확인한 뒤 다시 접속했다.
mysql -u root
문제 없이 접속되었다.
본 문제는 다음 두 가지 요인이 겹쳐 발생했다.
/tmp/mysql.sock 경로를 사용하지만, 클라이언트는 /opt/homebrew/var/mysql/mysql.sock 을 찾는 설정 불일치해결 방법은 다음과 같다.