MySQL 8.4 LTS Release Note

8.4.1 변경 사항 (2024-07-01 LTS Release)

Estimated reading: 2 minutes 37 views

공식 문서: Changes in MySQL 8.4.1 (2024-07-01, LTS Release)

감사 로그 관련 사항

감사 로그에서 파일을 제거하거나 이름을 변경한 후 감사 로그 정리가 작동하지 않았습니다. 이제 이러한 경우에도 정리가 계속되지만, 누락된 감사 로그 파일을 삭제할 수 없다는 경고가 오류 로그에 출력됩니다. (버그 #35902913)

MySQL은 이제 플러그인의 유형에 관계없이 유효한 플러그인 구조체를 인수로 하여 plugin->deinit()을 호출합니다.Martin Alderete 님께 감사드립니다.

인증 관련 사항

authentication_ldap_sasl 플러그인을 프록시 없이 사용할 때 발생하는 Access denied 오류에 대한 로그 메시지가 더 명확한 이유를 제공하도록 개선되었습니다. (버그 #35317691)

GSSAPI 방법을 사용하여 OpenLDAP 서버에 접근할 때 MySQL LDAP SASL 인증이 MySQL 서버 오류 Plugin authentication_ldap_sasl reported: 'LDAP authentication failed or group retrieval failed: LDAP error: Invalid DN syntax'으로 거부되었습니다. 이는 OpenLDAP이 사용된 루트 DN을 인식하지 못했기 때문입니다. (버그 #32631511)

C API 관련 사항

C API 애플리케이션이 서버 측 준비된 문서에 대한 결과를 수신하는 동안 멈추는 문제가 발생했습니다.

컴파일 관련 사항

macOS: Xcode 버전의 zlib-DWITH_SYSTEM_LIBS=ON으로 구성할 때 사용해야 할 기본 시스템 라이브러리 목록에서 제거되었습니다. (버그 #36537593)

Microsoft Windows: BUILD_ALL 대상이 Windows에서 컴파일할 때 작동하지 않았습니다. (버그 #36424619)

Microsoft Windows: Ninja를 사용하여 MySQL을 컴파일할 때 과도한 RAM 사용으로 인해 디스크 스와핑이 발생했습니다. (버그 #36399256)

.deb 패키지의 서버 디버그 버전을 빌드할 때 유지 관리자 모드가 비활성화되었습니다. (버그 #36619757)

번들된 googletestgooglemock 소스가 버전 1.14.0으로 업그레이드되었습니다. (버그 #36562482)

GenError에 대한 누락된 종속성이 추가되었습니다. (버그 #36551721)

Fedora 38에서 컴파일할 때 egrep 대신 grep -E가 사용됩니다. (버그 #36507549)

이제 Linux 시스템에서 소스에 포함된 tcmalloc 라이브러리를 사용하여 MySQL을 빌드할 수 있으며, 이때 -DWITH_TCMALLOC=BUNDLED 옵션을 지정하면 됩니다. 이 기능은 Linux에서만 지원됩니다. (버그 #36313839)

Enterprise Linux 8에서 MySQL을 빌드할 때 번들된 tcmalloc()이 사용됩니다. (버그 #114844, 버그 #35674008)

Ubuntu 23.04에서 빌드할 때 sql/statement/ed_connection.cc에서 발생한 경고가 제거되었습니다. (버그 #114436, 버그 #36428465)

Linux aarch64 플랫폼 바이너리는 이제 4k 또는 64k 페이지 크기를 사용하는 시스템과의 호환성을 위해 patchelf --page-size=65536을 사용하여 빌드됩니다. (버그 #114233, 버그 #36393794)

컴포넌트 관련 사항

--loose 접두사를 사용하여 설정된 컴포넌트 옵션 값이 컴포넌트가 설치될 때 읽히지 않았습니다. (버그 #28341329)

구성 관련 사항

Microsoft Windows: Windows에서 _MySQL Configurator_가 업그레이드 경로에 따라 인플레이스 업그레이드를 지원하도록 업데이트되었습니다. (버그 #36685422)

Microsoft Windows: Windows의 MSI 설치에서 _MySQL Configurator_는 이제 사용자의 개입 없이 MySQL 8.4 LTS 설치를 자동으로 업그레이드합니다. (작업 항목 #16274)

연결 관리 관련 사항

conn_delay/Waiting in connection_control plugin 단계가 연결 제어 플러그인에 의해 지연된 후에 재설정되지 않아 부정확한 모니터링 정보가 발생했습니다. (버그 #35205358)

데이터 딕셔너리 관련 사항

MySQL 5.7에서 8.0 또는 그 이후 버전으로 일반 열과 생성된 열이 혼합된 MyISAM 테이블을 업그레이드하려고 하면 테이블 손상이 발생했습니다. (버그 #105301, 버그 #33503328)

플러거블 인증

mysql_native_password 플러그인을 사용하여 인증할 때 발생하는 사용 중단 경고는 이제 한 번만 발생합니다. (버그 #35792948)

스레드 풀 관련 사항

연결 핸들러 스레드가 없는 스레드 그룹에 연결 시도가 멈췄습니다. 이를 해결하기 위해 적어도 하나의 연결 스레드가 남아 있는 경우에만 연결 핸들러 스레드가 종료되도록 수정했습니다. (버그 #36550125)

이전 리팩토링으로 인해 수신된 연결 요청을 처리할 때 수행되는 연결 잠금이 잘못 제거되어, 새 연결을 추가하는 스레드와 연결 핸들러 스레드 간에 경쟁 상태가 발생할 수 있었습니다. 이로 인해 연결 요청이 무시되어 처리되지 않고, 연결 시도가 멈추는 것처럼 보이는 상황이 발생할 수 있었습니다.
이를 해결하기 위해 큐를 처리하기 전에 연결을 잡고, 새로운 스레드를 깨우거나 생성하기 전에 연결을 해제하도록 수정했습니다. (버그 #36548687)

thread_pool_longrun_trx_limit 시스템 변수를 설정할 때 명시된 범위를 벗어난 값을 지정할 수 있었습니다.
추가로, 이 변수에 대한 설정이 SHOW VARIABLES 또는 SELECT 명령의 출력에 반영되지 않았습니다. (버그 #36347102, 버그 #36371145)

SET PERSIST_ONLYthread_pool_max_transactions_limit과 올바르게 작동하지 않았습니다. (버그 #35019884)

X Plugin 관련 사항

시스템 변수 caching_sha2_password_digest_rounds를 X 프로토콜을 사용하여 기본값이 아닌 값으로 설정할 수 없었습니다. (버그 #36402455)

mysql_function_names 유닛 테스트 소스 파일의 MySQL 문서에 대한 오래된 링크가 업데이트되었습니다.
Minha Jeong 님께 감사드립니다. (버그 #113500, 버그 #36137217)

버그 수정

InnoDB: ALTER TABLE 작업 후 UPDATE 작업 중 MySQL이 예기치 않게 중단되었습니다. (버그 #36571091)
참고: 이 문제는 버그 #35183686의 회귀입니다.

InnoDB: 이제 로그 인덱스 크기 계산에 열 순서 변경을 반영합니다. (버그 #36526369)
참고: 이 문제는 버그 #35183686의 회귀입니다.

InnoDB: 파일 시스템 작업을 수행할 때, InnoDB는 디렉터리 변경 작업을 할 때마다 일관되게 상위 디렉터리에 대해 fsync를 실행합니다. (버그 #36174938)

InnoDB: 디버그 빌드에서 innodb_interpreter_output 디버그 변수를 설정하면 서버가 예기치 않게 중단되었는데, 이제 이 변수가 읽기 전용으로 변경되었습니다. (버그 #36041032)

InnoDB: os_innodb_umask 처리가 개선되었으며, 이 변수는 이제 읽기 전용입니다. (버그 #35932118)
참고: 이 문제는 버그 #29472125의 회귀입니다.

InnoDB: 너무 넓은 열에 인덱스가 있는 테이블이 MySQL 5.7.35 이전에 허용된 경우, 제자리 업그레이드 후 테이블이 조용히 가져와졌지만 접근할 수 없었고, 이는 백업을 만드는 데 방해가 되었습니다. 이제 유효하지 않은 인덱스를 사용하는 모든 작업은 인덱스가 삭제될 때까지 ER_INDEX_CORRUPT 오류가 발생합니다. 또한 ER_IB_INDEX_PART_TOO_LONG 오류가 로그에 기록됩니다. (버그 #35869747)
참고: 관련된 문제는 버그 #34826861를 참조하십시오.

InnoDB: 유효한 열 인덱스를 참조하는 InnoDB 단언 오류가 유효하지 않은 열 인덱스로 인해 발생했습니다. (버그 #34800754)

InnoDB: 빈 XA 트랜잭션에서 XA START 이후 서버를 종료하면 서버가 예기치 않게 중단되었습니다. (버그 #32416819)

InnoDB: 복제 적용기나 바이너리 로그 적용기를 처리 중에 빈 XA 트랜잭션을 처리하면서 시스템이 예기치 않게 중단되었습니다. (버그 #32416819)

InnoDB: Validate_files::check() 함수에서 불필요한 힙 사용을 제거했습니다.
Huaxiong Song 님의 기여에 감사드립니다. (버그 #115041, 버그 #36626203)

InnoDB: innodb_parallel_read_threads=1 설정으로 파티션 테이블을 읽으면, 256번 이상의 읽기 후에 읽기 성능이 크게 저하되었습니다. InnoDB는 병렬 읽기 스레드를 사용하지 않았음에도 불구하고 최대 용량에 도달한 것처럼 동작했습니다.
Ke Yu 님의 기여에 감사드립니다. (버그 #114154, 버그 #36347408)

InnoDB: 공간 참조 식별자(SRID) 속성이 포함된 열이 있는 공간 인덱스의 결과가 비어 있었습니다. 또한 FORCE INDEX를 사용하여 공간 인덱스에서 커버링 인덱스 스캔을 강제하면 단언이 발생했습니다. (버그 #112676, 버그 #114200, 버그 #35894664, 버그 #36361834)

InnoDB: SELECT ... GROUP BY 쿼리가 TempTable 엔진에서 메모리 엔진보다 최소 두 배 느리게 실행되었습니다. (버그 #107700, 버그 #34338001)

복제: 소스에 JSON 함수를 사용하여 생성된 저장 열이 있고, binlog_row_imageMINIMAL로 설정된 경우, 기본 열에 대한 업데이트 또는 삭제 작업이 다음 오류로 실패했습니다:

Invalid JSON text in argument 1 to function json_extract: 'The document is empty.' 

레플리카는 생성된 열을 다시 계산하려고 시도했으나 기본 열이 사용 불가능하여 해당 오류로 실패했습니다. 이번 릴리스부터는 기본 열이 사용 불가능할 때 저장된 생성된 열을 다시 계산하지 않습니다. (버그 #36515172)

복제: relay_log_space_limit이 활성화된 상태에서 GTID 기반 복제를 실행할 때, 자동 포지셔닝 프로토콜을 재시작하면 무한 루프가 발생하여 복제에서 교착 상태에 빠질 수 있었습니다. 이 문제는 트랜잭션 크기가 해당 한도를 초과하거나 레플리카가 이전 로그를 삭제할 수 없는 경우에도 relay_log_space_limit이 지켜지지 않아서 발생했습니다.이 문제를 해결하기 위해 다음과 같은 변경 사항을 적용했습니다:

  • 수신기는 사용자가 설정한 relay_log_space_limit을 존중하되, 수신된 트랜잭션이 삭제된 릴레이 로그에 맞지 않는 경우에는 예외가 발생합니다. 수신기는 트랜잭션을 예약하기 전에 전체 트랜잭션 예약이 가능한지 확인합니다. 불가능할 경우 수신기는 다음 작업을 수행합니다:
    • 수신기가 대기 중임을 나타내는 플래그를 설정
    • 릴레이 로그를 회전
    • 릴레이 로그 삭제가 실행되고 적용기가 모든 릴레이 로그를 삭제할 때까지 기다렸다가 수신기는 트랜잭션을 예약할 수 있습니다.
  • 조정자는 다음 파일로 이동하기 전에 수신기가 사용 가능한 릴레이 로그 공간을 기다리고 있는지 확인합니다. 그렇다면 조정자는 적용된 로그를 강제로 삭제하고 현재 릴레이 로그 파일도 삭제합니다. 조정자가 현재 릴레이 로그 파일을 안전하게 삭제하려면 다음 작업을 수행해야 합니다:
    • 모든 작업자를 동기화하여 다음 파일로 이동
    • 릴레이 로그의 현재 삭제를 허용하려면 그룹 위치를 강제로 업데이트
    • 조정자가 적용기로 이동한 릴레이 로그 파일 이름을 읽는 변수를 업데이트

이 작업들은 수신기가 트랜잭션 경계에서 기다리고 릴레이 로그를 회전한 후 대기 중임을 알고 있기 때문에 허용됩니다.
(버그 #36507020)

복제: 이제 작업자 작업에는 트랜잭션을 시작한 릴레이 로그 파일에 대한 정보가 포함되며, 더 이상 기본값으로 relay_log를 사용하지 않습니다. (버그 #36395631)

복제: 트랜잭션을 바이너리 로그에 커밋하는 동안 사고가 발생하면 MySQL이 무기한 대기 상태에 빠졌습니다. (버그 #35671897)

그룹 복제: /xcom/gcs_xcom_networking.cc에서 메모리 누수가 제거되었습니다. (버그 #36532199)

그룹 복제: 특정 상황에서 기본 노드의 호스트가 20초 이상의 네트워크 비활성 상태에 있을 때 보조 노드들이 예기치 않게 중지될 수 있었습니다. (버그 #36306144)

그룹 복제: 특정 상황에서, 가비지 수집이 릴레이 로그 회전 직전에 발생하면 보조 노드에서 새로운 트랜잭션을 적용하지 못하게 되는 문제가 발생했습니다.
이는 가비지 수집이 릴레이 로그의 last_committedsequence_number를 증가시켜 로그 회전 후에 기록된 sequence_number에 갭이 발생했기 때문입니다. 이 갭이 릴레이 로그 내 다른 위치에서 발생할 경우 적용기는 영향을 받지 않았습니다.
이번 릴리스부터는 가비지 수집 중에 last_committed만 업데이트되도록 변경되었습니다. (버그 #36280130, 버그 #36446250)

그룹 복제: 그룹 복구 채널과 같이 호스트 이름이 구성되지 않은 복제 채널에서는 다음 테이블들이 데이터를 포함하지 않았습니다:

이번 릴리스부터는 이러한 테이블들이 부분적으로 구성된 그룹 복제 채널에 대한 데이터를 포함하도록 수정되었습니다. (버그 #36018242)

JSON: NULLIF(), COALESCE(), 및 쉬프트 연산자(>>)에 대한 오류 처리 누락 체크가 추가되었습니다. (버그 #113668, 버그 #35513196, 버그 #36198403)
참고: 관련된 버그 #31358416도 참조하십시오.

MySQL NDB ClusterJ: ClusterJ 테스트 스위트를 실행할 때 스레드가 존재하지 않는다는 오류 메시지가 발생했습니다. 이는 스레드 및 연결을 잘못 처리한 것에 기인하며, 이 패치를 통해 수정되었습니다. (버그 #36086735)

macOS: MySQL 환경설정 패널에서 사용자 정의 my.cnf 구성 파일을 로드하는 기능이 복원되었습니다. 이는 새 데이터 디렉터리를 초기화하기 전에 로드됩니다. (버그 #36630493)

Fedora 40: MySQL 8.4.0 커뮤니티 서버를 시스템에 설치할 때 기본 mysql-server 패키지와 충돌하는 문제가 해결되었습니다. (버그 #36575524)

특정 숫자의 평균이 항상 정확하게 계산되지 않았습니다. (버그 #36563773)

strings 디렉터리 내의 다음 파일에 잘못된 라이선스 정보가 포함되어 있었습니다:

  • mb_wc.h
  • ctype-uca.cc
  • ctype-ucs2.cc
  • ctype-utf8.cc
  • dtoa.cc
  • strxmov.cc
  • strxnmov.cc

(버그 #36506181)

드물지만 특정 상황에서 UpdateXML() 함수가 모든 인수를 제대로 처리하지 못했습니다. (버그 #36479091)

SRID 속성을 포함하는 열에 공간 인덱스를 사용하고 FORCE INDEX를 사용한 쿼리를 설명할 때, 계획되지 않은 종료가 발생했습니다. (버그 #36418426)

MySQL 8.4.0에서 추가된 기능을 참조하는 ER_LOG_PARTITION_PREFIX_KEY_NOT_SUPPORTED 오류 정의가 추가되었습니다. (버그 #36350938)

BuildRequire 규칙이 CMake 및 Bison에 필요한 버전과 일치하도록 업데이트되었습니다. (버그 #36343254)

일부 준비된 문장이 올바르게 다시 준비되지 않았습니다. (버그 #36267792)
참고: 이 문제는 버그 #34929930의 회귀 문제입니다.

표현식의 참조 카운트를 증가시키는 동안 해당 표현식 내의 하위 표현식이 고려되지 않았습니다. 반면 참조 카운트를 감소시키고 나서는 하위 표현식을 검사하여 의도하지 않게 하위 표현식이 삭제되었습니다. 이 문제는 참조 카운트가 1인 경우에만 하위 표현식을 확인하도록 수정되었습니다. (버그 #36204344, 버그 #36356279)

특정 조건에서 EXPLAIN FORMAT=JSON FOR CONNECTION을 사용하면 계획되지 않은 종료가 발생할 수 있었습니다. (버그 #36189820)

특정 조건에서 레이스 컨디션으로 인해 TABLE_HANDLES에 사용된 RAM 양이 9GB까지 증가할 수 있었습니다. (버그 #36170903)

일부 CREATE USER 명령이 올바르게 처리되지 않았습니다. (버그 #36022885)

특정 경우에 LATERAL 조인이 올바르게 처리되지 않았습니다. (버그 #35945239)
참고: 관련된 버그 #107700, 버그 #34338001도 참조하십시오. 이 문제는 버그 #32644631의 회귀 문제입니다.

ORDER BYLIMIT이 포함된 SELECT 쿼리에서, 옵티마이저가 먼저 매우 비싼 비용을 가진 전체 테이블 스캔을 선택한 후 다른 확인을 통해 perform_order_index 경로 유형을 사용했으나, 이 비용이 옵티마이저 계획에 반영되지 않았습니다. (버그 #35930969)

클라이언트 연결이 셧다운 중에 항상 올바르게 종료되지 않았습니다. (버그 #35854919)

mysqldump 명령을 복제본에서 실행하면 FLUSH TABLES 명령이 삽입되었고, 이는 바이너리 로그에 기록되는 작업이므로 복제 중 GTID 관련 문제가 발생할 수 있었습니다. 이제는 바이너리 로그 변경으로 인해 발생할 수 있는 복제 문제를 방지하기 위해 FLUSH LOCAL TABLES이 삽입됩니다.
이 문제에 대한 해결 방법으로는 --source-data 옵션을 1 또는 2로 설정하는 것이 있었습니다. (버그 #35665076)
참고: 이 문제는 버그 #33630199의 회귀 문제입니다.

모든 내부 ACL 비트마스크 변수가 이제 명시적으로 32비트(uint32_t)로 설정되었습니다. (버그 #35507223)

FIND_IN_SET() 함수에 대해 기능적 인덱스를 추가할 수 없었습니다. (버그 #35352161)

같은 테이블에서 전체 텍스트 인덱스와 innodb_optimize_fulltext_only가 활성화된 상태에서 두 개의 동시 OPTIMIZE TABLE 문을 실행하면 서버가 종료될 수 있었습니다. (버그 #34929814)

(더 이상 사용되지 않는) 데이터 마스킹 플러그인이 구현한 gen_range() 함수가 항상 올바른 결과를 반환하지 않았습니다.
이 문제는 데이터 마스킹 플러그인에만 영향을 주었으며, 이를 대체하는 데이터 마스킹 컴포넌트에는 영향을 주지 않았습니다. (버그 #34163992)

매우 많은 수의 테이블에 대해 DDL 작업이 수행될 때와 같은 특정 상황에서, 백그라운드 히스토그램 업데이트로 인해 오류 로그가 경고 메시지로 넘쳐났습니다. 문제의 경고는 테이블에 대한 메타데이터 잠금을 획득하지 못했다는 내용이었습니다.
이 문제를 해결하기 위해 이제 백그라운드 히스토그램 업데이트 작업에서 오류 로그에 기록되는 메시지의 속도를 조절하며, 1분에 한 번씩만 메시지가 출력되도록 제한합니다. 또한, 백그라운드 히스토그램 업데이트 중 발생하는 모든 오류 이벤트를 경고로 다운그레이드했습니다. (버그 #114845, 버그 #36574298)

macOS: 이제 DMG가 MySQL Server 8.4.0에서 제거된 키링 플러그인 기능 대신 키링 컴포넌트를 설치합니다.
8.4.0의 해결 방법은 환경설정 패널에서 “키링 데이터 파일” 옵션을 비활성화하거나 launchd plist에서 두 개의 키링 라인을 수동으로 제거하는 것이었습니다. (버그 #114836, 버그 #36577944)

include/my_command.h 파일에 잘못된 주석이 있었습니다.
Sho Nakazono에게 감사드립니다. (버그 #114507, 버그 #36455468)

결정적 저장 함수가 JOIN ON을 사용하여 return 문 내에서 쿼리를 실행할 때 잘못된 결과를 반환할 수 있었습니다. 두 번의 실행 사이에, 예를 들어 FLUSH TABLES와 같은 테이블 메타데이터로 인해 쿼리를 다시 준비해야 하는 경우, ON 절이 때때로 손실되었습니다. (버그 #114235, 버그 #36379879)

EL8 및 EL9 플랫폼에 대한 mysql-community-libs-compat 패키지가 누락되었습니다. (버그 #112949, 버그 #35975348)

THREADS 테이블의 PROCESSLIST_INFO 열이 준비된 문장을 실행할 때 업데이트되지 않았습니다.
Daniel Lenski와 Amazon에게 감사드립니다. (버그 #104121, 버그 #33057164)

Leave a Comment



이 문서 공유

8.4.1 변경 사항 (2024-07-01 LTS Release)

링크 복사

CONTENTS