mysql 9.1.0으로 upgrade 후 pid 파일이 잘못 되었다는 에러가 나타났다. 다시 8.0.*으로 downgrade 하였지만 여전히 해결되지 않았다.
여러 방법을 시도해봤지만 mysql에 접근이 불가능하여 기존의 MySQL 디렉토리에 있는 모든 파일을 삭제 후 다시 루트를 생성했다. 그러니 mysql을 running 하는데는 성공했다. 하지만 mysql -u root -p를 통해 mysql에 접속하려니 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 이런 문제가 생겼다.
mysqld: Can not perform keyring migration : Invalid --keyring-migration-source option.
2024-11-08T05:18:37.925880Z 0 [System] [MY-010116] [Server] /opt/homebrew/Cellar/[email protected]/8.0.40_2/bin/mysqld (mysqld 8.0.40) starting as process 46114
2024-11-08T05:18:37.928898Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /opt/homebrew/var/mysql/ is case insensitive
2024-11-08T05:18:37.930287Z 0 [Warning] [MY-010122] [Server] One can only use the --user switch if running as root
2024-11-08T05:18:37.930331Z 0 [ERROR] [MY-011084] [Server] Keyring migration failed.
2024-11-08T05:18:37.930348Z 0 [ERROR] [MY-010119] [Server] Aborting
2024-11-08T05:18:37.930834Z 0 [System] [MY-010910] [Server] /opt/homebrew/Cellar/[email protected]/8.0.40_2/bin/mysqld: Shutdown complete (mysqld 8.0.40) Homebrew.
패스워드를 사용하지 않고 mysql_safe 상태에서 —skip-grant를 이용하여 mysql에 접속하려 했지만 위와 같은 에러가 떴다. 여기서 keyring 설정 문제에 굉장히 애를 먹었다.
3시간동안 헤매다 해결한 방법은 다음과 같다. (내가 사용한 mysql은 8.0버전이다)
먼저 mysql을 멈춘다.
brew services stop [email protected]
ps aux | grep mysql 를 통해 지금 존재하는 mysql의 PID를 모두 찾아 삭제한다. (sudo kill -9 PID)
rm -rf /opt/homebrew/var/mysql/* 를 통해 data directory에 있는 모든 내용을 삭제한다.
brew services start [email protected] 다시 8.0 버전의 mysql을 시작한다. mysql.server status 로 running 상태인지 확인한다.
mysql -u root 를 통해 mysql을 시작한다. 이는 패스워드 없이 시작하는 코맨드다. safe mode에서 시작하고 싶다면 sudo mysqld --skip-grant-tables --user=mysql & 를 실행한 후 시작한다.
mysql 접속에 성공했으면 다음과 같이 패스워드를 설정한다.
USE mysql;
UPDATE user SET password=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
exit;
exit 후 mysql -u root -p로 mysql에 새로운 패스워드로 접속이 가능한 것을 확인한다.
<aside> 💡
함부로 MySQL의 버전을 바꾸지 말자…
</aside>