티스토리 뷰

Server

M1 맥미니의 Mysql Config

니용 2021. 12. 13. 16:06
반응형

안녕하세요. 이번에 M1 맥미니를 회사에 비치하면서 개발서버용으로 Mysql 을 설치해서 사용하다 막히는 부분이 있어 찾아보니 전부 인텔 맥으로 세팅을 하는 내용이 대부분 올라와 있어 정리겸 작성하게 되었습니다. 여기에는 내부 IP에서 허용하기 위한 설정과 아이디 생성 및 권한 부여까지 있으니 참고해서 사용해주세요!

 

Homebrew 를 사용하여 설치하였고 Mysql 버전은 8.0.21 버전을 사용했습니다.

 

1. 설치

$ brew install mysql@8.0

 

 

2. 서버 실행

$ mysql.server start

또는

$ brew services start mysql

 

 

3. 보안 강화 설치

3-1. mysql_secure_installation으로 보안을 강화한 설치를 진행합니다. mysql -uroot 로 접근함을 막으면서 IP 허용 정책을 추가하기 위함입니다.

$ mysql_secure_installation
3-2. MySQL 설정

MySQL 설정을 하기 위해서는 mysql_secure_installation 명령어를 실행하여야 한다.
> mysql_secure_installation
mysql_secure_installation: [ERROR] unknown variable 'default-character-set=utf8'.

Securing the MySQL server deployment.

Enter password for user root:
3-1. 비밀번호 복잡성 유무

비밀번호를 복잡하게 설정할 것인지, 쉬운 비밀번호를 사용할 것인지 Yes | No
No
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: No
3-2. 비밀번호 설정

New password:

Re-enter new password:
3-3. 사용자 설정

Remove anonymous users? 사용자에 대한 설정을 묻는다.
Yes 일 경우 : -u(user) 옵션 필요 ex) mysql -u root -p
No 일 경우 : -u(user) 옵션 필요 없음 ex) mysql
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Yes
3-4. 원격 접속 설정

Remove anonymous users? (Press y|Y for Yes, any other key for No) 다른 IP에서 root 아이디로 원격접속을 허용하는지에 대한 설정을 묻는다.
Yes 일 경우 : 원격접속 불가능
No 일 경우 : 원격접속 가능
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : No
3-5. TEST 데이터베이스 설정

Remove test database and access to it? (Press y|Y for Yes, any other key for No)
TEST 데이터베이스를 설정을 묻는다.
Yes 일 경우 : Test 데이터베이스 제거
No 일 경우 : Test 데이터베이스 유지
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : yes

- Dropping test database...
Success.

 - Removing privileges on test database...
Success.
3-6. 변경된 권한을 테이블에 적용여부 설정

Reloading the privilege tables will ensure that all changes made so far will take effect immediately
변경된 권한을 테이블에 적용하는 설정에 대한 질문
Yes 일 경우 적용
No 일 경우 미적용
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : yes
3-7. 설정 완료

All done!

 

4. 서버 접속

$ mysql -u root -p

비밀번호는 강화된 비밀번호를 사용했습니다.

 

5. 접속 허용을 위한 설정

$ mysql --verbose --help | grep my.cnf

위의 명령어를 입력하면 4개의 파일이 나옵니다. 처음에는 파일을 검색하는 명령어를 사용하였는데 도무지 안나와서 이 방법을 써보니 찾게 되었습니다. 

 

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /opt/homebrew/etc/my.cnf
  • ~/.my.cnf

총 이렇게 4개의 파일이 나오면 저의 경우 /opt에 들어간 my.cnf 파일이 존재하는 것을 확인하였습니다. 이 파일을 열어 세팅을 진행합니다. 

$ vi /opt/homebrew/etc/my.cnf

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
---------- 변경 전 -----------
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
---------- 변경 후 -----------
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0

여기서 접근을 전체 허용하기 위해 bind-address 의 내용을 0.0.0.0 (전체공개)로 해줍니다. 

그리고 서비스를 재시작 합니다. 

$ brew services restart mysql

 

6. 새로운 MySQL 접속 계정 생성

$ mysql -u root -p
비밀번호 입력

mysql > create user 'username'@'%' identified by '!@#*()!@#asdqwe';
mysql > grant all privileges on *.* to 'username'@'%';

create user 문을 입력하여 계정을 생성합니다. 여기서 username은 사용자 계정명이며 @ 뒤에 붙는 '%'가 의미하는 바는 접속허용 IP를 전체로 한다는 뜻입니다. 하고 grant all privileges 를 하여 권한을 부여합니다. *.* 은 접속 가능한 데이터베이스 스키마에 관한 설정이며, username 은 권한을 부여할 사용자 계정명입니다. 

 

7. 마지막으로 전체 권한을 허용한 사용자 계정/비밀번호로 Mysql Workbench 또는 Datagrip 으로 접속

 

반응형
댓글
공지사항