MySQL은 오픈소스 기반의 강력하고 널리 사용되는 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 데이터를 하나 또는 여러 개의 테이블로 구성하며, 각 데이터 유형이 서로 연관될 수 있도록 관리합니다. SQL(Structured Query Language)은 이러한 RDBMS와 함께 작동하며, 대량의 데이터를 저장하거나 관리해야 할 때 관계형 데이터베이스와 SQL이 폭넓게 활용됩니다.
이 글에서는 Ubuntu 18.04 서버에 MySQL을 구성하는 방법을 단계별로 소개합니다. 인증 활성화 방법과 서비스 관리 방법까지 다루며, 마지막에는 서비스를 직접 테스트하여 설정이 성공적으로 완료되었는지 확인하는 방법까지 함께 알아봅니다.
1단계: MySQL 클라이언트 설치
서버에 원격으로 접속하려면 먼저 mysql-client를 설치합니다:
sudo apt install mysql-client -y
클라이언트 버전을 확인하여 설치가 정상적으로 완료되었는지 검증합니다:
mysql -V
출력 결과:
mysql Ver 8.0.28-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
이제 아래 명령어를 사용해 MySQL 서버에 원격 연결을 설정할 수 있습니다:
mysql -u <username> -p <password> -h HOSTNAME_OR_IP
2단계: MySQL 서버 설치
MySQL을 설치하기 전에 Ubuntu 서버가 올바르게 설치 및 구성되어 있는지 먼저 확인하세요. Ubuntu 18.04 서버는 기본 저장소에 MySQL 5.7 버전을 포함하고 있습니다. 아래 apt 명령으로 시스템 패키지를 최신 상태로 업데이트합니다:
sudo apt update
그다음 아래 명령어로 MySQL 서버 패키지를 설치합니다:
sudo apt install mysql-server -y
3단계: MySQL 구성
사이버 보안 위협이 끊임없이 존재하는 요즘, 서버 설치 후 기본 설정값을 변경하는 것은 필수적인 보안 습관입니다. 이 섹션에서는 원격 root 로그인 허용, 기본 사용자 계정 유지 등과 같은 안전하지 않은 기본 옵션을 제거하기 위한 MySQL 서버 구성 방법을 안내합니다. MySQL은 간단한 보안 스크립트 실행만으로 이러한 변경 작업을 자동으로 처리해 주므로 매우 편리합니다.
sudo mysql_secure_installation
스크립트가 여러 가지 질문을 하며 Yes/No 답변을 요구합니다. 예를 들어 첫 번째 질문은 비밀번호 검증 플러그인(Validate Password Plugin)을 설정할지 묻는데, Yes를 입력하고 진행합니다.
다음 질문에서는 MySQL root 계정의 비밀번호를 설정하게 됩니다. Validate Password 플러그인을 활성화하면 세 가지 수준의 비밀번호 보안 정책과 길이 기준에 따라 비밀번호 강도를 설정할 수 있다는 점을 눈여겨보세요.
원하는 강도 수준의 숫자를 입력하면, 시스템이 새 비밀번호 입력과 확인을 위한 재입력을 요청합니다.
비밀번호 설정이 완료되면 비밀번호 강도가 화면에 표시되고, 계속 진행할지 여부를 묻습니다.
이후 다음과 같은 추가 질문들이 이어집니다:
- 익명 테스트 사용자 제거
- root 사용자의 원격 로그인 비활성화
- 테스트 데이터베이스 삭제
- 권한 테이블을 다시 로드하여 모든 변경 사항 저장
Y를 입력하여 기본 보안 규칙 설정을 계속 진행합니다.
참고로 MySQL 5.7.6 미만 버전에서는 데이터 디렉터리를 수동으로 초기화해야 하지만, 그 이후 버전에서는 아래 명령어를 실행하면 됩니다:
mysqld --initialize
4단계: MySQL 사용자 인증 조정
MySQL 사용자 계정에 비밀번호를 설정했더라도, 기본 인증 설정은 연결 시점에 비밀번호 사용을 비활성화합니다. 대신 auth_socket 플러그인을 통해 사용자를 자동으로 인증합니다. 이 플러그인은 사용 편의성 면에서는 장점이지만, 원격 클라이언트에서 데이터베이스에 접근해야 하는 경우에는 실용적이지 않습니다.
외부 프로그램에서 비밀번호 없이 데이터베이스에 접근하면 작업 과정이 오히려 복잡해질 수 있으므로, 이 섹션에서는 연결 시점에 사용자를 인증하는 두 가지 방법을 정리했습니다.
1. 비밀번호를 사용한 Root 사용자 인증
비밀번호 기반 인증을 사용하려면 플러그인을 "auth_socket"에서 "mysql_native_password"로 변경해야 합니다. 먼저 sudo mysql 명령으로 MySQL 프롬프트 화면을 열고, 현재 사용자 인증에 어떤 플러그인이 사용되고 있는지 확인합니다:
SELECT user, authentication_string, plugin, host FROM mysql.user;
위 결과에서 root 클라이언트가 "auth_socket" 플러그인으로 인증되고 있음을 확인할 수 있습니다. root 클라이언트의 비밀번호 기반 인증을 활성화하려면 ALTER USER 문을 사용해 "mysql_native_password" 플러그인을 지정합니다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
위 변경 사항을 아래와 같이 저장합니다:
FLUSH PRIVILEGES;
"FLUSH PRIVILEGES" MySQL 문은 ALTER, INSERT, UPDATE, DELETE 절로 데이터베이스 테이블에 적용된 변경 사항을 저장하는 역할을 합니다.
이제 각 사용자에게 적용된 인증 방식을 다시 확인하고, root 클라이언트가 더 이상 "auth_socket" 플러그인을 사용하지 않는지 검증하기 위해 동일한 명령을 다시 실행합니다:
SELECT user,authentication_string,plugin,host FROM mysql.user;
이제 root 사용자는 아래 명령으로 비밀번호 인증을 통해 서버에 접속할 수 있습니다:
sudo mysql -u root -p
2. 전용 사용자 생성
mysql_native_password를 사용하지 않고 인증을 활성화하는 또 다른 방법은 전용 사용자를 생성하는 것입니다:
sudo mysql
새 계정을 만들고 모든 권한을 부여하여 해당 사용자에게 관리자 수준의 권한을 할당한 뒤, MySQL 프롬프트를 종료합니다. 아래 SQL 쿼리를 하나씩 순서대로 실행합니다:
CREATE USER 'ubuntu'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'ubuntu'@'localhost' WITH GRANT OPTION;
exit
systemctl로 MySQL 서비스 관리 및 테스트
systemctl enable 명령을 사용해 Ubuntu 서버 부팅 시 MySQL 서비스가 자동으로 시작되도록 설정합니다:
sudo systemctl enable mysql
또한 아래 명령어로 서버가 정상적으로 작동 중인지 테스트할 수 있습니다:
sudo systemctl status mysql
또는
sudo systemctl status mysql.service
MySQL 설치 후에는 서비스가 자동으로 시작되지만, 만약 시작되지 않았다면 아래 명령어로 서비스를 직접 시작할 수 있습니다:
sudo systemctl start mysql
Ubuntu에서 MySQL 서버 시작하기
MySQL은 오픈소스 기반으로 사용자 친화적이며, 확장 가능하고 견고한 데이터베이스 관리 시스템입니다. 또한 LAMP/LEMP 스택 모델, 즉 웹 애플리케이션 기술의 핵심 구성 요소이기도 합니다. 최신 버전의 RDBMS는 간단한 설치와 손쉬운 구성을 제공합니다.
이 글을 따라 하면 MySQL의 기본적인 환경을 구축할 수 있으며, MySQL의 작동 방식을 학습하는 좋은 출발점이 될 것입니다. 또한 기본 설정의 보안 취약점을 방지하기 위한 초기 보안 조치들도 함께 다루었습니다. 고급 보안 팁을 추가로 참고하면 MySQL을 더욱 안전하게 운영하는 방법까지 익힐 수 있습니다.