[MySQL]MySQL 우분투 20.04 설치

Hyeseong·2020년 12월 22일
2

들어가기 앞서

MySQL은 유명한 오픈소스 Database 관리 시스템인데요. 일반적으로 LAMP(Linux, Apache, MySQL, PHP/Python/Perl) stack으로 설치되서 개발자들이 이용해요.
관계형 모델과 SQL(Structured Query Language)언어를 이용해서 data를 적용하고 관리한다고 합니다.

조건사항

  • ubuntu 20.04
  • MySQL 8.0

MySQL 설치

패키지 index 업데이트를 할게요.
update : 패키지 저장소의 말그대로 index를 최신화 시키는것.
upgrade : 설치된 패키지들을 실제 업그레이드를 진행함

$ sudo apt(or apt-get) update

$ sudo apt(or apt-get) upgrade

mysql-server설치!

$ sudo apt install mysql-server

MySQL 설정

mysql 보안 설정을 위해 mysql_secure_installation을 실행할게요.

$ sudo mysql_secure_installation

충분히 강한 패스워드를 생성할 수 있는 플러그인을 활성화 하는지 묻는 내용으로, No 를 입력하여 넘어갑니다.(원칙적으로는 yes이나 yes를 하면 가벼운 패스워드를 적용할수 없으므로)

MySQL에서 사용될 패스워드를 묻는 질문으로, 데이터베이스 최고 관리자 권한 패스워드입니다. 패스워드를 두 번 입력합니다.

다음은 익명의 사용자를 제거하는지 묻는 내용으로 y를 입력하여, 익명 사용자를 제거합니다.

최고 관리자 권한으로 외부 로그인을 허용하지 않을 것인지 묻는 내용입니다. 사진은 y이지만 우리는 n을 선택합니다.

위의 화면은 test 데이터베이스를 삭제할지 묻는 내용으로, y를 입력하여 삭제합니다.

마지막으로 privileges table을 다시 로드할지 묻는내용으로 y를 입력하여 다시 로드합니다.

그리고 아래의 명령어로 MySQL 데몬을 다시 실행합니다.

$ sudo /etc/init.d/mysql restart

유저 생성 및 권한 부여

mysql을 실행해 볼게요.

$ sudo mysql

만약 위와 같은 방법으로 접속에 문제가 있다면 아래 방법으로 root 계정 로그인을 시도해보세요.

$ mysql -u root -p

일단 MySQL 접속을 하였다면 새로운 유저 생성을 할수 있어요.

새로운 유저 생성

mysql> CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

CREATE USER 뒤에는 username을 적고바로 @사인 그리고 해당 username이 연결될 'host'를 작성해줍니다.

만약 로컬로 사용할 거라면 'localhost'로 host를 작성하면 되요.

그리고 MySQL에서 권장하는 authentication plugin을 사용해서 caching_sha2_password 기능으로 더 안전한 인증처리를 구현할 수 있어요.

사용예시

CREATE USER 'sammy'@'localhost' 
IDENTIFIED BY 'password';

권한부여

유저 권한을 부여하는 문법이에요.

GRANT PRIVILEGE ON database.table TO 'username'@'host';

PRIVILEGE value는 특정 혹은 모든 DB, Table에 명시된 권한을 의미해요. 한명의 유저에게 콤마(,)로 구분하여 2개 이상의 권한을 줄수도 있어요.

더불어 모든 권한을 별표(*)를 사용하여 줄수도 있어요.

참고: https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#privileges-provided-summary

localhost에 국한에 sammy라는 유저에 권한을 부여한 예시에요.

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

일반유저에게 root권한 부여

특정한 상황이 아니라면 일반적인 경우라면 이렇게 일반 유저에게 모든 권한을 부여하게 될 경우 잠깐의 실수로 DB에 돌이킬수 없는 경우가 발생되요. (예. 의도치 않은 데이터,테이블, DB등의 변경, 삭제, 생성등)

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

그런 다음 FLUSH PRIVILEGES명령 을 실행하는 것이 좋습니다 . 이렇게하면 이전 CREATE USER및 GRANT명령문 의 결과로 서버가 캐시 한 모든 메모리가 해제됩니다 .

FLUSH PRIVILEGES;

이후 MySQL 클라이언트를 종료해주세요.

exit

유저 로그인

mysql -u sammy -p

이 -p플래그는 MySQL 클라이언트가 인증을 위해 MySQL 사용자의 비밀번호를 묻는 메시지를 표시합니다.

MySQL TEST

설치 방법에 관계없이 MySQL은 자동으로 실행되어야 해요.

$ systemctl status mysql.service

아래와 같은 비슷한 출력이 나타나야해요.

Output
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago
   Main PID: 10382 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 1137)
     Memory: 370.0M
     CGroup: /system.slice/mysql.service
             └─10382 /usr/sbin/mysqld

만약 안되면 mysql-server를 다시 돌려보죠.

$ sudo service mysql-server start(or restart)

mysqladmintool을 이용하여 로그인을 하자마자 mysql의 버전정보를 출력하면서 진행할수 있어요.

osori@DESKTOP-S56SN28:~$ sudo mysqladmin -p -u sammy version
Enter password:
mysqladmin  Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version          8.0.22-0ubuntu0.20.04.3
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 14 hours 16 sec

Threads: 1  Questions: 24  Slow queries: 0  Opens: 161  Flush tables: 4  Open tables: 64  Queries per second avg: 0.000
profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글