본문 바로가기
프로젝트 개발 기록/[개발] trouble shooting

[MySQL 8.0] 초기 세팅

by HelloJudy 2022. 10. 19.

이번에 MySQL 세팅을 다시 하면서 다시 검색하는 번거로움을 줄이고자 정리해본다!

 

1. 서버 접속

$ mysql -u root -p
  • 이때 -u 옵션은 user를 뜻하고 -p 옵션은 password를 뜻한다.
  • 이때 접속하고자 하는 사용자를 선택한다.

 

2. 사용자 추가

CREATE USER 'user-name'@'localhost' IDENTIFIED BY 'user-password'
FLUSH PRIVILEGES;

 

이렇게 수정을 해주고 FLUSH PRIVILEGES; 명령어를 사용하게 되는데 FLUSH는 버퍼 내용을 지우고 버퍼링된 데이터를 파일에 저장해준다. 그래서 위에서 변경한 내용이 적용시켜 주는 명령어이다.

 

 

3. 유저 정보 확인하기

SELECT USER, HOST FROM mysql.user;

 

 

3. 사용자에게 DB 권한 부여

GRANT ALL PRIVILEGES ON 'DB명'.* to 'user-name'@'localhost';

 

이렇게 생성한 사용자를 localhost로 지정하면 내부에서 해당 db에 접속할 수 있다.

그러면 workbench 등 외부에서 접속할 때는 어떻게 해야할까.

 

이때는 해당 ip에서 접속 가능한 Host를 만들거나 모든 접속이 가능한 % Host를  만들면 된다.

 

 

4. 계정 비밀번호 변경

UPDATE mysql.user SET authentication_string = PASSWORD('NEW_USER_PASSWORD')
WHERE User = 'user-name' AND Host = 'localhost';
FLUSH PRIVILEGES;

위와 같은 명령어를 사용했을 때 오류가 발생했다.

 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

 

그리고 알게 된 사실은  PASSWORD 라는 내장함수가 현재 버전에서는 삭제되었다는 것이었다.

그래서 위의 방법은 5.7.5 이전 버전에서 사용할 수 있다.

 

ALTER USER '유저명' IDENTIFIED WITH caching_sha2_password BY '변경할비밀번호';

다음 명령어로 비밀번호를 변경할 수 있었다.

 

 

5. 사용자를 외부에서도 접근할 수 있도록 추가

새로 만든 유저가 외부에서 접근이 되지 않는 경우도 있었다.

그래서 이때는 host를 localhost가 아닌 % 호스트로 추가해주어 해결할 수 있다.

 

CREATE USER 'new-user'@'%' IDENTIFIED BY 'new-password';
GRANT ALL PRIVILEGES ON 'DB명'.* TO 'new-use'@'%';
FLUSH PRIVILEGES;

 

 

6. 비밀번호 정책 변경하기

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

비밀번호를 수정할 때 다음과 같은 오류가 생겼다.

 

그래서 password와 관련된 정책에 대해서 조회해보자.

 

SHOW VARIABLES LIKE 'validate_password%'

현재 나는 policy를 LOW로 변경한 상태이다.

 

다시 MEDIUM으로 변경하기 위해서는 다음 명령어를 사용하면 된다.

SET GLOBAL validate_password.policy=MEDIUM;

 

이때 비밀번호 길이 설정이나 user_name이 패스워드에 있는지 확인 여부 등 여러가지 세부 설정을 변경할 수 있다.

 

 

7. csv파일 테이블에 넣기

csv 파일을 넣어줄 때 다음과 같은 오류가 생겼다.

 

ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides  

그래서 아래 명령어를 통해 local_infile이 on 상태인지 확인했다.

 

show global variables like 'local_infile';

 

그 다음 이렇게 local_infile을 허락해준다.

set global local_infile=true;

 

이때 접속 방법은 두가지가 있다.

 

sudo mysql --local-infile=1 -u super -p
mysql --local_infile -u root -p

 

 

반응형

댓글