본문 바로가기

Dev./Error.

[Error] MySQL 버전 충돌 (macOS/Homebrew)

728x90
반응형

예전에 공부용으로 homebrew로 설치된 mysql이 있었는데 이번에 예제 따라간다고 웹에서 MySQL 8.4 dmg를 추가 설치하면서 두 버전이 같은 포트와 데이터 디렉토리를 공유하며 지속된 충돌문제가 발생했다.

발생된 로그

로그 설명
Unable to lock ./ibdata1 error: 35 InnoDB 데이터 파일(ibdata1)을 중복 프로세스가 잠그려 함
Can't connect to local MySQL server through socket '/tmp/mysql.sock' 이미 다른 인스턴스가 포트를 점유하거나 소켓 경로 다름
Access denied for user 'root'@'localhost' root 인증 플러그인 꼬임 (caching_sha2_password ↔ mysql_native_password)
brew services list → error 1 Homebrew 서비스가 손상된 상태 (PID 불일치)

 

원인

mysql@8.4(dmg)와 mysql@8.0(Homebrew)이 같은 데이터 경로"/usr/local/var/mysql"를 공유하며 문제가 발생. 어쩐지 나는 웹으로 다운받으면서 root계정이고 나는 비밀번호를 생성한적이 없는데 있어서 의아햇다.  dmg 버전은 시스템 전체에서 root권한으로 돌아가고 homebrew 버전은 사용자 계정으로 돌아가기 때문에 포트 사용시 충돌 발생

해결

어차피 homebrew 버전을 더 많이 쓰기 때문에 그냥 웹 버전을 지우기로 했다.

1. 모든 MySQL 프로세스 종료

sudo pkill -9 mysqld 
sudo pkill -9 mysql

만약 지워지지 않는다면

ps aux | grep mysqld

로 켜져있는 서버의 PID 번호를 복사해 종료 명령어 뒤에 PID를 명시해주면 된다.

2. 잔여 소켓 / PID 파일 제거

sudo rm -f /usr/local/var/mysql/*.pid sudo rm -f /usr/local/var/mysql/*.sock

3. 데이터 디렉토리 권한 복구

sudo chown -R $(whoami) /usr/local/var/mysql 
chmod -R 755 /usr/local/var/mysql

4. 잘못된 버전(8.4) 제거

brew uninstall mysql@8.4 
brew cleanup

5. LTS 8.0만 재시작

brew services start mysql@8.0 
brew services list
 
 

선택사항 비밀번호 재설정

만약 인증이 꼬였을 때:

/usr/local/opt/mysql@8.0/bin/mysqld_safe --skip-grant-tables --skip-networking & mysql -u root --socket=/usr/local/var/mysql/mysql.sock

그 다음 SQL:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678'; 
FLUSH PRIVILEGES; 
EXIT;

정상 모드로 재시작:

mysqladmin shutdown 
brew services start mysql@8.0
 

6. 복구 후 정상 확인

mysql -u root -p --socket=/usr/local/var/mysql/mysql.sock

정상 출력 예시:

Welcome to the MySQL monitor
... 
mysql>

 

728x90
반응형