Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12

brew로 MySQL 5.7을 MySQL 8로 업그레이드 하면서 겪은 에러 기록

보통은 그냥 지우고 새로 인스톨하면 될 것이다. 데이터 폴더까지 삭제하고 클린 재설치를 할 때 가장 중요한 것은 ~/.my.cnf 파일 있는지 체크하는 것이다. root 로그인이 안 될 수 있다.

백업부터

우선 DB 백업을 떠야 한다.

mysqldump --databases db1 db2 db3 db4 > mysql.sql

이 때 mysql에서 사용하는 DB는 백업할 필요가 없다: information_schema, performance_schema, mysql, sys

업그레이드 안 되는 테이블이 있어서 MySQL 8 시작 실패

메모로 볼 용도로 기록한 거라 조금 불친절할 수 있다. 궁금한 게 있다면 질문 부탁드린다.

아래 명령으로 업데이트했다. [email protected]을 지운다고 데이터가 날아가지는 않는다.

brew uninstall [email protected]
brew install mysql

이렇게 하고 잘 됐으면 그냥 잘 된 것이다.

에러 로그 확인

그런데 나는 설치 후 MySQL이 돌아가지 않아서 에러 메시지를 확인했다.

brew services는 에러 메시지를 바로 보여 주지 않는다. brew info mysql로 설명을 보니 /usr/local/opt/mysql/bin/mysqld_safe --datadir=/usr/local/var/mysql로도 실행할 수 있다고 나와 있어서 그걸로 실행하니 에러 로그 파일 위치를 알려 줬다. 알려 준 경로를 통해 에러 로그를 본 것이다. 에러 로그 파일 위치는 /usr/local/var/mysql/컴퓨터이름.local.err.

에러 로그는 아래와 같았다.

2022-02-13T19:04:59.127386Z 2 [ERROR] [MY-010923] [Server] Table upgrade required. Please do "REPAIR TABLE `service`" or dump/reload to fix it!
2022-02-13T19:04:59.127542Z 2 [ERROR] [MY-010923] [Server] Table upgrade required. Please do "REPAIR TABLE `qna`" or dump/reload to fix it!
2022-02-13T19:04:59.130654Z 2 [ERROR] [MY-010923] [Server] Table upgrade required. Please do "REPAIR TABLE `notice`" or dump/reload to fix it!
2022-02-13T19:04:59.130816Z 2 [ERROR] [MY-010923] [Server] Table upgrade required. Please do "REPAIR TABLE `member`" or dump/reload to fix it!

8로 업그레이드하는 걸 실패한 테이블이 있다는 것이었다. 신기한 건 실행도 안 됐다는 것이다. 몇몇 글을 검색해 보니 저걸로 실행까지 안 되는 것 같지는 않았는데 말이다. 내가 모르는 무슨 다른 문제가 있었던 게 아닐까 싶다. 그러나 이 시점에는 그런 생각을 하지 못했고, 귀찮아서 데이터 폴더를 싹 지우고 다시 설치하기로 했다.

클린 재설치, 그런데 root 유저로 로그인이 안 된다. 왜?

이번에는 MySQL 프로세서까지 완전히 정지시킨 후 재설치했다.

rm -rf /usr/local/var/mysql
brew services stop mysql
brew uninstall mysql
brew install mysql

foreground 실행 명령

이번에도 설치후 MySQL이 알아서 실행되지 않아 foreground 프로세스로 수동 실행했다.

/usr/local/opt/mysql/bin/mysqld_safe --datadir=/usr/local/var/mysql

무사히 실행됐고, 첫 설치니 기초 설정을 시도했다.

mysql_secure_installation
# ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

그런데 root 유저로 로그인이 안 된다는 에러 메시지가 나왔다. 일단 실행은 잘 된 거니 반갑다.

이번에는 그냥 유저를 명시하고 패스워드를 입력받게 해서 기초 설정을 시도했다.

mysql_secure_installation -uroot -p

비밀번호 입력 프롬프트에서 그냥 엔터를 치니 무사히 진행됐다(초기 비번은 빈 문자열). root 비번 설정 단계에서 내가 사용하던 단순한 비번으로 설정했다.

.my.cnf의 존재

이쯤돼 기억을 떠올릴 수 있었다. ~/.my.cnf 파일에 root 비번을 입력해 뒀던 것이다.

[client]
user=root
password=...

이 파일 때문에 root로 접속이 안 됐던 것이다. 초기 비번은 그냥 빈 값인데 MySQL이 .my.cnf에 설정해 둔 값으로 비번을 넣었을 테니 비번이 틀렸다고 접속이 거부됐던 것이다.

여하간 패스워드를 명시해서 무사히 기초 설정까지 성공했으니 이제는 상관없다.

백업 sql을 다시 밀어넣기

data 폴더를 삭제하지 않았으면 데이터를 다시 밀어 넣을 필요도 없었을 텐데, 나는 다 지웠으므로 다시 밀어 넣었다.

mysql < mysql.sql

이렇게 무사히 업그레이드를 완료했다.

brew 관련 작업으로 어려움을 겪는 분들에게 작은 도움이라도 됐으면 한다.

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다