우분투에서 MySQL 에러 해결하기

Ji_min·2021년 3월 1일
0

우분투 서버에 mysql을 설치하고 실행시키려고 하니 다양한 에러가 뜨면서 제대로 실행되지 않았다. 다음은 디버깅 기록이다.


1. mysql 서버 접속 에러 해결하기

1. mysql 서버 설치

sudo apt install mysql.server

2. mysql 2002 에러

  • mysql -u root -p 입력
  • ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 라는 에러가 뜸
  • 원인 : mysql 서버를 실행시키지 않았기 때문
  • 해결 : sudo service mysql start 로 서버 실행

3. mysql 28000 에러

  • 다시 mysql -u root -p 입력
  • MySQL ERROR 1045 (28000): Access denied for user 'user_name'@'localhost' (using password: YES) 라는 에러가 뜸
  • 원인 : 비밀번호 타입 문제
  • 해결
    • sudo mysql -u root로 서버에 접속
    • 일단 혹시라도 root의 비밀번호가 설정되어 있는지 확인 (스킵 가능) : SELECT User, authentication_string FROM mysql.user;
    • 설정되어 있지 않아서 authentication_string이 비어 있는 것을 확인했다.
    • 이제 비밀번호 타입을 변경 : SELECT User, plugin FROM mysql.user;
    • 나온 값을 보면 root의 비밀번호 타입이 auth_socket으로 설정되어 있다. 얘를 mysql_native_password로 바꿔줘야 한다.
    • UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root'; 입력
    • 변경사항 컨펌하기 : flush privileges;
    • 변경이 잘 되었는지 확인하기 : SELECT User, plugin FROM mysql.user;
    • 이제 \q를 입력해서 shell에서 나간 다음, mysql -u root -p를 입력하고 잘 들어가지는 것을 확인했다.

2. mysql shell에서 db와 user 만들기

1. db 만들기

CREATE DATABASE db_name;   // db 만들기
DROP DATABASE db_name;     // db 삭제하기
show databases;            // 모든 db 확인하기
use db_name;               // db 선택하기
show tables;    	   // 테이블 확인하기
show variables like 'datadir';  // db 저장 경로 확인하기(/var/lib/mysql/)

2. user 만들기

해야 할 작업은 다음의 두 가지이다.

  • 새로운 유저 만들기
  • 새로운 유저에게 db의 권한 부여하기
  1. 새로운 유저 만들기
// 새로운 유저 만들기(네이밍 옵션 : @localhost - 로컬에서만 접속 가능 / @% - 외부 접속 가능)
CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'password';
// 유저 삭제하기
DROP USER 'user_name'@'localhost';
  1. 새로운 유저에게 db 권한 부여하기
// 유저 권한 확인하기
SHOW GRANTS FOR 'user_name'@'localhost';
// 모든 db에 대한 권한 부여하기
GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'localhost';
// 선택적 권한 부여하기
GRANT type_of_permission ON db_name.table_name TO 'user_name'@'localhost';
// 권한 철회하기
REVOKE type_of_permission ON db_name.table_name FROM 'user_name'@'localhost';
// 변경사항 컨펌하기
flush privileges;

참고

참고한 글

profile
Curious Libertine

0개의 댓글