MySQL 8.0 Release Note

8.0.24 변경 사항 (2021-04-20 GA)

Estimated reading: 6 minutes 74 views

공식 문서: Changes in MySQL 8.0.24 (2021-04-20, General Availability)

감사 로그 관련 사항

MySQL Enterprise Audit는 이제 JSON 형식의 감사 로그 파일에 대한 로그 파일 삭제 기능을 지원합니다. 자세한 내용은 감사 로그 파일의 공간 관리를 참조하십시오. (WL #14268)

컴파일 관련 사항

이제 EL7 또는 EL8에서 MySQL을 빌드할 때 GCC 10이 지원되는 컴파일러로 추가되었습니다. 이 컴파일러는 devtoolset-10(EL7) 또는 gcc-toolset-10(EL8) 패키지에서 사용할 수 있습니다. 또한 libmysqlclient C API 라이브러리를 기반으로 하는 타사 애플리케이션을 빌드할 때 GCC 10을 사용하는 것이 권장됩니다. (버그 #32381003)

연결 관리 관련 사항

이전에는 클라이언트가 wait_timeout 시스템 변수에 의해 지정된 기간 내에 서버에 대한 연결을 사용하지 않으면, 서버가 연결을 닫아도 클라이언트는 이유를 알 수 없었습니다. 일반적으로 클라이언트는 Lost connection to MySQL server during query(CR_SERVER_LOST) 또는 MySQL server has gone away(CR_SERVER_GONE_ERROR)와 같은 오류를 받았습니다.
이제 이러한 경우 서버는 연결을 닫기 전에 이유를 클라이언트에 기록하고, 클라이언트는 보다 구체적인 오류 메시지인 The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.(ER_CLIENT_INTERACTION_TIMEOUT)를 받습니다.
이전 동작은 여전히 오래된 서버에 대한 클라이언트 연결 및 오래된 클라이언트를 통한 서버 연결에 적용됩니다. (WL #12999)

에러 처리

클라이언트 연결 실패 메시지에 이제 포트 번호가 포함됩니다. 예: Can't connect to MySQL server on '127.0.0.1:63333'. Daniël van Eeden에게 기여에 대한 감사를 표합니다. (버그 #30787660, 버그 #98311)

키링 관련 사항

MySQL 키링은 이전에 서버 플러그인을 사용하여 키 저장소 기능을 구현했으나, 이제 MySQL 컴포넌트 인프라로 전환하고 있으며, 다음의 키링 컴포넌트부터 적용됩니다:

새로운 키링 컴포넌트는 기존의 keyring_filekeyring_encrypted_file 플러그인과 유사한 점이 있으나, 구성 방식이 다르고, 별도의 디스크 저장 형식을 사용하며, 키 유형 및 크기에 대한 제한이 적습니다.
키링 컴포넌트는 서버 시작 시 --early-plugin-load 서버 옵션을 사용해 로드되지 않으며, 시스템 변수로 시작 시 또는 런타임 시 구성되지 않습니다:

  • 서버 시작 시, 서버는 매니페스트 파일을 통해 로드할 키링 컴포넌트를 결정하며, 로드된 컴포넌트는 초기화 시 자체 구성 파일을 참조합니다. 자세한 내용은 Keyring Component Installation을 참조하세요.
  • 런타임 시, 새로운 ALTER INSTANCE RELOAD KEYRING 명령문을 통해 구성 파일 변경 후 설치된 키링 컴포넌트를 재구성할 수 있습니다. 자세한 내용은 ALTER INSTANCE Statement을 참조하세요.

키링 컴포넌트가 설치된 경우, 새로운 Performance Schema keyring_component_status 테이블을 통해 상태 정보를 확인할 수 있습니다. 자세한 내용은 The keyring_component_status Table을 참조하세요.
키 마이그레이션 기능도 확장되었습니다. 이전에는 한 키링 플러그인에서 다른 키링 플러그인으로의 마이그레이션만 가능했으나, 새로운 --keyring-migration-to-component 서버 옵션을 통해 키링 플러그인에서 키링 컴포넌트로의 마이그레이션이 가능해졌습니다. 이를 통해 MySQL 설치를 키링 플러그인에서 키링 컴포넌트로 전환할 수 있습니다. 새로운 mysql_migrate_keyring 유틸리티를 통해 한 키링 컴포넌트에서 다른 키링 컴포넌트로 키 마이그레이션도 가능합니다. 자세한 내용은 Migrating Keys Between Keyring Keystores을 참조하세요. 키링 컴포넌트에서 키링 플러그인으로의 키 마이그레이션은 지원되지 않습니다.
기존의 키링 플러그인은 사용자에게 표시되는 특성의 변경 없이 계속 사용할 수 있지만, 구현은 컴포넌트 인프라를 사용하도록 개정되었습니다. 이는 플러그인과 컴포넌트 서비스 API 간의 브리지를 제공하는 daemon_keyring_proxy_plugin이라는 기본 내장 플러그인을 통해 지원됩니다. 자세한 내용은 The Keyring Proxy Bridge Plugin을 참조하세요. (WL #13446)

옵티마이저 관련 사항

MySQL 쿼리 옵티마이저는 이제 optimizer_switch 변수의 subquery_to_derived 플래그가 활성화된 경우, 상관된 스칼라 서브쿼리에 파생 테이블 최적화를 적용할 수 있습니다. 이는 추가 그룹화를 적용한 후 리프팅된 조건에서 외부 조인을 적용하여 이루어집니다. 예를 들어, SELECT * FROM t1 WHERE (SELECT a FROM t2 WHERE t2.a=t1.a) > 0와 같은 쿼리는 SELECT t1.* FROM t1 LEFT OUTER JOIN (SELECT a, COUNT(*) AS ct FROM t2 GROUP BY a) AS derived ON t1.a = derived.a WHERE derived.a > 0로 재작성될 수 있습니다.
서브쿼리에 명시적인 그룹화가 이미 있는 경우, MySQL은 기존 그룹화 목록의 끝에 추가 그룹화를 적용합니다.
MySQL은 서브쿼리가 한 개 이상의 행을 반환하지 않는지 확인하기 위해 카디널리티 검사를 수행하며, 그렇지 않을 경우 ER_SUBQUERY_NO_1_ROW 오류를 발생시킵니다. 이 검사는 리프팅된 조건을 평가하기 전에 재작성된 쿼리의 WHERE 또는 JOIN 절을 평가하는 과정에서 수행됩니다.
자세한 내용은 상관된 서브쿼리파생 테이블을 참조하십시오. (WL #13520)

패키징 관련 사항

번들로 제공되는 libedit 라이브러리가 버전 20190324-3.1로 업그레이드되었습니다. (버그 #32433089)

시스템 curl 라이브러리를 링크하는 대신 curl을 포함하는 바이너리 패키지가 curl 7.74.0으로 업그레이드되었습니다.

Performance Schema 관련 사항

비호환 변경: 퍼포먼스 스키마 setup_instruments 테이블의 계측 항목이 다음과 같이 수정되었습니다:

  • 데이터 사전 인프라 및 객체에 할당된 메모리를 계정에 포함하는 새로운 메모리 계측 항목이 추가되었습니다:
memory/sql/dd::infrastructure
memory/sql/dd::objects
  • 계측 항목 이름의 일관성을 개선하기 위해 일부 계측 항목이 이름이 변경되었습니다. 영향을 받은 계측 항목 이름은 C++ 네임스페이스 스타일의 키 접두사로 그룹화되었습니다. 예를 들어, 오류 관련 계측 항목은 error:: 접두사를 사용하고, 파티션 관련 계측 항목은 Partition:: 접두사를 사용합니다. 아래 표는 영향을 받은 계측 항목을 보여줍니다.
기존 계측 항목 이름새 계측 항목 이름
debug_sync_control::debug_sync_actionTHD::debug_sync_action
errmsgserrmsgs::server
handler::errmsgserrmsgs::handler
handlertonhandlerton::objects
log_error_loaded_serviceslog_error::loaded_services
log_error_stacklog_error::stack
LOG_nameLOG::file_name
MDL_context_backup_managerMDL_context::backup_manager
Partition_adminPartition::admin
Partition_sharePartition::share
partition_sort_bufferPartition::sort_buffer
partition_syntax_bufferPartition::syntax_buffer
Prepared_statement_mapPrepared_statement::infrastructure
prune_partitions::execPartition::prune_exec
Recovered_xa_transactionsXA::recovered_transactions
thd::main_mem_rootTHD::main_mem_root
XIDXA::transaction_contexts

또한, servers 계측 항목은 servers_cache의 중복 항목으로 제거되었습니다.
이전 또는 제거된 계측 항목 이름을 사용하는 애플리케이션은 이 변경 사항을 반영하도록 수정해야 합니다.

  • 여러 계측 항목에 대해 DOCUMENTATION 열에 값이 추가되어(더 이상 NULL이 아님) 런타임 계측 문서의 가용성이 향상되었습니다.

(WL #14079)

플러거블 인증

새로운 caching_sha2_password_digest_rounds 시스템 변수를 통해 caching_sha2_password 인증 플러그인의 비밀번호 저장 시 사용되는 해시 라운드 수를 설정할 수 있습니다. (WL #14281)

보안 관련 사항

번들로 제공되는 OpenSSL 라이브러리가 포함된 플랫폼에 대해 MySQL 서버에서 사용하는 OpenSSL 라이브러리가 1.1.1k 버전으로 업데이트되었습니다. 새로운 OpenSSL 버전에서 수정된 문제는 https://www.openssl.org/news/cl111.txthttps://www.openssl.org/news/vulnerabilities.html에서 확인할 수 있습니다. (버그 #32680637)

공간 데이터 지원

새로운 ST_LineInterpolatePoint()ST_LineInterpolatePoints() 함수는 LineString 지오메트리의 시작점과 끝점 사이에서 보간된 단일 또는 다중 포인트를 반환합니다. 새로운 ST_PointAtDistance() 함수는 LineString 지오메트리에서 주어진 거리만큼 떨어진 단일 포인트를 반환합니다. 자세한 내용은 공간 연산자 함수를 참조하십시오.
새로운 ST_Collect() 집계 함수는 여러 개의 지오메트리 인수를 받아 단일 지오메트리 컬렉션 값을 생성합니다. 자세한 내용은 공간 집계 함수를 참조하십시오.
CAST()CONVERT() 함수는 한 공간 타입에서 다른 공간 타입으로 지오메트리 값을 캐스팅하는 기능을 지원하도록 확장되었습니다. 자세한 내용은 캐스트 함수 및 연산자를 참조하십시오. (WL #13454, WL #14160, WL #14161, WL #14178, WL #14127)

기능 추가 및 변경 사항

InnoDB: AUTOEXTEND_SIZE의 최대 설정값이 64M에서 4GB로 증가했습니다. AUTOEXTEND_SIZE 옵션은 MySQL 8.0.23에 도입되었으며, 테이블스페이스가 가득 찼을 때 InnoDB가 테이블스페이스 크기를 확장하는 양을 정의합니다. 이 옵션은 CREATE TABLE, ALTER TABLE, CREATE TABLESPACE, ALTER TABLESPACE 문에서 지원됩니다. 자세한 내용은 테이블스페이스 AUTOEXTEND_SIZE 구성을 참조하십시오. (버그 #32438606)

그룹 복제: 이제 Group Replication이 중지된 상태에서 group_replication_applier 채널에 대해 START REPLICA SQL_THREADSTOP REPLICA SQL_THREAD 명령을 사용할 수 있습니다. 이를 통해 그룹에서 제거된 서버가 그룹에 다시 합류하지 않고도 남은 미적용 트랜잭션을 적용할 수 있습니다. (버그 #32027612, 버그 #32414767)

그룹 복제: Group Replication의 호스트 허용 목록(수신 Group Communication System 연결을 허용할 수 있는 호스트)이 Group Replication이 실행 중인 동안에도 업데이트될 수 있습니다. 이를 통해 허용 목록에 의해 제어되는 그룹에 새 멤버를 추가할 때 Group Replication을 중지하고 다시 시작할 필요가 없습니다. 허용 목록은 각 그룹 멤버에서 group_replication_ip_allowlist 시스템 변수로 지정됩니다. (WL #14563)

Microsoft Windows: MSVC를 사용하여 Windows에서 mysql-test-run.pl 스크립트로 실행되는 모든 테스트 시간을 줄이기 위해 디버그 컴파일러 플래그에서 /RTC1 컴파일러 플래그가 제거되었습니다. 이 컴파일러 플래그는 디버그 빌드의 기본값으로 CMake 프로그램과 함께 도입되었으며, 함수 호출 주변의 스택 손상과 런타임에 초기화되지 않은 변수 사용을 검사하는 코드를 생성했습니다. /RTC1 플래그 제거로 인해 버그 발견이 감소할 것으로 예상되지는 않습니다. 스택 손상과 같은 메모리 오류는 Address Sanitizer(ASAN) 테스트에서 더 쉽게 발견되며, 초기화되지 않은 변수 사용은 컴파일러 경고로 감지됩니다. (버그 #32525732)

Microsoft Windows: named_pipe_full_access_group 시스템 변수의 기본값이 빈 문자열('')로 변경되어 명명된 파이프 연결이 더 안전해졌습니다. 이전에는 '*everyone*'이 기본값이었습니다. 유효한 Windows 로컬 그룹 이름으로 대체할 수 있습니다. (WL #12671)

새로운 clone_donor_timeout_after_network_failure Clone 플러그인 변수를 사용하면 네트워크 장애 후 수신자가 복제 작업을 재연결하고 다시 시작할 수 있도록 제공되는 시간을 정의할 수 있습니다. 이 타임아웃은 이전에 고정된 5분이었지만 이제 네트워크 문제를 해결할 수 있도록 최대 30분까지 연장할 수 있습니다.
기여해주신 Daniël van Eeden에게 감사드립니다. (버그 #32335434, 버그 #102103)

이제 클라이언트 애플리케이션 및 테스트 스위트 플러그인이 캐릭터셋 이름을 기록할 때 utf8 대신 utf8mb3를 보고합니다. (버그 #32164079, 버그 #32164125)

--skip-slave-start 명령줄 파라미터는 복제 I/O 스레드 및 복제 SQL 스레드가 복제 서버가 다시 시작될 때 자동으로 시작되지 않도록 합니다. 하지만 이 파라미터를 명령줄이나 my.cnf 옵션 파일에서 사용하는 경우 서버 호스트에 대한 로그인 액세스가 필요할 수 있습니다. 이제 skip_slave_start 시스템 변수가 제공되어, MySQL 서버의 권한 구조를 사용하여 이 기능에 액세스할 수 있어, 데이터베이스 관리자가 운영 체제에 대한 권한 있는 액세스가 필요하지 않습니다. 이 새로운 전역 시스템 변수는 읽기 전용이며 SET PERSIST_ONLY 문을 사용하여 설정할 수 있습니다. 시스템 변수로서, MySQL 클라이언트에서 값을 조회하고 MySQL API에서 사용할 수도 있습니다. --skip-slave-start 명령줄 파라미터는 여전히 대안으로 사용할 수 있으며, 새 전역 시스템 변수를 설정합니다. (WL #14450)

버그 수정

중요 참고 사항: utf8mb3 콜레이션이 CREATE TABLE 문에서 지정된 경우, SHOW CREATE TABLE, DEFAULT CHARSET, 캐릭터셋 이름이 포함된 시스템 변수 값, 바이너리 로그는 모두 utf8 캐릭터셋을 표시했습니다. 이는 utf8utf8mb4의 동의어로 바뀌고 있기 때문입니다. 이제 이러한 경우 utf8mb3가 대신 표시되며, CREATE TABLE은 ‘collation_name‘이 사용 중단된 캐릭터셋 UTF8MB3의 콜레이션이라는 경고를 발생시킵니다. 적절한 콜레이션과 함께 UTF8MB4 사용을 권장합니다. (버그 #27225287, 버그 #32085357, 버그 #32122844)
참조: 관련 사항은 버그 #30624990을 참조하십시오.

InnoDB: buf_page_create() 함수에서 발견된 오래된 페이지가 해제된 후 다시 디스크에서 읽혀 초기화되지 않았습니다. (버그 #32622548)

InnoDB: MySQL 8.0.23에서 InnoDB 소스 코드의 버퍼 풀 페이지 및 버퍼 풀 블록 데이터 구조에 있는 C++ enum 타입 값이 int에서 uint8_t로 변경되면서, 메시지와 INFORMATION_SCHEMA 테이블에서 데이터가 정수 대신 ascii 문자로 출력되었습니다.
INNODB_BUFFER_PAGE_LRU 테이블을 채우는 함수가 IO_FIX 필드에 대한 IO_PIN 상태를 출력하지 않았습니다. (버그 #32575469)

InnoDB: 인덱스 트리 영구 커서의 위치를 다른 커서로 복사하는 btr_pcur_t::copy_stored_position 함수가 불필요한 free 및 malloc 호출을 수행했습니다. (버그 #32574835)

InnoDB: 테이블의 잠금을 확인하는 함수가 독점적인 잠금 시스템(lock_sys) 래치를 얻으려고 시도하여 긴 세마포어 대기가 발생했습니다. (버그 #32545030)

InnoDB: 임시 테이블스페이스를 열린 파일로 간주하여 innodb_open_files 제한을 초과하여 다른 파일을 열지 못하게 했습니다. 이제 임시 테이블스페이스는 열린 파일 계산 시 무시됩니다. (버그 #32541241)

InnoDB: buf_flush_ready_for_flush() 함수가 페이지가 더티 상태인지 또는 I/O 고정 상태인지 확인하지 않고 오래된 페이지를 플러시할 준비가 된 것으로 식별하여 어설션 실패를 유발했습니다. (버그 #32530147)

InnoDB: 생성된 열을 수정한 트랜잭션의 롤백이 어설션 실패를 발생시켰습니다. 이 실패는 외부 저장 열에 의해 점유된 공간을 해제하려고 할 때 발생했습니다. 외부 저장 열을 포함하는 업데이트 벡터가 생성된 열을 고려하지 않았습니다. (버그 #32529561)

InnoDB: innodb_validate_tablespace_paths를 비활성화하고 서버를 시작할 때, 시작 과정의 초기 단계에서 일시적으로 비활성화된 사용자 생성 undo 테이블스페이스가 다시 활성화되지 않았습니다. (버그 #32493885)

InnoDB: InnoDB가 테이블스페이스 파일에 공간을 할당할 때 fallocate()를 사용하는 innodb_extend_and_initialize를 비활성화하면 삽입 중심 워크로드에서 성능 저하가 발생했습니다. (버그 #32437020)

InnoDB: 불필요한 전체 플러시 목록 스캔이 제거되어 세션 임시 테이블스페이스 생성 속도가 향상되었습니다. 이전에는 버퍼 풀 크기와 더티 페이지 수에 따라 세션 임시 테이블스페이스 생성이 오래 걸려 쓰기 트랜잭션 성능에 영향을 미쳤습니다. (버그 #32423860)

InnoDB: 지정된 페이지 타입이 유효한지 확인하는 함수가 undo 테이블스페이스에 대한 유효하지만 정의되지 않은 페이지 타입을 테스트할 때 어설션을 발생시켰습니다. (버그 #32366301)

InnoDB: 분할된 읽기-쓰기 잠금 함수의 계측이 개선되었습니다. (버그 #32333168)

InnoDB: Windows에서 COMPRESSION 옵션을 사용하여 테이블을 생성할 때, InnoDB는 동일한 시스템 호출에서 설정된 펀치 홀 지원 플래그를 확인하기 전에 시스템 호출의 오류 상태를 확인하지 않아 초기화되지 않은 플래그를 읽었습니다. (버그 #32322645)

InnoDB: MySQL 5.6에서 생성된 Geometry 열이 MySQL 5.7에서 8.0으로 업그레이드한 후 서버를 다시 시작할 때 실패를 일으켰습니다. 이는 MySQL 5.7에서 도입된 Geometry 타입 변경으로 인해 발생했습니다. (버그 #32299738)

InnoDB: 복구 중 여러 레코드 그룹 미니 트랜잭션에 대한 로그 레코드가 두 번 구문 분석되었습니다. 첫 번째 구문 분석 작업의 로그 레코드를 저장하여 두 번째 구문 분석을 방지함으로써 복구 성능을 향상시켰습니다.
기여해주신 Zhai Weixiang에게 감사드립니다. (버그 #32293797, 버그 #102010)

InnoDB: 디버그 빌드에서 보조 인덱스에 대한 끝 범위 조건 검사가 어설션 실패를 일으켰으며, Valgrind 테스트에서 가상 열에 대한 보조 인덱스에 대한 끝 범위 조건 검사가 초기화되지 않은 값을 읽는 것으로 나타났습니다. (버그 #32291506)

InnoDB: innodb_log_writer_threads 변수가 비활성화된 상태에서 하나의 스레드에 의한 광범위한 로그 쓰기가 다른 스레드의 로그 플러시 기회를 차단할 수 있었습니다. (버그 #32255538)

InnoDB: SHOW ENGINE INNODB STATUS 교착 상태 정보에서 단일 rw-lock 리더 스레드가 공유 래치를 보유한 경우 리더 스레드 ID가 인쇄되지 않았습니다. (버그 #32252477)

InnoDB: 동일한 테이블에서 SHOW CREATE TABLEALTER TABLE 작업을 동시에 실행하면 어설션 실패가 발생했습니다. SHOW CREATE TABLE 스레드는 ALTER TABLE 작업에 의해 오래된 상태가 된 테이블스페이스 객체를 참조했습니다. (버그 #32235621)

InnoDB: MySQL 5.7에서 도입된 분할된 rw_lock_stats 카운터로 인해 CPU 캐시 효율성이 저하되었습니다. 이 문제를 해결하기 위해 MySQL 5.7에서 분할 방법이 변경되었습니다. 최적의 성능을 위해 MySQL 8.0에서는 rw_lock_stats 카운터가 제거되었습니다. (버그 #32225367)

InnoDB: Windows에서 병렬 읽기 스레드 수가 시스템 코어 수를 초과할 때 SELECT COUNT(*) 쿼리를 동시에 실행하면 지연이 발생했습니다. (버그 #32224707, 버그 #101789)

InnoDB: 버퍼 풀 페이지가 오래된지 여부를 나타내는 IS_STALE 열이 INFORMATION_SCHEMA.INNODB_BUFFER_PAGE 테이블에 추가되었습니다. (버그 #32194434)

InnoDB: 디버그 빌드에서, redo 로그 코드의 log_free_check() 함수는 더티 페이지의 래치를 보유한 상태에서 로그에 사용 가능한 공간이 있는지 확인하며, 현재 스레드에서 열린 미니 트랜잭션 목록을 사용하여 잠재적인 제약 위반을 검색합니다. (버그 #32189367)

InnoDB: 64k InnoDB 페이지 크기 및 innodb_max_undo_log_size 설정을 가진 시스템에서 느린 종료 중 두 개의 undo 테이블스페이스가 무한 루프에서 잘렸습니다. 이제 초기 undo 테이블스페이스 크기 및 innodb_max_undo_log_size 설정보다 큰 undo 테이블스페이스에만 undo 테이블스페이스 잘림이 제한됩니다.
또한, undo 테이블스페이스에 대해 다음 redo 롤백 세그먼트를 검색하는 함수가 수정되어, 비활성 테이블스페이스가 발견된 경우 undo 로그가 두 개의 활성 undo 테이블스페이스에 고르게 분할되도록 했습니다. (버그 #32173457)

InnoDB: undo_001 undo 테이블스페이스가 잘리는 동안 예기치 않게 중단된 후 업그레이드 모드에서 서버를 시작하면 실패가 발생했습니다. 업그레이드 처리가 완료되고 종료가 시작되었을 때, undo 테이블스페이스가 잘려야 하는지 여부를 결정하는 함수는 undo_001 undo 테이블스페이스를 찾을 수 없었습니다. 이를 해결하기 위해 업그레이드 모드에서 서버를 시작할 때는 더 이상 undo 테이블스페이스 잘림이 수행되지 않습니다. (버그 #32127912)

InnoDB: 부모 테이블에서 삭제 작업을 실행하면, 가상 열과 인덱스가 설정된 외래 키 제약 조건 열을 가진 자식 테이블에서 잘못된 가상 열이 발생했습니다. (버그 #32124113)

InnoDB: 테이블 공유 인스턴스(m_share 객체) 및 사전(table) 인스턴스의 열고 닫는 순서가 수정되어 오래된 m_share 객체에 접근하는 것을 방지하였습니다. 이러한 객체는 오래된 사전 인덱스를 가리킬 수 있습니다.
기여해주신 Yuxiang Jiang에게 감사드립니다. (버그 #31899685)

InnoDB: 서버 초기화 실패 후 서버를 성공적으로 재시작한 후 TRUNCATE TABLE 작업을 실행하면 디버그 어설션 오류가 발생했습니다. (버그 #31763837)

InnoDB: 빠른 종료(innodb_fast_shutdown=0) 시 어설션 실패가 발생했습니다. 어설션 코드는 트랜잭션 목록(mysql_trx_list)에 트랜잭션이 있는지 확인한 후 purge 작업을 중지합니다. 이 확인 작업이 GTID 퍼시스터 백그라운드 스레드가 여전히 트랜잭션 목록에 트랜잭션을 삽입하기 전에 수행되었습니다. (버그 #31693627)

InnoDB: Undo 테이블스페이스 잘림 오류 처리가 개선되었으며, Windows 전용 InnoDB 파일 삭제 절차가 POSIX 호환성에 맞게 조정되었습니다. (버그 #31684783)

InnoDB: 온라인 ALTER TABLE 작업이 온라인 DDL 행 로그를 읽을 때 불필요한 암호화 상태 확인으로 인해 잘못된 키 파일 오류가 발생했습니다. (버그 #31529221, 버그 #99938)

InnoDB: 4K InnoDB 페이지 크기로 서버를 초기화할 때 “key too long” 오류가 에러 로그에 기록되었습니다. (버그 #31496943, 버그 #99892)

InnoDB: 예약된 이름으로 생성된 테이블에서 실패가 발생했습니다. (버그 #31382599)

InnoDB: 가상 열에 대한 인덱스를 생성할 때 잘못된 디버그 어설션 실패가 발생했습니다. (버그 #31279528, 버그 #99421, 버그 #27168185)

InnoDB: 디버그 모드에서 buf_pool_validate_instance() 함수가 buf_page_t::io_fix 필드에 접근할 때 해당 필드를 수정 중인 스레드와 제대로 동기화되지 않아 어설션 실패가 발생했습니다. 이 문제를 해결하기 위해 buf_page_get_io_fix_unlocked() 함수가 여러 특정 함수로 대체되었으며, 이 함수들은 buf_page_t::io_fix 필드를 특정 값에 대해 테스트합니다. 또한 일련의 관련된 작은 코드 변경도 구현되었습니다. (버그 #31027553)

InnoDB: TempTable 메모리 할당기가 여러 쿼리가 세션 내에서 공유하는 메모리 블록을 할당할 때 RAM 사용량을 추적하지 않아 temptable_max_ram 제한을 초과할 수 있었습니다. (버그 #29890126)

파티셔닝: 일부 경우, ALTER TABLE 문에서 잘못된 PARTITION 절이 올바르게 처리되지 않았습니다. (버그 #32235085)

복제: 행 기반 복제(binlog_format=ROW)를 사용할 때, 복제본에만 존재하는 저장된 생성된 열이 행의 다른 필드가 삽입되거나 업데이트될 때 업데이트되지 않았습니다. 이제 행 이미지가 풀릴 때 이러한 열이 평가되고 적용되기 전에 행 이미지에 해당 값이 업데이트됩니다. (버그 #32292413, 버그 #101978)

복제: 압축할 수 없는 데이터를 포함하는 BLOB 열을 포함한 행 이벤트의 압축된 크기가 비압축된 크기보다 클 경우 바이너리 로그 트랜잭션 압축을 계속할 수 없었습니다. 이제 추가된 압축 후 바이트를 올바르게 처리합니다. (버그 #32174715, 버그 #101611)

복제: 시작 시 이전 바이너리 로그 파일이 보존 기간 만료로 인해 모두 삭제된 경우, 새 바이너리 로그 파일에 빈 Previous_gtids 이벤트가 포함되어 복제 오류가 발생할 수 있었습니다. 이제 이전 GTID 세트가 새로 생성된 바이너리 로그 파일에 기록된 후에만 이전 바이너리 로그 파일을 삭제하도록 초기화 순서가 변경되었습니다. (버그 #32134875, 버그 #101533)

복제: MySQL 서버가 세트 내 GTID 수를 계산할 때 반환 값이 래핑되어 잘못된 결과를 반환할 수 있었습니다. 이로 인해 Group Replication 분산 복구에 대해 바이너리 로그에서 상태 전송을 사용할지 여부에 대한 잘못된 결정을 내릴 수 있었습니다. 이제 논리가 수정되었습니다. (버그 #32086209)

복제: 시작 시 바이너리 로그 파일이 보존 기간 만료로 삭제된 경우 GTID 손실과 관련된 디버그 빌드에서 어설션이 발생했습니다. (버그 #32008512, 버그 #101137)

복제: 바이너리 로그 트랜잭션 압축(binlog_transaction_compression 시스템 변수로 활성화)으로 압축된 트랜잭션 페이로드를 sql_slave_skip_counter 시스템 변수가 무시했습니다. 이제 압축되지 않은 트랜잭션 페이로드 이벤트만 카운트됩니다. (버그 #31973055)

복제: 시스템 변수가 서로 다른 클라이언트에 의해 업데이트 및 읽히는 동안 바이너리 로그 파일이 회전되면 교착 상태가 발생할 수 있었습니다. (버그 #31774422)

복제: 복제본의 SQL 스레드에 대한 SHOW PROCESSLIST 문 출력에서 복제본이 동기화되었을 때도 마지막 쿼리가 현재 적용 중인 것으로 표시되는 경우가 있었습니다. (버그 #30521198, 버그 #97560)

그룹 복제: Group Replication 통계가 다른 클라이언트에 의해 조회되는 동안 STOP GROUP_REPLICATION 문을 사용하여 그룹 멤버를 중지하려고 하면 경쟁 조건이 발생할 수 있었습니다. 이제 Group Replication은 STOP GROUP_REPLICATION 문과 성능 스키마 쿼리가 동시에 실행되지 않도록 방지합니다. (버그 #32100147)

Microsoft Windows: Windows 시스템에서 32개 이상의 논리 프로세서가 있고 리소스 그룹의 VCPU 속성을 30 이상으로 설정할 때 잘못된 CPU 마스크 값이 생성되었습니다. 이 수정 사항은 64비트 시프트를 사용하여 CPU 마스크를 계산하도록 합니다. (버그 #32079726)

JSON: IF() 함수에서 첫 번째 인수에서 오류가 발생하면 디버그 빌드에서 어설션이 발생할 수 있었습니다. 이 문제는 반환 유형이 JSON일 때도 발생할 수 있었습니다. (버그 #32231393, 버그 #32231620)

JSON: 여러 JSON 함수가 오류를 제대로 전달하지 않아 디버그 빌드에서 어설션 실패를 일으킬 수 있었습니다. (버그 #32047630)

JSON: 트리거 내에서 JSON_TABLE() 함수가 세션 간에 재사용될 때 올바르게 처리되지 않았습니다. 이제 JSON_TABLE()과 그 임시 테이블이 현재 세션의 컨텍스트 내에서 처리되도록 수정되었습니다. (버그 #31644193)

JSON: 열을 형식화된 배열로 변환하는 표현식에 정의된 다중 값 인덱스가 쿼리 속도를 높이는 데 사용되지 않았습니다. 이는 서버가 동등한 인덱스가 생성된 열로 표현식을 대체할 때, 열 참조를 동등한 생성된 열의 참조로 대체하려 하지 않았기 때문입니다. 다중 값 인덱스의 경우, 열을 형식화된 배열로 변환하는 표현식에 기반한 다중 값 인덱스를 지원하는 생성된 열의 참조로 대체하는 것이 합리적입니다.
이번 수정에서는 서버가 인덱스가 생성된 열을 사용하기 위해 표현식을 대체하려 할 때 함수 표현식과 조건 표현식에만 제한하던 규제를 해제하였습니다. 이제 열 참조가 다중 값 인덱스를 사용할 수 있는 상황, 예를 들어 MEMBER OF(), JSON_CONTAINS() 또는 JSON_OVERLAPS() 함수의 인수로 사용될 때 열 참조를 대체할 수 있도록 허용합니다. 다만, 열 참조가 배열이 아닌 문맥에서 사용되는 경우에 대한 규제는 여전히 유지됩니다. (버그 #30838807)

JSON: JSON_SEARCH() 함수가 모든 검색 문자열과 경로 값을 실제 인코딩과 상관없이 utf8mb4 문자열로 해석하여 잘못된 결과를 초래할 수 있었습니다. (버그 #102443, 버그 #32443143)

JSON: 일부 경우에, LEFT JOIN에서 사용될 때, 몇몇 MySQL JSON 함수가 옵티마이저에 의해 원래의 LEFT JOIN과 동등하지 않은 INNER JOIN으로 변환되는 문제가 있었습니다. 이는 함수의 인수 중 하나가 NULL임에도 불구하고, 해당 함수들이 NULL이 아닌 값을 반환하기 때문이며, 옵티마이저는 이 함수들이 NULL 입력에 대해 NULL을 반환할 것으로 예상했습니다.
이 문제에 영향을 받은 함수들은 JSON_ARRAY(), JSON_OBJECT(), JSON_ARRAY_APPEND(), JSON_ARRAY_INSERT(), JSON_INSERT(), JSON_REPLACE(), JSON_SET() 등이 있습니다. 이러한 함수들에 대한 자세한 정보는 JSON Functions을 참조하십시오. (버그 #101861, 버그 #32248705)

커뮤니티용 Linux 패키지에 필요한 LDAP/SASL/Kerberos 종속성이 포함되지 않았고, 관련 라이브러리도 번들로 제공되지 않았습니다. (버그 #32619858)

함수 BIT_AND(), BIT_OR(), BIT_XOR(), 그리고 JSON_ARRAYAGG()이 항상 적절한 오류 처리를 제공하지 않았습니다. (버그 #32594813)

서버가 IN 연산자를 UNION과 함께 잘못 사용했을 때 적절한 오류 메시지를 제공하지 않았습니다. (버그 #32593846)

DECIMAL에서 부호 있는 정수형 타입으로 변환하는 과정에서 결과의 자릿수가 Item_typecast_signed 메타데이터가 예상한 것보다 많을 경우, 어설션 오류가 발생할 수 있었습니다. 이는 소수점 값이 정수로 변환될 때 반올림되면서, 9.9가 10으로 반올림되는 경우처럼 정수 부분의 자릿수가 증가할 수 있기 때문에 발생했습니다.
이 문제는 캐스트 결과의 최소 최대 길이를 계산하려고 시도한 로직을 제거하고, 대신 부모 클래스인 Item_int_func에서 설정한 기본값을 사용하도록 수정되었습니다. 해당 기본값은 64비트 정수의 최대 폭으로, 입력 값과 관계없이 안전하게 처리됩니다. (버그 #32591589)
참고: 이 문제는 버그 #32371039의 회귀(regression) 문제입니다.

my_row_id 이름이 보이지 않는 열에 대해 허용되지 않았던 제한이 해제되었습니다. (버그 #32586231)

다중 동시 연결이 있는 시스템에서 권한 부여 문을 실행할 때 메타데이터 잠금을 기다리느라 서버 응답이 지연될 수 있었습니다. (버그 #32483597)

Windows 바이너리 및 라이브러리가 제대로 서명되지 않았습니다. (버그 #32458533)

INFORMATION_SCHEMA 테이블에 대한 권한 확인이 lower_case_table_names 값을 고려하지 못할 수 있었습니다. (버그 #32448364)

LIKE ... ESCAPE에서 ESCAPE가 상수를 참조하지 않을 때, 준비된 문 내에서 제대로 처리되지 않았습니다. (버그 #32446728)

MySQL은 전통적으로 LIKE 구문의 ESCAPE 절에서 빈 값을(ESCAPE '') “이스케이프 문자 없음”으로 해석해왔습니다. 하지만 LIKE의 첫 번째 또는 두 번째 인수가 멀티바이트 문자셋을 사용하는 문자열일 경우, 빈 값이 백슬래시(\)를 이스케이프 문자로 해석하여 예상된 동작을 깨뜨리는 문제가 발생할 수 있었습니다.
이번 수정에서는 LIKE가 문자셋에 상관없이 ESCAPE ''를 “이스케이프 문자 없음”으로 해석하도록 하여, 이전의 예상된 동작을 복원했습니다.
또한, 지정된 이스케이프 문자가 대상 문자셋으로 변환될 수 없을 경우 오류를 발생시키도록 변경했습니다. 이는 이전의 동작을 대체하는 것으로, 이전에는 이스케이프 문자가 변환될 수 없으면 조용히 백슬래시를 이스케이프 문자로 사용하는 방식으로 처리되었습니다. (버그 #32446508)

Windows 패키지에서 OpenSSL 취약점이 발견되었습니다. (버그 #32431519)

윈도우 함수나 서브쿼리를 포함하는 로드 가능한 함수 인수가 예기치 않은 결과를 낼 수 있었습니다. (버그 #32424455)

저장 프로시저 내 커서에 사용된 임시 테이블을 잘못 처리하면 서버 동작이 예상과 다르게 작동할 수 있었습니다. (버그 #32416811)

소스에서 TRUE라는 기호를 사용하면 일부 플랫폼에서 빌드 실패가 발생했습니다. 이를 true로 교체했습니다. (버그 #32406197, 버그 #102308)

INFORMATION_SCHEMA.VIEWS 테이블에서 사용자에게 보기 정의를 표시할 수 있는지 여부를 결정하는 권한 확인이 올바르게 작동하지 않았습니다. (버그 #32405811)

재귀적 공통 테이블 표현식에서 인메모리 임시 테이블을 디스크로 변환해야 할 경우 어설션이 발생할 수 있었습니다. (버그 #32404597)

인수를 받지 않는 사용자 생성 함수가 포함된 준비된 문이 올바르게 처리되지 않았습니다. (버그 #32404542)

클론 플러그인 설치 실패 후 다시 설치를 시도해도 실패하는 문제가 발생할 수 있었습니다. (버그 #32402158, 버그 #102240)

시간 유형을 사용하는 몇 가지 내부 함수가 YEAR 값 처리를 제대로 하지 못했습니다. (버그 #32395335)

내부 상수 MAX_FLOAT_STR_LENGTH = 12와 MAX_DOUBLE_STR_LENGTH = 22는 각각 FLOATDOUBLE 값을 나타내는 문자열의 최대 길이를 나타냅니다. my_gcvt 변환 루틴에서 과학적 표기법을 사용할지 여부를 결정하는 휴리스틱은 때때로 이보다 더 긴 문자열을 생성했습니다.
이러한 긴 문자열은 실제 길이가 예상 최대치를 초과할 수 있어 일부 문자열 변환 루틴에서 문제가 발생했습니다. 이 문제는 FLOAT 또는 DOUBLE 값을 문자열로 가져올 때마다 my_gcvt에 명시적으로 원하는 길이를 전달함으로써 해결되었습니다. (버그 #32385934)

트리거 내에서 인수 없이 RAND()를 사용하면 서버 동작에 예기치 않은 결과를 초래할 수 있었습니다. (버그 #32372805)

준비된 문이나 저장 프로시저에서 Item_cache 객체가 이전 실행에서 사용된 Field 객체를 가리킬 수 있었습니다. 이 문제는 캐시된 필드를 Item_field로 교체하여 해결되었습니다. (버그 #32367019)

원격 복제 작업 후 수신 MySQL 서버 인스턴스에서 누락된 테이블스페이스 오류가 보고되었습니다. 기증자 인스턴스에서 innodb_validate_tablespace_paths 변수가 비활성화되어 관련 테이블스페이스 객체가 로드되지 않아 테이블스페이스가 복제되지 않았습니다. 이제 복제 작업 전에 모든 테이블스페이스 객체가 로드되었는지 확인하는 검사가 수행됩니다. (버그 #32354908, 버그 #102137)

많은 EXISTS 서브쿼리를 포함하는 쿼리 블록이 항상 올바르게 처리되지 않았습니다. (버그 #32343143)

SHOW CREATE TABLE 문이 실패할 경우 mysqlpump가 예기치 않게 종료될 수 있었습니다. (버그 #32340208)

장시간 실행된 원격 복제 작업이 기증자 MySQL 서버 인스턴스에서 wait_timeout 설정이 낮아 실패했습니다. 기증자 스레드는 복제 프로토콜 명령을 수신할 때 MySQL 서버의 wait_timeout 설정을 사용합니다. wait_timeout 설정이 낮은 기증자 인스턴스에서 발생하는 타임아웃 실패를 방지하기 위해, 복제 대기 타임아웃은 이제 기본 wait_timeout 설정인 28800초(8시간)로 설정됩니다. 또한, 복제 네트워크의 읽기 및 쓰기 타임아웃 값도 증가되었습니다. (버그 #32340112, 버그 #102097)

서버에서 실행 중인 복제 스레드가 Performance Schema threads 테이블에 표시되었으나, variables_by_thread 또는 status_by_thread 테이블에는 표시되지 않았습니다. 이제 이들 테이블에 모두 표시됩니다. (버그 #32335496, 버그 #102115)

쿼리 문자열이 재작성되기 전에 표시되었습니다. (버그 #32335263, 버그 #32628376)

libedit 라이브러리를 사용하여 빌드된 경우 mysql 클라이언트가 --default-character-set=utf8 옵션으로 호출되면 다중 바이트 문자를 입력할 수 없었습니다. (버그 #32329078, 버그 #32583436, 버그 #102806)

Windows에서 큰 결과 세트가 mysql 클라이언트를 예기치 않게 종료시킬 수 있었습니다. (버그 #32316323, 버그 #102051)

반복 실행을 위해 쿼리 식을 준비하는 동안 오류가 발생하면 어설션이 발생할 수 있었습니다. (버그 #32291841)

함수 인덱스 생성 시 열 이름을 대소문자를 구분하지 않는 방식으로 처리하지 않았습니다. (버그 #32287186, 버그 #101994)

트리거 실행 중에 바인딩된 임시 테이블이 서버를 예기치 않게 종료시킬 수 있었습니다. (버그 #32267749, 버그 #32288089, 버그 #32299045)

NULL 처리 및 소수 계산에서 오류 처리가 개선되었습니다. (버그 #32258228, 버그 #32497850)

스키마가 읽기 전용으로 변경되었을 때, 해당 스키마에 있는 테이블에 핸들러가 열려 있으면 어설션이 발생할 수 있었습니다. (버그 #32248313)

Performance Schema의 replication_group_members 테이블에서 선택하는 경우 일부 상황에서 “Error 1267: Illegal mix of collations …” 오류가 발생했습니다. 이는 MySQL 8.0.22에서 열 값과 시스템 변수를 비교하는 방식의 변경으로 인해 발생한 문제입니다. (버그 #32244631)
참고: 버그 #32501472, 버그 #32579184도 참조하십시오.

MySQL이 여러 시간 함수의 메타데이터를 잘못 생성했습니다. 이러한 함수에는 TO_DAYS(), PERIOD_DIFF(), PERIOD_ADD(), TO_SECONDS(), DAYOFMONTH(), DAYOFYEAR(), HOUR(), MINUTE() 등이 포함되었습니다. (버그 #32239578)

자연 조인에서 보이지 않는 열만 검색하는 테이블 서브쿼리가 올바르게 처리되지 않았습니다. (버그 #32235285)

디버그 빌드에서 ALTER TABLE로 열의 기본값을 TRUE로 설정하려고 하면 어설션이 발생했습니다. (버그 #32235058)

인덱스 조건 푸시다운을 사용하여 스토리지 엔진으로 전달된 조건을 평가하는 동안 오류가 발생하면, 스토리지 엔진이 때때로 오류를 무시하고 성공을 나타내는 오류 코드를 반환하여 나중에 어설션 실패로 이어질 수 있었습니다.
이제 이러한 경우 실행자가 오류가 발생했음을 감지하고 그 지점에서 실행을 중단하도록 했습니다. (버그 #32234773)

바이너리 로깅이 비활성화된 디버그 빌드에서 ALTER TABLE ... MODIFY COLUMN이 잘못된 기본값을 사용하면 어설션이 발생했습니다. (버그 #32234194)

상수 스칼라 서브쿼리를 인수로 사용하는 집계 함수를 준비하는 동안 서브쿼리에서 오류가 발생하면 디버그 빌드에서 어설션이 발생할 수 있었습니다. (버그 #32231698)

집계 컨텍스트에서 평가된 NULLIF() 함수의 잘못된 캐릭터셋 처리가 디버그 빌드에서 어설션을 발생시켰습니다. (버그 #32231557)

지원되지 않는 KEY_BLOCK_SIZE 값으로 CREATE TABLE 문이 어설션을 발생시켰습니다. (버그 #32227101)

MySQL 인스턴스를 매우 많은 테이블로 업그레이드할 때 과도한 메모리가 소비되었습니다. 업그레이드를 위해 데이터 사전 엔터티를 분석하는 데 할당된 메모리가 모든 엔터티가 처리될 때까지 해제되지 않았습니다. (버그 #32226180, 버그 #101818)

ANALYZE TABLE을 테이블에서 실행할 때 같은 테이블에서 오래 실행 중인 쿼리와 동시에 실행되면, 이후의 쿼리가 그 쿼리가 끝날 때까지 대기해야 했습니다. 이제는 이 대기가 제거되어 이후 쿼리가 대기 없이 실행될 수 있습니다. (버그 #32224917)

LIKE 표현식에 ESCAPE 절을 사용하는 문장이 항상 올바르게 처리되지 않았습니다. (버그 #32213959)

ARM 플랫폼에서 빌드 프로세스 중 유틸리티에서 어설션이 발생할 수 있었습니다. (버그 #32209415)

InnoDB는 테이블 파티션의 몇 가지 합법적인 이름을 항상 올바르게 처리하지 않았습니다. (버그 #32208630)

explicit_defaults_for_timestamp 변수가 비활성화된 경우, Clone 플러그인 설치가 PFS 테이블 생성 오류로 실패했습니다. 이 변수 설정으로 인해 Clone 퍼포먼스 스키마 테이블의 TIMESTAMP 열이 NOT NULL로 잘못 생성되었습니다. (버그 #32199611)

SHOW CREATE VIEWROLLUP 절이 있는 뷰에 대해 잘못된 구문을 생성했습니다. 이 문제는 mysqldump에도 영향을 미쳤습니다. (버그 #32197353, 버그 #101740)

SECONDARY_ENGINE_ATTRIBUTE와 함께 실패한 CREATE TABLE 또는 ALTER TABLE 명령이 메모리 누수를 일으킬 수 있었습니다. (버그 #32187507)

연결 설정 실패가 서버가 열린 연결의 수를 잘못 계산하게 만들 수 있었습니다. (버그 #32156518)

MySQL 8.0.19에서 수행된 리팩터링 작업으로 인해 IFNULL()과 같은 함수를 사용하는 열에 대해 좌측 조인이 올바르게 처리되지 않았습니다. (버그 #32141711)
참고: 이 문제는 버그 #30320525의 회귀입니다.

옵티마이저가 스킵 스캔을 사용할 때, 해당 스캔이 적용되지 않는 역방향 인덱스 스캔에 대해 예측할 수 없는 서버 동작이 발생할 수 있었습니다. (버그 #32127290)

SHOW CREATE USER 명령이 대기 중인 트랜잭션을 커밋하게 만들었습니다. (버그 #32123671)

윈도우 함수를 포함한 로드 가능 함수의 인수가 준비 시점에 평가되었으며, 이는 윈도우 함수가 준비 과정에서 매우 늦게 설정된다는 사실을 고려하지 않았습니다. 이제 이러한 인수의 평가는 실행 시간까지 지연됩니다. (버그 #32122078, 버그 #32393265)

상수 기본 식을 포함하는 열을 포함한 테이블을 생성하면, 이후 ALTER TABLE 명령이 실패할 수 있었습니다. (버그 #32121425, 버그 #101486)

더 큰 BLOB와 같은 열의 값을 사용하여 BLOB와 같은 열을 업데이트하면, 업데이트된 열의 크기가 잘못되거나 0이 될 수 있었습니다. (버그 #32112403)

내부 큐의 잘못된 잠금으로 인해 mysqlpump가 예기치 않게 종료될 수 있었습니다. (버그 #32067013)

MacOS에서 환경 설정 창에 초기화 시 구성된 my.cnf 파일을 로드하는 옵션이 추가되었습니다. (버그 #32057159)

서버가 ORDER BY 절이 있는 SELECT에서 GROUP_CONCAT()을 사용하는 명령을 항상 올바르게 준비하지 않았습니다. (버그 #32053547, 버그 #31947466)

sys 스키마의 create_synonym_db() 프로시저가 INFORMATION_SCHEMA 동의어를 생성하지 못했습니다. (버그 #32050275, 버그 #101258)

윈도우 함수에서 발생한 오류가 항상 제대로 전파되지 않았으며, 이는 디버그 빌드에서 어설션 실패로 이어질 수 있었습니다. (버그 #32028154)

다른 스레드에서 시작된 트랜잭션에 대해 XA COMMIT을 호출하면 Address Sanitizer 경고가 발생할 수 있었습니다. (버그 #32025408)

mysql 클라이언트가 일괄 모드로 사용될 때, USE에 이어 따옴표로 묶인 데이터베이스 이름을 가진 DROP DATABASE 구문이 혼동될 수 있었습니다. (버그 #32015466, 버그 #101124)

MySQL 8.0.17에서 변경된 사항으로 인해 comp_err가 훨씬 느려졌습니다. 이제 정상 성능이 복구되었습니다. (버그 #32014733)
참고: 이 문제는 버그 #29781631, 버그 #95377의 회귀입니다.

CAST() 함수를 사용하여 DATE 또는 DATETIME 값을 INSERT 명령에 삽입할 때 "0000-00-00""2000-02-31" 값에 대해 경고가 발생했지만, "2000-01-00" 또는 "2000-00-01"에 대해서는 경고가 발생하지 않았습니다. 이제 이 모든 경우에 대해 경고가 표시됩니다. (버그 #32013612)

CHANGE MASTER TO 명령의 MASTER_COMPRESSION_ALGORITHMS 값의 최대 길이가 잘못 확인되었습니다. (버그 #32008597)

동적 매개변수를 YEAR로 캐스팅할 때(예: PREPARE s FROM "SELECT CAST(? AS YEAR)"), 유형 전파가 수행되지 않아 해당 매개변수가 사용된 준비된 명령이 실행 실패를 초래했습니다. (버그 #32002844)

MySQL 5.7 인스턴스를 MySQL 8.0으로 업그레이드한 경우 일부 시스템 테이블의 정의가 새 MySQL 8.0 설치의 시스템 테이블 정의와 달랐습니다. (버그 #31989290)

몇몇 SHOW 명령에서 서브쿼리를 사용할 때 예기치 않은 서버 동작이 발생할 수 있었습니다. (버그 #31853180)

GROUP BY column HAVING column_expression IS [NOT] NULL을 사용하는 쿼리는 올바른 결과를 반환했지만, WITH ROLLUP을 추가하면 그렇지 않았습니다. (버그 #31848191)

SHOW ENGINE PERFORMANCE SCHEMA STATUS 명령이 퍼포먼스 스키마의 메모리 사용량을 잘못 보고했습니다. (버그 #31795132, 버그 #100624)

Visual Studio 2019를 사용하여 엔터티 데이터 모델을 생성하려고 할 때, 일부 테이블이 엔터티 프레임워크 마법사로 가져올 수 없었습니다. 이는 MySQL 8.0.21에서 수행된 직교 데이터 유형 집계 변경으로 인해 발생했으며, 이는 UNIONCASEIF()와 같은 함수나 연산자에서 열을 처리합니다. 이제 ENUM 또는 SET 유형의 값을 반환하는 것이 가능해졌으며, 이전에는 처리할 필요가 없었습니다. (버그 #31750645)
참고: 버그 #29698617도 참조하십시오.

서브쿼리의 ORDER BY 절을 최적화하는 동안, 외부 SELECT에 참조된 서브쿼리 트리를 정리할 가능성이 있어 조기 종료로 이어질 수 있었습니다. (버그 #31721430)

mysql.func 시스템 테이블의 잘못된 이름으로 인해 예기치 않은 서버 동작이 발생할 수 있었습니다. (버그 #31674599)

많은 긴 행이 로드될 때 LOAD DATA의 성능이 저하되었습니다. (버그 #31637142)

세션이 자체 감사를 비활성화할 수 있었습니다. (버그 #31630954)

GCC에서 프로파일 가이드 최적화를 사용할 때 프로파일 부분 교육 및 원자 선호 업데이트를 포함하도록 컴파일러 옵션이 개선되었습니다. Dmitriy Philimonov에게 제안해 주셔서 감사합니다. (버그 #31450064, 버그 #99781)

performance_schema_max_thread_classesperformance_schema_max_thread_instances 시스템 변수를 0으로 설정하고 서버를 시작하면 MySQL Enterprise Firewall이 새 규칙을 생성할 수 없었습니다. (버그 #31335080, 버그 #24947654, 버그 #83519)

복구 중에 null 포인터가 증가하여 Undefined Behavior Sanitizer(UBSAN) 빌드에서 런타임 오류가 발생했습니다. (버그 #31173032, 버그 #32428131, 버그 #32483976)

log_slow_extra 시스템 변수를 활성화하여 느린 쿼리 로그 출력에 Errno 필드를 추가할 때, 실패한 명령에서도 오류 번호가 0이었습니다. (버그 #30769965, 버그 #98220)

디버그 빌드에서 utf32 캐릭터셋을 사용하는 특정 변환 작업이 예기치 않은 서버 동작을 일으킬 수 있었습니다. (버그 #30746908)

존재하지 않는 퍼포먼스 스키마 테이블에서 SELECT ... FOR UPDATE를 실행하면 ER_TABLEACCESS_DENIED_ERROR 대신 ER_NO_SUCH_TABLE 오류가 발생했습니다. (버그 #30701047, 버그 #98068)

저장 프로그램 로컬 변수를 잘못 처리하면 예기치 않은 서버 동작이 발생할 수 있었습니다. (버그 #30366310)

퍼포먼스 스키마의 metadata_locks 테이블이 잘못된 DURATION 값을 표시할 수 있었습니다. 예를 들어, 트랜잭션 기간 동안 취한 메타데이터 잠금이 RENAME TABLE 작업으로 인해 나중에 EXPLICIT 기간으로 수정된 경우가 있었습니다. (버그 #30065213, 버그 #96237)

audit_log 플러그인이 시작 시 암호화를 위한 비밀번호를 생성할 때 이를 저장하지 못할 수 있었습니다. (버그 #29559793)

플러그인을 제거하면 이후의 준비된 명령 실행에 영향을 줄 수 있었습니다. (버그 #29363867)

사용자 정의 변수 또는 함수 결과의 문자열 값을 더블로 변환할 때(예: CAST() 사용), 잘림이 발생해도 경고가 표시되지 않았습니다. (버그 #27969934, 버그 #21943299)

뷰 정의에서 LIKEESCAPE 절을 사용할 때, ESCAPE 절의 내용이 무시되어 잘못된 결과가 나왔습니다. (버그 #26086751)

ascii 캐릭터셋을 사용하는 문자 열에 7비트 범위를 벗어난 불법 ASCII 값을 삽입할 수 있었습니다. 이제 이것이 금지됩니다. (버그 #24847620)

구성 값 내에서 공백 및 기타 특수 문자를 사용할 수 있도록 mysql_config_editor는 이제 구성 파일에 쓰는 값을 큰따옴표 문자로 감싸고, 값 내에서 사용된 큰따옴표 문자를 이스케이프 처리합니다. (버그 #19953349, 버그 #74691)

집계 반복자가 행을 찾지 못하면, SELECT 목록의 각 항목에 이를 알리며(예: COUNT(*)가 0으로 설정되거나, SUM(foo)NULL로 설정됩니다). MySQL 8.0.22에서 내부 작업이 완료된 후, 숨겨진 항목이 실수로 호출될 수도 있었습니다. 이중 중첩된 서브쿼리가 있는 일부 쿼리에서 이러한 숨겨진 항목 중 하나가 자체 상위 서브쿼리가 될 수 있으며(그리고 MySQL의 스칼라 서브쿼리에는 ONLY_FULL_GROUP_BY가 아닌 쿼리에 대한 특수한 레거시 처리가 있음), 전체 서브쿼리가 그렇지 않아야 할 때 NULL을 반환하게 됩니다.
이제 MySQL 8.0.21 및 이전 버전과 마찬가지로 숨겨진 항목이 아닌 보이는 항목만 호출되도록 수정되었습니다. (버그 #102101, 버그 #32335256)

경로 접근 계획을 해석할 때, LATERAL에 대한 캐시 무효화기가 모든 외부 조인이 완료될 때까지 지연되었습니다. 이는 외부 조인이 캐시를 무효화해야 하는 null 보완 행을 생성할 수 있기 때문입니다. 외부 조인에 LATERAL이 포함되어 있고, 해당 LATERAL이 동일한 외부 조인 내의 테이블만 참조하는 경우 문제가 발생했습니다. 이러한 경우에는 캐시가 잘못 유지되지 않도록 즉시 무효화기를 적용해야 합니다. 특히, 이러한 경우는 특정 Information Schema 테이블이 이제 LATERAL을 사용하여 정의된 뷰인 외부 조인의 오른쪽에 있을 때 발생할 수 있습니다.
이 문제는 무효화가 발생해야 하는 동일한(외부) 조인 네스트 내에 있을 때까지 무효화기 방출을 지연시키지만 더 이상 지연시키지 않도록 수정되었습니다. 이는 테이블의 행이 조인 내에 있거나 상위에 있는 두 개 이상의 별도의 실체화에 대해 캐시 무효화를 트리거해야 하는 경우도 올바르게 처리합니다. (버그 #101460, 버그 #32113029, 버그 #32311147)
참고: 이 문제는 버그 #98238, 버그 #30766181의 회귀입니다.

옵티마이저 트레이스가 부동 소수점 숫자를 최대 6자로 인쇄했는데, 이는 부호, 소수점, 지수 등이 이러한 문자 중 많은 부분을 사용할 수 있기 때문에 많은 값의 정밀도가 매우 낮을 수 있음을 의미했습니다. 특히 큰 숫자의 경우 정밀도가 1로 매우 작아질 수 있으며, 그 결과 DBL_MAX를 초과하여 JSON 파서에서 거부될 수 있는 값으로 반올림될 수 있었습니다.
이제 그러한 숫자는 항상 정밀도 6으로 옵티마이저 트레이스에 인쇄됩니다. (버그 #101457, 버그 #32113020)
참고: 버그 #94672, 버그 #29493604도 참조하십시오.

내림차순 열에 대한 인덱스가 사용 가능하고 사용된 경우에도, ORDER BY ... DESC 절을 가진 쿼리에 대해 파일 정렬이 사용되었습니다. 이는 필드가 동일성 조건자에 있는 필드와 일치하여 ORDER BY 하위 절이 제거되지 않았기 때문에 발생했으며, 그 결과 옵티마이저가 쿼리와 내림차순 인덱스를 일치시키지 않아 최적의 성능이 나오지 않았습니다. (버그 #101220, 버그 #32038406)

optimizer_search_depth가 조인에 사용된 JOIN_TAB 구조 수보다 적을 때 디버그 서버에서 어설션이 발생했습니다. (버그 #100288, 버그 #31655483)

ALTER TABLE 작업인 EXCHANGE PARTITION, IMPORT TABLESPACE, 및 IMPORT PARTITION TABLESPACE 후에, 테이블스페이스의 이전 역할을 반영한 직렬화된 디지털 정보가 남아 있었습니다. 이제 이러한 경우 교환 또는 테이블스페이스 가져오기에 관련된 두 테이블스페이스 모두에서 이전 SDI가 명시적으로 제거됩니다. (버그 #98501, 버그 #30878065)

정수 나눗셈 연산자(DIV)에 의해 수행된 유형 해결이 결과에서 예상보다 하나 적은 정밀도를 반환했습니다.
기여해주신 Kaiwang Chen에게 감사합니다. (버그 #96459, 버그 #30156563)

Leave a Comment



이 문서 공유

8.0.24 변경 사항 (2021-04-20 GA)

링크 복사

CONTENTS