ARM Mac에서 발생한 다양한 MySQL 에러 해결


M1 맥북 프로를 사용한 지 어언 3년이 지났지만 여전히 난감한 순간이 종종 있다. 이번에 겪은 MySQL 관련 이슈는 그 중 가장 골치아픈 녀석이었다. 참고로 필자가 겪은 시행착오가 모두 담겨져 있으므로 무작정 순서대로 따라하지 마시고, 우선 한 번 정독해 주시길 바란다.

1. root 계정으로의 접속 불가 이슈


$ mysql -u root
$ ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

$ sudo mysql -u root -p
$ Enter password: 
$ ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

분명히 root 계정의 초기 비밀번호는 없을 텐데 어떤 방법을 시도해 보아도 MySQL에 접속할 수 없었다.


2. MySQL 재설치 (Anaconda, Homebrew)



$ brew install mysql

위의 명령어를 이용해 Homebrew를 통해 MySQL을 설치했었다. 그런데 터미널에 MySQL이 설치된 경로를 알려주는 명령어를 입력했더니 다음과 같은 결과가 나왔다.


$ where mysql
$ ~/Documents/Anaconda3/bin/mysql

어째서인지 Anaconda에 설치된 MySQL만 인식이 되었다. 어차피 쓰지 않을 녀석인지라 해당 경로에 들어가서 ‘mysql’로 시작하는 파일들을 전부 지워 주었다. 그리고 Homebrew를 통해 설치한 MySQL도 깔끔하게 지운 뒤 재설치하기로 하였다.

우선 아래의 명령어를 입력해 실행 중인 MySQL 프로세스를 중지시킨다.


$ brew services stop mysql

그런 다음 삭제 명령어를 입력해 준다.


$ brew uninstall --force mysql

확실하게 지워주기 위해 아래의 명령어들을 차례대로 입력해 준다.


$ sudo rm -rf /usr/local/mysql
$ sudo rm -rf /usr/local/bin/mysql
$ sudo rm -rf /usr/local/var/mysql
$ sudo rm -rf /usr/local/Cellar/mysql
$ sudo rm -rf /usr/local/mysql*
$ sudo rm -rf /tmp/mysql.sock.lock
$ sudo rm -rf /tmp/mysqlx.sock.lock
$ sudo rm -rf /tmp/mysql.sock
$ sudo rm -rf /tmp/mysqlx.sock
$ sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$ sudo rm -rf /Library/StartupItems/MySQLCOM
$ sudo rm -rf /Library/PreferencePanes/My*

그러고 나서 다시 Homebrew를 통해 MySQL을 설치한 다음, 설치 경로를 확인해 보니 제대로 된 경로가 나온다.


$ where mysql
$ /opt/homebrew/bin/mysql

그러나 이번에는 또 다른 에러가 나를 반갑게 맞아주었다.


3. 소켓 에러 ー ERROR 2002 (HY000)

우선 설치한 MySQL을 실행해 준다.


$ brew services start mysql
$ ==> Successfully started `mysql` (label: homebrew.mxcl.mysql)

그러나 이번에는 다음과 같은 에러가 발생했다.


$ mysql
$ ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

$ mysql.server start
$ Starting MySQL
$ ... ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/Edwardui-MacBookPro.local.pid).

다음 경로로 들어가서 ls를 입력해 보면 MySQL 관련 에러 로그 파일이 있을 것이다.


$ cd /opt/homebrew/var/mysql/ 
$ ls
$ ...
$ Edwardui-MacBookPro.local.err // 기기의 이름에 따라 파일명이 다름
$ ...

다음 명령어를 입력해 로그를 열어보았다.


$ vi Edwardui-MacBookPro.local.err  // 기기의 이름에 따라 파일명이 다름

그랬더니 다음과 같은 로그가 남아 있었다.


$ [Server] Can't start server: Bind on TCP/IP port: Address already in use
$ [Server] Do you already have another mysqld server running on port: 3306 ?
$ [Server] Aborting

그러니까, 3306 포트를 이미 다른 프로세스가 사용 중일 수 있다는 말이었다. 그러나 짐작가는 것이 없었다.


$ lsof -i TCP:3306

3306 포트를 사용 중인 프로세스를 찾는 명령어를 사용해 봤지만 아무 것도 나오지 않았다.


$ mysql --help 

위의 명령어를 입력하고 아래로 스크롤하다 보면 다음과 같이 config 파일의 경로가 나온다.


$ ...
$ Default options are read from the following files in the given order:
$ /etc/my.cnf /etc/mysql/my.cnf /opt/homebrew/etc/my.cnf ~/.my.cnf 
$ ...

보통은 /opt/homebrew/etc/my.cnf에 작성되어 있다.


$ vi /opt/homebrew/etc/my.cnf

vi 또는 다른 편집 툴을 이용해 해당 파일에 ‘PORT = 3307’(즉 3306이 아닌 다른 포트 번호)을 추가해 주었다. 그러나 여전히 같은 에러가 반복되었다.

위의 자료에 따르면 Homebrew로 설치한 MySQL의 경우 특정 설정 파일이 기존 config 파일을 덮어쓰므로 소용이 없다고 하는데, 이를 해결할 방법은 찾지 못했다.


4. MySQL 재설치 (.dmg)


그래서 결단을 내렸다. Homebrew로 설치한 MySQL을 위의 2번 과정을 반복해 말끔히 지우고, MySQL 커뮤니티 서버의 패키지 파일(.dmg)을 다운로드받아 설치하기로 했다.

기기에 알맞은 DMG Archive를 다운로드 후 실행하여 설치하면 된다.


5. caching_sha2_password 플러그인 이슈


$ MySQLdb._exceptions.OperationalError: (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/Users/eddylily/Documents/anaconda3/lib/plugin/caching_sha2_password.so, 0x0002): tried: '/Users/eddylily/Documents/anaconda3/lib/plugin/caching_sha2_password.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/eddylily/Documents/anaconda3/lib/plugin/caching_sha2_password.so' (no such file), '/Users/eddylily/Documents/anaconda3/lib/plugin/caching_sha2_password.so' (no such file)")

다른 팀원분께서 만드신 Django 프로젝트를 불러와 실행해야 하는데, 또 생소한 에러가 내 앞을 가로막았다. 이번 에러의 경우 비교적 간단하게 해결할 수 있었다.



Mac의 설정에 들어가서 맨 아래로 내려보면 MySQL 메뉴가 생긴 것을 볼 수 있다. MySQL 서버가 실행 중인지 확인해 준 다음, Initialize Database 버튼을 눌러준다.



Use Legacy Password Encryption(아래) 옵션을 체크해 주고, root 계정에서 사용할 비밀번호를 입력해 준 다음 OK를 눌러 저장한다.

이 비밀번호를 Django 프로젝트의 settings.py에도 반영해 준다.


마침내 프로젝트가 정상적으로 실행이 되었다!


ARM Mac에서 발생한 다양한 MySQL 에러 해결

https://blog.edward.moe/2023/11/14/mysql-errors-on-apple-silicon/

Author

Edward*

Posted on

2023. 11. 14.

Updated on

2023. 11. 14.

Licensed under