MySQL은 유명한 오픈소스 Database 관리 시스템인데요. 일반적으로 LAMP(Linux, Apache, MySQL, PHP/Python/Perl) stack으로 설치되서 개발자들이 이용해요.
관계형 모델과 SQL(Structured Query Language)언어를 이용해서 data를 적용하고 관리한다고 합니다.
패키지 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_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은 자동으로 실행되어야 해요.
$ 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)
mysqladmin
tool을 이용하여 로그인을 하자마자 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