Ubuntu에서 MySQL 8 설치 및 원격 접속 설정하기

MySQL

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%';

보안 고려사항

원격 접속을 허용하는 것은 보안 위험을 증가시킬 수 있습니다. 다음 사항을 고려하세요:

  1. 강력한 비밀번호 사용: 추측하기 어렵고 복잡한 비밀번호를 사용하세요.
  2. 특정 IP 제한: 가능하면 % 대신 특정 IP 주소만 허용하세요.
  3. SSL/TLS 암호화: 네트워크 트래픽을 암호화하도록 MySQL을 구성하세요.
  4. 최소 권한 원칙: 필요한 최소한의 권한만 부여하세요.
  5. SSH 터널링 고려: 직접적인 MySQL 접속 대신 SSH 터널을 통한 접속을 고려하세요.

결론

이제 Ubuntu에 MySQL 8이 성공적으로 설치되고, 원격 접속을 위한 기본 설정이 완료되었습니다. MySQL 8은 향상된 성능, 보안 및 기능을 제공하며, 특히 기본 UTF8MB4 문자셋은 현대 웹 애플리케이션 개발에 큰 이점을 제공합니다.

실제 프로덕션 환경에서는 보안 설정을 더욱 강화하고, 필요에 따라 성능 최적화를 진행하는 것이 좋습니다. MySQL 공식 문서를 참조하여 더 많은 설정 옵션을 확인하세요.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤