오늘, 정확히 2시간반 정도 Mysql DB 커넥션을 하기 위헤 엄청난 삽질을 하였다. 결론은 해결했지만, 왜 해결이 됐는지 이해가 안감;;;;
삽질하면서 다음엔 꼭 이런일이 없길 바라며 혹시나 하는 마음으로 TIL로 정리해보려한다.
일단, mysql password를 잊었으면, 백그라운드에서 돌고 있는 mysql server를 끄고, 권한 체크를 패스하는 의미인 --skip-grant-tables
를 붙여서 mysql에 접속하여야 한다.
- 여기서 첫 번째 삽질은, mysql server가 안죽는다는 것이다…
- 일단 흔히 구글링해서 나오는 mysql server 죽이기를 해보았었다.
mysql.server
가 있는 경로에서 stop
명령어를 입력하면 mysql server가 멈추는데 성공하였다는 문구가 뜬다.
그렇게하고 mysql에 접속하려하면 여전히 패스워드를 입력하라는 말이 나온다..
그래서 지인에게 도움을 요청하니, 지인이 brew
로 mysql을 설치했다면, brew에서 mysql.server를 관리해주기 때문에 brew에서 직접 mysql을 멈춰줘야한다고 하더라.
그래서 해결책은
brew services list // brew에서 관리해주는 리스트를 보여주는 것 같다.
brew services stop mysql // brew에서 mysql 서버를 죽인다.
이렇게 약 1시간의 삽질로 mysql server를 완전히 죽일 수 있었다…그렇게 겨우 --skip-grant-tables
명령어로 mysql에 접속할 수 있게 되었다.
- server를 죽이고, mysql에 권한 없이 접속한 다음 내 삽질은
syntax error
가 발생하는 것이었다…
mysql에 --skip-grant-tables
로 접속한 후, mysql 비밀번호를 바꾸는 명령을 시행하는데, 계속 이 오류가 뜨고는 동작하지 않았다.
mysql> use mysql;
mysql> update user set password=PASSWORD("TOOR") where User='root';
위 sql문으로 비밀번호를 바꾸려했지만, 계속 에러가 뜨면서 되지 않았다. 그래서 열심히 구글링하다 거의 40분만에 해결하였다.
mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
위 명령어로 해당 이슈를 해결하였다. 문제가 뭐였느냐..하면, 권한없는 상태로 mysql에 접속해서 곧바로 비밀번호를 바꾸는건 불가능한 것 같다. 우선 null로 비밀번호를 바꾼 다음에, root 권한으로 재접속하여 그 때 비밀번호를 셋팅해야 한다.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPasswd';
그렇게 모두 다 해결된줄 알았다.. 마지막 관문이 남아있었다..
- 이제 비밀번호도 바꿨고, mysql 접속도 잘 된다. 그런데, mysql connection이 안된다..!!!!
connection이 안되는 이유가 뭔가했더니, 포트번호가 default로 3306으로 맞추어져 있어야 정상인데, 웬일인지 0으로 설정이 되어있었다…
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
1 row in set (0.07 sec)
대략 이런식으로 되어있었음…..;; 근데 왜 이렇게 되어있는지 모르겠더라….
그래서 진짜 미친듯이 config 파일을 찾아다녔는데, 못찾았었다. 없을 수도 있다 그래서, 없으면 새로 설정파일을 어떤 경로에 생성해서 만들으라는데, 어떤 경로에 해야하는지도 다 다르고, 내부 구조를 정확하게 알 수가 없어서 자포자기 상태에 이르렀다.
그러다가…회의를 다녀오니 포트가 3306으로 연결이 잘되더라…
이건 왜 그런지 이해가 안됐지만…덕분에 도커도 한 번 띄워보고.. 나름 의미있었던 삽질이 아닌가 싶다.
담부턴 비밀번호 절대 안까먹어야지..ㅠㅠㅠ