mac에서 mysql 사용하기

하루·2021년 12월 30일
1

개발하다보면 테스트 등을 위해 로컬 DB를 사용할 일이 생긴다.

설치하기

맥에는 homebrew라는 패키지 관리자가 있어 쉽고 편하게 패키지들을 관리할 수 있다.
맥에 기본적으로 되장되어 있는 패키지 매니저는 아니기 때문에 따로 설치해주어야 한다.

https://brew.sh/index_ko
homebrew 공식 홈페이지에 자세한 설명이 나와있다.

homebrew를 이용해 mysql을 설치해보자

$ brew update
$ brew install mysql

설치가 완료되면 다음과 같은 안내문들이 나온다.
설치가 되었고, 기본적으로 localhost에서만 접속이 가능하며 root 계정의 패스워드가 지정되어 있지 않으니 보안을 위해서 비밀번호 설정을 하라는 얘기

We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

To restart mysql after an upgrade:
  brew services restart mysql
Or, if you don't want/need a background service you can just run:
  /usr/local/opt/mysql/bin/mysqld_safe --datadir=/usr/local/var/mysql

설치 확인을 위해 버전 체크를 해보았다.

$ mysql --version
mysql  Ver 8.0.27 for macos11.6 on x86_64 (Homebrew)

root 계정 비밀번호 변경

권장하는대로 mysql_secure_installation을 입력해보면 다음과 같이 root계정 패스워드를 지정할 수 있다.

Securing the MySQL server deployment.

Enter password for user root: 

비밀번호를 지정하지 않고 접속했을 경우 따로 지정해줄 수 있다.
(MYSQL5에선 비밀번호 변경 방법이 다르므로 버전을 먼저 체크하자)

 mysql> alter user root identified with mysql_native_password by 'PASSWORD';

alter user 구문의 경우 CREATE USER 또는 mysql 시스템 DB에 대한 UPDATE 권한이 필요한데, 이들은 global 권한으로 SUPER 권한이기 때문에 일반유저로 접속 시 사용하는 것은 권장되지 않으며 root계정에서 실행하는 것이 좋다. 일반유저로 실행시 기본적으로 access denied 오류와 함께 실행되지 않으며 grant를 이용해 권한을 설정해주어야 사용가능하다.

사용자 생성 및 권한 설정

데이터의 안전한 사용/관리를 위해 root계정으로 mysql을 이용하는 것 보다는 특정 서비스 데이터를 관리할 계정을 생성해서 사용하도록 한다.

// 비밀번호가 지정되어 있지 않을 때
$ mysql -u root
// 비밀번호가 지정되어 있을 때
$ mysql -u root -p DBNAME(optional)
Enter password:PASSWORD

mysql> create user 'USERNAME' identified by 'PASSWORD';
mysql> select user, host from mysql.user; //mysql DB의 user테이블에서 새로 생성된 유저 정보 확인

mysql> alter user USERNAME identified by 'PASSWORD'; // root에서 USERNAME 계정 비밀번호 변경
mysql> alter user current_user() identified by 'PASSWORD'; // USERNAME 계정 자체 비밀번호 변경

생성한 USERNAME 계정에서 특정 DB에 접근할 수 있도록 권한을 준다.
이 때 생성된 USERNAME에는 특정 DB에 권한을 지정할 수 있는 권한이 없으므로 root계정에서 실행한다.
권한을 줄 당시에 DBNAME이라는 DB가 실제 존재하지 않아도 괜찮다.

mysql>  grant ALL PRIVILEGES on DBNAME.* to USERNAME 

권한을 지정해줬으면 해당 USERNAME으로 접속하여 DB 사용이 가능한지 테스트한다.

mysql> create database DBNAME;
Query OK, 1 row affected (0.01 sec)
profile
뭐라도 남는게 있었으면 좋겠다

0개의 댓글