-
mysql-server-8.0 설치 후 mysql.service 실행 안됨이슈핸들링 2023. 7. 28. 17:07
서론
MySQL에 대해 잘 알고 싶어서 저장해둔 책이 있다. Real MySQL 8.0이라는 책이다.
언젠가는 이 책을 가지고 스터디를 수행해보고 싶은 마음으로, 이 책의 저자분이 만드신 카카오톡 오픈채팅에도 들어가 있다.오픈채팅에는 주로 DBA 분들이 많아서 DBMS에 대한 깊은 대화가 주로 오가기 때문에, 사실 내가 알아들을 수 있는 말이 많지는 않다. 그래도 '관련된 키워드에 익숙해지기 위해서'라는 목적으로 계속해서 눈팅을 이어나가고 있긴 하다.
위와 같은 이유로 눈팅을 이어가고 있던 어느날, "제발 8.0"을 사용해달라"는 채팅을 읽게 되었다. 깊은 히스토리는 이해하지 못했지만, 대강 이해하기로는 기능 상의 개선이 대폭 이루어졌기 때문에 버전업이 가능한 상황이라면 무조건 8.0 버전을 쓰는게 이득이라는 것이 주 메시지였다.
당시에는 '음 그렇구나' 정도로 넘어갔었다.
오늘은 사이드 프로젝트를 하나 배포하기 위해 서버의 환경을 구성하는 날이었는데, 마침 그 이야기가 떠올랐다. 그래서sudo apt install mysql-server-core-8.0
을 입력했다.본론
그리고 이어서
sudo service mysql start
를 입력했다. 시작이 안되었다.문제 1. service.mysql is masked
Unit mysql.service is masked.
라는 에러 메시지와 함께 실행이 안됐다. mask라는게 무슨 뜻인지 정확히 몰랐지만, 메시지 맥락 상 'mysql 서비스가 실행할 수 없는 상태에 있다'로 해석하면 될 것 같았다.
왜지? 지금 막 설치한 건데 왜 닫혀있을까, 그것도 mysql이?구글링 해서 쉽게 답을 찾을 수 있었다. 낮은 버전에서 8.0으로 올라가고 있는 중에 생긴 이슈라고 한다.
언젠가 처리가 되겠지만 그 언젠가를 기다릴 수는 없겠지. 해제를 해주자.
systemctl unmask mysql.service
``
이 문제는 간단히 해결.문제2. Job for mysql.service failed because the control process exited with error code.
외 게속 않되는대요? 알 수가 없었다. unmask되어있는지 확인해보았는데 그건 확실했다(일단 에러메시지가 이전과 달랐다).
이 역시 이유를 알 수는 없었지만journalctl -xeu mysql.service
라는 걸 입력하면 에러메시지를 자세히 볼 수 있다고 시스템이 안내해줬다. 그래서 읽어보았다.service를 시작시키기 위해 내부적으로 여러번 수행했는지 같은 에러메시지가 여러번 반복되어 있었다.
mysql.service: Control process exited, code=exited, status=1/FAILURE
음..... 그래... 실패한 건 알겠어. 그런데 왜 실패했는지를 알려주겠니?... 친절하게 알려줬다면 좋았겠지만 위 메시지만 수없이 반복되어 있을 뿐... 해당 메시지로는 찾을 수 있는 게 없었다.
같은 메시지만 계속 읽으면서 멍을 때리다가 나는 생각했다. '최초로 실패한 부분에는 뭔가 다른 로그가 남아있을지도?'
스크롤을 올리고 올리고... 올리고 올리고... 또 올리고 올리고...
비슷한 메시지가 너무 많아서 다른 오류메시지까지 올라간걸 깨닫고... 내리고 내리고...
찾았다./etc/init.d/mysql: line 75: /usr/bin/mysqladmin: No such file or directory
mysqladmin이라는게 없었다. 이게 뭔 파일인지는 모르겠어서 chatGPT에게 물어봤더니, MySQL의 유틸리티라고 설명해줬다(서버 시작/정지, 사용자 관리, DB관리 등...). 근데 왜 없지? 이것도 '문제1'과 같은 이유인건지... 모르겠지만 어쨌든 해결해주자.
vi /usr/bin/mysqladmin #만들어주고 저장만 한다.
전에 다른 트러블슈팅 포스팅에서, 이것과 동일한 문제는 아니었지만, 어떤 실행파일이 없어서 실행이 안되는 경우에 그냥 파일을 생성만 해줘도 문제가 해결되었다는 문제를 본 기억이 남아있었다.
그래서 같은 방법을 시도했다. 결과적으로...
$ netstat -tnlp tcp6 0 0 :::3306 :::* LISTEN 2157/mysqld
잘 실행됐다.
결론
- 에러 메시지를 잘 보자.
- 에러 메시지가 답을 주지 않는다면, 에러 메시지를 더 자세히 보자.
출처 및 참고문헌
'이슈핸들링' 카테고리의 다른 글
no main manifest attribute - Java 어플리케이션 실행 시 메인클래스를 못 찾을 때 (1) 2023.08.02