MySQL Innovation Release Note

8.3.0 변경 사항 (2024-01-16 Innovation Release)

Estimated reading: 7 minutes 42 views

공식 문서: Changes in MySQL 8.3.0 (2024-01-16, Innovation Release)

감사 로그 관련 사항

일부 경우, audit_log_read( audit_log_read_bookmark() ) 호출이 메모리 부족 오류를 유발했습니다. (버그 #35957453)

인증 관련 사항

Microsoft Windows: 서버 측 authentication_ldap_sasl 플러그인이 이제 Windows 플랫폼에서 지원됩니다. 이로 인해 Windows 클라이언트 프로그램도 authentication_ldap_sasl_client 플러그인을 사용하여 Kerberos를 통한 GSSAPI 인증을 할 수 있습니다.
자세한 내용은 SASL 기반 LDAP 인증을 참조하십시오. (WL #14056)

컴파일 관련 사항

Microsoft Windows: MySQL이 Visual Studio 2022를 사용하여 올바르게 컴파일되지 않았습니다. (버그 #35967676)

-DWITH_ZLIB=system 체크가 개선되었습니다. (버그 #35968195)

MySQL을 컴파일할 때 필요한 최소 Clang 버전이 Clang 10에서 Clang 12로 상향되었습니다. (버그 #35868054)

macOS에서 OpenTelemetry 컴포넌트가 시스템 protobuf 라이브러리로 컴파일되지 않았으며, 대신 -DWITH_PROTOBUF=bundled CMake 옵션을 사용하여 번들 버전을 요구했습니다. (버그 #35821812)

XCode 14 이상을 사용할 때 코드 서명과 관련된 컴파일러 경고가 제거되었습니다. (버그 #35818055)

Windows에서 Visual Studio로 컴파일할 때 __cplusplus 매크로가 활성화되었습니다. (버그 #35808500)

MySQL은 이제 Boost C++ 라이브러리를 번들로 포함하며, 로컬 또는 외부 소스를 사용하는 지원이 제거되었습니다. 이제 MySQL을 컴파일할 때 번들 Boost 라이브러리만 사용됩니다.
이 변경으로 인해 WITH_BOOST, DOWNLOAD_BOOST, DOWNLOAD_BOOST_TIMEOUT CMake 빌드 옵션이 제거되었습니다. (버그 #35805629)

지원되지 않는 플랫폼(SUSE 12, EL6, Ubuntu 16/18)에 대한 참조가 제거되었습니다.
추가 변경 사항: MySQL 8.0.30에서 제거된 WITH_SYSTEM_LIBS CMake 옵션에 WITH_ZLIB이 다시 추가되었으며, 모든 인증 플러그인이 비활성화된 경우 WITH_FIDO가 ‘none’으로 설정되었습니다. (버그 #35795161)
참고: 버그 #34015600도 참조하십시오.

MySQL을 컴파일하는 데 필요한 기본 C++ 표준 언어 버전이 C++17에서 C++20으로 변경되었습니다. (버그 #35781622)

EL8에서 openssl3-fips-DWITH_SSL CMake 옵션에 전달하여 대체 OpenSSL 시스템 패키지 지원을 추가했습니다. 이는 이미 openssl3을 지원하고 있었습니다. LDAP 및 Kerberos와 같은 인증 플러그인은 이러한 대체 OpenSSL 버전을 지원하지 않으므로 비활성화됩니다. (버그 #35638881)

Linux: mold(버전 2 이상) 링크 지원이 추가되었습니다. 이에 따라 -DWITH_LD=mold|lld 옵션이 추가되었으며, 기본값은 비어 있어 표준 링커가 사용됩니다. 이 옵션은 Enterprise Linux에서 지원되지 않으며, 이 플랫폼에서는 ld 링커를 사용해야 합니다.
이 변경으로 인해 기존의 -DUSE_LD_LLD CMake 옵션이 제거되고, 대신 새 옵션에 lld를 전달할 수 있습니다. (버그 #34099162)

Clang으로 빌드할 때 MYSQL_MAINTAINER_MODE에서 -Wdocumentation이 활성화되었으며, 이로 인해 발견된 부정확한 문서 주석이 수정되었습니다. (버그 #31037561)

s390x 아키텍처용 사이클 타이머가 개선되었습니다.
Jonathan Albrecht에게 감사드립니다. (버그 #112845, 버그 #35949958)

Linux에서 컴파일할 때, OpenSSL 3 라이브러리에 대한 no-error=deprecated-declarations 플래그가 no-deprecated-declarations로 변경되었습니다.
karry zhang에게 감사드립니다. (버그 #112209, 버그 #35755328)

컴포넌트 관련 사항

MySQL Enterprise Data Masking 및 De-Identification 컴포넌트가 이제 보조 서버나 복제본의 데이터를 메모리로 플러시하는 기능을 포함합니다. 이를 수행하는 방법은 다음과 같습니다:

자세한 내용은 MySQL Enterprise Data Masking 및 De-Identification을 참조하십시오. (WL #15738)

MySQL Enterprise Edition은 이제 component_telemetry 컴포넌트를 사용하여 OpenTelemetry 형식으로 서버 메트릭 데이터를 수집하는 것을 지원합니다. 이 데이터는 설정 가능한 엔드포인트로 전달되며, OpenTelemetry 호환 시스템에서 사용할 수 있습니다.

참고
텔레메트리 메트릭은 Linux 플랫폼에서만 MySQL Enterprise Edition에서 지원됩니다.

Telemetry를 참조하십시오. (WL #15200)

설정 관련 사항

Microsoft Windows: Windows에서 _MySQL Configurator_의 ‘시작 메뉴 링크 업데이트’ 옵션이 작동하지 않았습니다. (버그 #35848493)

Microsoft Windows: Windows에서 _MySQL Configurator_가 이제 인플레이스 업그레이드를 수행할 수 있습니다. 예를 들어, MySQL Server 8.3.0이 MySQL Server 8.2.0 설치를 대체할 수 있으며, 데이터 디렉토리의 업데이트 및 이름 변경을 포함합니다. (WL #15882)

사용 중단 및 제거 관련 사항

InnoDB: --innodb--skip-innodb 서버 옵션은 MySQL 5.6에서 사용 중단되었으며 그 이후로 아무런 효과가 없었습니다. 이제 이 옵션들이 제거되었습니다.

참고InnoDB 저장소 엔진은 항상 활성화되어 있으며, 이를 비활성화하는 것은 불가능합니다.

(WL #10909)

InnoDB: 사용 중단된 InnoDB memcached 플러그인이 MySQL 8.0.22 이후로 제거되었습니다. (WL #15116)

복제: 이전 버전의 MySQL에서 사용 중단된 여러 서버 옵션 및 변수가 MySQL 8.3에서 제거되었습니다. 이제 이러한 옵션이나 변수를 사용하려고 하면 서버가 구문 오류를 발생시킵니다. 영향을 받은 옵션 및 변수는 다음과 같습니다:

  • --slave-rows-search-algorithms: 복제 적용기가 업데이트 또는 삭제를 적용할 때 테이블 행을 조회하는 데 사용하는 알고리즘은 이제 항상 HASH_SCAN, INDEX_SCAN이며, 더 이상 사용자가 구성할 수 없습니다.
  • log_bin_use_v1_events: 이는 MySQL 5.7 이상을 실행하는 소스 서버가 더 이상 지원되거나 유지 관리되지 않는 이전 버전의 MySQL로 복제할 수 있게 했습니다.
  • --relay-log-info-file, --relay-log-info-repository, --master-info-file, --master-info-repository: 적용기 메타데이터 저장소 및 연결 메타데이터 저장소에 파일을 사용하는 대신 이제는 충돌 안전 테이블이 사용되며 더 이상 파일을 지원하지 않습니다. 복제 메타데이터 저장소를 참조하십시오.
  • transaction_write_set_extraction
  • group_replication_ip_whitelist: group_replication_ip_allowlist로 대체하십시오.
  • group_replication_primary_member: 더 이상 필요하지 않으며, 대신 Performance Schema의 replication_group_members 테이블의 MEMBER_ROLE 열을 확인하십시오.

(WL #11007, WL #12899, WL #12927, WL #13161, WL #13959, WL #13951, WL #15861)

복제: 글로벌 트랜잭션 식별자(GTID)를 사용한 복제에서는 이미 적용된 트랜잭션이 자동으로 무시되므로 IGNORE_SERVER_IDS가 GTID 모드와 호환되지 않습니다. 이 옵션을 GTID 기반 복제와 함께 사용하는 것은 MySQL 8.0에서 사용 중단되었으며, MySQL 8.3에서는 더 이상 허용되지 않습니다. 이제 gtid_modeON인 경우, 서버 ID 목록이 비어 있지 않은 IGNORE_SERVER_IDS 옵션과 함께 CHANGE REPLICATION SOURCE TO 문을 사용할 수 없습니다. 마찬가지로, 무시할 서버 ID 목록을 사용하여 생성된 기존 복제 채널이 있는 경우 SET gtid_mode=ON도 거부됩니다. GTID 기반 복제를 시작하기 전에 관련 서버에서 무시할 서버 ID 목록이 없는지 확인하고, SHOW REPLICA STATUS 명령을 사용하여 이를 확인하십시오. 그런 경우, 다음과 같이 서버 ID 목록을 비워서 설정하여 목록을 지울 수 있습니다:

CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();

자세한 내용은 CHANGE REPLICATION SOURCE TO 문GTID를 사용한 복제의 제한 사항을 참조하십시오. (WL #11005)

그룹 복제: 그룹 복구 시 더 이상 View_change_log_event를 사용하여 이진 로그에서 그룹 구성원의 변경 사항을 기록하지 않습니다. 이제 MySQL 8.3.0 이상 버전을 실행하는 모든 그룹 구성원이 있는 경우, 구성원은 압축된 복구 메타데이터를 공유하며, 새 구성원이 그룹에 가입할 때 해당 이벤트는 로그에 기록되지 않습니다. 복구 메타데이터에는 GCS 뷰 ID, 인증된 트랜잭션의 GTID_SET, 인증 정보가 포함됩니다.
이 작업의 일환으로 group_replication_view_change_uuid 시스템 변수가 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 이 변수에 대한 대체 기능이나 대안은 계획되어 있지 않습니다. (WL #14595)

API: 다음과 같은 사용 중단된 C API 함수들이 제거되었습니다:

mysql_shutdown()은 MySQL 8.0에서 사용 중단되었으며, mysql_ssl_set()은 MySQL 8.0.35 및 MySQL 8.2.0에서 사용 중단되었습니다. 나머지 함수들은 MySQL 5.7.11에서 사용 중단되었습니다.
이러한 변경 사항으로 인해 MySQL C API 라이브러리 버전이 22.1에서 23.0으로 상향되었습니다. (버그 #36029117, WL #10911, WL #11092, WL #13448)

컴파일러가 이제 사용 중단된 mysql_stmt_bind_param() C API 함수에 대해 사용 중단 경고를 발생시킵니다. 이 함수는 MySQL 8.2.0에서 사용 중단되었으며, mysql_stmt_bind_named_param()으로 대체되었습니다. (버그 #35819974)

--character-set-client-handshake--old-style-user-limits 서버 옵션은 매우 오래된 MySQL 버전과의 호환성을 위해 사용되었으나, 더 이상 유용한 목적을 제공하지 않으므로 제거되었습니다. (WL #13221, WL #13229)

MySQL 8.0.23에서 사용 중단된 FLUSH HOSTS 문이 제거되었습니다. 호스트 캐시를 지우려면 Performance Schema의 host_cache 테이블을 비우거나 mysqladmin flush-hosts를 사용하십시오. (WL #14330)

GTID를 사용하는 복제 관련 사항

이번 릴리스에서는 MySQL 복제와 그룹 복제에서 사용하는 글로벌 트랜잭션 식별자(GTID)의 형식을 확장하여 트랜잭션 그룹을 식별할 수 있도록 태그를 추가했습니다. 이를 통해 특정 트랜잭션 그룹의 GTID에 고유한 이름을 지정할 수 있으며, 예를 들어 데이터 작업이 포함된 트랜잭션과 관리 작업에서 발생한 트랜잭션을 GTID만 비교하여 쉽게 구분할 수 있습니다.
새로운 GTID 형식은 UUID:<TAG>:NUMBER로, 여기서 <TAG>는 최대 8자 길이의 임의 문자열입니다. 이는 gtid_next 시스템 변수를 AUTOMATIC:<TAG>로 설정하여 활성화됩니다. 이 태그는 현재 세션에서 생성된 모든 트랜잭션에 대해 유지되며, 해당 트랜잭션이 커밋될 때 또는 그룹 복제를 사용하는 경우 인증 시점에 적용됩니다. 또한 gtid_next<UUID>:<TAG>:NUMBER로 설정하여 단일 트랜잭션의 UUID를 임의의 값으로 설정하고 고유한 태그를 지정할 수도 있습니다. 두 경우 모두 복제 토폴로지에서 태그가 고유하다는 것을 사용자가 보장해야 합니다.
기존의 UUID:NUMBER 형식의 GTID는 변함없이 계속 지원되며, 기존 GTID를 사용하는 복제 설정에 대한 변경은 필요하지 않습니다.
gtid_nextAUTOMATIC:<TAG> 또는 <UUID>:<TAG>:NUMBER로 설정하려면 이번 릴리스에서 추가된 TRANSACTION_GTID_TAG 권한이 필요합니다. 이 권한은 트랜잭션을 생성하는 서버와 레플리카 적용기 스레드의 PRIVILEGE_CHECKS_APPLIER에 모두 필요합니다. 이는 또한 관리자가 SET @gtid_next=AUTOMATIC:<TAG> 또는 SET @gtid_next=<UUID>:<TAG>:NUMBER의 사용을 특정 MySQL 사용자 또는 역할 집합으로 제한하여 관련된 데이터나 운영 도메인에 속한 사용자만 새로운 태그가 있는 트랜잭션을 커밋할 수 있도록 할 수 있음을 의미합니다.
업그레이드와의 상호작용: 이전 버전의 MySQL에서 MySQL 8.3으로 업그레이드할 때, 이미 BINLOG_ADMIN 권한이 부여된 사용자 계정이나 역할은 자동으로 TRANSACTION_GTID_TAG 권한을 부여받습니다.
내장 함수 GTID_SUBSET(), GTID_SUBTRACT(), WAIT_FOR_EXECUTED_GTID_SET()도 태그가 지정된 GTID와 호환됩니다.
자세한 내용은 온라인 서버에서 GTID 모드 변경gtid_next 시스템 변수, TRANSACTION_GTID_TAG 권한 설명을 참조하십시오. (WL #15294)

INFORMATION_SCHEMA 관련 사항

FULLTEXT 인덱스가 있는 테이블에서 OPTIMIZE TABLE을 실행할 때, 예상 시간에 인덱스가 완전히 최적화되지 않아 추가 처리가 필요했습니다. (버그 #35502793)

이번 릴리스에서는 사용 중단된 INFORMATION_SCHEMA.PROCESSLIST 테이블의 사용을 추적하는 두 가지 상태 변수를 구현했습니다:

(WL #16085)

MySQL Enterprise 관련 사항

데이터 마스킹 컴포넌트는 이제 관련 내부 masking_dictionaries 테이블을 저장할 전용 스키마를 지정하는 기능을 지원합니다. 이전에는 mysql 시스템 스키마만 저장 옵션으로 제공되었습니다. 새로운 component_masking.masking_database 읽기 전용 변수를 사용하여 서버 시작 시 대체 스키마 이름을 설정하고 유지할 수 있습니다. (WL #15733)

옵티마이저 관련 사항

HASH 필드를 사용하여 고유성을 확인할 때 사용된 해싱 알고리즘의 성능이 좋지 않았습니다. (버그 #109548, 버그 #34959356)

패키징 관련 사항

중요 변경 사항: MySQL 다운로드 패키지 서명에 사용되는 GnuPG 빌드 키(A8D3785C)가 업데이트되었습니다. 이전 GnuPG 빌드 키(3A79BD29)는 2023-12-14에 만료되었습니다. GnuPG 서명 확인을 사용하여 MySQL 다운로드 패키지의 무결성과 진위를 확인하는 방법에 대한 자세한 내용이나 공개 GnuPG 빌드 키 사본을 얻으려면 GnuPG를 사용한 서명 확인을 참조하십시오.
GnuPG 키 업데이트로 인해, repo.mysql.com을 사용하는 시스템은 apt 또는 yum을 사용하여 MySQL 8.0.36 이상 또는 MySQL 8.3.0 이상으로 업그레이드할 때 서명 확인 오류가 발생할 수 있습니다. 이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오:

  1. https://dev.mysql.com/downloads/에서 MySQL APT 또는 YUM 저장소 설정 패키지를 수동으로 다시 설치합니다.
  2. MySQL GnuPG 공개 키를 다운로드하여 시스템 GPG 키링에 추가합니다.

Performance Schema 관련 사항

서버가 과부하 상태에서 SELECT * FROM performance_schema.data_locks를 실행하면 MySQL이 과도한 메모리를 사용하고 예기치 않게 종료될 수 있었습니다.
이번 릴리스에서는 이와 같은 쿼리를 실행할 때 사용되는 메모리가 memory/performance_schema/data_container로 계측되어 메모리 사용량을 관찰할 수 있습니다. (버그 #35240825)

서버가 과부하 상태에서 SELECT * FROM performance_schema.data_locks를 실행하면 InnoDB에서 교착 상태가 발생할 수 있었습니다. (버그 #35068461)
참고: 버그 #35240825 참조.

저장 프로그램을 실행할 때 퍼포먼스 스키마 계측이 불필요한 오버헤드를 초래했습니다.
이번 릴리스부터 statement/sp/% 저장 프로시저 마이크로 명령어는 statement/sp/stmt를 제외하고 기본적으로 비활성화됩니다. (버그 #27934653)

퍼포먼스 스키마의 명령문 계측 성능이 개선되었습니다. 특히 MESSAGE_TEXT 데이터를 수집하는 과정이 더 효율적으로 변경되었습니다. (버그 #112621, 버그 #35916912)

특정 상황에서, 서버가 부하를 받을 때 퍼포먼스 스키마가 고유 키가 정의되어 있음에도 불구하고 동일한 행을 두 번 반환할 수 있었습니다. 이 문제는 쿼리 다이제스트, 사용자 이름, 호스트 이름 및 계정 이름(user@host)에 대해 발생할 수 있었습니다. (버그 #110555, 버그 #35239372)

코드 분석을 통해 발견되었으나 사용자에게 보고된 적은 없는 performance_schema.table_handles의 잠재적 문제를 제거했습니다. (버그 #108501, 버그 #34606682)

플러거블 인증

이번 릴리스부터 PAM 인증 플러그인 디버깅에 사용되는 AUTHENTICATION_PAM_LOG 환경 변수의 동작이 다음과 같이 변경되었습니다:

  • AUTHENTICATION_PAM_LOG를 임의의 값으로 설정해도 더 이상 비밀번호가 진단 메시지에 포함되지 않습니다.
  • 비밀번호를 진단 메시지에 포함하려면 AUTHENTICATION_PAM_LOG=PAM_LOG_WITH_SECRET_INFO로 설정해야 합니다.

자세한 내용은 PAM 인증 디버깅을 참조하십시오. (버그 #74313, 버그 #20042010)

스레드 풀 관련 사항

MySQL 퍼포먼스 스키마에 추가 스레드 풀 연결 정보를 추가했습니다. 세부 사항은 다음과 같습니다:

  • 각 스레드 풀 연결에 대한 정보를 포함하는 tp_connections 테이블이 추가되었습니다.
  • tp_thread_state 테이블에 TIME_OF_ATTACH, MARKED_STALLED, STATE, EVENT_COUNT, ACCUMULATED_EVENT_TIME, EXEC_COUNT, ACCUMULATED_EXEC_TIME 열이 추가되었습니다.
  • tp_thread_group_state 테이블에 EFFECTIVE_MAX_TRANSACTIONS_LIMIT, NUM_QUERY_THREADS, TIME_OF_LAST_THREAD_CREATION, NUM_CONNECT_HANDLER_THREAD_IN_SLEEP, THREADS_BOUND_TO_TRANSACTION, QUERY_THREADS_COUNT, TIME_OF_EARLIEST_CON_EXPIRE 열이 추가되었습니다.

자세한 내용은 Performance Schema Thread Pool Tables를 참조하십시오. 스레드 풀 플러그인에 대한 자세한 내용은 MySQL Enterprise Thread Pool을 참조하십시오. (작업 항목 #15515)

기능 추가 및 변경 사항

중요 변경 사항; 복제: binlog_transaction_dependency_tracking 서버 시스템 변수가 MySQL 8.2.0에서 사용 중단되었으며, 이 변수가 최종적으로 제거될 준비를 위해 기본값이 이제 WRITESET으로 설정됩니다. 이 변수의 기능을 대체할 계획은 없으며, 나중에 서버에 내부적으로 포함될 예정입니다. (WL #15861)

중요 변경 사항: 번들로 제공되는 OpenSSL 라이브러리가 있는 플랫폼의 경우, MySQL 서버에 연결된 OpenSSL 라이브러리가 버전 3.0.12로 업데이트되었습니다. OpenSSL 버전 3.0.12에서 수정된 문제는 https://www.openssl.org/news/cl30.txt에서 확인할 수 있습니다. (버그 #36033684)

성능; NDB 클러스터: NDB 이진 로그 주입기는 아레나 할당을 사용합니다. 일부 경우, 스키마 변경을 처리하고 이진 로그의 현재 상태를 추적할 때 아레나는 스레드 로컬 포인터를 변경하여 강제로 처리되었습니다. 이번 릴리스에서는 다음과 같은 개선 사항이 적용되었습니다:

  • 스레드 로컬 포인터 변경을 제거하고, 명시적인 인수를 사용하여 에포크 처리 중에 할당에 사용되는 아레나를 제공합니다.
  • 다음 에포크에 아레나를 재사용하여 메모리 해제 및 재설정의 필요성을 제거합니다.

이 변경 사항은 내부적인 것이지만, 연속적인 에포크 동안 메모리 해제 및 재할당 절차를 개선하여 성능을 향상시킬 수 있습니다. (WL #15002)

그룹 복제: group_replication_set_as_primary() 함수는 이제 새로운 기본(primary)이 선출되기 전에 DDL 및 DCL 문이 완료될 때까지 대기합니다. 이에는 다음과 같은 문이 포함됩니다: ALTER DATABASE, ALTER FUNCTION, ALTER INSTANCE, ALTER PROCEDURE, ALTER SERVER, ALTER TABLESPACE, ALTER USER, ALTER VIEW, CREATE DATABASE, CREATE FUNCTION, CREATE PROCEDURE, CREATE ROLE, CREATE SERVER, CREATE SPATIAL REFERENCE SYSTEM, CREATE TABLESPACE, CREATE TRIGGER, CREATE USER, CREATE VIEW, DROP DATABASE, DROP FUNCTION, DROP PROCEDURE, DROP ROLE, DROP SERVER, DROP SPATIAL REFERENCE SYSTEM, DROP TABLESPACE, DROP TRIGGER, DROP USER, DROP VIEW, GRANT, RENAME TABLE, REVOKE.
이들은 MySQL 8.1에서 추가되었거나, 이전에 이미 이 기능을 지원하는 문에 추가된 문입니다. MySQL 8.3에서 지원되는 모든 문 목록을 포함한 자세한 정보는 MySQL 8.3 매뉴얼의 group_replication_set_as_primary() 함수 설명을 참조하십시오. (WL #15752)

include/my_bit.hsql/join_optimizer/bit_utils.h의 일부 비트 함수를 C++20에 추가된 표준 라이브러리 함수(std::popcount(), std::has_single_bit() 등)로 대체했습니다. 대체된 함수에는 is_single_bit(), my_clear_highest_bit(), my_bit_log2(), my_round_up_to_next_power(), my_bit(), my_count_bits() 등이 포함됩니다. (버그 #35813111)

새로운 시스템 변수 explain_json_format_version을 추가하여 EXPLAIN FORMAT=JSON 명령문의 JSON 출력 형식 버전을 결정할 수 있습니다. 1(기본값)은 이전 MySQL 버전에서 사용된 동일한 JSON 출력 형식을 사용합니다. 이 변수를 2로 설정하면 이번 릴리스에서 도입된 새로운 버전 2 형식을 사용합니다. 버전 2 형식은 액세스 경로를 기반으로 하며, 향후 MySQL 옵티마이저와의 호환성을 개선하기 위해 설계되었습니다.
자세한 내용과 예시는 실행 계획 정보 얻기를 참조하십시오. (WL #15684)

버그 수정

중요 변경 사항; 복제: binlog_transaction_dependency_trackingWRITESET 또는 WRITESET_SESSION으로 설정된 경우, binlog_formatMIXED일 때 트랜잭션의 statement 부분에 대해 종속성이 추적되지 않았으며, 제대로 계산되지 않아 다중 스레드 복제(MTA) 레플리카 간에 충돌이 발생했습니다.
이러한 방식으로 충돌 감지를 위해 writeset 정보를 사용하는 것은 false negative를 초래할 수 있으므로, 이제 writeset을 사용한 충돌 확인을 row 기반 로깅(binlog_format=ROW)으로만 제한합니다. (버그 #35931702)

InnoDB: InnoDB 테이블 통계가 대량 로드된 문장에 의해 업데이트되지 않았습니다. (버그 #35889669)

InnoDB: LHS 및 RHS 비교 값이 관련된 오류 처리기에 추가되었습니다. (버그 #35814266)

InnoDB: recv_apply_hashed_log_recs()가 DB_CORRUPT 오류 코드를 더 잘 처리할 수 있도록 개선되었습니다. (버그 #35595808)

InnoDB: 적응형 해시 인덱스(AHI)에 사용된 해시 함수가 성능을 향상시키기 위해 개선되었습니다. (버그 #35449386)

InnoDB: 시작 시 변경 버퍼 엔트리가 존재할 경우, 비활성화된 innodb_validate_tablespace_paths 옵션이 더 이상 적용되지 않고 MySQL 서버가 모든 테이블 스페이스를 유효성 검사를 진행합니다. 그렇지 않으면 보조 인덱스가 손상될 수 있습니다. (버그 #35208990)

InnoDB: 동시 DDL 및 DML 작업 중, 온라인 로그가 너무 커질 경우 DDL이 실패할 수 있었습니다. 이 문제를 방지하기 위해 버퍼 처리 방식이 개선되었습니다. (버그 #35115601)

InnoDB: 모든 버퍼 풀 페이지에서 AHI 인덱스를 지우는 동안 블록 상태가 블록 뮤텍스를 획득하기 전에 BUF_BLOCK_MEMORY로 변경될 수 있어 예기치 않은 중단이 발생할 수 있었습니다. (버그 #35037114)

InnoDB: Innodb_row_lock_current_waits 변수가 행 잠금이 없는 경우에도 0이 아닌 값을 표시할 수 있었습니다.
Bin Wang에게 감사를 표합니다. (버그 #112532, 버그 #35849707)

InnoDB: 복구 중 FIL_PAGE_LSN을 처리하는 관련된 중복 코드를 제거했습니다.
Alexi Xing에게 감사를 표합니다. (버그 #108731, 버그 #34687854)

복제: 이벤트를 적용하는 동안 오류가 발생한 경우, 현재 이벤트가 아닌 이전 이벤트에 오류가 잘못 보고되는 경우가 있었습니다. (버그 #35945223)

복제: 소스에서 binlog_transaction_compression을 활성화하면 레플리카에서 ER_RPL_MTA_STATISTICS 메시지가 억제되었습니다. (버그 #35923771)

복제: Performance Schema 메모리 계측에서 Log_event 이벤트에 사용된 현재 바이트 수를 계산하는 문제로 인해 레플리카의 sql/replica_sql 스레드가 끝없이 증가하는 것처럼 보였습니다. (버그 #35546877)

복제: CREATE TABLE AS SELECT를 복제하는 동안 복제를 중지하면 서버가 종료되었습니다. (버그 #33934013)

그룹 복제: Performance Schema setup_instruments 테이블의 memory/group_rpl/Gcs_message_data::m_buffer 키가 싱글-프라이머리 모드에서 음수 값을 보고할 수 있었습니다. (버그 #35940509)

그룹 복제: 주요 장애가 발생한 후 모든 인스턴스가 도달할 수 있을 때, 클러스터 재부팅이 중단되고 인스턴스를 다시 조인하지 못했습니다.
이는 이전 세컨더리 노드들이 노드에 연결할 수 있는 오래된 자격 증명을 유지하여 부분적으로 연결되었기 때문입니다. 두 번째 서버가 그룹에 다시 조인하려고 시도할 때, 프라이머리에 접속하고 프라이머리에게 add_node() 명령을 보낼 수 있었으나 프라이머리에서 역으로 연결하지 못했습니다. 해결 방법으로는 add_node()를 받을 때 새 노드와 양방향 통신이 확립되었는지 확인하는 것입니다. (버그 #35763950)
참고: 버그 #34898318도 참조하십시오.

그룹 복제: xcom_tcp_server_startup()에서 발생할 수 있는 잠재적 메모리 누수가 제거되었습니다. (버그 #35594709)

그룹 복제: 관리되는 복제 채널(비동기 연결 장애 조치 메커니즘이 활성화된 채널)에 대한 모니터 I/O 스레드가 여러 가지 이유로 실패할 수 있으며, 오류 로그 항목에 원인이 명시되지 않았고 다음과 같은 경고만 보고되었습니다: [Warning] [MY-013684] [Repl] The Monitor IO thread failed to detect if the source belongs to the group majority on the source (host:127.0.0.1 port:3310 network_namespace:) for channel ‘read_replica_replication’. (버그 #35082638)

그룹 복제: plugin/group_replication/src/group_actions/group_actions_transaction_controller.cc에 있는 Transaction_monitor_thread::start()가 획득한 잠금이 명시적으로 해제되지 않았습니다. (버그 #35064211)

그룹 복제: group_replication_set_as_primary()로 설정된 타임아웃이 DDL 문을 종료하지 못했습니다. (버그 #35042876)

그룹 복제: 복제 채널이 오류 상태일 때 강제로 START GROUP_REPLICATION을 실행하면 서버가 예기치 않게 종료될 수 있었습니다. (버그 #34724344)

그룹 복제: plugin/group_replication/src/certifier.cc에서 발생할 수 있는 메모리 누수가 제거되었습니다. (버그 #110518, 버그 #35226747)

macOS: secure_file_priv 시스템 변수가 macOS에서 항상 올바르게 작동하지 않았습니다. (버그 #30274493)

Microsoft Windows: 디버그 모드에서 출력이 올바른지 확인하기 위해 예외 처리가 개선되었습니다. (버그 #35944853)

JSON: NULLIF(), COALESCE(), 그리고 시프트 연산자 (>>)에 대한 오류 처리 검사가 누락되어 있었습니다. (버그 #35513196)
참고: 버그 #31358416도 참조하십시오.

JSON: JOINGROUP BY가 일부 JSON 열 값을 다르게 처리했습니다. (버그 #101048, 버그 #31969607)

Enterprise Linux 8 RPM 빌드를 위해 빌드 스크립트가 이제 새로운 strip 명령 (/opt/rh/gcc-toolset-12 경로)에 맞추어 수정되었으며, 해당 dwz 도구도 사용할 수 있는지 확인합니다. (버그 #36086236)

BIO_get_mem_data()가 잘못된 인수 유형을 사용했습니다.
Samuel Chiang에게 감사를 표합니다. (버그 #35950004)

access_path.ccCreateIteratorFromAccessPath()에서 발생한 어설션 실패가 제거되었습니다. (버그 #35944739)
참고: 이 문제는 버그 #32788576의 회귀 문제입니다.

셧다운 중에 InnoDB의 스레드 정리가 데이터 양에 따라 상당한 시간이 걸릴 수 있으며, 이로 인해 사용자가 셧다운 프로세스가 중단된 것으로 착각할 수 있었습니다. 이 수정 사항은 이 단계가 진행 중임을 나타내는 외부 가시 systemd 알림을 추가합니다. (버그 #35902058)

잘못 초기화된 플러그인이 설치한 로드 가능 함수 호출 시 예기치 않은 셧다운이 발생할 수 있었습니다. (버그 #35889261)

MYSQL_FIREWALL 플러그인이 사용자 정의 스키마를 사용하도록 구성되었으나 서버 시작 중에 제대로 초기화되지 않으면 이후에 오류와 실패가 발생할 수 있었습니다. (버그 #35853298)

GROUP BY가 포함된 일부 중첩된 쿼리가 올바르게 처리되지 않았습니다. (버그 #35846402, 버그 #35945822)
참고: 이 문제는 버그 #32918400의 회귀 문제입니다.

디버그 모드에서 dbug_dump의 접근 경로가 잘못된 값을 사용했습니다.
Tianfeng Li에게 감사를 표합니다. (버그 #35835858)

동등성 전파 과정에서 CAST() 내에서 비널(Non-nullable) 기본 키 열이 nullable 열로 교체되었으나, CAST 표현식의 nullable 특성은 변경되지 않았습니다. (버그 #35829972)
참고: 버그 #34898903도 참조하십시오.

MySQL은 -DPROTOBUF_BUILD_SHARED_LIBS=OFF 설정으로 빌드할 수 없었습니다. (버그 #35827217)

mysqld-D 옵션이 일부 오류 로그 정보를 stdout에 출력했습니다. (버그 #35810857, 버그 #35830459)

hash_join_iterator.ccHashJoinIterator::Init()에서 발생한 어설션이 제거되었습니다. (버그 #35789589)

ORDER BY 절이 포함된 테이블 값 생성자가 IN 또는 EXISTS 하위 쿼리로 사용되었을 때 발생하는 어설션이 제거되었습니다. (버그 #35785452)

제한된 경우에 MD5() 암호화 함수에 데이터를 전달하면 서버가 중단될 수 있었습니다. (버그 #35764496)

뷰에서 선택된 일부 하위 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #35738548)

많은 테이블을 한꺼번에 이름을 변경하는 등의 작업을 수행하는 동안, CREATE TABLE ... SELECT와 같은 데이터 정의 문을 동시에 실행하면 서버가 예기치 않게 중지될 수 있었습니다. (버그 #35735937)

핸들러 상태 리소스 할당이 개선되었습니다. (버그 #35713711)

UPDATE HISTOGRAM이 모든 경우에 예상대로 동작하지 않았습니다.
UPDATE HISTOGRAM이 모든 경우에 예상대로 동작하지 않았습니다. (버그 #35710404)

EXPLAIN ANALYZE가 항상 예상된 결과를 생성하지 않았습니다. (버그 #35710383)

서브쿼리 해석 중 오류가 발생했습니다. (버그 #35710373)
참고: 이 문제는 버그 #35184353의 회귀 문제입니다.

일부 행 서브쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #35710218)

사용된 테이블 정보의 갱신이 다음 실행 시작 시로 연기되어, 테이블이 열리고 테이블 객체가 적절한 상태에 있는지 확인한 후에 수행됩니다. (버그 #35710213)

일부 HAVING 쿼리가 예상된 결과를 생성하지 않았습니다. (버그 #35710183)

hash_join_iterator.cc에서 어설션이 제거되었습니다. (버그 #35703114)
참고: 이 문제는 버그 #34940000의 회귀 문제입니다.

composite_iterators.cc에서 어설션이 제거되었습니다. (버그 #35686098)

일부 재귀 CTE가 예상대로 작동하지 않았습니다. (버그 #35654240)

INSTALL COMPONENTSET GLOBAL의 조합이 서브쿼리와 함께 사용되면 서버가 종료될 수 있었습니다. (버그 #35647759)

OVER (PARTITION ...)을 사용하는 일부 쿼리가 항상 성공적으로 실행되지 않았습니다. (버그 #35627798)

ROLLUP을 포함하는 일부 서브쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #35621842, 버그 #35804794)

특정 쿼리에 대해 EXPLAIN FORMAT=TREE를 수행할 때, Append 접근 경로의 첫 번째 행을 읽는 비용이 첫 번째 하위 입력 접근 경로보다 낮은 것으로 표시되었는데, 이는 불가능한 상황이었습니다. (버그 #35590128)

sql/join_optimizer/join_optimizer.ccIsBitSet()에서 어설션이 제거되었습니다. (버그 #35590108)

Windows 설치 MSI 인터페이스에서 CPACK_COMPONENT_GROUP_INFO_DISPLAY_NAME 구성 옵션이 제거되었습니다. 이제 INFO_BININFO_SRC 파일이 항상 설치됩니다. (버그 #35529968)

서브쿼리를 유도 테이블로 변환하는 시도 중에, 투영 목록의 필드가 GROUP BY의 일부가 아니거나 기능적으로 종속되지 않은 경우에도 ER_FIELD_IN_GROUPING_NOT_GROUP_BY 오류가 발생하지 않았습니다. (버그 #35508108)

윈도우 함수를 사용하는 일부 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #35471471)

디버그 빌드에서 대소문자가 변경된 열 이름이 서버 종료를 일으킬 수 있었습니다. (버그 #35449266)

MySQL 서버 설치 패키지에 INFO_SRC 파일의 두 개의 복사본이 포함되어 있었습니다. (버그 #35400142)

윈도우 함수의 인자 내에서 사용자 변수를 설정하고, 이 함수가 윈도우 프레임 버퍼를 사용하여 평가되는 경우 어설션이 발생했습니다. 사용자 변수를 식 내에서 설정하는 것은 이미 사용 중단된 기능이며, 이 수정은 단순히 어설션을 피하도록 합니다. (버그 #35390341, 버그 #36008133)
참고: 이 문제는 버그 #32644631, 버그 #32802301의 회귀 문제입니다.

Item_typecast_signed::val_int()에서 어설션이 제거되었습니다. (버그 #35049440)

MySQL이 예기치 않게 종료될 때 스택 트레이스를 출력하는 my_print_stacktrace()의 출력이 개선되었습니다. (버그 #34904177, 버그 #36027494)

utilities/comp_err.cc에 있는 오류 메시지 파서가 이스케이프된 아포스트로피 문자를 올바르게 처리하지 못했습니다. (버그 #34637697)

역할에 권한을 부여한 후, 명시적으로 부여되지 않은 권한을 역할에서 취소하면 성공한 것처럼 보였고, 오류나 경고가 반환되지 않았습니다. (버그 #34063709)

일부 SELECT DISTINCT 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #33725447)

sql/field.cc에서 어설션 실패가 제거되었습니다. (버그 #112503, 버그 #35846221)

sql/sql_resolver.cc에서 어설션이 제거되었습니다. (버그 #112498, 버그 #35846192)

SELECT AVG(...) OVER (PARTITION BY ...) 형태의 일부 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #112460, 버그 #35710179, 버그 #35845413)

MySQL의 공식 Yum 또는 SUSE 저장소를 사용하여 업그레이드할 때, MySQL 서비스가 항상 활성화되었습니다. 이제 설치 후에만 서비스가 활성화되며, 업그레이드 시 기존 값을 유지하고 수정하지 않습니다. (버그 #112382, 버그 #35823558)

MEM_ROOT::AllocBlock()minimum_length > wanted_length 조건을 만족하지 못했으며, 이는 블록 크기와 mininum_length 간 불일치로 인해 발생했습니다. ForceNewBlock()이 성공적으로 반환(false)되면 minimum_length를 지원하는 새 블록이 있어야 하지만, mininum_length가 더 클 때는 이 가정이 실패하여 AllocBlock()이 계약에 부합하지 않았습니다.
이 수정은 Kaiwang Chen의 기여를 기반으로 합니다. (버그 #112304, 버그 #35793743)

동일한 쿼리가 NO_BNL 최적화 힌트를 사용할 때 서로 다른 결과를 반환했습니다. (버그 #112296, 버그 #35788971)

디버그 빌드에서 빈 논리 범위를 가진 NTH_VALUE() 윈도우 함수를 사용하면 어설션 오류가 발생했습니다. (버그 #111562, 버그 #35537311)

윈도우 함수가 포함된 ORDER BY를 사용하는 중첩된 블록을 정렬할 때 sql/sql_executor.cc에서 어설션이 발생했습니다. (버그 #111306, 버그 #34856256, 버그 #35471522)

여러 함수에 대해 인자의 기본 데이터 유형 할당이 없어서 준비된 문에서 디버그 빌드 시 어설션 오류가 발생할 수 있었습니다. 이제 이러한 기본 유형이 할당됩니다:

  • format_bytes()format_pico_time()에 대해 DOUBLE
  • ps_thread_id()에 대해 BIGINT

(버그 #110677, 버그 #35287798)

상관된 lateral 또는 기타 의존 서브쿼리 내에서 VALUES 문이 잘못된 결과를 반환했습니다. (버그 #109252, 버그 #110076, 버그 #34852090, 버그 #35087820)

서브쿼리가 포함된 윈도우 함수의 인자는 EXPLAIN FORMAT=TREE에서 액세스 경로가 두 번 출력되었습니다. 이제 중복 경로를 무시하여 이 문제를 해결합니다. (버그 #103609, 버그 #32855925)

일부 경우에 뷰에서 선택(select)할 때 소량의 메모리 누수가 발생했습니다. (버그 #103133, 버그 #32764586)

테이블 값 생성자를 사용하는 WHERE 조건이 모든 행을 반환했습니다. 예를 들어, 영향을 받은 쿼리는 SELECT * FROM t1 WHERE a IN (VALUES ROW(5), ROW(55))입니다. (버그 #98268, 버그 #30775369)

--wait 명령줄 옵션이 mysql 클라이언트에서 작동하지 않았습니다. (버그 #31422, 버그 #11747227)

Leave a Comment



이 문서 공유

8.3.0 변경 사항 (2024-01-16 Innovation Release)

링크 복사

CONTENTS