MySQL 8.4 LTS Release Note

8.4.3 변경 사항 (2024-07-23 LTS Release)

Estimated reading: 3 minutes 40 views

공식 문서: Changes in MySQL 8.4.3 (2024-10-15, LTS Release)

C API 관련 사항

비동기 인터페이스에서 상태 정보를 저장하기 위해 안전하지 않은 정적 로컬 변수를 사용했습니다. (버그 #115703, 버그 #36891894)

컴파일 관련 사항

MySQL이 Fedora 41에서 컴파일되지 않았습니다. (버그 #37046924)

MySQL이 Ubuntu 24.10에서 컴파일되지 않았습니다. (버그 #37042308)

MySQL 소스에 Oracle의 오픈 소스 가이드라인에 맞추어 CONTRIBUTING.mdSECURITY.md 파일이 추가되었습니다. (버그 #36998165)

CMAKE_MINIMUM_REQUIRED가 정확한 CMake 필수 버전(3.14.6)과 MySQL이 사용하는 서드파티 라이브러리의 CMake 정책에 맞춰 조정되었습니다. (버그 #36978193)

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

포함된 zlib 라이브러리가 1.2.13 버전에서 1.3.1 버전으로 업그레이드되었습니다. (버그 #36950863)

CMake 옵션 BUILD_SHARED_LIBSCMAKE_SKIP_INSTALL_ALL_DEPENDENCY가 빌드 최상위 레벨에서 OFF로 설정되었습니다. (버그 #36930664)

최신 CMake 패키지를 사용하는 gRPC 및 Protobuf 빌드가 실패했습니다. 패키지 조회 방식을 재작성하여 이전 및 최신 CMake 패키지 모두에서 작동하도록 수정했습니다. (버그 #36905657)

포함된 libcurl 라이브러리가 8.9.0 버전으로 업그레이드되었습니다. (버그 #36886877)

포함된 lz4 라이브러리가 1.10.0 버전으로 업그레이드되었습니다. (버그 #36886747)

CMake의 -DWITHOUT_SERVER 옵션이 Enterprise Linux 7에서 작동하지 않았습니다. (버그 #36824515)

Enterprise Linux 9에서 mold로 링크하는 것이 작동하지 않았습니다. (버그 #36818902)참고: 관련 버그 #34099162.

MySQL에서 사용된 libfido 버전이 1.15.0으로 업그레이드되었습니다. (버그 #36752604)

RE2 정규 표현식 라이브러리가 이제 MySQL 소스에 포함됩니다. (버그 #36729026)

MySQL 코드베이스에서 사용된 clang-format 버전이 10에서 15로 업그레이드되었습니다. (버그 #36500268)

포함된 TI-RPC 버전이 1.3.5로 업그레이드되었습니다. (버그 #115698, 버그 #36886602)

Protobuf 22 이상을 사용하여 MySQL을 빌드할 수 없었습니다.
기여자 Gordon Wang에게 감사드립니다. (버그 #115163, 버그 #36678092)

구성 관련 사항

Microsoft Windows: Windows에서, MySQL Configurator의 되돌리기 버튼이 항상 원래 값으로 되돌리지 않는 문제가 있었습니다. (버그 #36702176)

Microsoft Windows: Windows에서, MySQL Configurator 데이터 디렉터리 파일 탐색 메커니즘이 ProgramData 폴더를 필요로 했으나 이제는 해당 폴더 외부에서도 작동할 수 있습니다. (버그 #36702072)

Microsoft Windows: Windows에서, MySQL Configurator 마법사 페이지의 [X] 닫기 버튼을 클릭하면, 마법사가 작업을 실행 중일 때 확인 팝업이 표시됩니다. (버그 #36671317)

Microsoft Windows: Windows에서, MySQL Configurator는 이제 생성된 MySQL 서버 구성 파일에 server_type 변수를 정의하지 않으며, 이 정보는 configurator_settings.xml 파일에 저장됩니다. (버그 #36670309)

Microsoft Windows: Windows에서, MySQL ConfiguratorWindows 방화벽 제거 단계가 my.ini 파일에 mysqlx_port 정의가 없을 경우 실패했습니다. (버그 #36666260)

Microsoft Windows: Windows에서, MySQL Configurator는 선택된 옵션에 변경 사항이 없을 경우 다음 버튼을 클릭해도 불필요한 백그라운드 작업을 수행하지 않도록 개선되었습니다. (버그 #36395605)

Microsoft Windows: Windows에서, MySQL ConfiguratorMySQL Server 설치 페이지에서 유효한 my.ini 또는 my.cnf 파일을 찾지 못했을 경우, 파일 탐색 버튼을 클릭하면 유효한 파일을 선택해도 다음 버튼이 비활성화되는 문제가 있었습니다. (버그 #36395569)

Microsoft Windows: Windows에서, MySQL Configurator는 이전에 설정된 MySQL 서버가 있을 경우에만 제거 단계를 표시합니다. (버그 #36395417)

Microsoft Windows: Windows에서, MySQL Configurator는 비어 있는 암호를 약한 암호가 아닌 강한 암호로 설명하는 문제가 있었습니다. (버그 #35533726)

SQL 함수 및 연산자 관련 사항

DATABASE() 함수가 UNION 쿼리의 일부로 사용될 때 출력이 잘렸습니다. (버그 #36871927)

JavaScript 프로그램

저장 프로시저 내에서 DML 문을 실행할 때 사용자 변수를 사용하는 경우, 해당 저장 프로시저 실행 후에 다른 문을 실행하면 서버가 예기치 않게 종료되는 문제가 있었습니다. 이 문제를 해결하기 위해 이제 Statement 핸들 인터페이스에서 하위 문을 실행한 후에 사용자 변수 및 해당 값을 저장하는 메모리를 초기화합니다. (버그 #36892945)

sys 스키마 관련 사항

innodb_lock_waits 뷰의 성능이 이번 릴리스에서 개선되었습니다. (버그 #36337708)

스레드 풀 관련 사항

일부 동시 연결 시도가 올바르게 처리되지 않았습니다. (버그 #36625082)

기능 추가 및 변경 사항

중요 변경 사항: OpenSSL 라이브러리가 포함된 플랫폼에서는 MySQL 서버에 연결된 OpenSSL 라이브러리가 버전 3.0.15로 업데이트되었습니다. 자세한 내용은 OpenSSL 3.0 Series Release NotesOpenSSL Security Advisory [3rd September 2024]를 참조하세요. (버그 #37021075)

성능; 복제: 바이너리 로그 트랜잭션 종속성을 추적하는 데 사용되는 데이터 구조가 Tree에서 ankerl::unordered_dense::map으로 변경되었습니다. 이를 통해 약 60% 적은 공간을 사용하며, 더 나은 종속성 추적 성능을 제공합니다. (버그 #37008442)

mysql 클라이언트에 --system-command 옵션이 추가되었습니다. 이를 통해 system 클라이언트 명령을 활성화하거나 비활성화할 수 있습니다.
이 옵션은 기본적으로 활성화되어 있습니다. 비활성화하려면 --system-command=OFF 또는 --skip-system-command를 사용하면 system 명령이 오류와 함께 거부됩니다. (버그 #36377685, WL #16482)
참고: 관련 버그 #36248967.

버그 수정

성능; InnoDB: InnoDB 내부의 여러 함수들이 MySQL 8.0.28에서는 인라인으로 정의되었으나, MySQL 8.0.33에서는 인라인으로 정의되지 않게 되어 InnoDB 테이블에서 조인을 사용하는 쿼리 성능에 부정적인 영향을 미쳤습니다. (버그 #111538, 버그 #35531293)
참고: 이 문제는 다음 버그의 회귀입니다: 버그 #81814, 버그 #16739204, 버그 #23584861.

InnoDB: INSTANT 알고리즘을 사용하여 NULL을 기본값으로 변경한 REDUNDANT 테이블 열을 업데이트할 수 없었으며, 그 결과 MySQL이 예기치 않게 중단되었습니다. (버그 #36840107)

InnoDB: log_files_truncate로 리두 로그 용량을 줄일 때, 드물게 file.end_lsnlog_sys->write_lsn과 동일해져 이후 리두 로그 쓰기를 불가능하게 만들었습니다. (버그 #36730830)

InnoDB: INSTANT 알고리즘을 사용하여 열을 삭제한 후 DELETE 또는 UPDATE 문을 실행할 때 MySQL 서버가 예기치 않게 중단될 수 있었습니다. (버그 #36723117)

InnoDB: 동일한 정렬 순서를 가지지만 바이트 단위로는 다른 토큰을 포함하는 경우 FTS 인덱스 최적화가 제대로 작동하지 않는 문제가 있었습니다. (버그 #36652127)

InnoDB: std::this_thread::sleep_for(std::chrono::seconds(0)) 대신 std::this_thread::yield()로 대체하여 컴파일 시 최적화되는 문제를 방지했습니다. (버그 #36522343)

InnoDB: MySQL 5.7에서 사용자 생성 FTS_DOC_ID 열을 기본 키로 사용하는 전체 텍스트 인덱스를 포함한 데이터베이스를 업그레이드하는 과정에서 예기치 않게 중단되는 문제가 있었습니다.
이 수정에 기여한 Alibaba의 Huaxiong Song 팀에 감사드립니다. (버그 #36496164)

InnoDB: 다중 값 가상 열에 대한 범위 조건이 있는 인덱스에 대해 옵티마이저를 비활성화했습니다. (버그 #36341532)

InnoDB: 퍼포먼스 스키마 data_locksdata_lock_waits 테이블을 재설계하여, 쿼리 시 트랜잭션 또는 잠금 시스템의 전역 뮤텍스 독점을 요구하지 않도록 개선했습니다. 이제 잠금이 저장된 해시 테이블의 버킷을 반복하면서, 이전에는 트랜잭션을 순회했던 것과 달리 현재 처리 중인 샤드만 래칭합니다. 이로 인해 쿼리가 시스템의 나머지 부분에 미치는 영향을 줄이기 위해 속도와 메모리 측면에서 반복 논리 복잡도가 개선되었습니다.
쿼리 결과는 두 개의 버킷 사이를 방문하는 동안 트랜잭션이 커밋되거나 시작되거나 보유한 잠금 세트가 변경된 경우 트랜잭션 잠금의 전체 목록이 아닌 불완전한 목록을 보여줄 수 있습니다. 이는 이전 동작과 다르며, 이전 방식은 개별 트랜잭션이 보유한 잠금에 대한 일관된 스냅샷을 항상 제공했으나 두 개의 서로 다른 트랜잭션은 다른 시점에 나타날 수 있었습니다. 즉, 새로운 접근 방식은 단일 대기 큐에 대한 일관된 뷰를 제공하여 대기 중인 잠금과의 충돌 잠금을 표시하며, 충돌 잠금과 대기 중인 잠금은 항상 같은 버킷에 있기 때문입니다. 반면 이전 접근 방식은 보고된 트랜잭션이 보유한 모든 다른 잠금을 항상 보여주었지만, 충돌하는 경우에도 다른 트랜잭션의 잠금을 누락할 수 있었습니다. (버그 #36302624)

InnoDB: Windows에서 파일 액세스를 느리게 했던 더블라이트 버퍼 회귀 문제를 수정하고, 파일을 열 때 사용하는 FILE_FLAG_OVERLAPPED 플래그 사용 방식을 리팩터링했습니다. (버그 #36259487)

InnoDB: 테이블이 생성될 때와 다른 sql_mode 설정에서 테이블이 가져와졌을 때 스키마 불일치가 발생할 수 있었으며, 이는 strict 모드가 테이블의 보조 인덱스에서 널 허용 열의 수에 영향을 주기 때문입니다. 이제 테이블스페이스가 가져와진 후 보조 인덱스 트리도 손상 여부를 검사합니다. (버그 #35799038)

InnoDB: FTS 인덱스가 있는 테이블에서 테이블스페이스가 삭제될 경우 해당 FTS 테이블도 함께 삭제됩니다. 이러한 테이블을 정리하는 작업 중 코드가 테이블 메타데이터에 FTS 인덱스가 있으면 FTS 테이블도 반드시 존재한다고 잘못 가정하고 있었습니다. (버그 #35343458)

InnoDB: FusionIO에서 다른 섹터 크기를 지원하는지 확인할 때, 초기화되지 않은 버퍼가 임시 파일에 쓰여졌습니다. 이 확인은 innodb_flush_method 값이 O_DIRECT 또는 O_DIRECT_NO_FSYNC로 설정되어 있을 때 수행됩니다. (버그 #115229, 버그 #36705034)

InnoDB: 보조 인덱스가 관련된 테이블 재구성 작업에서 InnoDB 임시 파일에 대한 파일 I/O 요구량이 MySQL 8.0.26보다 더 커져 쿼리 성능이 저하되었습니다. (버그 #114465, 버그 #36444172)

InnoDB: Alter_stage 클래스 문제로 인해 퍼포먼스 스키마가 활성화된 상태에서 병렬 인덱스 생성기를 사용하여 인덱스를 추가하는 속도가 현저히 느려졌습니다. (버그 #113505, 버그 #36163502)

InnoDB: innodb.parallel_read_kill 관련 유닛 테스트를 최근 옵티마이저 변경 사항을 반영하도록 개선하였고, innodb.ddl_kill 유닛 테스트와 관련 매크로 사용을 수정했습니다.
이러한 수정에 기여한 Percona의 Dmitry Lenev와 팀에 감사드립니다. (버그 #113002, 버그 #115416, 버그 #35992036, 버그 #36764973)
참고: 관련 버그 #112767.

파티셔닝: 파티션된 테이블에서 ALTER TABLE 구문이 항상 올바르게 작동하지 않았습니다. (버그 #36677952)

그룹 복제: 특정 조건에서, 기본 호스트에서 짧은 네트워크 비활성 상태가 발생한 후 모든 세컨더리가 예기치 않게 종료되었습니다. (버그 #35642087)
참고: 관련 버그 #32673639, 버그 #34565855.

그룹복제: 보고된 스레드가 집계한 메모리가 할당된 것에서 다른 스레드가 해제한 memory/sql/Gtid_set::Interval_chunk을 포함하지 않아, 그룹 복제 스레드 thread/group_rpl/THD_applier_module_receiver가 지속적으로 자원을 증가시키는 잘못된 현상이 발생했습니다.
performance_schema.memory_summary_global_by_event_name에서 보고된 글로벌 메모리에는 이 문제가 영향을 미치지 않았습니다. (버그 #34819861)

그룹 복제: xcom\network\xcom_network_provider_native_lib.cc에서 잠재적 메모리 누수를 제거했습니다. (버그 #115162, 버그 #36673883)

스레드 풀 및 감사 로그 플러그인을 동시에 실행할 때 연결이 항상 올바르게 처리되지 않는 문제가 있었습니다. (버그 #37039422)

Debian 기반 시스템의 패키지 빌드는 이제 WITH_ZLIB=system 옵션으로 수행되며, 디버그 빌드에서는 MYSQL_MAINTAINER_MODE가 비활성화됩니다. (버그 #37038213)

상업적 빌드에서 번들로 제공되는 Kerberos 라이브러리가 1.21.3 버전으로 업데이트되었습니다. 자세한 내용은 Kerberos 5 1.21.x 릴리즈 노트를 참조하십시오. (버그 #37034600)

regexp::Regexp_facade::~Regexp_facade()에서 발생하던 힙 메모리 사용 후 해제 경고가 제거되었습니다. (버그 #36867806)

테이블스페이스 덤프 중, mysqldump는 일부 SQL 문을 출력할 때 적절하게 이스케이프하지 않았습니다. 또한, 덤프 출력에서 LOGFILE GROUP, TABLESPACE, ENGINE 식별자를 백틱으로 감싸도록 변경되었습니다. (버그 #36816986)

StoreLinkedImmutableStringFromTableBuffers()에서 불필요한 복사를 제거하여 일부 해시 조인의 성능이 5~10% 향상되었습니다. (버그 #36805260)

sql/sql_executor.cc에서 발생한 이전 문제에 대한 수정 사항에서 const_item() 대신 const_for_execution()을 체크하도록 변경되었습니다. (버그 #36804785)
참고: 이 문제는 버그 #34951115의 회귀 문제입니다.

OTLP 익스포터와 관련된 문제가 수정되었습니다. (버그 #36792180, 버그 #36783070)

IndexRangeScanIterator를 사용하여 인덱스 범위 스캔을 실행할 때, 리팩토링 중 IndexRangeScanIterator::m_expected_rows의 데이터 타입이 double에서 boolean으로 변경되어 레코드 버퍼가 설정되지 않는 문제가 발생했습니다. 이 비의도적인 변경 사항이 원래대로 복구되었습니다.
또한, 인덱스 범위 스캔에 대해 레코드 버퍼가 활성화된 경우, 이러한 스캔을 커버하기 위해 사용된 다중 값 인덱스에서 문제가 발생했습니다. (이는 인덱스 병합 스캔이 커버링 인덱스 스캔을 강제할 때에만 가능합니다.) 문제의 원인은 Field_typed_array::key_cmp()의 구현이 인덱싱된 표현식을 위한 생성된 컬럼 값을 필요로 하는데, 다중 값 인덱스에서는 이 컬럼이 사용할 수 없어서 스토리지 엔진이 커버링 스캔을 위한 레코드 버퍼를 채울 때 안전하게 종료 범위 조건을 평가할 수 없었습니다. 이를 해결하기 위해, 이제 다중 값 인덱스가 커버링 인덱스 범위 스캔에 사용되는 경우 레코드 버퍼를 비활성화했습니다. (버그 #36775910)
참고: 관련 버그 #36341532.

특정 트리거 및 저장 프로시저가 올바르게 처리되지 않았습니다. (버그 #36775910)

외부 테이블을 참조할 때 발생한 일부 오류가 올바르게 처리되지 않았습니다. (버그 #36758378)

Debian에서 LTO 빌드 호환성을 높이기 위해 libmysqlclient.a의 스트립 작업을 중단했습니다. (버그 #36737581)

내부 함수 my_convert_internal()이 가끔 의도한 값 대신 포인터를 반환하는 문제가 있었습니다. (버그 #36684463)
참고: 이 문제는 버그 #36479091의 회귀 문제입니다.

서버 컴포넌트의 메모리 문제를 제거했습니다. (버그 #36600205)

mysql 클라이언트에서 메모리 누수를 수정했습니다. (버그 #36600203)

AES_ENCRYPT() 함수가 항상 유효한 결과를 반환하지 않는 문제가 있었습니다. (버그 #36593265)

매우 많은 행과 여러 테이블을 포함하는 조인이 일부 경우 올바르게 처리되지 않았습니다. (버그 #36562979)

테이블 값 생성자의 준비 과정에서 ORDER BY 절에 있는 표현식에 대해 추가된 숨겨진 컬럼 수를 추적하지 않았습니다. 이로 인해 이후 해결 과정에서 문제가 발생하여 예기치 않은 서버 종료로 이어질 수 있었습니다.
이를 수정하기 위해, 다른 쿼리 블록에서와 동일한 방식으로 테이블 값 생성자에서 숨겨진 항목의 개수를 세도록 했습니다. (버그 #36560156)
참고: 이 문제는 버그 #35785452의 회귀 문제입니다.

동일한 트랜잭션에서 FULLTEXT 인덱스를 추가한 후 DROP INDEX를 사용하면 때때로 서버가 예기치 않게 종료되는 문제가 발생했습니다. (버그 #36559642)

특정 옵티마이저 힌트 조합이 올바르게 작동하지 않았습니다. (버그 #36492114)

이전 문제 수정 후, GROUP BY의 일부이며 선택 목록에 없는 const 항목이 더 이상 필드 목록에 숨겨진 항목으로 추가되지 않았지만, 이는 임시 테이블 생성 시 ROLLUP 연산이 포함된 표현식에 대한 대체 항목을 확인할 때 고려되지 않았습니다. 이 문제를 해결하기 위해 필드 목록에서 찾을 수 없는 항목이 const 항목인지 확인하고, 그렇다면 동일한 항목을 대체 항목으로 사용하도록 했습니다. (버그 #36444257)
참고: 이 문제는 버그 #34951115의 회귀 문제입니다.

데이터 마스킹 함수 gen_rnd_pan()mask_ssn() 테스트 중 발견된 assertion을 제거했습니다. (버그 #36397869, 버그 #36398272)
참고: 이 문제는 버그 #36398221과 관련이 있습니다.

FTS 비교와 관련된 문제가 수정되었습니다.
이 수정에 기여한 Alibaba의 Shaohua Wang 팀에 감사드립니다. (버그 #36210202)

RelWithDebInfo 빌드에서 더 많은 디버깅 정보를 제공하도록 -g1 플래그를 제거했습니다. (버그 #36111629)
참고: 이 문제는 버그 #33664929와 관련이 있습니다.

--skip-grant-tables 옵션과 함께 서버를 실행할 때 발생할 수 있는 잠재적인 오작동을 수정했습니다. (버그 #36043213)

외부 쿼리 블록의 테이블에서 열을 참조할 때 발생한 문제에 대한 이전 수정 사항에서 회귀 문제가 발생했습니다. (버그 #35854686)
참고: 이 문제는 버그 #96946, 버그 #30350696의 회귀 문제입니다.

외래 키를 포함하는 테이블을 생성할 때 CREATE TABLE 문이 일부 드문 경우에 올바르게 처리되지 않았습니다. (버그 #35553557)

SHOW INDEX 및 생성된 열과 관련된 문제가 수정되었습니다. (버그 #35497623)

준비된 문에서 테이블 DDL이 올바르게 처리되지 않는 경우가 있었습니다. (버그 #35221658)

불가능한 조건을 포함한 ON 절이 있는 왼쪽 조인이 MySQL 5.7에서처럼 최적화되지 않아, 불가능한 조건 없이 쿼리가 더 빠르게 실행되는 문제가 있었습니다. 예를 들어, SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1 AND 1=2 같은 쿼리입니다. (버그 #34668756)

XML 함수 ExtractValue()가 악센트 문자가 포함된 인수를 올바르게 처리하지 못했습니다. (버그 #117778, 버그 #36236440)

SLES 15 타겟 플랫폼이 openSUSE 15.5에서 15.6으로 변경되었으며, 이에 따라 GCC 12 대신 GCC 13을 사용하고 시스템의 OpenSSL 3.x와 빌드하도록 변경되었습니다. (버그 #115535, 버그 #36934913)

Debian 패키지 설명에서 발견된 오타를 수정했습니다.
이 수정에 기여한 Henning Pöttker에게 감사드립니다. (버그 #115363, 버그 #36749142)

MySQL 소스 코드 문서에서 MYSQL_TYPE_JSON이 이진 결과셋 설명에 누락되었습니다.
이 수정에 기여한 Daniël van Eeden에게 감사드립니다. (버그 #115360, 버그 #36740656)

prefer_ordering_index=off로 설정한 경우, 참조 키가 없는 쿼리가 정렬을 회피할 수 있음에도 불구하고 전체 테이블을 스캔하고 정렬하는 방식으로 되돌아갔습니다.
이 수정에 기여한 Daniel Nichter에게 감사드립니다. (버그 #113699, 버그 #36213938)

멀티 값 인덱스를 사용하는 경우, > 또는 < 비교를 사용하는 쿼리가 동일한 인덱스를 사용하는 = 비교보다 훨씬 느리게 실행되었습니다. (버그 #104897, 버그 #33334911)

SELECT * FROM sys.innodb_lock_waits; 쿼리를 대량의 부하가 걸린 인스턴스에서 실행할 때 서버 성능이 영향을 받았습니다.
이 릴리스부터는 SELECT * FROM sys.innodb_lock_waits;가 각 대기 중인 잠금에 대해 두 개의 잠금만 가져오며, 대기 중인 각 잠금을 두 번 스캔하지 않습니다.
이 수정의 일환으로, DATA_LOCKSDATA_LOCK_WAITS 테이블에 기본 키가 추가되었습니다. (버그 #100537, 버그 #31763497)

Leave a Comment



이 문서 공유

8.4.3 변경 사항 (2024-07-23 LTS Release)

링크 복사

CONTENTS