백업부터

우선 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 관련 작업으로 어려움을 겪는 분들에게 작은 도움이라도 됐으면 한다.