MySQL Innovation Release Note

8.2.0 변경 사항 (2023-10-25 Innovation Release)

Estimated reading: 5 minutes 41 views

공식 문서: Changes in MySQL 8.2.0 (2023-10-25, Innovation Release)

감사 로그 관련 사항

MySQL Enterprise Audit를 제거하는 과정을 단순화하기 위해 새로운 audit_log_filter_uninstall.sql 스크립트가 추가되었습니다. 이 플러그인에 대한 정보는 MySQL Enterprise Audit을 참조하십시오. (버그 #35611072)

인증 관련 사항

이전에 사용 중단되었던 mysql_native_password 플러그인은 이제 더 이상 필수적이지 않으며 서버 시작 시 비활성화할 수 있습니다. 이 플러그인에 대한 정보는 Native Pluggable Authentication을 참조하십시오. 플러그블 인증 및 다른 인증 플러그인에 대한 일반적인 정보는 Pluggable AuthenticationAuthentication Plugins을 참조하십시오.

주의
서버 측 mysql_native_password 인증 방법이 비활성화되면, 이 인증 방법을 사용하는 이전 클라이언트 계정(특히 MySQL 5.5 및 경우에 따라 MySQL 5.6 이전 버전)은 더 이상 연결할 수 없으며, 서버는 "Access denied" 메시지를 오류 로그에 기록합니다. 이러한 연결은 더 이상 불가능한데, 그 이유는 프로토콜은 호환되지만 클라이언트에서 지원하는 인증 방법이 누락되었기 때문입니다.

(WL #15667)

MySQL Enterprise Edition은 이제 스마트 카드, 보안 키, 생체 인식 리더기와 같은 장치를 WebAuthn 환경에서 MySQL 서버에 대한 인증 수단으로 사용할 수 있도록 지원합니다. 새로운 WebAuthn 인증 방법은 FIDO 및 FIDO2 표준을 기반으로 하며, 서버 측에 authentication_webauthn 플러그인과 클라이언트 측에 authentication_webauthn_client 플러그인 한 쌍으로 구성됩니다. 서버 측 WebAuthn 인증 플러그인은 MySQL Enterprise Edition 배포판에만 포함됩니다. 추가 정보는 WebAuthn Pluggable Authentication을 참조하십시오.
WebAuthn 인증이 도입되면서 FIDO 플러그블 인증 방법은 사용 중단되었습니다. (WL #15006)

C API 관련 사항

클라이언트 라이브러리는 이제 새로운 C API 준비된 문 함수 mysql_stmt_bind_named_param()을 도입하여 준비된 문에서 쿼리 속성 사용을 지원합니다. mysql_stmt_bind_named_param()은 이전에 사용된 mysql_stmt_bind_param() 함수를 대체하며, 이전 함수와 달리 준비된 문서의 이름 없는 매개변수와 이름이 있는 매개변수 모두를 바인딩할 수 있습니다. 인터페이스에 대한 개요는 C API Prepared Statement Interface를 참조하십시오. (버그 #35435138, WL #15803)

이전 배포판(MySQL 5.1 및 MySQL 5.0 등)은 플러그블 인증을 지원하지 않았습니다. 최신 클라이언트가 플러그블 인증 방법을 사용하여 이러한 이전 서버에 연결을 시도하면 서버에서 “bad handshake” 오류 메시지를 출력하는 문제가 있었습니다. 이번 수정으로 클라이언트 측 인증(특히 --default-auth 옵션)이 모든 서버에서 제대로 작동하도록 보장됩니다. 또한, 플러그블 인증을 지원하지 않는 서버에서는 caching_sha2_password 대신 mysql_native_password가 기본 인증 방법으로 사용됩니다. (버그 #90994, 버그 #28082093)

mysql_ssl_set() C API 함수는 더 이상 사용되지 않으며, 향후 MySQL 릴리스에서 제거될 예정입니다. mysql_ssl_set() 매개변수를 대신할 수 있는 mysql_options() TLS 옵션이 있습니다. (WL #11091)

컴파일 관련 사항

Microsoft Windows: MSVC 2022 최신 버전(v17.7.2)과 호환되도록 코드를 업데이트했습니다. (버그 #35737379)

MYSQL_PARSE_ARGUMENTS 매크로와 더 이상 사용되지 않는 support-files/compiler_warnings.sup 파일을 제거했습니다. (버그 #35661316)

WITH_CURL CMake 옵션을 bundled로 설정하면 이제 extra/curl/에 있는 번들된 curl 배포판을 사용합니다. (버그 #35649213)

MySQL 8.1.0부터 32비트 아키텍처를 지원하지 않으므로, 32비트 아키텍처와 관련된 CMake 구성 정의를 제거했습니다. (버그 #35621081)

디버그 모드에서 제대로 빌드될 수 있도록 telemetry_clientcomponent_telemetry의 CMake 코드에서 RPATH 정의를 수정했습니다. (버그 #35598485)

CMake의 최소 요구 버전을 3.5.1에서 3.14.6으로 상향 조정했습니다. (버그 #35553331)

Windows 컴파일러가 설정한 256자 제한에 맞추기 위해 keyring_encrypted_file 소스 파일의 매우 긴 경로명을 단축했습니다. (버그 #35493420)

Windows에서 Clang 지원을 위한 ASAN을 개선했습니다. (버그 #35468711)

macOS에서 컴파일할 때 openssl@1.1을 명시적으로 찾았지만, 이제는 일반적인 OpenSSL 심볼릭 링크를 찾아 openssl@3도 허용합니다. (버그 #35468370)

WITH_DEVELOPER_ENTITLEMENTS macOS CMake 옵션이 오타로 인해 활성화되지 않는 문제를 수정했습니다. (버그 #35374026)

Linux에서 C++20 컴파일러 지원을 실험적으로 추가했습니다. 사용하려면 GCC 10+ 또는 Clang 11+가 필요합니다. (버그 #35362952, 버그 #35667284)

OpenSSL을 가져오는 방식을 간소화하여 표준 CMake OpenSSL::SSL 및 OpenSSL::Crypto 라이브러리를 활용했습니다. “system” 유형은 FIND_PACKAGE를 사용하고, 대체 시스템 유형은 pkg-config를 사용하며, 사용자 정의 경로는 FIND_PATH/FIND_FILE/FIND_LIBRARY를 사용합니다. (버그 #35140672)

Clang 12로 컴파일할 때 발생하던 문자열 연결 경고를 수정했습니다. (버그 #111614, 버그 #35549962)

WITH_ZLIB 기능을 추가로 개선했습니다.
Nikolai Kostrigin에게 감사를 표합니다. (버그 #111549, 버그 #35534309)

Protobuf 22 이상의 버전에서 Abseil 의존성이 추가되어 WITH_PROTOBUF=system로 빌드할 수 없던 문제를 해결했습니다. (버그 #111469, 버그 #111623, 버그 #35546459, 버그 #35550389)

WITH_ZLIB=system으로 빌드할 때 ZLIB을 찾지 못해 MySQL 빌드가 중단되는 문제가 있었습니다.
Amazon에게 감사를 표합니다. (버그 #111467, 버그 #35511210)
참고: 이 문제는 버그 #35057542의 회귀 문제입니다.

EL7 aarch64 기반 플랫폼에서 CPU 캐시 라인 크기를 가져오는 방식과 관련된 문제로 인해 MySQL 서버가 예기치 않게 중단되는 문제를 수정했습니다. (버그 #110752, 버그 #35479763)
참고: 관련 버그로는 버그 #107081, 버그 #34095278이 있습니다.

C++ 표준화 위원회의 Library Working Group이 최근에 해결한 문제(LWG-3865 Sorting a range of pairs)와 일치하도록 sql/auth의 두 파일에서 사용되는 동등 연산자를 업데이트했습니다.
Microsoft Visual Studio 팀의 제안을 기반으로 했습니다. (버그 #110254, 버그 #35137978)

사용 중단 및 제거 관련 사항

호환성 변경: MySQL 8.0에서 사용 중단된 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() SQL 함수가 제거되었습니다. 이제 이 함수를 호출하면 구문 오류가 발생합니다. 대신 WAIT_FOR_EXECUTED_GTID_SET()를 사용하십시오. (WL #13180)

복제: binlog_transaction_dependency_tracking 서버 시스템 변수가 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 이 변수를 설정하거나 조회하면 경고가 발생하며, 동등한 시작 옵션 --binlog-transaction-dependency-tracking을 사용하는 경우에도 경고가 발생합니다. 이 변수 또는 옵션에 의존하는 애플리케이션은 가능한 빨리 다른 방법으로 전환해야 합니다. 이 변수나 기능의 대체는 계획되지 않았습니다. (WL #13964)

MySQL 8.0에서 사용 중단된 expire_logs_days 서버 시스템 변수가 이제 제거되었으며 더 이상 지원되지 않습니다. 즉, 이 릴리스부터 이 변수를 런타임에 가져오거나 설정하려고 하면 오류가 발생합니다. 동등한 시작 옵션(--expire-logs-days)을 사용하여 서버를 시작하려고 하면 오류가 발생합니다.
expire_logs_days 대신 binlog_expire_logs_seconds를 사용하십시오. 이 변수는 계속 지원되며, 로그 만료 기간을 정수 값이 아닌 다른 단위로 지정할 수 있습니다. (WL #11006)

MySQL 8.0에서 사용 중단된 --abort-slave-event-count--disconnect-slave-event-count 서버 시작 옵션이 이 릴리스에서 제거되었습니다. 이제 이러한 옵션으로 mysqld를 시작하려고 하면 오류가 발생합니다.
이 옵션들은 이전에 테스트 목적으로 사용되었으며, 대체 옵션은 계획되지 않았습니다. (WL #14854)

oldnew 서버 시스템 변수가 사용 중단되었으며, 이 변수들을 설정하거나 읽을 때마다 경고가 발생합니다. 이 변수들은 향후 MySQL 버전에서 제거될 예정이므로, 이 변수들에 의존하는 애플리케이션은 가능한 빨리 전환해야 합니다. (WL #8609)

매우 오래된 MySQL 버전에서 업그레이드할 때 사용되었던 --character-set-client-handshake 서버 옵션이 사용 중단되었으며, 이 옵션을 사용할 때마다 경고가 발생합니다. 이 옵션은 향후 MySQL 버전에서 제거될 예정이므로, 이 옵션에 의존하는 애플리케이션은 가능한 빨리 전환해야 합니다. (WL #13220)

이번 릴리스의 두 가지 변경 사항은 MySQL에서의 권한 부여 방식에 영향을 미칩니다. 첫 번째는 데이터베이스 권한 부여와 관련이 있고, 두 번째는 권한 부여에 사용되는 호스트 이름과 관련이 있습니다. 이 변경 사항들은 다음과 같습니다:

  1. 데이터베이스 수준의 권한 부여: 데이터베이스 수준의 권한 부여에서 %_ 문자를 와일드카드로 사용하는 것이 이제 사용 중단되었으며, 이 와일드카드 기능은 향후 MySQL 릴리스에서 제거될 예정입니다. 이러한 문자는 항상 리터럴로 처리될 예정입니다. 이는 이미 partial_revokes 서버 시스템 변수의 값이 ON으로 설정된 경우와 동일합니다.
    예를 들어, partial_revokesON으로 설정된 상태에서 GRANT SELECT ON db_.* TO user1을 실행하면 user1db_라는 이름의 데이터베이스에 있는 모든 테이블에 대해 SELECT 권한을 가지지만, db1, db2, dbx, dby 등의 데이터베이스에 있는 테이블에는 SELECT 권한이 없습니다. 이 기능이 제거되면 이 동작이 항상 유지될 것입니다.
  2. 호스트 이름 %를 사용하는 권한 부여: 권한을 확인할 때 서버가 %localhost의 동의어로 취급하는 것이 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다.
    현재는 'user1'@'%'로 부여된 권한이 'user1'@'localhost'에도 적용됩니다. 이 자동 할당은 이제 사용 중단되었으며, 이 동작이 제거되면 localhost 호스트 이름을 사용하여 'user1'@'localhost'에게 명시적으로 권한을 부여해야 합니다.
참고
위의 두 가지 경우 모두 사용자 세션이나 로그에 경고나 오류가 발생하지 않습니다. 그렇지 않으면 매우 많은 메시지가 생성될 수 있기 때문입니다.

(WL #14280, WL #15676)

INFORMATION_SCHEMA.PROCESSLIST가 사용 중단되었으며, 향후 MySQL 릴리스에서 제거될 예정입니다. 이와 관련하여 이 테이블을 사용하는 SHOW PROCESSLIST 명령어의 구현도 사용 중단되었습니다.
SHOW PROCESSLIST를 실행할 때는 퍼포먼스 스키마를 사용하는 것이 좋습니다. 따라서 performance_schema_show_processlist도 사용 중단되었으며, 향후 MySQL 릴리스에서 제거될 예정입니다. (WL #15915)

SET_USER_ID 권한이 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 이 권한이 GRANT를 사용해 부여되면 SQL 경고를 통해 사용 중단 상태가 통지됩니다. 이 권한은 다음과 같은 새로운 권한들로 대체되었습니다:

이러한 새 권한은 CREATE PROCEDURE, CREATE FUNCTION, CREATE TRIGGER, CREATE EVENT 또는 CREATE VIEW를 사용해 고아 SQL 객체를 생성할 때 모두 필요합니다.
MySQL 서버의 업그레이드 중에 이 권한들은 다음과 같이 공존합니다:

런타임 시 ACL 테이블이 읽힐 때(예: FLUSH PRIVILEGES 또는 서버 시작 시), SET_USER_ID 부여가 소싱되면, 부여받은 계정에 대한 경고 메시지가 에러 로그에 기록됩니다. (WL #15874)

TLS_AES_128_CCM_8_SHA256 암호화 스위트 지원이 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. tls_ciphersuites 또는 admin_tls_ciphersuites 시스템 변수를 사용해 이 암호화 스위트를 설정하려고 하면 경고가 반환됩니다. 기본적으로 두 시스템 변수는 다음 암호화 스위트를 허용합니다:

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_AES_128_CCM_SHA256

이전에 지원되었던 몇몇 암호도 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 사용 중단된 암호가 ssl_cipher 또는 admin_ssl_cipher 시스템 변수를 사용해 설정되면 경고가 발생합니다. 기본적으로 두 시스템 변수는 다음 암호를 허용합니다:

  • ECDHE-ECDSA-AES128-GCM-SHA256
  • ECDHE-ECDSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES256-GCM-SHA384
  • ECDHE-ECDSA-CHACHA20-POLY1305
  • ECDHE-RSA-CHACHA20-POLY1305
  • ECDHE-ECDSA-AES256-CCM
  • ECDHE-ECDSA-AES128-CCM
  • DHE-RSA-AES128-GCM-SHA256
  • DHE-RSA-AES256-GCM-SHA384
  • DHE-RSA-AES256-CCM
  • DHE-RSA-AES128-CCM
  • DHE-RSA-CHACHA20-POLY1305

(WL #15800)

방화벽 관련 사항

MySQL Enterprise Firewall은 이제 방화벽 테이블에 저장된 데이터를 메모리 캐시에 주기적으로 다시 로드할 수 있게 되었습니다. 이전 구현에서는 서버 시작 시나 서버 측 플러그인을 다시 설치할 때만 캐시를 다시 로드할 수 있었습니다. 새로운 mysql_firewall_reload_interval_seconds 시스템 변수는 런타임에 테이블 데이터를 다시 로드할 주기를 설정하거나, 다시 로드 기능을 비활성화합니다(기본값). 자세한 내용은 방화벽 캐시 다시 로드 일정 설정을 참조하십시오. (WL #15696)

MySQL Enterprise Firewall은 이전에 내부 테이블, 함수, 저장 프로시저를 mysql 시스템 데이터베이스에 저장했습니다. 이제 새로운 mysql_firewall_database 서버 시스템 변수를 사용하여 기존 설치 스크립트 및 서버 시작 시 사용할 사용자 정의 스키마를 지정할 수 있습니다.
새로운 스크립트 uninstall_firewall.sql이 추가되어 방화벽 제거를 간소화했습니다. 자세한 내용은 MySQL Enterprise Firewall 설치 및 제거를 참조하십시오. (WL #15655)

SQL 함수 및 연산자 관련 사항

STR_TO_DATE() 함수가 변환할 문자열에 대한 범위 검사를 완벽하게 수행하지 않아 '2021-11-31'과 같은 잘못된 날짜를 반환할 수 있는 문제가 있었습니다. (버그 #108782, 버그 #34704094)

병렬 이벤트 실행(다중 스레드 복제본)

START REPLICA 문의 SQL_AFTER_GTIDS 옵션이 이제 다중 스레드 적용기(MTA)와 완전히 호환됩니다.
이전에는 replica_parallel_workers가 1보다 큰 값으로 설정된 경우 사용자가 이 옵션을 사용하려고 하면 ER_MTS_FEATURE_IS_NOT_SUPPORTED 경고가 발생하고 복제본이 단일 스레드 모드로 전환되었습니다. 이제 이 문제가 해결되어, 누락된 트랜잭션을 복구해야 하는 복제본이 다중 스레딩 성능 향상의 이점을 활용할 수 있습니다.
자세한 내용은 START REPLICA 문서replica_parallel_workers 시스템 변수를 참조하십시오. (WL #15755)

옵티마이저 관련 사항

EXCEPTINTERSECT 집합 연산을 사용하는 문장의 성능이 새로운 해시 테이블 최적화를 통해 향상되었습니다. 이 최적화는 이러한 문장에서 자동으로 활성화됩니다. 옵티마이저가 이전 버전의 MySQL에서 사용된 임시 테이블 최적화로 복원되도록 하려면 이번 릴리스에서 도입된 hash_set_operations 옵티마이저 스위치를 off로 설정하십시오. 이 최적화에 할당된 메모리 양은 set_operations_buffer_size 서버 시스템 변수를 설정하여 제어할 수 있습니다. 버퍼 크기를 늘리면 이러한 연산을 사용하는 일부 문장의 실행 시간이 더욱 개선될 수 있습니다.
자세한 내용은 스위치 가능한 최적화를 참조하십시오. (WL #15257)

패키징 관련 사항

Windows에서 MSI 패키지 정의 파일이 Windows Installer XML(WiX) 툴셋 버전 4과 호환되도록 업데이트되었습니다. 이전 버전의 툴셋에서는 더 이상 사용할 수 없습니다. (버그 #35613791)

번들된 libedit 라이브러리가 버전 20221030-3.1로 업그레이드되었습니다. (버그 #35489173)

Performance Schema 관련 사항

Performance Schema의 events_statements_summary_by_digest 테이블에서 SUM_ROWS_EXAMINED 열이 Index Merge에 대해 올바른 행 수를 제공하지 않았습니다. (버그 #35616015)

특정 상황에서 성능 스키마 초기화 중 메모리 부족 상태가 발생하면 서버가 정리 과정에서 예기치 않게 종료될 수 있었습니다. (버그 #111860, 버그 #35635853)

이번 릴리스에서는 성능 스키마 서버 텔레메트리 메트릭 서비스가 추가되었습니다. 이 인터페이스는 플러그인 및 컴포넌트가 주기적으로 Open Telemetry 프로토콜을 사용하여 이러한 측정값을 내보내기 위해 텔레메트리 미터(메트릭 그룹), 메트릭 및 메트릭 측정을 쿼리할 수 있는 방법을 제공합니다.
이 인터페이스에 대한 자세한 내용은 MySQL 소스 코드 문서의 서버 텔레메트리 메트릭 서비스 섹션을 참조하십시오.
다음이 추가되었습니다:

다음이 변경되었습니다:

  • 증가하는 rwlock 수를 더 잘 수용하기 위해 performance_schema_max_rwlock_classes의 기본값이 60에서 100으로 변경되었습니다.

자세한 내용은 Telemetry를 참조하십시오. (WL #15199)

보안 관련 사항

curl 라이브러리를 시스템 curl 라이브러리에 링크하지 않고 포함하는 바이너리 패키지가 curl 8.4.0으로 업그레이드되었습니다. curl 버전 8.4.0에서 수정된 중요한 문제는 https://curl.se/docs/security.html에서 확인할 수 있습니다. (버그 #35897778)
참조: 버그 #35709229도 참조하십시오.

서버 관리

서버 시작 및 종료 프로세스에 다음 유형의 메시지가 추가되었습니다:

  • --initialize 또는 --initialize-insecure 옵션으로 서버를 시작할 때 서버 초기화의 시작 및 종료 메시지(일반 서버 시작 및 종료 중 표시되는 메시지와는 별개).
  • InnoDB 초기화의 시작 및 종료 메시지.
  • 서버 초기화 중 init 파일 실행의 시작 및 종료 메시지.
  • 서버 초기화 중 컴파일된 명령문 실행의 시작 및 종료 메시지.
  • 서버 시작 중(충돌 복구가 발생할 경우) 충돌 복구의 시작 및 종료 메시지.
  • 서버 시작 중 동적 플러그인 초기화의 시작 및 종료 메시지.
  • 서버 시작 중 구성 요소 초기화 단계의 시작 및 종료 메시지.
  • 서버 종료 중 복제본 스레드의 종료 메시지, 연결 스레드의 정상 종료 및 강제 종료 메시지.
  • 서버 종료 중 플러그인 및 구성 요소 종료의 시작 및 종료 메시지.
  • 초기화 또는 종료 중 종료 코드(반환 값) 정보.

또한, 서버가 WITH_SYSTEMD로 빌드된 경우, 이제 서버는 모든 systemd 메시지를 에러 로그에 포함합니다(에러 로그 참조). (WL #15400)

SQL 구문 관련 사항

복제: 이번 릴리스는 MySQL 복제와 관련된 기능에서 사용되는 용어를 업데이트하는 작업을 이어갑니다. MySQL 8.2에서는 RESET MASTER(대신 RESET BINARY LOGS AND GTIDS을 사용), SHOW MASTER STATUS(대신 SHOW BINARY LOG STATUS을 사용), SHOW MASTER LOGS(대신 SHOW BINARY LOGS을 사용), 그리고 PURGE MASTER LOGS(대신 PURGE BINARY LOGS을 사용) 등의 여러 SQL 문을 사용 중단(deprecate)합니다. 또한, CREATE EVENTALTER EVENTDISABLE ON SLAVE 옵션은 이제 DISABLE ON REPLICA로 대체되었으며 사용 중단되었습니다.
관련 변경 사항은 다음과 같습니다:

  • mysqldump--output-as-version 옵션이 추가되어, 복제본과 이벤트 관련 명령어에서 사용되는 용어 수준을 정의하고, 이제는 사용 중단된 용어만을 허용하는 이전 버전의 MySQL과 호환되는 덤프 파일을 생성할 수 있습니다. 이 옵션의 가능한 값은 SERVER, BEFORE_8_0_23, BEFORE_8_2_0입니다.
    기본값은 SERVER로, 이는 mysqldump가 서버 버전을 가져와 해당 버전과 호환되는 명령어를 출력하도록 설정합니다. 서버 버전이 8.2.0 이전이면, 출력은 이벤트에 대해 사용 중단된 DISABLE ON SLAVE 용어를 사용하며, 8.0.23 이전이면 복제본에서 사용 중단된 SLAVEMASTER 용어를 사용한 명령어를 출력합니다. --output-as-versionBEFORE_8_2_0으로 설정되면 SHOW CREATE EVENT는 이벤트가 8.2.0 이전 버전의 서버에서 생성된 것처럼 보여줍니다. 옵션이 BEFORE_8_0_23으로 설정되면 덤프는 복제본 명령어(예: START SLAVECHANGE MASTER TO)와 관련하여 사용 중단된 명령어도 사용합니다.
    이 변경 사항은 --events, --dump-replica, --source-data, --apply-replica-statements, 그리고 --include-source-host-port의 출력에 영향을 미칩니다.
  • terminology_use_previous 서버 시스템 변수에 새로운 값 BEFORE_8_2_0이 추가되었습니다. 이 값을 설정하면 서버는 SHOW CREATE EVENT의 출력에 DISABLE ON SLAVE(이제 사용 중단됨)를 표시하게 됩니다. 이 동작은 이제 terminology_use_previousBEFORE_8_0_26일 때도 발생하며, 이전에 가지고 있던 다른 효과도 그대로 유지됩니다.
  • 이제는 사용 중단된 SㄹLAVESIDE_DISABLED 용어는 더 이상 이벤트 설명에서 사용되지 않으며, Information Schema의 EVENTS 테이블에는 대신 REPLICA_SIDE_DISABLED가 표시됩니다. 이는 terminology_use_previous를 사용하여 변경할 수 있습니다.
  • Com_show_master_status 시스템 상태 변수는 Com_show_binary_log_status로 이름이 변경되었습니다. 이전 이름은 하위 호환성을 위해 여전히 지원됩니다.

(WL #14190)

EXPLAIN은 이제 FOR SCHEMA 또는 FOR DATABASE 옵션을 지원하며, 이를 사용하면 명령문이 지정된 데이터베이스에서 실행된 것처럼 분석됩니다. 해당 데이터베이스가 존재해야 하며 사용자는 액세스할 수 있는 권한이 있어야 합니다.
구문은 다음과 같습니다. 여기서 stmt는 분석 가능한 명령문입니다:

EXPLAIN [options] FOR SCHEMA schema_name stmt

이는 schema_name을 현재 데이터베이스로 간주하여 stmt가 실행되게 합니다.
이 옵션은 FOR CONNECTION과 호환되지 않으며, 둘은 동일한 EXPLAIN 명령문에서 함께 사용할 수 없습니다.
자세한 정보와 예시는 실행 계획 정보 얻기를 참조하십시오. (WL #15785)

추가 및 변경된 기능

비호환 변경: 번들된 libfido2 라이브러리가 libfido2 v1.13.0으로 업그레이드되었습니다. 이 libfido2 버전은 OpenSSL 1.1.1 이상을 요구하므로, authentication_fidoauthentication_fido_client 인증 플러그인은 더 이상 Enterprise Linux 6 및 7, Solaris 11, SLES 12 플랫폼에서 사용할 수 없습니다. (버그 #35685515)

중요 변경: 번들된 OpenSSL 라이브러리를 사용하는 플랫폼의 경우, MySQL 서버에 연결된 OpenSSL 라이브러리가 버전 3.0.10으로 업데이트되었습니다. OpenSSL 버전 3.0.10에서 수정된 문제에 대한 자세한 내용은 https://www.openssl.org/news/cl30.txt를 참조하십시오. (버그 #35702863, 버그 #35732474)

중요 변경: Debian 12, Fedora 39, macOS 14, Ubuntu 23.10 지원이 추가되었습니다. macOS의 경우, macOS 13 바이너리는 macOS 14에서 테스트되었습니다.

mysqldump: 생성된 덤프 파일에서 테이블 뷰를 건너뛰도록 하는 --ignore-views 옵션이 추가되었습니다.
Meta의 기여에 감사드립니다. (버그 #30284943, WL #15662)

mysqldump: MySQL 서버에 연결하거나 다시 연결한 후 SQL 명령문을 실행할 수 있는 --init-command--init-command-add 옵션이 추가되었습니다.
Meta의 기여에 감사드립니다. (버그 #27411227, WL #15662)

mysql: MySQL 서버에 연결하거나 다시 연결한 후 추가적인 SQL 명령문을 실행하는 --init-command-add 옵션이 추가되었습니다. 이 옵션은 --init-command와 유사합니다.
Meta의 기여에 감사드립니다. (버그 #27411227, WL #15662)

--login-path 옵션이 있는 각 MySQL 클라이언트에 로그인 경로 처리를 비활성화하는 새로운 --no-login-paths 명령줄 옵션이 추가되었습니다. (WL #12429)

버그 수정

성능: records_in_range가 삽입 작업에서 과도한 디스크 읽기를 수행했습니다.
Facebook의 기여에 감사드립니다. (버그 #109595, 버그 #34976138)

InnoDB: 시스템 스키마의 MySQL 테이블에 8.0.29 이전에 추가된 INSTANT ADD 열이 있는 경우, MySQL을 8.0.29보다 높은 버전으로 업그레이드한 후 이러한 테이블에서 DML을 수행하면 서버가 예기치 않게 종료될 수 있었습니다.
Richard Dang의 기여에 감사드립니다. (버그 #35625510)

InnoDB: innodb_doublewrite 관련 오류 메시지가 개선되었습니다. (버그 #35482724)

InnoDB: FTS 파서 플러그인이 단일 문자 토큰을 처리하는 방식이 수정되었습니다.
Shaohua Wang의 기여에 감사드립니다. (버그 #35432973)

InnoDB: 플러시 처리를 개선하여 코드 전반에서 플러시가 올바르게 일관되게 처리되도록 했습니다. (버그 #35385801)

InnoDB: innodb_redo_log_capacity_update가 로그 용량을 변경하고 다음 거버너 스레드 반복이 끝날 때까지 기다리는 동안, 거버너 스레드가 이미 병렬로 실행 중일 때 변경 사항을 인식하지 못하는 경우가 있었습니다. 이제 전체 반복이 완료될 때까지 기다립니다. (버그 #35145188)

InnoDB: ‘kill query’로 인해 인덱스 생성 시도가 중단된 경우, 다른 스레드가 테이블을 참조하거나 통계 백그라운드 스레드가 참조하는 경우 인덱스 삭제가 시도되지 않을 수 있었고, 이로 인해 단언 오류가 발생할 수 있었습니다. (버그 #34823462)
참고: 이 문제는 버그 #33399379의 회귀입니다.

InnoDB: 디버그 모드가 활성화된 상태에서 큰 테이블에 대해 B-tree 검증이 최대 대기 시간을 초과할 수 있었습니다. (버그 #34411425)

InnoDB: Windows에서, innodb_flush_log_at_trx_commit=1 설정에도 불구하고 리두 로그 파일이 플러시되지 않았습니다. (버그 #112078, 버그 #35713721)

InnoDB: ALTER TABLE EXCHANGE PARTITIONS 문으로 인해 발생할 수 있는 잠재적인 트랜잭션 롤백 문제가 수정되었습니다. (버그 #110869, 버그 #35352168)
참고: 이 문제는 버그 #33700835의 회귀입니다.

InnoDB: 여러 열에 걸친 전문(full-text) 인덱스 생성 시, ‘ERROR 1062 (23000): Duplicate entry ‘NULL-NULL”와 유사한 오류로 인해 인덱스 생성이 실패할 수 있었습니다. (버그 #109242, 버그 #33542939, 버그 #34846823)

InnoDB: 엔진 상태 로그의 마지막으로 감지된 교착 상태 섹션에서 스레드 및 쿼리 정보가 결합된 1024자만 표시되고 있었습니다. 쿼리 문자열 제한을 제거하여 수정했습니다. (버그 #80927, 버그 #23036096)

복제: 바이너리 로그 압축에 사용된 메모리가 계측되지 않았습니다. (버그 #35290223)

복제: 서버가 binlog_transaction_compression_level_zstd 서버 시스템 변수를 설정한 값을 따르지 않았습니다. (버그 #34833913)

복제: 릴레이 로그의 첫 번째 및 마지막 트랜잭션 타임스탬프가 performance_schema.binary_log_transaction_compression_stats 테이블에서 잘못된 값을 표시했습니다. 이 문제는 my_getsystime() 함수가 값을 10배로 반환했기 때문에 발생했으며, 이 값을 10으로 나누어 수정했습니다. (버그 #32022794)

복제: 4GB보다 큰 트랜잭션과 매우 작은 MASTER_HEARTBEAT_PERIOD 값이 설정된 경우, 하트비트 이벤트가 바이너리 로그 회전이 완료되기 전에 전송되어 RESET REPLICA 및 복제본에 영향을 미치는 유사한 문장이 중단될 수 있었습니다. (버그 #111149, 버그 #35431274)

복제: 다중 열 유니크 키에서 열 접두사만을 사용하는 경우, 쓰기 집합이 제대로 생성되지 않아 중복 키 오류가 발생할 수 있었습니다. (버그 #111027, 버그 #35404584)

그룹 복제: call_gr_incoming_connection_cb() 함수에서 발견된 메모리 누수가 수정되었습니다. (버그 #111529, 버그 #35526671)

Microsoft Windows: Windows에서, MySQL Configurator는 더 이상 생성된 my.ini 파일에 사용 중단된 sync-relay-log-info 시스템 변수를 추가하지 않습니다. (버그 #35500581)

Microsoft Windows: Windows에서, MySQL Configurator는 설정 프로세스를 완료하기 위한 “Next” 버튼 대신 “Finish” 버튼을 표시해야 했습니다. (버그 #112069, 버그 #35709559)

MySQL 8.0.23에서 발생한 변경 사항으로 인해, 이전에 GROUP_CONCAT() 함수가 NULL을 반환하던 경우가 더 이상 NULL을 반환하지 않게 되었습니다. (버그 #35730982)
참고: 이 문제는 버그 #32053547의 회귀입니다.

일부 하위 쿼리 술어를 반조인으로 변환할 때 올바르게 처리되지 않았습니다. (버그 #35710378)
참고: 이 문제는 버그 #35184353의 회귀입니다.

쿼리의 WHERE 조건에 일치하는 행이 없을 때, PREPARE로 준비된 쿼리의 결과가 동일한 쿼리를 직접 실행한 경우와 달랐습니다. (버그 #35689804)

텔레메트리 클라이언트에 명령줄에서 구성 옵션을 전달할 수 없었습니다.
또한, 텔레메트리 클라이언트의 구성 옵션 중 tracehelp는 각각 otel-traceotel-help로 이름이 변경되었습니다. (버그 #35616866)

세미조인의 내부 표현에서 하위 쿼리가 있는 경우, 해당 쿼리가 Internal error: Key not found라는 오류로 거부되었습니다. (버그 #35535934)
참고: 버그 #31401468, 버그 #34453026도 참조하십시오.

strings/ctype-ucs2.cc 파일에서 발생한 단언이 제거되었습니다. (버그 #35512282)

상관된 스칼라 하위 쿼리를 파생 테이블과 조인으로 변환하는 과정에서 GROUP BY 열에 불필요한 ANY_VALUE() 래퍼가 추가되었습니다. (버그 #35507109)

일부 INTERSECT 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #35504625)
참고: 버그 #35362424도 참조하십시오.

일부 경우 QUOTE() 함수가 예상했던 NULL 대신 이진 데이터를 반환했습니다. (버그 #35499232)

서버가 상관된 하위 쿼리를 파생 테이블로 올바르게 변환하지 못했습니다. (버그 #35497723)

Fedora에서 MySQL Cluster 8.1.0 패키지가 비클러스터 MySQL 패키지를 종속성으로 참조하지 않도록 수정했습니다. (버그 #35495002)

AddressSanitizer가 활성화된 경우 (ASAN으로 컴파일됨), MySQL 클라이언트가 상호작용 모드에서 달러 기호로 시작하는 경우 ASAN이 경고를 발생시키고 MySQL이 예기치 않게 종료되었습니다. (버그 #35493484)
참고: 이 문제는 버그 #35303407의 회귀입니다.

REPEAT() 함수에 대한 카운트 인수를 해석하는 과정에서, 캐시된 값이 도입되어 해석 시점과 실행 시점에 인수가 다르게 평가될 수 있었습니다.
이 문제를 해결하기 위해 이제 REPEAT()의 카운트 평가가 RPAD()LPAD()와 동일한 방식으로 처리되며, 부호 없는 정수로 값을 평가합니다. (버그 #35489153)

이전에 수동으로 audit_log_rotate() 를 실행했을 때, 출력 성능이 낮고 서버 작업량이 많은 경우, 함수가 응답하지 않는 것처럼 보일 수 있었습니다. (버그 #35397216)

일부 경우, QUOTE() 함수가 NULL을 반환했으며, 이는 이전에 null이 아닌 값으로 해석되었습니다. (버그 #35381715)
참고: 버그 #35145246, 버그 #35195181도 참조하십시오.

sql_modePAD_CHAR_TO_FULL_LENGTH가 포함된 경우, GRANT EXECUTE ON PROCEDURE 문이 처음 실행된 후에는 작동했지만, FLUSH PRIVILEGES 또는 MySQL 서버 재시작 후에는 사용자가 절차를 실행할 수 없었습니다. (버그 #35380295)

GRANT 구문에서 데이터베이스 이름 패턴 안에 있는 ‘_‘ 와일드카드를 백슬래시로 이스케이프 처리한 경우, SHOW DATABASESUSE database_name 쿼리가 예상대로 결과를 반환하지 않았습니다. (버그 #35338567)

MySQL 8.0.30에서 첫 번째 호출 이후 올바르게 실행되지 않았던 저장 프로그램을 수정한 이전 수정 사항이 SET 구문을 포함한 경우를 처리하지 못했습니다.
Hao Lu에게 감사드립니다. (버그 #35328028)
참고: 이 문제는 버그 #33754993의 회귀입니다.

데이터 사전 및 저장 프로시저 코드에서 잘못된 참조를 여러 개 수정하거나 제거했습니다. (버그 #35325895, 버그 #35325909, 버그 #35325920, 버그 #35325935)

MySQL 명령줄 클라이언트가 --comments=on 옵션과 함께 실행될 때, MySQL 내장 명령 이전에 있는 여러 줄 주석을 제대로 처리하지 못했습니다. (버그 #35290350)

내부 Item_typecast_year 클래스에 고유한 print() 멤버 함수 재정의가 없어, 뷰 또는 테이블에 표시되는 정의가 잘못될 수 있었습니다. (버그 #35244286)

유도된 조건 하강 쿼리에서 조건에 있는 열을 대체해야 할 때, 일치하는 항목이 있을 것으로 예상되었으나, ROLLUP으로 감싸진 대체 항목이 있는 경우 일치 항목이 없다고 나왔습니다. (버그 #35211828)
참고: 이 문제는 버그 #33349994의 회귀입니다.

저장 함수와 관련된 문제가 이전에 열 간의 값을 복사하는 내부 함수 개선 작업의 회귀로 확인되었습니다. (버그 #35150382)
참고: 이 문제는 버그 #32742537의 회귀입니다.

유도 테이블에 하강시켜야 할 조건이 외부 참조 필드 하나와 쿼리 블록에 로컬인 필드 하나를 포함할 때, 항목 참조 정보의 일관성을 확인하는 단언이 실패했습니다. 이 문제는 각 필드에 대한 정보 수집 후, 의존성 및 컨텍스트가 지워지지 않기 때문에 발생했습니다.
이를 해결하기 위해 새로운 필드의 정보를 수집하기 전에 의존성과 컨텍스트 정보를 지우도록 수정했습니다. (버그 #35102220)

상업용 빌드에 번들로 포함된 Kerberos 라이브러리를 1.21.2 버전으로 업데이트했습니다. (버그 #35001935)

해시 조인에서 probe 입력이 비어 있을 경우, 결과가 비어 있음을 알기 때문에 build 입력을 읽을 필요가 없습니다. 이제 왼쪽 조인 또는 반조인의 경우, probe 입력을 먼저 읽습니다. 이 조인 유형에서는 build 입력이 비어 있더라도 probe 입력을 읽어야 하지만, 그 반대는 아닙니다. (버그 #34940000)

트리거가 있는 테이블에 삽입 작업이 항상 제대로 처리되지 않았습니다. (버그 #34920120)
참고: 버그 #35178672, 버그 #35195079도 참조하십시오.

DESCRIBE 구문에서 FORMAT = JSON을 사용할 때, 올바르게 처리되지 않았고, 디버그 빌드에서 단언 오류를 발생시키는 경우가 있었습니다. (버그 #34909766)

복잡한 공통 테이블 표현식을 사용하는 일부 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #34900334)
참고: 이 문제는 버그 #34377854의 회귀입니다.

윈도우 함수가 포함된 일부 쿼리가 올바르게 하강되지 않았습니다. (버그 #34778435)

SELECT DISTINCT 쿼리의 행 추정치가 동일한 SELECT에서 DISTINCT 없이도 동일하게 산정되었습니다. 이로 인해 비용 추정치가 왜곡되어 비효율적인 쿼리 계획이 선택될 수 있었습니다. (버그 #34762651)

조인 최적화 중 발생할 수 있는 예기치 않은 조건을 처리했습니다. (버그 #31401468)
참고: 버그 #34350945도 참조하십시오.

하나 이상의 공통 테이블 표현식을 포함하는 준비된 문을 실행할 때 디버그 빌드에서 단언 오류가 발생했습니다. (버그 #111955, 버그 #35671595)

Enterprise Linux에서 상업용 빌드뿐만 아니라 모든 빌드에 대해 krb5-devel 빌드 요구 사항을 변경했습니다. (버그 #111596, 버그 #35546449)

EXPLAIN FORMAT=TREE에서 해시 조인에 대한 하위 쿼리가 누락되었습니다.
Wen He 및 Tencent 팀에 감사드립니다. (버그 #111564, 버그 #35537921)

일부 경우, 파티셔닝 함수 오류 후 서버가 예기치 않게 종료되었습니다. (버그 #111443, 버그 #35507164)

유도 테이블로 하강된 조건을 처리할 때, 기본 필드가 뷰 참조인 경우 해당 참조를 제거하고 참조된 표현식을 복제합니다. 그러나, 이 표현식이 외부 조인의 내부에 있는 테이블의 상수 표현식인 경우에는 정상적인 상수로 처리할 수 없었습니다. 이 문제는 참조를 제거할 때 이러한 정보가 손실되어 잘못된 결과가 발생했습니다.
이를 해결하기 위해 이러한 경우에 조건 하강을 피하도록 수정했습니다. (버그 #111355, 버그 #35634714)

CREATE ROLEDROP ROLE 구문이 고아 SQL 객체를 확인할 때 올바르게 처리되지 않았습니다. (버그 #111303, 버그 #35471453)

동일한 크기의 BINARY 열과 VARBINARY 열을 조인할 때, 두 열의 값이 동일한 경우에도 일치하는 행이 반환되지 않았습니다. (버그 #111290, 버그 #35467555)

상관된 스칼라 하위 쿼리 변환과 관련된 MySQL 8.0.24의 작업 중 처리되지 않은 경우가 발견되었습니다. 스칼라 하위 쿼리가 상관된 것 외에도 그룹화된 경우, 그룹화된 파티션별로 파생 테이블에 최대 하나의 행만 있어야 함을 확인해야 합니다. (버그 #111189, 버그 #35473657)

역할이 부여되지 않은 사용자에게 SET ROLE 구문을 실행하면 MySQL이 해당 사용자 계정과 직접적으로 연관된 모든 권한을 잃어버리는 문제가 발생했습니다. 예를 들어, SET ROLE ALL, SET ROLE NONE, 또는 SET ROLE DEFAULT 이후에 이전에 성공했던 SHOW TABLES 명령이 사용자 권한을 인식하지 못해 실패했습니다. (버그 #110997, 버그 #35386565)

Clone_Snapshot::extend_and_flush_files()는 항상 OS_CLONE_DATA_FILE 유형의 파일을 생성했습니다. 이 함수는 redo 로그 파일을 처리하는 flush_redo()를 사용하는데, redo 로그 파일은 OS_CLONE_LOG_FILE 유형이어야 합니다. 이로 인해 os_file_set_size()에서 오류가 발생할 수 있었습니다.
이 문제는 새 파일을 생성할 때 파일 유형이 올바르게 설정되도록 수정되었습니다.
Tencent에 감사드립니다. (버그 #110569, 버그 #35240055)

--initialize 또는 --initialize-insecure를 사용하여 MySQL 서버를 초기화할 때, autocommitOFF로 설정되면 서버가 제대로 초기화되지 않았습니다. 이 경우 sys 스키마가 존재하지 않았습니다.
이번 릴리스에서는 이 시나리오에서 autocommit의 기본값이 아닌 값이 무시됩니다. (버그 #110535, 버그 #35254025)

ORDER BY DESC에서 잘못된 인덱스를 선택하여 낮은 한계 탐색이 제대로 작동하지 않았습니다. (버그 #107626, 버그 #34306497)

Leave a Comment



이 문서 공유

8.2.0 변경 사항 (2023-10-25 Innovation Release)

링크 복사

CONTENTS