안녕하세요. 갓대희 입니다. 이번 포스팅은 [ AWS - EC2 Ubuntu에 mysql 설치하기 ] 입니다. : )
0. 버전 확인
- EC AMI는 ubuntu는 22.04를 선택하였다.
- 현재 mysql 최신 버전은 8.0.34이며, 해당 버전을 설치할 예정이다.
1. mysql 설치
1) 업데이트
sudo apt-get update
또는
sudo apt update
2) mysql-server 설치
sudo apt-get install mysql-server
또는
sudo apt install mysql-server
- y 만 입력하면 설치가 완료 된다.
- 예전 버전, 환경(aws linux ami)에서는 Password를 물어봤는데, 이번 설치엔 물어보지 않기에 따로 설치시 비번 설정을 하진 않았다.
- 설치 완료 후 MySQL서비스가 자동으로 시작된다. MySQL 서러버 실행 여부를 확인해보자.
sudo systemctl status mysql
3) 안전한 MySql 설치
- 데이터베이스 서버 보안을 쉽게 개선할 수 있는 mysql_secure_installation이라는 스크립트가 함께 제공 된다.
- 하기 명령어를 통해 설치해보자.
sudo mysql_secure_installation
3-1) 사용자의 암호 강도를 테스트, 보안을 향상을 위한 VALIDE PASSWORD PLING을 구성하라는 메시지가 표시된다. 이왕이면 강력한 보안설정을 적용하도록 해보자. y를 누른다.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y
3-2) 암호 유효성 검사 정책에는 낮음, 중간, 강력의 세 가지 수준이 있다. - 나의 경우 강력한 2번을 사용하게 설정 하였다.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
3-3) 익명 사용자 삭제 여부 : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
3-4) root 사용자의 원격 접속 허용 여부 : n
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :n
3-5) test database는 삭제.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
3-6) 권한 테이블을 다시 로드 : y
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
4. MySql Databse 로그인
- 나와 같은 경우 하기와 같은 에러 메세지가 확인 되었었다. (설정시 비번 설장하는 부분도 없었다.)
ubuntu@gdh-web:/usr/bin$ cat /var/log/mysql/error.log
root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
- 다음 명령어를 통해 접속할 수 없었다.
sudo mysql -u root -p
- 하기와 같이 입력하여 접속
- 사실 root 계정은 사용하지 않을꺼지만 일단 예전에 설정했던것과 같이 비밀번호도 변경 해두었다.
sudo mysql -uroot
5. 계정 생성
- 데이터 베이스 변경
use mysql;
- 계정 조회
select host, user, plugin, authentication_string from user;
- 내부ip(localhost) 접속 가능 계정 생성.
CREATE USER '계정아이디'@'localhost' IDENTIFIED BY '비밀번호';
- 외부ip 접속 가능 계정 생성.
CREATE USER '계정아이디'@'%' IDENTIFIED BY '비밀번호';
- 계정 권한 부여 (일단 mysql 설명하는 내용이 아니니 모든 db, 모든 권한 부여)
GRANT ALL PRIVILEGES ON *.* TO '계정아이디'@'호스트';
- 권한 적용 완료.
FLUSH PRIVILEGES;
- 계정 생성 및 권한 부여 확인
SHOW GRANTS FOR '계정아이디'@'호스트';
- exit로 빠져 나간다.
6. 외부 접속 가능하도록 설정 변경
- aws 인바운드 규칙 3306 추가
- mysql 설정 파일 변경
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
- 우분투가 아닌 경우
sudo vi /usr/local/etc/my.cnf
- 현재 mysqlx-bind-address, bind-address : 127.0.0.1
- mysqlx-bind-address, bind-address 모두 0.0.0.0 으로 변경 후 :wq로 저장