MySQL 8.0 데이터베이스 설치
1. 공식 YUM 저장소 추가 및 GPG 키 구성
CentOS 7의 기본 저장소에는 MySQL 8.0이 포함되어 있지 않으므로, Oracle에서 제공하는 공식 저장소를 시스템에 등록해야 합니다.
# YUM 캐시 초기화 및 wget 설치
sudo yum clean all
sudo yum install -y wget
# MySQL 8.0 저장소 패키지 다운로드 및 등록
REPO_RPM="mysql80-community-release-el7-11.noarch.rpm"
wget -q https://dev.mysql.com/get/${REPO_RPM}
sudo rpm -Uvh ${REPO_RPM}
# RPM 설치 시 NOKEY 경고가 발생할 경우 GPG 공개키 가져오기
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
2. MySQL 서버 패키지 설치 및 서비스 활성화
저장소가 정상적으로 추가되었다면 MySQL 서버 코어 패키지를 설치하고, 시스템 부팅 시 자동으로 실행되도록 서비스를 구성합니다.
# MySQL 커뮤니티 서버 설치
sudo yum install -y mysql-community-server
# mysqld 서비스 시작 및 부팅 자동 실행 등록
sudo systemctl enable --now mysqld
3. 초기 루트 비밀번호 확인 및 보안 설정
MySQL 8.0은 첫 실행 시 임시 루트 비밀번호를 자동 생성하여 로그에 기록합니다. 이 비밀번호를 추출한 후 접속하여 새 비밀번호로 변경해야 합니다.
# 로그 파일에서 임시 비밀번호 추출
sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'
추출한 임시 비밀번호를 사용하여 클라이언트로 접속합니다.
mysql -u root -p
접속 후 아래 SQL 문을 실행하여 루트 비밀번호를 업데이트합니다.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewSecureP@ssw0rd!2024';
MySQL 8.0 완전 제거 (Uninstall)
시스템에서 MySQL을 완전히 삭제하고 초기화하려면 다음 순서로 작업을 진행합니다.
1. 서비스 중지 및 패키지 제거
# MySQL 데몬 중지
sudo systemctl stop mysqld
# 설치된 모든 MySQL 관련 패키지 검색 및 일괄 삭제
rpm -qa | grep -i mysql | xargs sudo yum remove -y
2. 잔여 데이터 및 설정 파일 삭제
패키지만 제거해서는 데이터베이스 파일과 설정이 남아있을 수 있으므로, 관련 디렉토리를 수동으로 제거합니다.
# 데이터 디렉토리, 설정 파일, 로그 파일 강제 삭제
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/my.cnf /etc/my.cnf.d
sudo rm -rf /var/log/mysqld.log
# YUM 캐시에 남은 MySQL 메타데이터 정리
sudo rm -rf /var/cache/yum/x86_64/7/mysql*
추가 구성 및 문제 해결
1. 비밀번호 유효성 검사 정책(Policy) 우회 및 조정
MySQL 8.0은 기본적으로 validate_password 컴포넌트가 활성화되어 있어, 복잡도가 낮은 비밀번호로 변경 시 오류가 발생할 수 있습니다. 개발 환경 등에서 정책 완화가 필요한 경우 다음 명령어를 사용합니다.
-- 현재 적용된 비밀번호 유효성 검사 변수 확인
SHOW VARIABLES LIKE 'validate_password.%';
-- 비밀번호 강도 정책을 LOW로 하향 조정
SET GLOBAL validate_password.policy=LOW;
-- 최소 비밀번호 길이 요구 사항을 6자로 변경
SET GLOBAL validate_password.length=6;
2. 원격 접근을 위한 관리자 계정 생성
보안상 root 계정의 원격 접근을 허용하는 것보다, 별도의 관리자 계정을 생성하여 외부에서 접속하도록 구성하는 것이 권장됩니다.
-- 모든 외부 IP에서 접속 가능한 관리자 계정 생성
CREATE USER 'db_admin'@'%' IDENTIFIED BY 'R3mote!Adm1n#Pass';
-- 생성된 계정에 전체 데이터베이스 관리 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'db_admin'@'%' WITH GRANT OPTION;
-- 권한 테이블 변경 사항 즉시 적용
FLUSH PRIVILEGES;