MySQL 8.0에서 추가된 모든 기능

MySQL 8.0에서 추가된 모든 기능 – 기타

Estimated reading: 2 minutes 71 views

1. 기본값 변경: Binlog = ON [원본제공링크 1 2]

2. 기본값 변경: X Protocol = Enabled [원본제공링크 1]

3. 기본값 변경: master_info_repository = TABLE [원본제공링크 1 2]

4. 기본값 변경: relay_log_info_repository = TABLE [원본제공링크 1 2]

5. 기본값 변경: explicit_defaults_for_timestamp = ON [원본제공링크 1]

6. 기본값 변경: max_error_count = 1024 [원본제공링크 1]

7. 변수 이름 변경: tx_read_only -> transaction_read_only [원본제공링크 1]

8. 변수 이름 변경: tx_isolation -> transaction_isolation [원본제공링크 1]

9. 기본값 변경: max_allowed_packet = 67108864 [원본제공링크 1]

10. 기본값 변경: event_scheduler = ON [원본제공링크 1]

11. 기본값 변경: back_log = -1 (자동 크기 조정) [원본제공링크 1]

12. 기본값 변경: table_open_cache = 4000 [원본제공링크 1 2]

13. 서버에 mysqld_safe 기능 추가

[원본제공링크 1 2 3]

MySQL 8.0부터 mysqld_safe의 주요 기능이 mysqld 서버에 직접 통합되었습니다. 이로 인해 Unix 및 Unix 계열 시스템에서 MySQL 서버를 시작할 때 systemd를 사용하는 것이 권장됩니다. 이러한 변화로 인해 mysqld_safe는 더 이상 기본적으로 설치되지 않으며, 서버는 자체적으로 오류 발생 시 자동 재시작 및 런타임 정보를 에러 로그에 기록하는 기능을 수행합니다.

14. 미니멀 tarball

[원본제공링크 1]

MySQL 8.0.16부터 최소 설치(minimal install)용 타르볼이 도입되어, 디버그 바이너리를 제외하고 일반 바이너리의 디버그 심볼을 제거하여 파일 크기를 크게 줄였습니다. 이로 인해 배포 및 설치 과정이 더욱 효율적이고 신속해졌습니다.

15. 새로운 백업 락

[원본제공링크 1]

MySQL 8.0부터 백업 락(Backup Lock) 기능이 도입되어, 백업 작업 중에도 데이터 변경 작업을 허용하면서도 스키마 변경 등 중요한 작업을 제한하여 백업의 안정성을 높였습니다.

16. InnoDB 테이블스페이스에 서버 버전 저장

[원본제공링크 1]

MySQL 8.0부터 InnoDB 테이블스페이스에는 해당 테이블스페이스를 생성하거나 마지막으로 주요 업그레이드를 수행한 MySQL 서버의 버전 정보가 저장됩니다. 이 정보는 INFORMATION_SCHEMA.INNODB_TABLESPACES 테이블의 SERVER_VERSION 열을 통해 확인할 수 있습니다.

17. 복구 및 분리된 프리페어드 XA 트랜잭션에 대한 MDL 락킹 활성화

[원본제공링크 1]

MySQL 8.0.13부터 복구되거나 분리된 준비된(prepared) XA 트랜잭션에 대해 메타데이터 잠금(MDL)이 적용됩니다. 이를 통해 이러한 트랜잭션이 관련된 테이블에 대해 적절한 잠금을 유지하여 데이터 무결성을 보장합니다.

18. 외래 키에 대한 메타 데이터 락킹 지원

[원본제공링크 1]

MySQL 8.0부터 외래 키 제약 조건이 있는 테이블들 간의 메타데이터 잠금(MDL)이 확장되어, 관련 테이블에서 충돌하는 DML(데이터 조작 언어) 및 DDL(데이터 정의 언어) 작업이 동시에 실행되는 것을 방지합니다. 이를 통해 부모 테이블이 수정될 때 외래 키 메타데이터를 안전하게 업데이트할 수 있습니다.

19. 서비스 레지스트리와 컴포넌트 인프라스트럭처

[원본제공링크 1]

MySQL 8.0은 서비스 레지스트리(Service Registry)컴포넌트 인프라(Component Infrastructure)를 도입하여, 서버의 기능을 모듈화하고 확장성을 개선했습니다. 서비스 레지스트리는 모든 컴포넌트와 서비스의 의존성을 관리하며, 컴포넌트 간 상호작용은 명확히 정의된 인터페이스를 통해 이루어집니다. 컴포넌트는 INSTALL COMPONENTUNINSTALL COMPONENT 명령어로 설치 및 관리할 수 있습니다.

20. 복제 스트림을 읽기 위한 CLI 인터페이스

[원본제공링크 1]

MySQL 8.0에서는 mysqlbinlog 유틸리티를 사용하여 바이너리 로그를 읽고 분석할 수 있습니다. 이를 통해 복제 스트림의 내용을 확인하고, 특정 시점의 데이터 변경 사항을 추적할 수 있습니다.

21. 컴포넌트가 UDF를 자동으로 등록할 수 있는 UDF 등록 서비스

[원본제공링크 1]

MySQL 8.0.2부터 컴포넌트와 플러그인사용자 정의 함수(UDF)를 자동으로 등록하고 해제할 수 있는 UDF 등록 서비스가 도입되었습니다. 이를 통해 SQL 문을 사용하지 않고도 UDF를 효율적으로 관리할 수 있습니다.

22. MySQL 서버 문자열 컴포넌트 서비스

[원본제공링크 1]

ySQL 8.0.2부터 문자열 처리 기능컴포넌트 서비스로 제공되어, 서버와 다른 컴포넌트들이 문자열 생성, 변환, 비교 등의 작업을 표준화된 인터페이스를 통해 수행할 수 있게 되었습니다.

23. 결과 집합 메타데이터 전송을 선택적으로 설정

[원본제공링크 1]

MySQL 8.0부터 클라이언트는 결과 집합 메타데이터전송을 선택적으로 설정할 수 있습니다. 이를 통해 메타데이터 전송을 생략하면, 특히 많은 쿼리를 실행하고 각 쿼리가 적은 행을 반환하는 세션에서 성능 향상을 기대할 수 있습니다.

24. 컴포넌트를 위한 상태 변수 서비스

[원본제공링크 1]

MySQL 8.0부터 컴포넌트는 자체적인 상태 변수를 정의하고 관리할 수 있는 기능이 도입되었습니다. 이를 통해 컴포넌트는 자신의 상태와 동작에 대한 정보를 MySQL 서버와 사용자에게 제공할 수 있습니다.

25. 컴포넌트 서비스를 통한 성능 체계 계측 지원

[원본제공링크 1]

MySQL 8.0부터 컴포넌트 서비스를 통해 Performance Schema의 계측 기능을 활용할 수 있습니다. 이를 통해 서버 내부의 실행 상태를 실시간으로 모니터링하고, 성능 데이터를 수집하여 분석할 수 있습니다.

26. 컴포넌트를 위한 시스템 변수 서비스

[원본제공링크 1]

MySQL 8.0부터 컴포넌트 아키텍처가 도입되어, 컴포넌트가 자체적인 시스템 변수를 정의하고 관리할 수 있게 되었습니다. 이를 통해 컴포넌트는 서버의 동작을 세부적으로 제어하고, 사용자에게 설정 가능한 옵션을 제공합니다.

27. 컴포넌트로 구현된 비밀번호 검증 플러그인

[원본제공링크 1]

MySQL 8.0부터 validate_password 플러그인이 컴포넌트로 재구현되어, 계정 비밀번호의 보안성을 강화하고 비밀번호 강도 검사를 수행할 수 있게 되었습니다. 이 컴포넌트는 시스템 변수를 통해 비밀번호 정책을 설정하고, 상태 변수를 통해 모니터링할 수 있습니다.

28. 호스트 애플리케이션에 신호를 전달하는 컴포넌트 서비스

MySQL 8.0부터 컴포넌트 서비스를 통해 호스트 애플리케이션에 신호를 전달할 수 있는 기능이 도입되었습니다. 이를 통해 컴포넌트는 서버의 종료와 같은 특정 작업을 호스트 애플리케이션에 요청할 수 있습니다.

29. 플러그인이 프리페어드 스테이트먼트(prepared statement)를 사용할 수 있게 허용

[원본제공링크 1]

MySQL 8.0부터 플러그인 API가 확장되어, 플러그인 개발자가 프리페어드 스테이트먼트를 사용할 수 있게 되었습니다. 이를 통해 플러그인은 반복적인 SQL 실행 시 성능을 향상시키고, SQL 인젝션 공격에 대한 보안을 강화할 수 있습니다.

30. 쿼리 리라이트(rewrite) 플러그인에서 INSERT/UPDATE/DELETE 지원

[원본제공링크 1]

MySQL 8.0.12부터 Rewriter 쿼리 재작성 플러그인INSERT, UPDATE, DELETE, REPLACE 문에 대한 재작성을 지원합니다. 이를 통해 데이터 조작문에 대한 패턴과 대체 규칙을 정의하여, 서버가 이러한 문을 실행하기 전에 수정할 수 있습니다.

31. 정렬 버퍼의 동적 할당

[원본제공링크 1]

MySQL 8.0에서는 정렬 작업을 수행할 때 사용하는 정렬 버퍼(sort buffer)의 메모리 사용을 동적으로 조정할 수 있는 기능이 도입되었습니다. sort_buffer_size 시스템 변수로 기본 크기를 설정할 수 있으며, 필요에 따라 작업 중 동적으로 증가합니다. 메모리 사용 효율이 개선되어, 정렬 시 디스크 I/O를 줄이고 서버 성능을 향상시킵니다.

32. NO PAD 콜레이션을 위한 가변 길이 정렬 키

[원본제공링크 1]

MySQL 8.0.2부터 NO PAD 정렬을 사용하는 다중 바이트 문자열의 정렬 시 가변 길이 정렬 키를 도입하여, 메모리 사용량을 최적화하고 정렬 성능을 향상시켰습니다. 이를 통해 대규모 데이터 처리 시 더욱 효율적인 운영이 가능해졌습니다.

33. 그룹화 없는 SELECT COUNT (*)의 속도 향상

[원본제공링크 1]

MySQL 8.0.13부터 단일 스레드 환경에서 그룹화 조건이 없는 SELECT COUNT(*) 쿼리의 성능이 향상되었습니다. 이는 InnoDB 테이블에서 추가적인 WHERE나 GROUP BY 절이 없는 경우에 적용됩니다.

34. 소스 코드 개선

[원본제공링크 1]

MySQL 8.0에서는 소스 코드 구조와 품질을 개선하여 유지보수성성능을 높였습니다. 주요 개선 사항으로는 코드 정리, 모듈화, 최신 개발 도구 활용 등이 있습니다. 이러한 개선은 개발자가 MySQL 엔진에 더 쉽게 기여하고, 버그 수정 및 기능 추가를 간소화할 수 있게 합니다.

35. 작은 tarball 다운로드 옵션

[원본제공링크 1]

MySQL은 Linux용 일반 바이너리 배포판에서 디버그 바이너리와 디버그 심볼을 제외한 최소 설치 버전(minimal install)의 압축된 tar 파일을 제공합니다. 이러한 최소 설치 버전은 파일 크기가 작아 다운로드 및 설치 시 디스크 공간을 절약할 수 있습니다.

36. FLOAT 및 DOUBLE로의 CAST

[원본제공링크 1]

MySQL에서 CAST() 함수를 사용하여 다양한 데이터 타입을 FLOAT 또는 DOUBLE과 같은 부동소수점 숫자형으로 변환할 수 있습니다. 이를 통해 문자열이나 정수 데이터를 부동소수점으로 변환하여 수학적 연산이나 비교를 수행할 수 있습니다.

37. OS 유저를 연결 속성으로 사용

[원본제공링크 1]

MySQL 8.0에서는 클라이언트 애플리케이션이 연결 시 운영 체제 사용자명과 같은 연결 속성(connection attributes)을 서버에 전달할 수 있습니다. 이러한 속성은 서버의 Performance Schema를 통해 조회할 수 있으며, 연결 관리 및 모니터링에 유용합니다.

38. mysqldump 파일에서 gtid_purged를 주석으로 사용

[원본제공링크 1]

MySQL의 mysqldump 유틸리티는 백업 시 전역 트랜잭션 식별자(Global Transaction Identifier, GTID) 정보를 포함할 수 있습니다. 이때 --set-gtid-purged 옵션을 사용하여 GTID 설정을 제어하며, 특정 설정에서는 SET @@GLOBAL.gtid_purged 문이 주석으로 처리되어 덤프 파일에 포함됩니다.

39. early plugin load 플래그

[원본제공링크 1]

MySQL 서버는 시작 시 플러그인을 로드할 수 있으며, --early-plugin-load 옵션을 사용하면 내장 플러그인 및 스토리지 엔진 초기화 이전에 특정 플러그인을 로드할 수 있습니다. 이 옵션은 플러그인 라이브러리 파일을 세미콜론으로 구분하여 지정하며, 각 항목은 라이브러리 파일명 또는 이름=라이브러리 파일명 형식으로 작성합니다.

40. 현재 스레드 컴포넌트 서비스

[원본제공링크 1]

MySQL 8.0.17부터 mysql_current_thread_reader라는 새로운 컴포넌트 서비스가 도입되어, 컴포넌트가 현재 스레드의 핸들을 얻을 수 있게 되었습니다. 이를 통해 컴포넌트는 현재 세션의 속성에 접근하거나, 해당 스레드 핸들을 다른 서비스에 전달하여 다양한 작업을 수행할 수 있습니다.

41. 뮤텍스 잠금 순서 도구

[원본제공링크 1]

MySQL 8.0.17부터 LOCK_ORDER 도구가 도입되어, 서버 실행 중 발생할 수 있는 뮤텍스(Mutex) 및 읽기-쓰기 잠금(RW-Lock) 획득 순서로 인한 교착 상태를 감지하고 방지할 수 있습니다. 이 도구는 서버 설계 시 잠금 순서 의존성 그래프를 정의하고, 런타임에서 잠금 획득이 비순환적이며 해당 그래프를 준수하는지 확인합니다.

42. 연결 압축 제어

[원본제공링크 1]

MySQL 8.0에서는 클라이언트와 서버 간의 통신 데이터를 압축하여 네트워크 전송 효율을 높일 수 있습니다. 이를 통해 전송되는 바이트 수를 줄여 네트워크 대역폭을 절감할 수 있습니다.

43. Protobuf의 동적 링크

[원본제공링크 1]

MySQL 8.0.18부터 Protocol Buffers(Protobuf) 라이브러리가 정적으로 링크되던 방식에서 동적 링크로 변경되었습니다. 이러한 변경은 Protobuf의 내부 상태 관리 특성상, 여러 컴포넌트에서 동시에 정적 링크를 사용할 경우 발생할 수 있는 문제를 방지하고, MySQL 서버 내 다양한 컴포넌트에서 Protobuf를 효율적으로 활용하기 위함입니다.

44. max_prepared_stmt_count의 최대값 증가

[원본제공링크 1]

MySQL 8.0.18 버전부터 max_prepared_stmt_count 시스템 변수의 최대값이 기존 1,048,576개에서 4,194,304개로 증가했습니다. 이로 인해 동시에 더 많은 프리페어드 스테이트먼트(Prepared Statement) 생성하고 사용할 수 있게 되었습니다. 단, 기본값은 여전히 16,382개로 유지됩니다.

45. sys 스키마를 mysql 서버 트리로 이동

[원본제공링크 1]

MySQL 8.0.18부터 sys 스키마의 소스 코드가 별도의 저장소에서 MySQL 서버의 코드베이스로 통합되었습니다. 이로 인해 sys 스키마는 MySQL 서버와 함께 관리되며, 별도의 버전 관리가 필요 없게 되었습니다.

46. 에러 메시지 인수의 컴파일 타임 검사

[원본제공링크 1]

MySQL 8.0에서는 에러 메시지 함수에 전달되는 인수의 개수와 유형컴파일 시점에 검사하는 기능이 도입되었습니다. 이를 통해 런타임 시 발생할 수 있는 에러 메시지 관련 문제를 사전에 방지할 수 있습니다.

47. 스키마 제약 조건을 위반한 문서의 정확한 위치 식별

[원본제공링크 1]

MySQL 8.0.17부터 JSON 스키마를 사용하여 JSON 문서의 유효성을 검사할 수 있습니다. 이때, JSON_SCHEMA_VALIDATION_REPORT() 함수를 활용하면 문서가 스키마를 위반한 정확한 위치와 그 원인을 상세히 파악할 수 있습니다.

48. 명령줄 도구의 --binary-as-hex 옵션을 대화형 터미널에서 기본적으로 활성화

[원본제공링크 1]

MySQL 8.0.19부터 mysql 명령줄 도구대화형 모드로 실행될 때, --binary-as-hex 옵션이 기본적으로 활성화됩니다. 이로 인해 바이너리 데이터는 16진수 표기법으로 표시되며, 이는 터미널에서 비인쇄 문자가 출력되어 발생할 수 있는 문제를 방지합니다.

49. 사용자 정의 함수 API에서의 캐릭터

[원본제공링크 1 2]

MySQL 8.0부터 사용자 정의 함수(UDF) API가 개선되어, 함수의 인수와 반환 값에 대한 캐릭터셋 정보를 처리할 수 있게 되었습니다. 이를 통해 UDF는 입력 문자열의 캐릭터을 인식하고, 필요한 경우 반환 값의 문자 집합을 지정하거나 변환할 수 있습니다.

50. Sys 스키마: 저장된 함수(stored function)를 네이티브 함수로 대체

[원본제공링크 1]

MySQL 8.0.16부터 sys 스키마에 포함되어 있던 일부 저장 함수가 더 효율적인 네이티브 함수로 대체되었습니다. 이러한 변경으로 성능이 향상되고, 함수 호출 시 sys. 접두사를 생략할 수 있게 되었습니다.

51. 이제 Windows에서도 “system” MySQL 명령줄 명령이 작동합니다

[원본제공링크 1]

이제 Windows 환경의 MySQL 명령줄 클라이언트에서도 system 명령을 사용할 수 있게 되었습니다. 이를 통해 MySQL 프롬프트 내에서 직접 운영 체제 명령을 실행할 수 있습니다.

52. 관리자 세션은 max_connection 제한의 적용을 받지 않습니다

[원본제공링크 1]

MySQL 서버는 max_connections 시스템 변수를 통해 동시 접속 가능한 최대 클라이언트 수를 제한합니다. 그러나 관리자 권한을 가진 계정은 이 제한을 초과하여 추가로 접속할 수 있습니다.

53. 이제 중복 키 오류 정보에 키의 테이블 이름이 포함됩니다

[원본제공링크 1]

MySQL의 중복 키 오류 메시지가 개선되어, 이제 충돌이 발생한 테이블 이름이 포함됩니다. 이를 통해 개발자는 문제를 더 신속하게 파악하고 해결할 수 있습니다.

54. SIGUSR1 신호를 사용하여 로그를 플러시합니다

[원본제공링크 1]

MySQL 8.0.19부터 SIGUSR1 신호를 서버 프로세스에 보내면 에러 로그, 일반 쿼리 로그, 슬로우 쿼리 로그플러시됩니다. 이는 서버에 직접 접속하지 않고도 로그를 관리할 수 있는 간편한 방법을 제공합니다.

55. 이제 MySQL C API가 비동기 함수에 대한 압축을 지원합니다

[원본제공링크 1]

MySQL 8.0.16부터 C API비동기 함수가 도입되어, 비차단(non-blocking) 방식으로 서버와 통신할 수 있게 되었습니다. 이러한 비동기 함수에서도 연결 압축을 지원하여, 데이터 전송 시 네트워크 대역폭을 효율적으로 사용할 수 있습니다.

56. 클라이언트 라이브러리에서 안전한 LOAD DATA LOCAL INFILE 디렉토리

[원본제공링크 1]

MySQL 8.0.21부터 클라이언트 라이브러리 LOAD DATA LOCAL INFILE 명령어를 통해 로드할 수 있는 파일을 특정 디렉토리로 제한할 수 있는 기능을 제공합니다. 이를 통해 보안이 강화되어, 의도치 않은 파일 접근을 방지할 수 있습니다.

Leave a Comment



이 문서 공유

MySQL 8.0에서 추가된 모든 기능 – 기타

링크 복사

CONTENTS