[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

https://hiseon.me/wp-content/uploads/2019/05/shell-mysql-init-step-1.png

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

https://hiseon.me/wp-content/uploads/2019/05/shell-mysql-init-step-2.png

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

https://hiseon.me/wp-content/uploads/2019/05/shell-mysql-init-step-3.png

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

https://hiseon.me/wp-content/uploads/2019/05/shell-mysql-init-step-4.png

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

https://hiseon.me/wp-content/uploads/2019/05/shell-mysql-init-step-5.png

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

https://hiseon.me/wp-content/uploads/2019/05/shell-mysql-init-finish.png

마지막으로 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개의 댓글