[mac m1/OS Monterey] homebrew를 이용하여 mac에 mariadb설치 및 에러 수정

김상윤·2022년 6월 28일
5

Intro

인턴과제로 스프링 api개발과 mariadb 데이터베이스 구축하기를 받았다.
약 1주동안 api코드 분석 및 대략적인 다이어그램을 그린 후, 본격적으로 데이터베이스를 구축하기 위하여, 현재 내 macbook에 mariaDB 설치를 시도하였다.

그러나...

이 과정에서 무수한 에러들이 나를 반겨주어 약 5시간동안 헤메고 있었다:-(
결국 이러한 문제들을 해결한 지금, 내가 어떤 문제를 겪었고 어떻게 해결했는지를 공유하기 위하여 포스팅을 하기로 하였따...


Install

먼저 mariaDB 설치부터 시작해보자.
아래 링크는 mariaDB 공식 설치 가이드문서이다. 해당 문서를 참고하여 설치를 진행하였다.

https://mariadb.com/kb/ko/installing-mariadb-on-macos-using-homebrew/

먼저, mariaDB를 설치하기 앞서 필요한 준비물은 homebrew이다.
homebrew 설치법은 나중에 추후 따로 다루고자한다.
따라서, 해당 설치법은 homebrew가 정상적으로 설치되었다는 가정하에서 진행한다.

아래와 같은 명령어로 homebrew설치가 가능하다.

skwx50000@Kimui-MacBookPro:/$ brew install mariadb

정상적으로 설치가 진행된다면 아래와 같은 문구들이 출력될것이다.

skwx50000@Kimui-MacBookPro:/$brew install mariadb
==> Downloading https://ghcr.io/v2/homebrew/core/mariadb/manifests/10.8.3_1
Already downloaded: /Users/skwx50000/Library/Caches/Homebrew/downloads/8ffe301e8a1ef3b1098a896043bf3db68fecbe8094768ea4462cd9bf98382e2f--mariadb-10.8.3_1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/mariadb/blobs/sha256:44ff9ff617
Already downloaded: /Users/skwx50000/Library/Caches/Homebrew/downloads/07df8179fdce7cbd416ed476a175969de988f3c50167c64bfc7e0be8667f897d--mariadb--10.8.3_1.arm64_monterey.bottle.tar.gz
==> Pouring mariadb--10.8.3_1.arm64_monterey.bottle.tar.gz
==> /opt/homebrew/Cellar/mariadb/10.8.3_1/bin/mysql_install_db --verbose --user=
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.

MySQL is configured to only allow connections from localhost by default

To restart mariadb after an upgrade:
  brew services restart mariadb
Or, if you don't want/need a background service you can just run:
  /opt/homebrew/opt/mariadb/bin/mysqld_safe --datadir=/opt/homebrew/var/mysql
==> Summary
🍺  /opt/homebrew/Cellar/mariadb/10.8.3_1: 915 files, 174.6MB
==> Running `brew cleanup mariadb`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

그 후, brew list를 통해서 설치여부를 확인할 수 있다.

skwx50000@Kimui-MacBookPro:/$brew list
==> Formulae
...
gdbm			mariadb			sqlite
gettext			mecab			tree
...

Server Run & Connect

Server Run

설치가 문제없이 완료되었다면, 이제 실행을 시켜보자.

아래 명령어로 mariaDB 서버를 가동시킬 수 있다.

skwx50000@Kimui-MacBookPro:/$mysql.server start

//종료시키는 방법은 start에서 stop으로만 바꿔주면 가능하다..!
skwx50000@Kimui-MacBookPro:/$mysql.server stop

이외의 방법으로,
데몬으로 실행시키는 방법은 아래와 같다.
데몬 실행은 백그라운드에서 계속 실행이 유지되는 상태를 말한다. 즉, MariaDB가 즉시 실행되고 재부팅 시에도 실행된다.

개인적으로 나는 데몬으로 실행시키는것을 애용한다.

skwx50000@Kimui-MacBookPro:/$brew services start mariadb

brew로 실행시켰을경우, 다음과 같이 정상적으로 동작하는지 알아볼 수 있다.

skwx50000@Kimui-MacBookPro:/$brew services list

또한, stop/restart를 시킬 수도 있는데, 아래와 같은 명령어들로 가능하다.

skwx50000@Kimui-MacBookPro:/$brew services stop mariadb //종료
skwx50000@Kimui-MacBookPro:/$brew services restart mariadb //재시작

Connect

mariaDB 서버가 실행 완료되면, 이제 우리는 접속을하여 mariaDB 콘솔로 진입해야 한다.
서버만 켜는것이 우리의 목표가 아니기 때문이다.🔥
다음과 같은 방법으로 진행할 수 있다.

skwx50000@Kimui-MacBookPro:/$sudo -u root -p
Password:
Enter password: 

위의 명령어를 실행시키면, 비밀번호를 입력하라는 문구가 뜨게 될것이다. root의 비밀번호를 입력해주면 된다.

그렇다면, 정상적으로 아래와 같이 진입이 될것이다.

skwx50000@Kimui-MacBookPro:/$sudo mysql -u root -p
Password:
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.8.3-MariaDB Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

추가

앞서 말했던 명령어 외에도, 접속하는 방법이 또 있다.
(단, 기본적으로 서버는 실행되고 있어야 한다. 따라서, brew services start mariadb로 서버를 데몬으로 미리 실행시켜주자)
앞서 우리는 sudo mysql -u root -p로 접속을 하였다. 이것은 sudo를 통하여 root에 대한 권한이 있음을 나타내어 접속이 가능한 것이었다.

내가 root 사용자라면, 번거롭게 권한을 나타낼 필요가 없다. 따라서, root사용자라면 아래와 같이 쉽게 콘솔로 진입할 수 있을것이다. (앞에 sudo를 붙이는 것은 옵션이다)

skwx50000@Kimui-MacBookPro:/$mysql

혹은

skwx50000@Kimui-MacBookPro:/$mariadb

TroubleShooting

자 이제 본격적으로 내가 실행하면서 발생했던 에러에 대하여 다뤄보도록 하겠다.

1. mysql.server start

mysql.server start로 서버를 열고자 했을때 발생했던 에러이다.
에러코드는 아래와 같다.

Starting MariaDB
.220628 14:34:54 mysqld_safe Logging to '/opt/homebrew/var/mysql/Kimui-MacBookPro.local.err'.
220628 14:34:54 mysqld_safe Starting mariadbd daemon with databases from /opt/homebrew/var/mysql
/opt/homebrew/bin/mysql.server: line 263: kill: (28795) - No such process
/opt/homebrew/bin/mysql.server: line 276: log_failure_msg: command not found

위 에러코드를 보면, 데몬으로 실행한 프로세스가 갑자기 kill되는 것을 볼 수 있었다.
kill되는 이유는 매우 다양해서, 먼저, 어떤 이유로 해당 서버를 정상적으로 작동시키지 못하고 kill되는지 파악을 해보아야 했다.

따라서, mysql.server start외에도, brew services start mariadb로 데몬으로도 실행시켜보았다.

skwx50000@Kimui-MacBookPro:/opt/homebrew/var$brew services start mariadb 
==> Successfully started `mariadb` (label: homebrew.mxcl.mariadb)

데몬으로는 정상적으로 서버가 실행되는 듯 했다.

그러나..

해당 서버에 접속을 시도하였을시, 아래와 같은 에러가 발생하였다.

skwx50000@Kimui-MacBookPro:/tmp$sudo mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local server through socket '/tmp/mysql.sock' (2)

이때 발생하는 에러를 보고, /tmp/mysql.sock 이 경로에서 무언가 문제가 있음을 파악했다.

구글링을 해본결과 해당 (2) 에러가 발생하는 경우는 아래와 같았다.

1. MySQL 서버가 구동이 되어있지 않을경우
2. my.cnf 파일이 깨졌는지 확인
3. 시스템이 mysql.sock 파일을 정상적으로 작동시키지 못할 경우

내 경우에는 1번은 이미 앞에서 확인하였고, 2번, 3번에 대한 확인이 필요하였다. 따라서, 아래와 같은 명령어로 my.cnf파일에 대한 위치를 찾고자 하였다.

find / -name my.cnf

find 명령어로 my.cnf를 서치해본 결과 해당 파일이 있는 경로는 아래와 같았다.

/opt/homebrew/etc/my.cnf

여기서 중요한 점이, 우리는 앞서 homebrew를 통하여, maridDB를 설치하였다. 그 결과 설치 파일들은 /opt/homebrew/ 경로 및에 저장된다. 따라서, 관련된 데이터 및 파일들을 서치할때는, /opt/homebrew/ 경로를 기준으로 서치하는 것이 효율적일 수 있다. (어디까지나 개인적인 의견)

그러나 아래와 같이 해당 문서에는 별다른 문제없어보였다.

다음으로, 3번 사항이었던 mysql.sock파일을 확인해보았다.
해당 파일도 마찬가지로 경로를 찾기 위해 아래와 같은 명령어를 실행시켜주었다.

find / -name mysql.sock

본인의 mac기준으로는 정확히, /private/tmp/mysql.sock 경로에 mysql.sock 파일이 저장되어 있었다.

처음에는 private폴더가 부모폴더로 존재하여, 해당 파일에 대한 접근권한의 문제인가 싶어 접근권한을 변경해주었다.(이때, 짜증이나서 rwx를 전부 오픈하였다.)

skwx50000@Kimui-MacBookPro:/opt/homebrew/var$sudo chmod -R 777 /tmp/

그러나, 해당 명령어을 통해서도 문제가 해결이 되지 않았다. (알고보니 해당 명령어는 (13)번 에러를 해결하는데에 쓰이는 방법이라고..)

다시 서치를 해본 결과,
mysql -uroot로 서버에 접속을 할때 -S옵션을 주는 방법이 있다고 한다.
-S 옵션은 직접 socket의 경로를 주어서, 커넥션을 할때 해당 경로로 접속해달라고 명시해주는 옵션이다.
아래와 같이 명령어를 주어보았다.

sudo mysql -u root -p mysql -S /tmp/mysql.sock

이 결과...

그래도 여전히 에러가 발생하였다.
결국 내가 내린 결론은, 현재 mysql 서버 측에서는 /tmp/ 경로에 있는 mysql.sock파일은 제대로 찾는데, mysql.sock 파일을 사용할때, 문제가 있는것이라 판단하였다.

따라서, 직접 mysql.sock 파일을 확인해본결과, 심볼릭링크 파일인 것을 확인하였다. (이부분은 캡처를 하지 못하였다.)

조금 더 조사해본 결과, 해당 파일의 링크에서 오류가 발생했다는 것을 알아냈고, 해당 파일을 삭제를 하였다.

rm -rf /tmp/mysql.sock

그 후, mariaDB 또한 재설치를 해주었다.

//삭제
skwx50000@Kimui-MacBookPro:/tmp$ brew uninstall mariadb
skwx50000@Kimui-MacBookPro:/tmp$ brew cleanup

//설치
skwx50000@Kimui-MacBookPro:/tmp$ brew install mariadb

이제 다시 실행시키고 접속을 해보면..?

정상적으로 접속이 되었다.


Conclusion

해당 에러에 대해서 더 조사해본결과, homebrew를 통하여, mysql, mariaDB등 mysql계열 데이터베이스가 동시에 여러개 설치되었을때 간헐적으로 발생하는 에러라고 보여진다. 따라서, 재설치를 할때, 기존에 설치되었던, mysql,mysql@5.7,mariaDB등 모두 삭제를 해주었고, mariaDB만 재설치를 해주었다.

profile
알고리즘을 아직도 모르겠다

0개의 댓글