DB의 경우 보통 local에 설치하기 보다는 Docker를 이용하여 Container로 관리하고는 한다.
Docker를 이미 사용하고 있다면, Docker Image를 다운받아 간편하게 사용할 수 있다.
하지만, 가끔 local 환경에 설치하고 싶을 때가 있을 수도 있다.
그런 상황을 위해 가장 흔히 사용하는 RDB인 MySQL을 설치해보자.
Amazon Linux 2023
을 기준으로 진행하였기에
Amazon Linux 1
이나 Amazon Linux 2
를 사용하는 경우 차이가 있을 수 있다.
먼저 dnf package에 mysql이 있는지 확인해보자
sudo dnf list | grep mysql
package에 mysql이 존재하는 것을 확인하였다면 설치를 진행한다.
원하는 특정 버전이 있다면, 해당 package를 가져와 해당 버전으로 설치를 진행하면 된다.
sudo dnf install mysql80-community-release-el9-1.noarch.rpm -y
sudo dnf install mysql-community-server -y
MySQL의 설치를 완료했다면 MySQL을 실행해보자
sudo systemctl start mysqld
MySQL이 정상적으로 실행중인지 확인해보자
sudo systemctl status mysqld
MySQL에 접속하기 위한 방법으로는 두가지가 있다.
계정 없이 접속하기 위해서는 /etc/my.cnf
파일을 수정해야 한다.
sudo vim /etc/my.cnf
를 통해 /etc/my.cnf
파일을 열고
[mysqld]
아래에 skip-grant-tables
문장을 추가한다.
sudo systemctl restart mysqld
를 통해 mysql server를 재시작한다.
mysql
을 입력하면 계정 없이 mysql에 접속할 수 있다.
mysql은 설치시 임시 비밀번호를 발급하여 root 계정을 생성해준다.
임시 비밀번호는 다음과 같이 확인할 수 있다.
sudo cat /var/log/mysqld.log | grep "A temporary password"
A temporary password is generated for root@localhost: XXXXXXXXXXXX
임시 비밀번호를 이용하여 mysql에 root 계정을 접속을 진행하자
mysql -u root -p XXXXXXXXXXXX
접속했다면 root 계정의 암호를 변경하자
ALTER USER 'root'@'localhost' IDENTIFIED BY '변경할 비밀번호';
MySQL 5.7.6 버전이상부터는 Password에 일정한 규칙을 강제하기 때문에
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
라는 오류를 만날 수 있다.
show variables like 'validate_password%;'
를 입력하면
Password 정책을 확인할 수 있다.
LOW인 경우 password가 최소 8자 이상을 만족해야 한다.
MEDIUM인 경우 숫자, 대문자, 소문자, 특수문자가 모두 포함되어야 한다.
STRONG인 경우 password의 substring을 dictionary file에 등록된 단어와 비교하여 등록되어 있는 경우 사용할 수 없다.
[출처: https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/validate-password-options-variables.html]
따라서 Password 정책에 맞는 비밀번호를 설정하거나
혹은 Password 정책을 낮추는 방법을 사용할 수 있다.
set global validate_password.policy=LOW;
를 입력하면
일시적으로 Password 정책을 LOW로 조정할 수 있다.
이러한 과정을 거쳐 비밀번호를 변경하는 query가 성공했다면
FLUSH PRIVILEGES;
를 통해 변경사항을 적용한다.
이렇게하면 root 계정을 설정한 비밀번호를 통해 접속할 수 있다.
mysql -u root -p '변경한 비밀번호'
MySQL 접속에 성공하였다면 root 이외에 별도의 계정을 생성해보자
create user '계정 이름'@'%' identified by '비밀번호';
'%'는 모든 host에서 접속이 가능하다는 의미이다.
localhost로 설정하면 localhost에서만 접속이 가능하다.
생성한 계정에 권한을 부여해보자
grant all privileges on *.* to '계정 이름'@'%';
ALL PRIVILEGES는 SELECT, UPDATE, INSERT, DELETE 작업 등의 모든 권한을 부여한다는 의미이다.
*.*은 모든 데이터베이스의 모든 테이블에 대한 권한을 부여한다는 의미이다.
이렇게 권한을 부여했다면 변경사항을 적용하자
FLUSH PRIVILEGES;
이렇게 생성한 계정의 정보는
use mysql;
select * from user;
을 통해 확인할 수 있다.
Host, User, Privilege 등의 다양한 정보를 확인할 수 있다.
해당 Table에 Column이 많기에 계정이 생성되었는지만 확인하고자 한다면
select user, host from user;
와 같이 필요한 column만 확인하도록 하자