0. 개요
Application 서버 환경 구축에 이어서 DB서버에 MySQL을 설치하고 설정해 보도록 하겠습니다.
1. 설치할 버전 확인하기
APT로 설치
apt 저장소에는 5.7버전으로, 현재 8버전까지 릴리즈 된 것에 비해 상당히 버전이 낮습니다.
참고로, 8버전은 16년도에 첫 릴리즈 되었습니다 [릴리즈 정보 확인하기]
5.7버전은 너무 낮다고 생각이 되어서, 8버전을 설치해보도록 하겠습니다.
우선 릴리즈된 버전을 확인합니다. [APT Repo MySQL 확인]
0.8.25-1로 설치하면 되겠군요.
2. MySQL APT 저장소 추가
$ wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.25-1_all.deb
$ sudo dpkg -i mysql-apt-config_0.8.25-1_all.deb
위 명령어를 실행하면 아래와 같이 프롬포트가 열립니다.
그냥 OK를 선택해 주면 됩니다.
3. GPG키 등록
직접 등로한 mysql APT 저장소에서 패키지를 다운받기 위해 PGP키를 등록해야 합니다.
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8C718D3B5072E1F5
4. 시스템 패키지 업데이트
등록한 MySQL APT repo을 읽어오기 위해 아래의 명령어를 입력합니다.
$ sudo apt-get update
* GPG키를 등록하지 않으면 아래의 에러가 발생하게 되므로, 꼭 키를 등록해 주세요.
W: GPG error: http://repo.mysql.com/apt/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29
E: The repository 'http://repo.mysql.com/apt/ubuntu bionic InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
해당 명령어를 실행 후, 아래와 같이 레포지토리가 추가되는걸 확인해 주세요.
repo가 추가가 안된상태에서 apt install 진행시 낮은 버전으로 설치되게 됩니다.
제가 그래서 지금 삭제하고 재설치 중입니다 ㅠㅠ
5. APT로 MySQL 설치
$ sudo apt-get install mysql-server
설치가 완료되면 root 계정해서 사용할 비밀번호를 입력하라고 프롬포트창이 뜹니다.
총 두번 입력해주면 됩니다.
입력을 완료하면 아래의 프롬포트 창이 출력됩니다.
MySQL8부터 SHA-256기반의 인증방법을 사용한다는 안내 문구입니다.
간추려서 번역하면 다음과 같습니다.
MySQL 8버전 부턴 SHA256기반의 인증 방법을 새롭게 사용합니다.
따라서 커넥터 및 클라이언트도 이에 대응되는 버전을 사용해야 합니다.
만약 기존 버전과 호환성을 유지하려면, 인증방법을 mysql_native_password로 설정해야 하며,
이 변경내용은 /etc/mysql/mysql.conf.d/default-auth-override.cnf에 저장됩니다.
설치 후에는 default_authentication_plugin 서버 설정을 설정하여 기본값을 변경할 수 있습니다.
OK를 눌러서 넘어가게 되면 인증방법을 선택하는 화면이 나옵니다.
음.. MySQL이 8버전이 16년도부터 지원됬기도 하고, 구글링 해보니 JDBC와 DataGrip도 무난하게 지원해주는것으로 보여서 강력한 비밀번호 암호화 방법을 사용해 보기로 했습니다. 수 틀려도 설정에서 수정할 수 있으니 크게 걱정은 하지 않겠습니다.
6. 안전한 MySQL 설치 설정
설치를 완료했다면, 다음 명령어를 이용한 보안설정이 필요합니다.
sudo mysql_secure_installation
위 명령어 입력 후, root pw를 입력하면 됩니다. 그럼 질문을 여러개 받게 되는데요,
질문들과 제 응답들은 아래와 같습니다.
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?
VALIDATE PASSWORD COMPONENT는 암호의 강도를 확인하고 사용자가 안전한 암호만 설정할 수 있도록 하는 데 사용됩니다. 이 기능을 설정하시겠습니까?
Press y|Y for Yes, any other key for No: y
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: 1
Change the password for root ?
((Press y|Y for Yes, any other key for No) : n
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.
기본적으로 MySQL 설치에는 익명 사용자가 있어서 사용자 계정을 만들 필요 없이 누구나 MySQL에 로그인할 수 있습니다. 이는 테스트 목적으로만 사용되어야 하며, 설치를 보다 원활하게 하기 위한 것입니다. 프로덕션 환경으로 이동하기 전에 이 사용자를 삭제해야 합니다.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network.
일반적으로, root 사용자는 'localhost'에서만 접속할 수 있어야 합니다. 이렇게 하면 다른 사람들이 네트워크에서 root 암호를 추측할 수 없게 됩니다.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
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.
기본적으로 MySQL은 누구나 접근할 수 있는 'test'라는 이름의 데이터베이스를 가지고 있습니다. 이는 테스트 용도로만 사용되며, 프로덕션 환경으로 전환하기 전에 삭제해야 합니다.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 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
7. MySQL 로그인하기
우선 기본적인 설정은 마무리되었습니다. 아래의 명령어를 입력하고 비밀번호를 입력해 db에 접속해 보겠습니다.
$ mysql -u root -p
8. 원격 접속용 계정 생성하기
위에서 root 계정의 접속은 localhost만으로 제한했습니다.
따라서 원격접속용 계정을 추가로 생성해야 합니다.
계정 생성
CREATE USER 'dev'@'%' IDENTIFIED BY 'pw';
'dev'@'%'에서 dev는 접속할 id이며, @'%'는 모든 ip에서 접근을 허용한다는 뜻입니다.
pw에는 접속시 사용할 비밀번호를 입력하면 됩니다.
* 모든 ip에서 접근을 허용하는 이유는, 제 서버 구조떄문에 그렇습니다.
db 서버는 인바운드 설정이 내부접속 또는 VPN 접근만을 허용했습니다.
따라서, 모든 ip에서 접근을 허용을 해도 내부접속이나 VPN접속밖에 하지 못합니다.
권한 할당
저는 모든 권한을 부여했습니다.
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%'; //권한 부여
FLUSH PRIVILEGES; // 적용
생성 확인
mysql 스키마에서 user테이블에서 정상적으로 사용자가 추가되었는지 확인해 봅시다.
use mysql;
select host, user, plugin, authentication_string FROM user where user = 'dev';
접속 테스트를 위해 datagrip을 통해 dev 계정으로 접속 테스트를 진행해 보았습니다.
정상적으로 접속되었습니다. 휴~
PS. MySQL 서비스 관련 명령어들
sudo systemctl start mysql.service //구동
sudo systemctl stop mysql.service // 정지
sudo systemctl restart mysql.service // 재시작
sudo systemctl status mysql.service //상태 확인
'Infra' 카테고리의 다른 글
Spring boot 서버를 쉘스크립트 배포하기 (0) | 2023.06.05 |
---|---|
[단축 URL 프로젝트 URLumberjack] NCP Application서버 구축(JAVA, Gradle, Docker 설치) (0) | 2023.04.30 |
[NCP] Naver Cloud Platform VPN 발급 및 접속방법 (0) | 2023.04.30 |
[단축 URL 프로젝트 URLumberjack] NCP 인스턴스 생성 (0) | 2023.04.30 |
[단축 URL 프로젝트 URLumberjack] - NCP 스펙 정의 (0) | 2023.04.30 |