MySQL 8.4 LTS Release Note

8.4.0 변경 사항 (2024-04-30 LTS Release)

Estimated reading: 9 minutes 43 views

공식 문서: Changes in MySQL 8.4.0 (2024-04-30, LTS Release)

감사 로그 관련 사항

혼합된 유형의 인수를 사용하여 audit_api_message_emit_udf()를 호출하면 서버가 예기치 않게 종료될 수 있었습니다. (버그 #36301441)

오류를 유형으로 사용하는 감사 로그 필터링이 제대로 작동하지 않았습니다. (버그 #36142157)

예기치 않은 종료 및 재시작 후, 서버가 사용 중이던 파일이 손상되거나 읽을 수 없게 될 수 있습니다. 이전에는 읽을 수 없는 파일에 대한 감사 로그 플러그인 로그 메시지가 오류로 표시되었으나, 이제 이 메시지는 경고로 처리됩니다. (버그 #36118809)

C API 관련 사항

중요 변경 사항: MySQL 8.3에서 제거되었던 다음의 MySQL C API 함수들이 MySQL 8.4.0에서 다시 구현되고 복원되었습니다:

나열된 함수들은 MySQL 8.4 시리즈의 수명 동안 지원됩니다. (WL #16221)

Microsoft Windows: MySQL 플러그인이 의존하는 서드 파티 DLL 파일은 MySQL 실행 파일과 동일한 디렉토리에 설치됩니다. 기본 Windows 동작은 현재 실행 파일과 동일한 디렉토리에서 의존성을 찾는 것이지만, 이는 설치 디렉토리 외부에서 libmysql.dll을 사용하는 클라이언트에게 적절하지 않았습니다.
이 문제는 MySQL 클라이언트의 기본 동작을 변경하여 로더가 현재 모듈(실행 파일 또는 libmysql.dll)의 디렉토리에서 의존성을 찾도록 수정하였습니다. 또한, libsasl.dll은 모든 필수 의존성을 자체 디렉토리에서 로드해야 하므로 SASL 플러그인은 전용 하위 디렉토리에 배치되었습니다. (버그 #36006295)

캐릭터셋 지원

character_set_server 시스템 변수를 SET PERSIST 또는 SET GLOBAL을 사용하여 설정했을 때, 새로운 클라이언트 세션이나 서버 재시작 후 서버에 연결을 시도하는 클라이언트에 대해 이 설정이 적용되지 않았습니다. 이를 해결하기 위한 유일한 방법은 서버 시작 시 해당 명령줄 옵션을 설정하는 것이었습니다.
이 문제를 해결하기 위해, 이제 서버가 재시작될 때 설정 데이터가 올바른 순서로 읽히도록 하여 변수 설정이 예상대로 적용되도록 보장합니다. (버그 #35529604)

컴파일 관련 사항

libevent 라이브러리가 제거되었습니다. (버그 #36357190)

libcno 라이브러리가 추가되었습니다. (버그 #36357181)

extra/libbacktrace의 일부 파일에 잘못된 라이선스 정보 또는 저작권 정보가 포함되어 있었습니다. (버그 #36118772)

사용되지 않는 변수에 대한 경고는 -DMYSQL_MAINTAINER_MODE=1로 컴파일할 때 컴파일 오류로 처리됩니다. 이러한 오류를 피하려면 -DMYSQL_MAINTAINER_MODE=0을 사용하여 이러한 오류를 비활성화하십시오. (버그 #113662, 버그 #36198423)

구성 관련 사항

Microsoft Windows: Windows에서 MySQL Configurator가 뒤로 및 다음 버튼을 사용한 후에 구성 설정을 잘못 변경했습니다. (버그 #36156577)

Microsoft Windows: Windows에서 MySQL Configurator는 구성되지 않은 MySQL 서버를 제거할 때 더 이상 열리지 않습니다. (버그 #35709927)

Microsoft Windows: Windows에서 MySQL Configurator는 더 이상 my.ini 파일에 default_authentication_plugin 변수를 추가하지 않으며, MySQL Server 8.4에서 해당 변수가 제거되었습니다. 또한 MySQL 8.4로 설치를 업그레이드할 때 해당 변수를 제거합니다. authentication_policy 대체 변수는 MySQL Configurator에 의해 설정되지 않습니다. (WL #16137)

Microsoft Windows: Windows에서 MySQL Configurator는 더 이상 MySQL 5.7 이하 버전에서 업그레이드를 허용하지 않으며, 이전에는 공식적으로 지원되지 않음을 명시한 후 업그레이드를 실행할 수 있었습니다. (WL #16138)

사용 중단 및 제거 관련 사항

중요 변경 사항: 사용 중단된 mysql_native_password 인증 플러그인은 이제 기본적으로 비활성화됩니다. 이를 활성화하려면 새로운 --mysql-native-password=ON 서버 옵션을 사용하여 MySQL을 시작하거나, MySQL 구성 파일의 [mysqld] 섹션에 mysql_native_password=ON을 추가해야 합니다.
자세한 내용은 Native Pluggable Authentication을 참조하십시오. (버그 #36337893)

파티셔닝: MySQL 8.0.21에서 파티셔닝 키의 일부로 사용되는 인덱스 접두사를 가진 열을 묵시적으로 생략하는 동작은 사용 중단되었으며 경고가 발생했습니다. 이번 릴리스에서는 제안된 파티셔닝 키에 이러한 열이 포함될 경우, 이제 명시적으로 허용되지 않으며, 이로 인해 CREATE TABLE 또는 ALTER TABLE 명령이 오류로 인해 거부됩니다.
자세한 내용은 파티셔닝 제한 사항KEY 파티셔닝을 참조하십시오. (WL #16054)
참고: 버그 #31100205도 참조하십시오.

복제: 이전 버전의 MySQL에서 사용 중단된 MySQL 복제 관련 여러 기능의 구문이 이제 제거되었습니다. 이러한 기능에는 SQL 구문과 MySQL 서버의 여러 시스템 상태 변수가 포함됩니다. 다음에 해당 변경 사항에 대한 자세한 내용을 확인하십시오.
제거된 SQL 구문. 다음 SQL 구문이 제거되었습니다 (대체 구문은 괄호 안에 표시됨): START SLAVE (START REPLICA); STOP SLAVE (STOP REPLICA); SHOW SLAVE STATUS (SHOW REPLICA STATUS); SHOW SLAVE HOSTS (SHOW REPLICAS); RESET SLAVE (RESET REPLICA); CHANGE MASTER TO (CHANGE REPLICATION SOURCE TO); RESET MASTER (RESET BINARY LOGS AND GTIDS); SHOW MASTER STATUS (SHOW BINARY LOG STATUS); PURGE MASTER LOGS (PURGE BINARY LOGS); SHOW MASTER LOGS (SHOW BINARY LOGS).
위에서 나열한 SQL 구문은 또한 모든 MySQL 테스트 프로그램 및 파일에서, 그리고 내부적으로 사용된 다른 곳에서도 제거되었습니다.
제거된 구문 옵션. CHANGE REPLICATION SOURCE TOSTART REPLICA에서 더 이상 지원되지 않는 다음 옵션들이 제거되었습니다. 각 구문에 대한 대체 옵션이 괄호 안에 나와 있습니다:

제거된 상태 변수: 이 작업의 일환으로, 다음 시스템 상태 변수들이 서버에서 제거되었으며 더 이상 SHOW STATUS와 같은 명령문의 출력에 나타나지 않습니다. 이러한 변수들은 여기 나열된 대체 구문과 함께 나열됩니다: Com_slave_start (Com_replica_start); Com_slave_stop (Com_replica_stop); Com_show_slave_status (Com_show_replica_status); Com_show_slave_hosts (Com_show_replicas); Com_show_master_status (Com_show_binary_log_status); Com_change_master (Com_change_replication_source).
또한 Com_xxx 변수도 참조하십시오. (WL #15831, WL #16063, WL #16069, WL #16086, WL #16087, WL #16088, WL #16089, WL #16090)

그룹 복제: group_replication_allow_local_lower_version_join 시스템 변수는 이제 사용 중단되었으며, 설정 시 경고를 발생시킵니다 (ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT).
이 변수는 향후 MySQL 버전에서 제거될 예정입니다. 더 이상 호환되지 않는 멤버가 그룹에 합류하는 것을 허용할 이유가 없으므로, 이 기능에 대한 대체는 계획되어 있지 않습니다. (WL #16018)

이전 MySQL 버전에서 지원되었던 여러 서버 옵션 및 변수가 이번 릴리스에서 제거되었습니다. MySQL 8.4에서 이들 중 어느 하나라도 설정하려고 시도하면 오류가 발생합니다. 제거된 옵션 및 변수는 다음과 같습니다:

  • binlog_transaction_dependency_tracking: MySQL 8.0.35 및 MySQL 8.2.0에서 사용 중단되었습니다.
    이 변수나 기능을 대체할 계획은 없습니다. 이제 다중 스레드 복제본을 사용할 때 소스 mysqld는 항상 바이너리 로그에 대한 종속성 정보를 생성하기 위해 writesets를 사용합니다. 이는 이전 MySQL 버전에서 binlog_transaction_dependency_trackingWRITESET으로 설정하는 것과 동일한 효과를 가집니다.
  • group_replication_recovery_complete_at: MySQL 8.0.34에서 사용 중단되었습니다.
    이번 릴리스부터 분산 복구 프로세스 중 적용되는 정책은 새 멤버가 그룹에 합류하기 전에 발생한 모든 트랜잭션을 수신, 인증, 적용한 후에만 온라인 상태로 표시되도록 항상 설정됩니다. 이는 이전 MySQL 버전에서 group_replication_recovery_complete_atTRANSACTIONS_APPLIED로 설정하는 것과 동일합니다.
  • avoid_temporal_upgradeshow_old_temporals: MySQL 5.6에서 사용 중단되었습니다. 이 변수들은 더 이상 효과가 없으며 제거되었습니다. 이들을 대체할 계획은 없습니다.
  • --no-dd-upgrade: MySQL 8.0.16에서 사용 중단되었으며 이제 제거되었습니다. --upgrade=NONE을 대신 사용하십시오.
  • --old--new: MySQL 8.0.35 및 MySQL 8.2.0에서 사용 중단되었으며 이제 제거되었습니다.
  • --language: 이 옵션은 MySQL 5.5에서 사용 중단되었으며 이제 제거되었습니다.
  • --ssl, --skip-ssl--admin-ssl 서버 옵션, 그리고 have_sslhave_openssl 서버 시스템 변수들은 MySQL 8.0.26에서 사용 중단되었으며 이번 릴리스에서 모두 제거되었습니다. 대신 --tls-version--admin-tls-version을 사용하십시오.
  • default_authentication_plugin: MySQL 8.0.27에서 사용 중단되었으며 이제 제거되었습니다. 대신 authentication_policy를 사용하십시오.
    또한 authentication_policy 변수를 설정하는 구문이 변경되었으니, 매뉴얼의 설명을 참조하십시오.

(버그 #36337893, WL #9677, WL #13965, WL #15461, WL #15839, WL #16056, WL #16058, WL #16059, WL #16095)

별칭이 지정된 테이블이 EXPLAIN 출력에서 참조된 경우, 테이블 이름이 스키마 이름으로 자격이 부여되었는데 이는 불필요하고 혼란을 초래할 수 있었습니다. 이러한 스키마 자격 부여가 출력에서 제거되었습니다. (버그 #36053664)

사용되지 않는 INFORMATION_SCHEMA.TABLESPACES 테이블이 MySQL 8.0.22에서 사용 중단되었으며 이제 제거되었습니다.
InnoDB 테이블의 경우, Information Schema의 INNODB_TABLESPACESINNODB_DATAFILES 테이블이 테이블스페이스 메타데이터를 제공합니다. (WL #14065)

LOW_PRIORITYLOCK TABLES ... WRITE와 함께 사용한 것은 MySQL 5.5 이후로 아무 효과가 없었으며 MySQL 5.6에서 사용 중단되었습니다. 이번 릴리스에서는 제거되었으며, LOCK TABLESLOW_PRIORITY를 포함하면 이제 구문 오류가 발생합니다. (WL #16057)

FLOATDOUBLE 열과 AUTO_INCREMENT 수정자를 함께 사용하는 것은 MySQL 8.0에서 사용 중단되었으며 이제 제거되었습니다. CREATE TABLEALTER TABLE 명령에서 이들을 함께 사용하려고 하면 이제 ER_WRONG_FIELD_SPEC 오류가 발생합니다.

중요
이 릴리스로 업그레이드하기 전에, FLOAT ... AUTO_INCREMENT 또는 DOUBLE ... AUTO_INCREMENT 열을 더 이상 사용하지 않도록 테이블을 수정해야 합니다. 그렇지 않으면 테이블을 업그레이드할 수 없습니다.

(WL #13103)

mysql_ssl_rsa_setup 유틸리티가 MySQL 8.0.34에서 사용 중단되었으며 이번 릴리스에서 제거되었습니다. OpenSSL을 사용하여 컴파일된 MySQL 배포판의 경우, MySQL 서버는 시작 시 누락된 SSL 및 RSA 파일을 자동으로 생성할 수 있습니다. 자세한 내용은 Creating SSL and RSA Certificates and Keys using MySQL을 참조하십시오. (WL #16205)

이번 릴리스에서는 다음 SQL 명령문에서 ENGINE 절에 대한 지원이 제거되었습니다:

  • DROP TABLESPACE (모든 변형)
  • ALTER TABLESPACE ... DROP DATAFILE
  • ALTER TABLESPACE의 다른 모든 변형, 여기 나열된 두 가지 예외 제외:
    1. ALTER TABLESPACE ... ADD DATAFILE ENGINE={NDB|NDBCLUSTER}
    2. ALTER UNDO TABLESPACE ... SET {ACTIVE|INACTIVE} ENGINE=INNODB

위에서 나열된 예외적인 경우를 제외하고, ALTER TABLESPACE 또는 DROP TABLESPACE에서 ENGINE 절을 사용하면 명령문이 오류로 인해 거부됩니다.
ALTER TABLESPACEDROP TABLESPACE 명령문의 ENGINE 절은 MySQL 8.0에서 사용 중단되었습니다. (WL #16055)

SET_USER_ID 권한이 MySQL 8.2.0에서 사용 중단되었으며 이번 릴리스에서 제거되었으며, 이를 GRANT 명령문에서 사용하면 이제 구문 오류가 발생합니다. 대신 SET_ANY_DEFINERALLOW_NONEXISTENT_DEFINER 권한을 사용하십시오. (WL #15875)

MySQL 8.0.16에서 사용 중단된 mysql_upgrade 유틸리티가 제거되었습니다. (WL #16096)

사용 중단된 mysqlpump 유틸리티와 관련된 lz4_decompresszlib_decompress 도우미 유틸리티가 제거되었습니다. 대신 mysqldump 또는 MySQL Shell 덤프 유틸리티를 사용하십시오. (WL #16096)

다음 플러그인들이 제거되었습니다. 이와 관련된 서버 시스템 변수, CMake 옵션 및 기타 기능들도 함께 제거되었습니다:

  • authentication_fido, authentication_fido_client: 대신 authentication_webauthn을 사용하십시오. 자세한 내용은 WebAuthn Pluggable Authentication을 참조하십시오.
    authentication_fido_rp_id 서버 시스템 변수, mysql 클라이언트의 --fido-register-factor 옵션 및 -DWITH_FIDO CMake 옵션도 제거되었습니다.
  • keyring_file: 대신 component_keyring_file을 사용하십시오. 자세한 내용은 Using the component_keyring_file File-Based Keyring Component을 참조하십시오.
    keyring_file_data 시스템 변수도 제거되었습니다. 또한, -DINSTALL_MYSQLKEYRINGDIR-DWITH_KEYRING_TEST CMake 옵션이 제거되었습니다.
  • keyring_encrypted_file: 대신 component_keyring_encrypted_file을 사용하십시오. 자세한 내용은 Using the component_keyring_encrypted_file Encrypted File-Based Keyring Component을 참조하십시오.
    keyring_encrypted_file_datakeyring_encrypted_file_password 서버 시스템 변수도 제거되었습니다.
  • keyring_oci: 대신 component_keyring_oci을 사용하십시오. 자세한 내용은 Using the Oracle Cloud Infrastructure Vault Keyring Component을 참조하십시오.
    다음 서버 시스템 변수들도 제거되었습니다: keyring_oci_ca_certificate, keyring_oci_compartment, keyring_oci_encryption_endpoint, keyring_oci_key_file, keyring_oci_key_fingerprint, keyring_oci_management_endpoint, keyring_oci_master_key, keyring_oci_secrets_endpoint, keyring_oci_tenancy, keyring_oci_user, keyring_oci_vaults_endpoint, 및 keyring_oci_virtual_vault.
  • openssl_udf: 대신 MySQL Enterprise Encryption 컴포넌트를 사용하십시오. 자세한 내용은 MySQL Enterprise Encryption을 참조하십시오.

(WL #15937, WL #15938, WL #15939, WL #15941, WL #16140)

약한 암호화 암호에 대한 지원이 제거되었습니다. 즉, 암호화된 연결을 구성할 때 MySQL은 이제 다음 조건을 충족하지 않는 암호를 지정할 수 없습니다:

  • 적절한 TLS 버전 (TLS v1.2 또는 TLSv1.3)
  • 순방향 비밀성
  • SHA2 암호 또는 인증서 또는 둘 다
  • GCM의 AES 또는 기타 AEAD 알고리즘 또는 모드

이는 ssl_cipher, admin_ssl_cipher, tls_ciphersuites, 및 admin_tls_ciphersuites 시스템 변수 설정에 영향을 미칩니다. 이러한 변수의 허용 값에 대한 설명을 참조하십시오.
libmysqlclient는 이 변경 사항의 영향을 받지 않으며 이전 MySQL 버전과 계속 연결할 수 있도록 이러한 조건을 충족하지 않는 암호도 계속 지원합니다. (WL #15801)

외래 키로 비표준 키(고유하지 않거나 부분적인 키)를 사용하는 것은 MySQL에서 사용 중단되었습니다. 이번 릴리스부터 다음 방법 중 하나를 통해 이러한 비표준 키를 명시적으로 활성화해야 합니다:

  • restrict_fk_on_non_standard_key (이번 릴리스에 추가됨)를 OFF로 설정하십시오.
  • 서버를 --skip-restrict-fk-on-non-standard-key 옵션(이번 릴리스에 새로 추가됨)과 함께 시작하십시오.

restrict_fk_on_non_standard_key 서버 시스템 변수는 기본적으로 ON으로 설정되어 있습니다. 즉, CREATE TABLE 또는 ALTER TABLE 명령에서 비표준 키를 외래 키로 사용하려고 하면 ER_FK_NO_INDEX_PARENT 오류가 발생하며, 이를 ON으로 설정하면 이러한 명령이 실행되지만 ER_WARN_DEPRECATED_NON_STANDARD_KEY 경고가 발생합니다.
MySQL 8.0에서 MySQL 8.4로 업그레이드는 비표준 키를 참조하는 외래 키가 하나 이상 포함된 데이터베이스가 있더라도 지원됩니다. 업그레이드 과정에서 서버는 비표준 키를 참조하는 외래 키 이름이 포함된 경고 메시지 목록을 출력합니다.
자세한 내용은 restrict_fk_on_non_standard_key 설명을 참조하십시오. (WL #15699)
참조: 버그 #30615520, 버그 #97836도 참조하십시오.

방화벽 관련 사항

업그레이드 후 일부 MySQL 방화벽 저장 프로시저가 예상대로 업데이트되지 않았습니다. (버그 #36084930)

MySQL Enterprise 방화벽에서 제공하는 저장 프로시저에 여러 가지 개선 사항이 추가되었습니다. 이 개선 사항들은 다음과 같습니다:

  • MySQL Enterprise 방화벽에서 제공하는 저장 프로시저는 이제 트랜잭션을 지원합니다. 방화벽 저장 프로시저 실행 중 오류가 발생하면 오류가 보고되고 해당 시점까지 수행된 모든 변경 사항이 롤백됩니다.
  • 방화벽 저장 프로시저는 불필요한 DELETEINSERT 명령문의 조합 또는 INSERT IGNOREUPDATE 명령문의 조합을 피하여 속도와 효율성을 향상시켰습니다.
  • 이전에 사용 중단 경고가 발생했던 사용자 기반 저장 프로시저와 UDF는 이제 sp_set_firewall_mode() 또는 sp_reload_firewall_rules() 호출 시 사용 중단 경고를 발생시킵니다. 자세한 내용은 Firewall Account Profile Stored ProceduresMigrating Account Profiles to Group Profiles를 참조하십시오.

(WL #15790)

INFORMATION_SCHEMA 관련 사항

PROCESSLIST 테이블에서 잠재적인 경합 조건이 수정되었습니다. (버그 #35509371)

설치 관련 사항

설치 과정의 일부로 JSON 형식의 mysql_upgrade_history 파일이 서버의 데이터 디렉토리에 생성되거나 이미 존재하는 경우 업데이트됩니다. 이 파일에 포함된 정보는 다음 항목들을 포함합니다:
설치 날짜 및 시간
설치된 MySQL 서버 버전
릴리스의 성숙도 수준(LTS 또는 Innovation)
mysql_upgrade_info 파일은 MySQL 8.0.17에서 사용 중단되었으며 더 이상 사용되지 않습니다. 이 파일이 발견되면 설치 과정에서 제거됩니다. (WL #16039)
참조: 버그 #95165, 버그 #29702060도 참조하십시오.

키링 관련 사항

이제 키링 컴포넌트에서 키링 플러그인으로의 마이그레이션을 지원합니다. 이러한 마이그레이션을 수행하려면 이번 릴리스에서 도입된 --keyring-migration-from-component 서버 옵션을 사용하여 --keyring-migration-source를 소스 컴포넌트의 이름으로 설정하고, --keyring-migration-destination를 대상 플러그인의 이름으로 설정하십시오.
자세한 내용은 Key Migration Using a Migration Server를 참조하십시오. (WL #16017)

옵티마이저 관련 사항

이번 릴리스에서는 히스토그램의 자동 업데이트를 지원합니다. 이 기능이 특정 히스토그램에 대해 활성화되면, 상위 테이블에서 ANALYZE TABLE이 실행될 때마다 히스토그램이 업데이트됩니다. InnoDB에서의 영구 통계 자동 재계산도 자동 업데이트가 활성화된 경우 히스토그램을 업데이트합니다.
자동 히스토그램 업데이트는 원래 지정된 버킷 수를 그대로 사용합니다(있는 경우).
자동 히스토그램 업데이트를 활성화하려면 이번 릴리스에서 추가된 AUTO UPDATE 옵션을 ANALYZE TABLE 명령문에 포함하십시오. 자동 업데이트를 비활성화하려면 MANUAL UPDATE를 대신 포함하십시오. 명시하지 않은 경우 MANUAL UPDATE(자동 업데이트 없음)가 기본값입니다. 이번 릴리스로 업그레이드할 때 기존 히스토그램은 MANUAL UPDATE로 생성된 것으로 처리됩니다.
자세한 내용은 Histogram Statistics Analysis를 참조하십시오. 또한 Configuring Persistent Optimizer Statistics Parameters도 참조하십시오. (버그 #36053241, WL #15786)

다중 범위 읽기(MRR) 최적화는 이전 릴리스만큼 성능을 발휘하지 못했습니다. (버그 #113711, 버그 #36220640)

Performance Schema 관련 사항

사용자 변수에 할당된 소수 값이 user_variables_by_thread 테이블에서 반올림되었습니다. (버그 #35781732)

서버 관리

중요 변경 사항: 이번 릴리스에서는 FLUSH PRIVILEGES 명령에만 적용되는 새로운 권한이 추가되었습니다. 기존의 RELOAD 권한과 달리, 새로운 FLUSH_PRIVILEGES 권한은 FLUSH PRIVILEGES 명령에만 적용됩니다. 이 권한은 전역 범위에서 사용되며, 사용자 및 역할에 적용될 수 있습니다.
RELOAD 권한은 이전 버전과의 호환성을 유지하기 위해 계속 지원되며, 이 권한을 가진 사용자는 업그레이드 후에도 FLUSH PRIVILEGES 명령을 실행할 수 있습니다. MySQL 8.4 릴리스로 업그레이드하는 과정에서, FLUSH_PRIVILEGES 권한을 가진 사용자가 있는지 확인한 후, 없다면 RELOAD 권한을 가진 사용자에게 자동으로 새로운 권한이 부여됩니다. (WL #16044)

중요 변경 사항: 이번 릴리스에서는 새로운 OPTIMIZE_LOCAL_TABLE 권한이 추가되었습니다. 사용자가 OPTIMIZE LOCAL TABLEOPTIMIZE NO_WRITE_TO_BINLOG TABLE 명령을 실행하려면 이 권한이 필요합니다.
이전 릴리스에서 업그레이드하는 경우, 이미 SYSTEM_USER 권한을 가진 사용자에게는 자동으로 OPTIMIZE_LOCAL_TABLE 권한이 부여됩니다. (WL #15819)

스레드 풀 관련 사항

중요 변경 사항: 이전에는 thread_pool_max_transactions_limit에서 정의된 한도에 도달하면 기존 연결에서 새 연결 또는 트랜잭션이 완료될 때까지 대기 상태로 보이는 경우가 있었습니다. 이번 릴리스에서는 이 문제를 해결하기 위해 thread_pool_longrun_trx_limit이라는 새로운 시스템 변수를 도입했습니다. 이 변수는 진행 중인 트랜잭션 수가 thread_pool_max_transactions_limit에 도달한 경우 트랜잭션 수 상한을 일시적으로 중단하는 역할을 합니다.
트랜잭션 수가 상당히 감소하면 thread_pool_max_transactions_limit이 다시 적용됩니다. 이와 관련된 더 자세한 내용은 thread_pool_longrun_trx_limit 시스템 변수 설명을 참조하십시오. (WL #16132)

성능 스키마의 tp_connections 스레드 풀 플러그인 테이블에 admin 그룹에 있는 연결 항목이 포함되지 않았습니다. (버그 #36296830)

추가 및 변경된 기능

중요 변경 사항; 그룹 복제: MySQL 8.0은 8.0.17 이하 버전의 그룹 멤버에 대한 특별한 처리를 수행했습니다. 이번 릴리스에서는 이러한 특별 처리가 제거되었습니다.
MySQL 8.0 사용자는 MySQL 8.4로 업그레이드하기 전에 모든 인스턴스를 최신 8.0 릴리스로 업그레이드하는 것이 좋습니다. (버그 #36314222)

중요 변경 사항; 그룹 복제: 그룹 내 서버의 다운그레이드는 MySQL 8.4 LTS 시리즈 내에서 지원됩니다. 예를 들어, MySQL 8.4.2를 실행 중인 그룹의 멤버를 MySQL 8.4.0으로 다운그레이드할 수 있습니다.
마찬가지로, 8.4 릴리스 시리즈 내에서 교차 버전 그룹 멤버십도 지원됩니다. 예를 들어, MySQL 8.4.0을 실행 중인 서버가 MySQL 8.4.2를 실행 중인 그룹에 참여할 수 있으며, MySQL 8.4.3을 실행 중인 서버도 마찬가지입니다.
자세한 내용은 그룹 복제 업그레이드를 참조하십시오. (버그 #35918034)
참조: 버그 #35397276도 참조하십시오.

중요 변경 사항; 그룹 복제: 그룹 복제와 관련된 두 가지 서버 시스템 변수의 기본값이 변경되었습니다:

자세한 내용은 각 변수 설명과 트랜잭션 일관성 보장 구성장애 감지와 네트워크 분할에 대한 응답을 참조하십시오. (WL #15712, WL #15713)

중요 변경 사항; 그룹 복제: group_replication_consistency 값이 BEFORE_ON_PRIMARY_FAILOVER로 설정된 상태에서 MySQL KILL 명령을 실행하면 이제 일관성 보장이 무시되고, 중단된 트랜잭션은 롤백됩니다.

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

중요 변경 사항: MySQL 5.7에서 MySQL 8.4로의 업그레이드는 지원되지 않습니다. MySQL 5.7에서 8.0으로 업그레이드한 후에 8.4로 진행하십시오. (WL #15924)

InnoDB: 장기 실행 중인 롤백 작업에 대한 진행 상황 메시지가 주기적으로 로그에 기록됩니다. 이 메시지는 정보성 노트 수준의 오류 메시지로 기록되며, 처음에는 ER_IB_LONG_ROLLBACK_FULL로 시작되며, 이어서 ER_IB_LONG_ROLLBACK 메시지가 순차적으로 나타납니다. (WL #15822)

InnoDB: 다음의 InnoDB 설정 옵션들의 기본값이 변경되었습니다: innodb_adaptive_hash_index, innodb_buffer_pool_in_core_file, innodb_buffer_pool_instances, innodb_change_buffering, innodb_doublewrite_files, innodb_doublewrite_pages, innodb_flush_method, innodb_io_capacity, innodb_io_capacity_max, innodb_log_buffer_size, innodb_numa_interleave, innodb_page_cleaners, innodb_parallel_read_threads, innodb_purge_threads, innodb_read_io_threads, innodb_use_fdatasync, temptable_max_ram, temptable_max_mmap, 그리고 temptable_use_mmap.
--innodb-dedicated-server 시작 옵션에 의해 영향을 받는 설정도 변경되었습니다.
새로운 기본값 목록은 MySQL 8.0 이후 MySQL 8.4의 새로운 기능을 참조하십시오. 또한 전용 MySQL 서버를 위한 InnoDB 자동 구성 사용도 확인할 수 있습니다. (WL #16179)

패키징: Fedora 40 및 Ubuntu 24.04에 대한 지원이 추가되었습니다.

복제: 이제 불완전한 트랜잭션을 제거한 후 릴레이 로그를 복구할 수 있습니다. 서버가 --relay-log-recovery=OFF (기본값)로 시작될 때 릴레이 로그는 정리됩니다. 이는 서버가 시작될 때 다음 항목들을 제거한다는 것을 의미합니다:

  • 불완전한 트랜잭션
  • 불완전한 트랜잭션만 포함하는 릴레이 로그 파일
  • 제거된 릴레이 로그 파일에 대한 릴레이 로그 인덱스 파일의 참조

자세한 내용은 relay_log_recovery 서버 시스템 변수 설명을 참조하십시오.

그룹 복제: 그룹에 다시 합류하는 멤버가 그룹에 참여했던 이전 기록에서 group_replication_applier 채널에서 적용할 트랜잭션을 보유하고 있는 경우, 분산 복구 동안 donor와 연결되기 전에 해당 트랜잭션이 적용됩니다.
이 적용할 트랜잭션의 백로그는 performance_schema.replication_applier_status_by_worker 테이블을 통해 모니터링할 수 있지만, 오류 로그에 관련 정보가 없으면 서버가 중단된 것처럼 보일 수 있습니다.
이제 이러한 경우, 오류 로그에 적절하게 Distributed recovery will wait until the transactions ... contained on the group_replication_applier channel are applied 또는 Distributed recovery finished applying the transactions ... contained on the group_replication_applier channel라는 메시지가 기록됩니다. (버그 #36229998)

그룹 복제: 이번 릴리스부터 클론 플러그인을 사용한 분산 복구는 동일한 LTS 시리즈의 다른 릴리스 간에 허용됩니다. (버그 #35992145)

그룹 복제: MySQL 그룹 복제는 이제 싱글-프라이머리 모드에서 사전 인증 정보 가비지 수집을 지원합니다. 이 기능은 이번 릴리스에서 추가된 group_replication_preemptive_garbage_collection 시스템 변수를 사용하여 활성화할 수 있으며, 활성화되면 아직 커밋되지 않은 트랜잭션의 쓰기 세트만 유지되어 시간과 메모리 소비를 절약할 수 있습니다. group_replication_preemptive_garbage_collection_rows_threshold도 이 릴리스에 도입되었으며, 가비지 수집을 트리거하기 위해 필요한 인증 행의 하한값을 설정합니다. 기본값은 100000입니다.
group_replication_preemptive_garbage_collection의 값은 그룹 복제가 실행되지 않을 때만 변경할 수 있으며, 멀티-프라이머리 모드에서 실행 중인 그룹에는 영향을 미치지 않습니다. 이 시스템 변수가 활성화되면 멀티-프라이머리 모드와 싱글-프라이머리 모드 간 전환이 불가능합니다(자세한 내용은 그룹 모드 변경을 참조하십시오). 가비지 수집 프로세스에서 소비되는 메모리에 대한 정보를 얻는 방법에 대한 도움말은 성능 스키마 메모리 계측으로 그룹 복제 메모리 사용량 모니터링을 참조하십시오. (WL #15923)

Microsoft Windows: MySQL Windows 바이너리 파일(.exe.dll 파일)에 대해 파일 속성에서 추가 정보가 표시되도록 변경되었습니다. (버그 #36379291)

클론 플러그인의 버전 요구 사항이 완화되어 동일한 시리즈의 다른 포인트 릴리스 간에도 클로닝이 가능해졌습니다. 즉, 이전에는 릴리스 번호까지 일치해야 했으나 이제는 주 버전과 부 버전 번호만 일치하면 됩니다.
예를 들어, MySQL 8.4.0에서 (향후 출시될) MySQL 8.4.14로 클로닝하거나 MySQL 8.4.14에서 8.4.0으로 클로닝하는 것이 이제 지원됩니다.
자세한 내용은 The Clone Plugin을 참조하십시오. (버그 #36293529, WL #15989)

반복자 기반 형식의 EXPLAIN FORMAT=JSON (즉, explain_json_format_version2인 경우)을 사용할 때, 이제 출력에 query_type 필드가 추가되어 명령문 유형(select, insert, delete 등)을 식별할 수 있습니다. (버그 #36134568)

버그 수정

중요 변경 사항; 복제: 이제 gtid_executed 서버 시스템 변수를 설정하려면 TRANSACTION_GTID_TAG 권한이 필요합니다. (버그 #36201133)

중요 변경 사항: Robin Hood 해싱 라이브러리가 unordered_dense로 교체되었습니다. (버그 #36158022)

InnoDB; Microsoft Windows: Windows에서 redo 로그 성능이 향상되었습니다. 이제 redo 로그 파일을 중첩 모드에서 엽니다. (버그 #36154818)
참조: 이 문제는 다음의 회귀 문제입니다: 버그 #12527.

InnoDB: 로그 작성자가 log.writer_mutex를 일시적으로 해제하는 함수를 호출하는 동안 innodb_log_writer_threads=OFF로 설정된 경우, 다른 스레드가 이 시간 동안 redo 로그에 쓰는 문제가 발생할 수 있었습니다. (버그 #36425219)

InnoDB: FTS 인덱스를 가진 테이블에서 일부 FTS 작업이 일관되지 않은 결과를 초래했습니다. 예를 들어, FTS 캐시를 동기화하는 동안 서버가 종료되거나 다른 FTS 작업과 동시에 동기화가 발생한 경우입니다.
Yin Peng 및 Tencent 팀에 감사드립니다. (버그 #36347647)

InnoDB: 데이터를 포함하는 테이블에서 인덱스를 생성할 때, valgrindddl::Builder::bulk_add_row()에서 초기화되지 않은 메모리의 읽기를 간헐적으로 보고했습니다. (버그 #36342792)

InnoDB: Windows에서 파일을 공유 쓰기 잠금 없이 열어두고 fil_shard 뮤텍스를 획득하려고 시도하면, fil_shard 뮤텍스를 이미 획득한 다른 스레드와 교착 상태가 발생했습니다. (버그 #36159317)
참조: 버그 #32808809도 참조하십시오.

InnoDB: 복구 중에 “기존 redo 로그 파일을 찾았으나 최소 하나가 누락됨” 오류를 발생시킬 수 있는 잠재적인 redo 로그 회전 문제를 수정했습니다. (버그 #36124625)

InnoDB: 전체 텍스트 인덱스와 관련된 단언 실패를 발견하고 수정했습니다. (버그 #35836581)

InnoDB: redo 로그 손상을 더 잘 처리하기 위해 fil_tablespace_redo_* 함수에 로그 버퍼 검사를 추가했습니다. (버그 #35676721)

InnoDB: 테이블스페이스 삭제 중 발생할 수 있는 잠재적인 단언 실패 문제를 방지하기 위해 버퍼 처리 방식을 개선했습니다. (버그 #35676106, 버그 #36343647)

InnoDB: 인스턴트 DDL을 사용한 열 순서 변경이 redo 로그에 기록되지 않아 복구 중 잘못된 로그 재생을 일으킬 수 있는 문제를 수정했습니다. (버그 #35183686)

InnoDB: innodb_parallel_read_threads가 1보다 큰 값으로 설정된 경우, InnoDB가 비효율적으로 사전 읽기 휴리스틱을 비활성화하여 버퍼 풀에 페이지가 없는 경우 지연이 발생했습니다. (버그 #113482, 버그 #36142806)

InnoDB: 테이블스페이스 가져오기 시 가져온 열 이름의 길이에 128자 제한이 있었으며, 이는 가변 길이 인코딩을 제대로 처리하지 못했습니다. 이제 최대 멀티바이트 문자 길이의 64배로 설정되었습니다.
Lee Adria에게 감사드립니다. (버그 #113208, 버그 #36047803)

InnoDB: TempTable 스토리지 엔진을 사용하는 고유 해시 인덱스를 사용하는 쿼리가 MEMORY 엔진을 사용하는 쿼리보다 상당히 더 많은 시간을 소요하는 문제가 있었습니다.
Xiaoyang Chen에게 감사드립니다. (버그 #113178, 버그 #36037224, 버그 #36224958)

InnoDB: 용량이 가득 찼을 때 redo 로그 소비자가 진행할 수 없었으며, 다른 스레드가 CREATE USER와 같은 사용자 관련 작업을 실행 중일 때 새로운 연결이 차단되었습니다. 이로 인해 innodb_redo_log_capacity 크기를 증가시키는 해결 방법을 사용할 수 없게 되었습니다. (버그 #112608, 버그 #36004840)

InnoDB: 디버그 빌드에서, 더 이상 활성 상태가 아닌 트랜잭션에 대해 MDL 잠금을 획득하려고 할 때 InnoDB의 백그라운드에서 단언 실패가 발생했습니다.
Alibaba의 Genze Wu가 제공한 패치를 기반으로 한 수정입니다. 기여해 주셔서 감사합니다. (버그 #112424, 버그 #35835864)
참조: 이 문제는 버그 #33700835의 회귀 문제입니다.

InnoDB: MySQL 트랜케이트 undo 작업(정리 스레드)이 undo 테이블스페이스를 트랜케이트할 때 undo_{space_number}_trunc.log 파일을 제거하지 않았습니다. (버그 #112262, 버그 #35784192)

InnoDB: innodb_parallel_read_threads가 1보다 큰 값으로 설정된 경우 InnoDB는 불필요하게 비동기 읽기를 요청했으며, 이는 I/O 완료 시 더 많은 동기화가 필요하게 하고 I/O 작업을 처리하기 위한 제한된 스레드 수(innodb_read_io_threads)로 인해 병목 현상을 일으켰습니다. 이제 비동기 읽기 대신 동기 읽기를 수행합니다. (버그 #112137, 버그 #35740866)

InnoDB: trx가 trx->in_innodb 값 오류를 만난 후 예기치 않게 중단되었습니다.
Shaohua Wang에게 감사드립니다. (버그 #110652, 버그 #35277407)

InnoDB: 수천 개의 읽기 전용 트랜잭션이 있는 경우 data_lockdata_lock_waits 테이블을 쿼리하는 동안 성능 문제가 있었습니다. (버그 #109539, 버그 #34951273)

InnoDB: MySQL은 더 이상 보조 인덱스 스캔을 사용하라는 옵티마이저 힌트를 무시하지 않으며, 대신 클러스터된(병렬) 인덱스 스캔을 강제하지 않습니다. (버그 #100597, 버그 #112767, 버그 #31791868, 버그 #35952353)

복제: diagnostics.sql 파일은 MySQL 8.4.0으로 업그레이드하는 동안 SHOW SLAVE STATUS와 같은 구식 복제 용어를 포함한 데이터를 복원할 때 업그레이드를 방해했습니다. (버그 #36323066)

복제: Gtid_tagged_log_event는 원래 커밋 타임스탬프가 즉시 커밋 타임스탬프와 같을 때만 올바른 값을 인코딩했으며, 다를 경우에도 동일한 방식으로 처리되었습니다. (버그 #36312880)

복제: 특정 경우에 gtid_next 서버 시스템 변수가 잘못된 값을 허용하거나, 올바른 값으로 설정한 후에도 잘못된 값을 표시하거나, 두 가지 모두 발생했습니다. (버그 #36308318)

복제: 복제 채널이 알 수 없는 네트워크 네임스페이스로 구성된 경우, 복제 수신 스레드는 오류를 보고하지 않았습니다. 이로 인해 수신 스레드가 중지되었으나, 중단 이유가 표시되거나 로그에 기록되지 않았습니다. (버그 #36054355)

복제: binlog_format=ROWgtid_mode=OFF 설정에서, 복제본의 적용 스레드 사이에서 자동 증가 잠금에 대한 경쟁이 높을 때 데드락이 보고되었습니다. (버그 #35851009)

복제: 특정 경우, 병렬 적용기에서 SQL 스레드가 MY-001755 (ER_MTA_CANT_PARALLEL) 오류로 종료되었습니다. (버그 #35431274)

복제: 준비된 트랜잭션의 XA COMMIT 실패는 트랜잭션 롤백을 초래할 수 있었습니다. (버그 #33650776)

복제: 복제 소스 서버가 4GB 이상의 오프셋을 가진 바이너리 로그 파일 위치를 포함하는 하트비트 이벤트를 전송할 때, 수신 스레드가 오류로 중지되었습니다. 이 문제를 해결하기 위해 더 큰 값을 처리할 수 있는 새로운 하트비트 이벤트(Heartbeat_log_event_v2, 로그 이벤트 유형 41)가 추가되었습니다. (버그 #29913991)

복제: 서버가 ER_REPLICA_HEARTBEAT_FAILURE 오류 메시지를 출력할 때, 마스터 로그 파일 이름의 길이를 고려하지 않아 관련 없는 데이터를 출력했습니다. (버그 #29913928)

그룹 복제: 그룹의 멤버 M1M2가 각기 다른 복구 사용자(M1u1, M2u2)를 사용하는 경우, 새로운 멤버 M3가 그룹에 u2 복구 사용자로 합류할 때 문제가 발생했습니다. M3u2만 알고 있었고 u1은 몰랐기 때문에, START GROUP REPLICATION 명령어가 M1M2에 연결할 수 없다는 이유로 거부되었습니다. 그럼에도 M1은 계속해서 M3에 연결을 시도하며 M1에서는 “Error in establishing mysql connection” 오류를, M3에서는 “Access denied” 오류를 로그에 기록했습니다.
XCom은 빠른 재연결을 위해 마지막 세 가지 구성 상태를 저장합니다. 그러나 이로 인해 현재 그룹에 속하지 않은 노드에 계속해서 연결을 시도하는 문제가 발생할 수 있습니다. 이를 해결하기 위해, 현재 구성에 속하지 않은 노드에 대한 오류 로그를 억제하여 시스템에 문제가 있다는 잘못된 인식을 방지했습니다. (버그 #36210988)
참고: 버그 #32592027도 참조하십시오.

그룹 복제: GTID 집합 처리 개선이 이루어졌습니다. (버그 #36093405)

그룹 복제: 멤버가 그룹에서 탈퇴하고 ERROR 상태로 전환된 후, group_replication_exit_state_action에 지정된 동작을 따르지 않은 두 가지 경우가 발견되었습니다. 이는 다음과 같습니다:

  • super_read_only 설정 중 오류가 발생한 경우
  • 그룹 멤버의 바이너리 로그 및 클론 그룹이 없어 멤버 복구가 불가능한 경우

예시: group_replication_exit_state_action 값이 OFFLINE_MODE로 설정된 상태에서 이러한 상황이 발생했을 때, 예상대로 오프라인 모드가 활성화되지 않았습니다. (버그 #36076308)

그룹 복제: 새로운 기본 노드를 성공적으로 설정한 후, group_replication_set_as_primary() 함수가 완료되지 않고 무기한 대기하는 경우가 있었습니다. (버그 #36059098)

그룹 복제: AFTER 오류(ER_GRP_RPL_TRX_WAIT_FOR_GROUP_PREPARE_FAILED)에 영향을 받은 트랜잭션의 경우, 오류 로그에 기록된 메시지에 세션 ID 대신 UUID가 참조되었습니다. (버그 #35953196)

그룹 복제: 기본 노드 i1과 두 개의 보조 노드 i2, i3로 구성된 그룹이 기본 노드의 메모리 사용량 문제로 인해 간헐적인 문제를 겪었습니다. 보조 노드들이 기본 노드를 도달할 수 없음 상태로 보고한 후 다시 도달할 수 있음으로 보고하는 등 불안정한 상태가 이어졌고, 결국 보조 노드들이 원래의 기본 노드 i1을 추방하고 새로운 기본 노드 i2를 선출했습니다.
이 상황에서 performance_schema.replication_group_members 테이블을 조회하면, 이전의 기본 노드 i1ONLINEPRIMARY 상태로, i2i3는 각각 ONLINESECONDARY 상태로 보고되었습니다. 이러한 상태는 mysqld 프로세스를 재시작할 때까지 12시간 이상 지속되었습니다.
문제는 i1의 보조 노드 중 하나가 과부하에 걸리면서 간헐적으로 그룹을 나갔다가 다시 합류하는 과정에서 시작되었습니다. 이로 인해 기본 노드는 연결을 시도하는 동안 중단되었고, 이 문제는 XCom 통신 스택에서 SSL_connect() 호출이 비동기에서 동기 방식으로 변경된 이후 발생했습니다. 과부하가 걸린 노드는 SSL_connect() 호출에 응답하지 않았고, 이로 인해 연결을 시도하는 쪽이 무기한 차단되었습니다.
이를 해결하기 위해, 이제 비차단 방식으로 연결을 시도하고 타임아웃 발생 시 호출자에게 반환되며, 연결 재시도를 처리하도록 수정되었습니다. (버그 #34348094)

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

MySQL NDB ClusterJ: setLimits()메서드는 이제deletePersistentAll()과 체인으로 연결되어 삭제할 항목의 수를 제한할 수 있습니다. 자세한 내용은 deletePersistentAll()` 설명을 참조하십시오. (버그 #36049906)

저장 프로시저 내에서 생성된 이벤트가 항상 올바르게 처리되지 않았습니다. (버그 #36402968, 버그 #35395333)
참고: 이 문제는 버그 #17809, 버그 #11745618의 회귀입니다.

stringsstrings_shared 라이브러리 파일은 mysql::collation::find_by_id() 함수를 선언했으나 제공하지 않았습니다. (버그 #36353447)

MySQL 빌드를 위한 CMake의 최소 요구 버전이 3.5.1에서 3.14.6으로 상향되었습니다. (버그 #36338366)
참고: 버그 #35553331도 참조하십시오.

백트레이스 라이브러리의 구성이 빌드 프로세스 초기에 수행되었으며, 라이브러리 자체가 컴파일러 플래그가 불완전한 상태로 빌드되었습니다. 이는 서버의 나머지 부분과 차이가 있었습니다. (버그 #36292247)

SET GLOBAL offline_mode=ON이 높은 부하 상황에서 항상 제대로 동작하지 않았습니다. (버그 #36275182)
참고: 버그 #36405894도 참조하십시오.

curl이 8.6.0 버전으로 업그레이드되었습니다. (버그 #36267545)

net_read_raw_loop()에서 시간 초과가 감지되었을 때 스레드 풀 코드에서가 아닌 새로운 오류 메시지가 추가되었습니다. 여기에는 시간 초과를 유발한 조건에 대한 정보가 포함됩니다. 이 오류 메시지는 wait_timeout에 의해 표시된 시간보다 일찍 시간 초과가 발생하면 기록됩니다. (버그 #36250895)
참고: 버그 #34857147도 참조하십시오.

mysqldump가 서버 버전을 항상 올바르게 해석하지 않았습니다. (버그 #36248967)
참고: 버그 #36405879도 참조하십시오.

뷰의 조건 절 하향식 평가가 뷰가 생성된 문자 세트와 조회 시 사용된 문자 세트가 다른 경우 대조 체계 불일치로 거부되었습니다. (버그 #36246859)

sql/sql_yacc.yy의 SQL 문법을 개선하여 필요하지 않은 4개의 shift-reduce 충돌을 제거했습니다. (버그 #36221823)

CMake 3.28.1 이후 버전과의 호환성을 위해 사용 중단된 exec_program() 명령을 execute_process()로 대체했습니다. (버그 #36220656)

최소 RPM 빌드에 MLE 컴포넌트가 추가되었습니다. (버그 #36210740)

일부 NULLIF()EXCEPT 쿼리에서 set_typelib()에서 어설션이 발생했습니다. (버그 #36151537)
참고: 버그 #33045412도 참조하십시오.

특정 쿼리에서 EstimateDeleteRowsCost()에서 어설션이 발생했습니다. (버그 #36130806)
참고: 이 문제는 버그 #35590128의 회귀입니다.

SELECT 1 FROM t WHERE CAST(a AS UNSIGNED INTEGER) = 1 AND a = (SELECT 1 FROM t) 형식의 쿼리가 item_func.cc에서 어설션을 유발했습니다. (버그 #36128964)

두 개의 빈 문자열을 UNION으로 결합하여 SELECT '' AS a UNION SELECT '' AS b를 실행할 때, 결과 데이터의 유형이 CHAR(0) 대신 VARCHAR(0)으로 표시되었습니다.
문자열 길이가 0인 경우 예외를 제거하여 이 문제를 해결했습니다. (버그 #36112585)

protobuf 라이브러리가 25.1 버전으로 업그레이드되었습니다. (버그 #36108397)

Enterprise Linux RPM을 빌드할 때 이제 빌드 스크립트가 /opt/rh/gcc-toolset-12에 있는 새로운 strip 명령을 가리키며, 해당하는 dwz 도구가 있는지 확인합니다. 이전에는 EL8에서만 구현되었습니다. (버그 #36090069)

Oracle Linux에서 링크 시간 최적화를 사용하여 빌드할 때 이제 gcc-argcc-ranlib을 찾습니다. (버그 #36089900)

치명적인 신호를 처리할 때 sh_handler 대신 sa_sigaction을 사용하여, SIGSEGV 또는 SIGFPE 신호를 처리할 때 더 많은 정보를 출력할 수 있게 했습니다. (버그 #36082110)

MySQL 클라이언트가 mysql_native_password를 사용하여 플러그인 인증을 지원하지 않는 MySQL Server의 오래된 버전(예: MySQL 5.0.15)에 인증할 수 없었습니다. (버그 #36066161)

서버 다운그레이드 중에 로그에 기록되는 메시지가 개선되었습니다. (버그 #36053108)

키링 컴포넌트 오류 로그에 이전보다 더 많은 정보가 기록되도록 개선되었습니다. (버그 #36037172)

Clang을 사용하여 Windows에서 디버그 빌드를 컴파일할 때 _ITERATOR_DEBUG_LEVEL0으로 설정했습니다. (버그 #36032501)

ENUM 또는 SET 열에 대해 롤업을 수행할 때, 해당 유형 정보가 발견되지 않은 경우 해결 중에 sql/item_sum.cc에서 어설션이 발생했습니다. (버그 #36028294)
참고: 버그 #33045412도 참조하십시오.

공통 테이블 표현식(CTE)에 INTERSECT 또는 EXCEPT 집합 연산이 포함된 경우, 이후 조인에서 동일한 CTE를 두 번째로 사용할 때 잘못된 결과가 반환되었습니다. (버그 #36002215)

해시 조인을 포함하는 상관되지 않은 서브쿼리를 최적화하는 도중 쿼리를 중단하면 sql/sql_select.cc에서 어설션 오류가 발생했습니다. (버그 #35991384)

특정 쿼리에 대한 응답으로 서버가 예기치 않게 종료되는 경우가 있었습니다. (버그 #35957627)

SELECT 목록에 창 함수(예: COUNT())가 포함된 롤업 쿼리가 ORDER BY에도 포함된 경우 서버가 예기치 않게 종료되었습니다. (버그 #35947358)
참고: 이 문제는 버그 #33069747의 회귀입니다.

뷰와 테이블 DDL에서 뷰 및 트리거 정의자 처리 방식이 개선되었습니다. (버그 #35942937)

서버가 특정 쿼리에 대해 클라이언트에 메타데이터를 항상 올바르게 반환하지 않았습니다. (버그 #35904044)

handler.cchandler::ha_index_end()에서 어설션 오류가 발견되고 수정되었습니다. (버그 #35877600)

SELECT DISTINCT t1.x, t2.x FROM t AS t1, t AS t2 WHERE t1.pk = t2.x와 같은 쿼리에서, t1.pk = t2.x이면서 pk가 기본 키인 경우 t2.x->t1.x라는 기능적 종속성이 있습니다. 이로 인해 필드 집합에 대해 기능적 종속성을 고려하지 않고 서로 다른 행 추정값을 제공하는 여러 쿼리 계획이 발생할 수 있었습니다.
이제 우리는 고유한 행 수를 한 번만 계산하고, 이 수를 모든 쿼리 계획에 사용하도록 수정했습니다. (버그 #35855573)

다중 값 인덱스가 있는 테이블에 대해 쿼리를 실행할 때, 서버가 때때로 예기치 않게 종료되었습니다. 복잡한 SELECT 쿼리를 실행하는 도중에 이러한 인덱스를 사용할 때 자주 발생했습니다. (버그 #35789759)

sql/item_subselect.cc의 코드가 개선되었습니다. (버그 #35733778, 버그 #35738531, 버그 #35779012)

일부 창 함수의 집계가 올바르게 처리되지 않았습니다. (버그 #35560806)

CREATE USER IF EXISTS이 항상 올바르게 로그되지 않았습니다. (버그 #35530823)

서버가 파티션 표현식에서 서브쿼리를 제대로 허용하지 않았습니다. 이러한 서브쿼리는 유효하지 않으며 구문 오류를 발생시켜야 합니다. (버그 #35476172)

Boost의 최소 버전이 1.84.0으로 업그레이드되었습니다. (버그 #35259498)

일부 RANK() ... OVER() 쿼리에서 sql/sql_executor.cc에 어설션이 발생했습니다. (버그 #35228083)

연속적으로 ALTER TABLE ... ALGORITHM=COPY 명령을 10초 이내에 실행하면 n_rows 값이 0이 되었습니다. (버그 #35127747)

authentication_kerberos를 Valgrind로 실행할 때 메모리 누수가 발생하는 문제가 해결되었습니다. (버그 #34482788, 버그 #36570929)

MAX(column)를 사용하는 쿼리가 열에 인덱스가 추가되기 전과 후에 다른 결과를 제공했습니다. (버그 #34057432)

SET 또는 ENUM 유형의 열에서 LEAD() 또는 LAG() 창 함수를 사용하는 쿼리에서 해결 중 어설션이 발생했습니다. 동일한 어설션은 SET 또는 ENUM 열에서 LEAST() 또는 GREATEST() 함수를 사용하는 일부 쿼리에서도 발생했습니다. (버그 #33045412)

임시 테이블에 HAVING 조건을 추가할 때, HAVING 조건의 모든 필드가 이미 임시 테이블 필드로 대체되었어야 하지만, HAVING 절에 내부 Item_row 유형을 포함하는 표현식이 있는 쿼리에서는 상수 표현식이 캐시되지 않아 HAVING 절이 여전히 기본 테이블의 필드를 참조했습니다. (버그 #30112096)

해시 조인 또는 스트리밍 집계를 수행하기 전에 행을 임시 테이블에 물리화하는 쿼리에서 임시 테이블의 데이터를 조인 버퍼 또는 집계 버퍼로 두 번 복사하는 경우가 있었습니다. 잘못된 결과를 초래하지는 않았으나, 버퍼 공간을 비효율적으로 사용하여 성능에 부정적인 영향을 미칠 수 있었습니다.
이는 내부 WalkTablesUnderAccessPath() 함수가 MATERIALIZE 액세스 경로를 두 번 방문했기 때문입니다: 처음에는 MATERIALIZE 액세스 경로 자체를 보고, 두 번째는 table_path 구성원을 방문할 때 발생했습니다.
우리는 이제 MATERIALIZE 경로를 볼 때 테이블을 방문하지 않고, MATERIALIZE 아래의 table_path를 볼 때만 테이블을 방문하도록 수정했습니다. (버그 #113647, 버그 #36190386)

Boost C++ 라이브러리를 다운로드하는 데 사용된 URL이 업데이트되었습니다. (버그 #113576, 버그 #36164514)

디버그 서버에서 서로 다른 유형의 열을 비교하는 교차 비교에서 때때로 sql/item.cc에 어설션이 발생했습니다. (버그 #113385, 버그 #36094867)

서브쿼리에서 선택한 항목이 NULL을 테스트할 때 변환이 의미적으로 유효하지 않을 수 있었습니다. 그룹화된 파생 테이블과의 외부 조인이 이런 경우에 NULL을 생성할 수 있지만 원래의 서브쿼리는 그렇지 않을 수 있었습니다. 이러한 문제가 발생하지 않도록 이제 이러한 서브쿼리가 변환되지 않도록 방지했습니다. (버그 #113318, 버그 #36070542)

이전 문제의 수정(처음 MySQL 8.0.30에서 처리됨)이 불완전했습니다.
기여해 주신 Hao Lu 님께 감사드립니다. (버그 #113174, 버그 #36035044)
참고: 이 문제는 버그 #110801, 버그 #35328028의 회귀입니다.

s390x 플랫폼에서 최적화 과잉을 피하기 위해 FMA 테스트를 -O2로 컴파일합니다.
기여해 주신 Jonathan Albrecht 님께 감사드립니다. (버그 #113096, 버그 #36016140)

s390x는 빅 엔디언 플랫폼이지만, 리틀 엔디언 ICU 데이터 디렉터리가 컴파일에 사용되었습니다.
기여해 주신 Jonathan Albrecht 님께 감사드립니다. (버그 #113095, 버그 #36016141)

SET SESSION optimizer_switch = 'hash_set_operations=off' 명령을 준비된 문에서 실행한 후 동일한 준비된 문을 실행하려고 하면 sql/sql_select.cc에서 어설션이 발생했습니다. (버그 #112919, 버그 #35970620)

이제 서버는 외래 키 오류에 대해 오류 세부 정보가 표시되는지 여부와 상관없이 ER_NO_REFERENCED_ROW_2 또는 ER_ROW_IS_REFERENCED_2를 사용합니다. 또한, 사용자가 적절한 권한을 가지고 있는 경우 오류 메시지에 상위 및 하위 테이블 세부 정보가 표시됩니다. (버그 #112589, 버그 #35868410)

느슨한 인덱스 스캔을 사용하는 쿼리에서 때때로 잘못된 결과가 반환되었습니다. (버그 #112541, 버그 #35854362)

Item_ref 객체의 참조 항목이 일관된 외부 참조 정보를 가지고 있는지 확인하는 sql/sql_derived.cc의 어설션이 OUTER_REF 유형의 참조에서 실패했습니다. Item_outer_ref 유형의 객체에 대해 종속성 정보가 Item_outer_ref 객체 및 이 참조가 가리키는 원래 표현식에 설정되었지만, Item_outer_ref와 원래 표현식 사이의 중간 참조 객체에는 이 정보가 포함되지 않았습니다. (버그 #112478, 버그 #35846847)

디버그 빌드에서 길이가 0인 열(CHAR(0) 또는 BINARY(0))이 있는 테이블에 데이터를 삽입할 때 어설션이 실패했습니다. 이제 더 엄격하지 않은 어설션은 소스에서 복사된 바이트 수가 대상과 동일할 때만 실패하도록 수정되었습니다. (버그 #111450, 버그 #35507763)

MySQL은 musl 버전의 libc를 사용하여 올바르게 빌드되지 않았습니다.
기여해 주신 Sam James 님께 감사드립니다. (버그 #110808, 버그 #35330950)

TEXT 열에 기본 문자열 히스토그램을 사용하는 경우, 히스토그램 버킷 값과 REVERSE(1)이 반환하는 문자열을 비교할 때 대조 체계 불일치로 인해 어설션이 발생했습니다. (버그 #110527, 버그 #35227319)

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

Leave a Comment



이 문서 공유

8.4.0 변경 사항 (2024-04-30 LTS Release)

링크 복사

CONTENTS