
MySQL은 가장 인기 있는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS) 중 하나입니다. MySQL 8은 이전 버전에 비해 성능, 보안, 기능 면에서 크게 개선되었습니다. 이 글에서는 Ubuntu 환경에서 MySQL 8을 설치하고 원격 접속을 위한 기본 설정 방법을 안내해 드리겠습니다.
MySQL 8의 주요 개선 사항
MySQL 8은 이전 버전들과 비교하여 다음과 같은 중요한 개선 사항이 있습니다:
- 향상된 기본 문자셋: UTF8MB4가 기본 문자셋으로 설정되어 이모지와 같은 4바이트 문자를 완벽하게 지원합니다.
- 향상된 기본 Collation:
utf8mb4_0900_ai_ci
가 기본 collation으로 설정되어 정렬 및 비교 성능이 개선되었습니다. - 향상된 보안 기능: 보안 강화를 위한 다양한 기능이 추가되었습니다.
- JSON 지원 개선: JSON 데이터 타입 지원 및 관련 함수가 향상되었습니다.
- Windows 함수: 데이터 분석을 위한 다양한 윈도우 함수가 추가되었습니다.
- CTEs(Common Table Expressions): 복잡한 쿼리를 간결하게 작성할 수 있게 해주는 CTE를 지원합니다.
설치 과정
패키지 업데이트
Ubuntu에서 MySQL을 설치하기 전에 패키지 목록을 최신 상태로 업데이트합니다:
sudo apt update
MySQL 서버 설치
다음 명령으로 MySQL 서버를 설치합니다:
sudo apt install mysql-server
설치 과정 중에 비밀번호 설정 등의 프롬프트가 나타날 수 있습니다. 안전한 비밀번호를 설정하고 기억해두세요.
원격 접속 설정
기본적으로 MySQL은 로컬 접속만 허용합니다. 원격 접속을 활성화하려면 다음 단계를 따르세요:
MySQL 설정 파일 수정
MySQL 설정 파일을 열어 bind-address를 수정합니다:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
다음 줄을 찾아:
bind-address = 127.0.0.1
아래와 같이 수정합니다:
bind-address = 0.0.0.0
이 설정은 MySQL이 모든 네트워크 인터페이스에서 연결을 수신하도록 허용합니다.
MySQL 재시작
설정 변경 후 MySQL 서비스를 재시작합니다:
sudo systemctl restart mysql
root 사용자 원격 접속 설정
보안상의 이유로 MySQL은 기본적으로 root 사용자가 로컬에서만 접속할 수 있도록 제한합니다. 원격에서 root 사용자로 접속하려면 다음 단계를 따르세요:
MySQL에 root로 로그인
sudo mysql -u root -p
비밀번호를 입력합니다. 초기 설치 후 비밀번호를 설정하지 않았다면 그냥 Enter 키를 누르세요.
MySQL 사용자 확인
현재 설정된 사용자 목록을 확인합니다:
use mysql;
select host, user from user;
출력 예시:
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
원격 접속 가능한 root 계정 생성
create user 'root'@'%' identified by '안전한_비밀번호';
%
는 모든 호스트에서의 접속을 허용한다는 의미입니다. 보안을 위해 실제 환경에서는 특정 IP 주소만 허용하는 것이 좋습니다.
다시 사용자 목록을 확인하면:
select host, user from user;
출력 예시:
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
권한 부여
새로 생성한 계정에 필요한 권한을 부여합니다:
grant all privileges on *.* to 'root'@'%';
flush privileges;
*.*
는 모든 데이터베이스와 테이블에 대한 접근을 의미합니다. 실제 환경에서는 필요한 데이터베이스와 테이블에만 권한을 부여하는 것이 좋습니다.
MySQL 종료
quit
방화벽 설정
MySQL이 사용하는 기본 포트(3306)를 방화벽에서 열어줍니다:
sudo ufw allow 3306/tcp
MySQL 8의 문자셋 설정
MySQL 8의 큰 장점 중 하나는 기본 문자셋이 utf8mb4
로 설정되어 있다는 점입니다. 이전 버전에서는 utf8
이 기본이었으나, 이는 실제로 완전한 UTF-8이 아니라 3바이트 UTF-8이었습니다. utf8mb4
는 이모지와 같은 4바이트 문자를 포함한 모든 UTF-8 문자를 지원합니다.
기본 Collation 역시 utf8mb4_0900_ai_ci
로 설정되어 있어, 성능과 정확성이 향상되었습니다. 따라서 MySQL 8에서는 별도의 문자셋 설정이 필요하지 않습니다.
현재 설정 확인:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
보안 고려사항
원격 접속을 허용하는 것은 보안 위험을 증가시킬 수 있습니다. 다음 사항을 고려하세요:
- 강력한 비밀번호 사용: 추측하기 어렵고 복잡한 비밀번호를 사용하세요.
- 특정 IP 제한: 가능하면
%
대신 특정 IP 주소만 허용하세요. - SSL/TLS 암호화: 네트워크 트래픽을 암호화하도록 MySQL을 구성하세요.
- 최소 권한 원칙: 필요한 최소한의 권한만 부여하세요.
- SSH 터널링 고려: 직접적인 MySQL 접속 대신 SSH 터널을 통한 접속을 고려하세요.
결론
이제 Ubuntu에 MySQL 8이 성공적으로 설치되고, 원격 접속을 위한 기본 설정이 완료되었습니다. MySQL 8은 향상된 성능, 보안 및 기능을 제공하며, 특히 기본 UTF8MB4 문자셋은 현대 웹 애플리케이션 개발에 큰 이점을 제공합니다.
실제 프로덕션 환경에서는 보안 설정을 더욱 강화하고, 필요에 따라 성능 최적화를 진행하는 것이 좋습니다. MySQL 공식 문서를 참조하여 더 많은 설정 옵션을 확인하세요.