MySQL 8.0 Release Note

8.0.30 변경 사항 (2022-07-26 GA)

Estimated reading: 6 minutes 70 views

공식 문서: Changes in MySQL 8.0.30 (2022-07-26, General Availability)

캐릭터셋 지원

중요 변경 사항: 이전 변경 사항에서 utf8_ 접두사가 있는 더 이상 사용되지 않는 캐릭터셋 이름을 utf8mb3_ 로 변경했습니다. 이번 릴리스에서는 해당하는 utf8_ 콜레이션 이름도 utf8mb3_ 접두사를 사용하여 변경되었습니다. 이는 더 이상 사용되지 않는 콜레이션 이름에 의존하지 않고, 캐릭터셋 이름과 콜레이션 이름을 일관되게 하며, utf8mb3 와 utf8mb4 의 차이를 명확히 하기 위한 것입니다. 이제 이러한 콜레이션에 대해 utf8mb3_ 접두사가 있는 이름이 SHOW CREATE TABLE 같은 SHOW 문이나 COLLATIONSCOLUMNS 같은 Information Schema 테이블의 열에 표시되는 값에 독점적으로 사용됩니다. (버그 #33787300)
참고: 관련 문제: 버그 #30624990.

중요 변경 사항: 둘 이상의 언어가 동일한 콜레이션 정의를 가질 때, MySQL은 그 중 하나의 언어에 대해서만 콜레이션을 구현했습니다. 이로 인해 일부 언어는 다른 언어에만 특정된 utf8mb4 유니코드 9.0 콜레이션으로만 처리되었습니다. 이번 릴리스에서는 이러한 문제를 해결하여, 이전에는 다른 언어의 콜레이션에 의해 처리되었던 언어에 대해 언어별 콜레이션을 추가했습니다. 새로 추가된 콜레이션은 다음과 같습니다:

  • 노르웨이어
    • (보크몰) utf8mb4_nb_0900_ai_ci
    • (보크몰) utf8mb4_nb_0900_as_cs
    • (니노르스크) utf8mb4_nn_0900_ai_ci
    • (니노르스크) utf8mb4_nn_0900_as_cs
  • 라틴 문자로 된 세르비아어:
    • utf8mb4_sr_latn_0900_ai_ci
    • utf8mb4_sr_latn_0900_as_cs
  • 라틴 문자로 된 보스니아어:
    • utf8mb4_bs_0900_ai_ci
    • utf8mb4_bs_0900_as_cs
  • 불가리아어:
    • utf8mb4_bg_0900_ai_ci
    • utf8mb4_bg_0900_as_cs
  • 갈리시아어:
    • utf8mb4_gl_0900_ai_ci
    • utf8mb4_gl_0900_as_cs
  • 키릴 문자로 된 몽골어:
    • utf8mb4_mn_cyrl_0900_ai_ci
    • utf8mb4_mn_cyrl_0900_as_cs

자세한 내용은 언어별 콜레이션을 참조하십시오. (버그 #31885256, WL #14307)

컴파일 관련 사항

Enterprise Linux에서 ADD_LINUX_RPM_FLAGS를 수정하여 CMAKE_C_FLAGS 및 CMAKE_CXX_FLAGS의 초기 값을 수정하기 전에 사용하도록 했습니다. (버그 #34131794)
참고: 이 문제는 버그 #33730302의 회귀 문제입니다.

새로운 CMake 옵션 SHOW_SUPPRESSED_COMPILER_WARNINGS가 추가되었습니다. 이를 활성화하면 억제된 컴파일러 경고를 표시할 수 있으며, -Werror로 실패하지 않고도 가능합니다. 기본값은 OFF입니다. (버그 #34046748)

macOS/ARM 지원이 추가되었습니다. (버그 #34017614)

Windows에서 /wd4996 명령줄 옵션으로 전역적으로 비활성화된 사용 중단 경고(C4996)가 이제는 적절한 로컬 수준에서만 비활성화됩니다. (버그 #33975638)

Windows에서 생성된 INFO_BIN 및 INFO_SRC 파일이 개선되었습니다. (버그 #33972317, 버그 #34052301)

std::filesystem을 사용하기 위해 GCC 8 지원이 -lstdc++fs를 포함하도록 개선되었습니다. (버그 #33939798)

사용 중단 및 제거 관련 사항

복제: replica_parallel_workers 시스템 변수를 0으로 설정하는 것(또는 동등한 서버 옵션 --replica-parallel-workers)이 이제 사용 중단되었으며, 이 작업을 수행하면 경고가 발생합니다.
동일한 결과(즉, 단일 스레드를 사용)를 얻으려면 경고 없이 replica_parallel_workers=1로 설정하십시오. (WL #13956)

--skip-host-cache 서버 옵션은 이제 더 이상 사용되지 않으며, 향후 릴리스에서 제거될 예정입니다.
대신 SET GLOBAL host_cache_size = 0 명령을 사용하거나, my.cnf 파일에서 host_cache_size를 설정하십시오. (WL #14359)

--old-style-user-limits 옵션은 MySQL 5.0.3 이전에 사용자 제한을 강제하는 옵션으로, 매우 오래된 릴리스와의 하위 호환성을 위해 제공되었습니다. 이 옵션은 이제 사용 중단되었으며, 이를 사용할 경우 경고가 발생합니다. 이 옵션이 향후 릴리스에서 제거될 가능성이 높으므로, MySQL 애플리케이션이 이 옵션에 의존하지 않도록 지금부터 준비하는 것이 좋습니다. (WL #13228)

Generated Invisible Primary Keys (GIPKs)

MySQL 8.0.30부터는 GIPK 모드를 지원하며, 이 모드가 활성화되면 명시적 기본 키 없이 생성된 InnoDB 테이블에 생성된 보이지 않는 기본 키(GIPK)가 추가됩니다. 이 개선 사항은 InnoDB 테이블에만 적용됩니다.
GIPK 모드가 활성화된 경우, 생성된 기본 키 열의 정의는 다음과 같습니다:

my_row_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT INVISIBLE PRIMARY KEY

생성된 기본 키의 이름은 항상 my_row_id이며, GIPK 모드가 활성화된 동안에는 이 이름을 사용하여 명시적 기본 키가 포함된 CREATE TABLE 문을 제외하고는 새로운 InnoDB 테이블에서 이 열 이름을 사용할 수 없습니다.
GIPK는 기본적으로 활성화되지 않습니다. 이를 활성화하려면 sql_generate_invisible_primary_key 서버 시스템 변수를 ON으로 설정하십시오. 이 설정은 복제 적용 스레드에는 영향을 미치지 않으며, 이는 복제본이 기본 키 없이 생성된 테이블에 대해 소스에서 기본 키가 생성되지 않은 경우에는 기본 키를 생성하지 않음을 의미합니다.
GIPK가 활성화된 상태에서는 생성된 보이지 않는 기본 키를 수정할 수 없습니다. 단, 한 가지 예외로 ALTER TABLE tbl CHANGE COLUMN my_row_id SET VISIBLE 또는 ALTER TABLE tbl CHANGE COLUMN my_row_id SET INVISIBLE 을 사용하여 GIPK의 가시성을 토글할 수 있습니다.
기본적으로 생성된 보이지 않는 기본 키는 SHOW CREATE TABLE 및 SHOW INDEX 출력에 표시되며, MySQL Information Schema 테이블(예: COLUMNS 및 STATISTICS)에서도 확인할 수 있습니다. show_gipk_in_create_table_and_information_schema를 OFF로 설정하면 이를 숨길 수 있습니다.
이번 릴리스에서 추가된 --skip-generated-invisible-primary-key 옵션을 사용하여 mysqldump 출력에서 생성된 보이지 않는 기본 키를 제외할 수 있습니다. mysqlpump 또한 GIPK를 출력에서 제외하는 --skip-generated-invisible-primary-key 옵션을 지원합니다.
자세한 내용과 예시는 생성된 보이지 않는 기본 키를 참조하십시오. MySQL의 보이지 않는 열 지원에 대한 일반적인 정보는 보이지 않는 열을 참조하십시오. (버그 #34092605, WL #13784)

키링 관련 사항

keyring_aws 플러그인은 최신 AWS Encryption SDK for C (버전 1.9.186)를 사용하도록 업데이트되었습니다.
keyring_aws_region 변수는 새로운 SDK에서 지원하는 추가적인 AWS 리전을 지원합니다. 지원되는 AWS 리전 목록은 변수 설명을 참조하십시오. (WL #14547)

Performance Schema 관련 사항

InnoDB: InnoDB 읽기-쓰기 잠금에 대한 퍼포먼스 스키마 계측에서, TRY(대기 없이) 작업의 잠금 획득 실패 및 성공이 잘못 계측되었습니다. (버그 #34131395)

그룹 복제: 퍼포먼스 스키마에서 그룹 복제 메모리 사용량 성능 모니터링을 위한 계측이 추가되었습니다.
자세한 내용은 그룹 복제 메모리 사용량 모니터링을 참조하십시오. (WL #14726)

플러거블 인증

SASL LDAP 플러그인은 Kerberos 구성 파일에서 읽은 Kerberos Key Distribution Center(KDC) 호스트 정보를 올바르게 파싱하지 못하여 SASL 인증 오류가 발생했습니다. (버그 #31862170)

보안 관련 사항

이제 지원되는 플랫폼에서 MySQL 서버 패키지(mysqld + libmysql + 클라이언트 도구)를 OpenSSL 3.0을 사용하여 컴파일할 수 있습니다. 이는 서버나 클라이언트 프로그램의 동작에 변화를 주지 않습니다. 자세한 내용은 https://wiki.openssl.org/index.php/OpenSSL_3.0을 참조하십시오. (WL #14683)

공간 데이터 지원

이전에는 MySQL 8.0.13에 추가된 ST_TRANSFORM() 함수가 직교 좌표계 공간 참조 시스템을 지원하지 않았습니다. 이번 릴리스부터는 WGS 84 Pseudo-Mercator(SRID 3857)에 사용되는 Popular Visualisation Pseudo Mercator(EPSG 1024) 투영 방법에 대한 지원이 추가되었습니다. (WL #11961)

SQL 구문 관련 사항

이제 실행할 수 없는 REVOKE 문이 오류 대신 경고를 발생시킬지 여부를 결정할 수 있습니다. 이는 다음과 같은 두 개의 새로운 문 옵션을 이제 실행할 수 없는 REVOKE 문이 오류가 아닌 경고를 발생하게 할 수 있습니다. 이는 다음 두 가지 새로운 문 옵션을 추가하여 구현되었습니다. 간단한 설명과 함께 나열된 옵션은 다음과 같습니다:

  • IF EXISTS: 대상 사용자나 역할이 존재하지 않는 경우 REVOKE가 오류 대신 경고를 발생하게 합니다.
  • IGNORE UNKNOWN USER: 대상 사용자나 역할이 알려지지 않았지만 명령이 그렇지 않으면 성공할 경우 REVOKE가 오류 대신 경고를 발생하게 합니다.

단일 대상 사용자 또는 역할과 제거할 특정 권한이나 역할에 대해, 같은 REVOKE 문에서 IF EXISTSIGNORE UNKNOWN USER 옵션을 함께 사용하면 대상 사용자 또는 역할과 제거할 권한이나 역할이 모두 알려지지 않더라도 명령이 성공(아무 작업도 수행하지 않고 경고가 표시됨)하며, 문이 유효한 경우에만 해당됩니다. 여러 대상을 지정하거나 여러 권한 또는 역할을 제거하는 경우, 또는 둘 다 해당하는 경우, 명령은 유효한 제거 작업을 수행하며 유효하지 않은 작업에 대해서는 경고를 표시하면서 성공합니다.

자세한 내용은 REVOKE Statement을 참조하십시오. (버그 #102232, 버그 #32495441, WL #14690)

XA 트랜잭션 관련 사항

복제; 그룹 복제: 서버 노드가 XA PREPARE, XA COMMIT 또는 XA ROLLBACK을 실행하는 중에 예기치 않게 중단되었을 때 복구가 보장되지 않았던 문제를 해결하기 위해, 이제 MySQL은 MySQL “클래식” 복제 또는 MySQL 그룹 복제를 사용할 때 XA 트랜잭션 상태를 일관되게 유지합니다. 이를 통해 트랜잭션이 진행 중인 상태에서 서버 노드가 중단, 복구 및 토폴로지에 재가입하더라도 노드가 다르게 동작하지 않도록 상태가 전파됩니다.
다중 서버 복제 토폴로지(그룹 복제를 포함하는 경우 포함)에서는 XA 트랜잭션 상태가 일관되게 전파되어, 모든 서버가 항상 동일한 상태를 유지합니다. 바이너리 로깅이 활성화된 경우 단일 서버에서도 서버가 예기치 않게 중단되고 다시 토폴로지에 합류한 후 일관된 상태로 복구할 수 있습니다.
이 개선 사항은 스토리지 엔진과 서버의 내부 트랜잭션 코디네이터(ITC) 사이에서 2단계 XA 준비를 지원하도록 추가되었으며, 준비 상태는 모두 유지됩니다. 이로 인해 ITC는 내부 로그를 안전하게 삭제할 수 있으며, 삭제 후 서버가 중단되더라도 상태를 잃을 위험이 없습니다. 단일 노드의 경우, 스토리지 엔진과 바이너리 로그 간 실행 순서를 강제함으로써 GTID가 스토리지 엔진에서 해당 변경 사항이 보이기 전에 외부화되지 않도록 방지합니다. 다중 서버가 포함된 토폴로지의 경우, 트랜잭션 상태가 로컬에서 일관되고 영구적이지 않으면 토폴로지에 브로드캐스트되지 않도록 유지합니다. 모든 경우에서 XA 트랜잭션의 상태는 마지막으로 작성된 바이너리 로그 파일에서 추출되고, 스토리지 엔진에서 얻은 트랜잭션 상태와 동기화됩니다.
이번 릴리스에서 알려진 문제는 동일한 트랜잭션 XID를 사용하여 순차적으로 XA 트랜잭션을 실행할 때 발생할 수 있습니다. 서버가 이 동일한 XID를 사용하여 XA COMMIT ... ONE PHASE를 처리하는 중에 작업이 중단되면, 바이너리 로그와 스토리지 엔진 간의 상태를 더 이상 안정적으로 동기화할 수 없습니다.
자세한 내용은 XA 트랜잭션을 참조하십시오. (WL #11300)

기능 추가 및 변경 사항

중요 변경 사항: 시스템 curl 라이브러리에 링크하지 않고 curl을 포함하는 바이너리 패키지는 curl 7.83.1로 업그레이드되었습니다. (버그 #34138733)

중요 변경 사항: OpenSSL 라이브러리가 번들로 제공되는 플랫폼의 경우, MySQL 서버에 연결된 OpenSSL 라이브러리는 버전 1.1.1o로 업데이트되었습니다. OpenSSL 1.1.1o에서 수정된 문제에 대한 설명은 https://www.openssl.org/news/cl111.txthttps://www.openssl.org/news/vulnerabilities.html을 참조하십시오. (버그 #34133985)

중요 변경 사항: MySQL에 포함된 fido2 라이브러리(플러그인 authentication_fido에 사용됨)는 버전 1.8.0으로 업그레이드되었습니다. (이전에는 MySQL에 버전 1.5.0이 포함되어 있었습니다.)
자세한 내용은 FIDO 플러그인 인증을 참조하십시오. (WL #15111)

InnoDB: innodb_doublewrite 시스템 변수는 더블라이트 버퍼를 활성화하거나 비활성화하는데, 이번에 두 가지 새로운 설정인 DETECT_ONLYDETECT_AND_RECOVER가 추가되었습니다. DETECT_ONLY 설정에서는 데이터베이스 페이지 내용이 더블라이트 버퍼에 기록되지 않으며, 복구 시 더블라이트 버퍼를 사용하지 않고 불완전한 페이지 쓰기를 수정합니다. 이 경량 설정은 불완전한 페이지 쓰기만을 감지하는 데 사용됩니다. DETECT_AND_RECOVER 설정은 기존의 ON 설정과 동일합니다. 자세한 내용은 더블라이트 버퍼를 참조하십시오.
기여해주신 Facebook에 감사드립니다. (버그 #32727919, 버그 #103211, WL #14719)

InnoDB: 이제 InnoDB는 리두 로그 용량의 동적 구성을 지원합니다. innodb_redo_log_capacity 시스템 변수를 런타임에 설정하여 리두 로그 파일이 차지하는 전체 디스크 공간을 늘리거나 줄일 수 있습니다.
이 변경으로 인해 리두 로그 파일의 수와 기본 위치도 변경되었습니다. MySQL 8.0.30부터 InnoDB는 데이터 디렉토리의 #innodb_redo 디렉토리에 32개의 리두 로그 파일을 유지합니다. 이전에는 기본적으로 데이터 디렉토리에 두 개의 리두 로그 파일을 생성했으며, 로그 파일의 수와 크기는 innodb_log_files_in_groupinnodb_log_file_size 변수를 통해 제어되었습니다. 이 두 변수는 이제 사용 중단되었습니다.
innodb_redo_log_capacity 설정이 정의된 경우, innodb_log_files_in_groupinnodb_log_file_size 설정은 무시되며, 그렇지 않으면 이 두 변수를 사용하여 innodb_redo_log_capacity 설정이 계산됩니다(innodb_log_files_in_group * innodb_log_file_size = innodb_redo_log_capacity). 이들 변수가 설정되지 않은 경우, 리두 로그 용량은 기본값인 104857600바이트(100MB)로 설정됩니다.
리두 로그 및 로그 용량 조정 작업을 모니터링할 수 있는 여러 상태 변수가 제공됩니다.
일반적으로 모든 업그레이드가 요구되는 것처럼, 이 변경은 업그레이드 전에 깨끗한 종료가 필요합니다.
이 기능에 대한 자세한 내용은 리두 로그를 참조하십시오. (WL #12527)

Ubuntu 22.04 지원이 추가되었습니다. (버그 #34123545)

mysql 스키마의 일부 테이블에 대한 기본 키 정의의 열 순서가 변경되어, 호스트 이름과 사용자 이름을 포함하는 열이 기본 키의 시작 부분에서 연속되도록 변경되었습니다. 이러한 테이블에 대한 ACL 쿼리는 호스트 이름과 사용자 이름만 사용하므로, 이러한 열이 연속되지 않으면 관련 레코드를 식별하기 위해 전체 테이블 스캔이 필요합니다. 호스트 이름과 사용자 이름을 함께 배치하면 인덱스 조회를 사용할 수 있어 CREATE USER, DROP USER, RENAME USER 문 및 다중 사용자에 대한 다중 권한에 대한 ACL 검사 성능이 향상됩니다.
변경된 테이블은 mysql.db, mysql.tables_priv, mysql.columns_priv, mysql.procs_priv입니다. MySQL 8.0.30 이상으로 업그레이드할 때, 이러한 테이블은 MySQL 업그레이드 프로세스의 두 번째 단계에서 수정됩니다. mysqldump 또는 mysqlpump와 같은 백업 또는 내보내기 유틸리티를 사용하여 논리적 업그레이드를 수행할 때 --upgrade=FORCE 옵션을 사용하여 테이블 구조가 확인되고 새 열 순서로 재구성되도록 하십시오. (버그 #33644645, 버그 #33637244, WL #14965)

myisam_repair_threads 시스템 변수와 myisamchk --parallel-recover 옵션이 제거되었습니다. (버그 #31052408, WL #14938)

새로운 mysqldump 옵션인 --mysqld-long-query-time을 사용하면 mysqldump 세션에 대해 long_query_time 시스템 변수의 사용자 정의 값을 설정할 수 있습니다. 새로운 옵션을 사용하여 mysqldump의 쿼리가 느린 쿼리 로그 파일에 기록되기 전에 허용되는 경과 시간을 늘려 불필요한 로깅을 방지할 수 있습니다. 기여해주신 Facebook에 감사드립니다. (버그 #96369, 버그 #96369, 버그 #30110717, WL #13447)

오류 로그 구성 요소는 이제 InnoDB 스토리지 엔진이 사용 가능해지기 전에 부팅 시 암시적으로 로드될 수 있습니다. 이 새로운 오류 로그 구성 요소 로드 방법은 log_error_services 변수에 정의된 구성 요소를 로드하고 활성화합니다.
이전에는 오류 로그 구성 요소를 먼저 INSTALL COMPONENT를 사용하여 설치한 후 InnoDB가 완전히 사용 가능해진 후에만 로드되었습니다. 로드할 구성 요소 목록은 mysql.components 테이블(이는 InnoDB 테이블입니다)에서 읽었습니다.
오류 로그 구성 요소의 암시적 로드는 다음과 같은 이점을 제공합니다:

  • 로그 구성 요소가 시작 시퀀스 초기에 로드되어, 더 이른 시점에 로깅된 정보를 사용할 수 있습니다.
  • 시작 중에 오류가 발생할 경우 버퍼링된 로그 정보의 손실을 방지할 수 있습니다.
  • 오류 로그 구성이 간소화되어, INSTALL COMPONENT를 사용하여 로그 구성 요소를 로드할 필요가 없습니다.

이 기능에 대한 자세한 내용은 오류 로그 구성을 참조하십시오.
이전에 INSTALL COMPONENT를 사용하여 로드 가능한 로그 구성 요소를 설치한 후, 시작 시 읽는(옵션 파일 등에서) log_error_services 설정에 해당 구성 요소를 나열한 경우, 시작 경고를 방지하려면 구성을 업데이트해야 합니다. 자세한 내용은 오류 로그 구성 방법을 참조하십시오. (WL #14793)

MySQL Enterprise Audit의 감사 로그 파일은 이제 쿼리 시간, 전송 및 수신된 바이트 수, 클라이언트로 반환된 행 수, 검사된 행 수를 보여주는 선택적 데이터 필드로 확장될 수 있습니다. 이 데이터는 적격 쿼리에 대한 느린 쿼리 로그에서 사용할 수 있으며, 감사 로그의 맥락에서도 활동 분석을 위한 이상값을 감지하는 데 유사하게 도움이 됩니다. 확장된 데이터 필드는 감사 로그가 JSON 형식(audit_log_format=JSON)일 때만 추가할 수 있으며, 이는 기본 설정이 아닙니다. (WL #14921)

MySQL 서버의 AES_ENCRYPT()AES_DECRYPT() 함수는 이제 키 파생 함수(KDF)를 지원하여 함수에 전달하는 비밀번호나 암호구 같은 정보로부터 암호학적으로 강력한 비밀 키를 생성할 수 있습니다. 파생된 키는 데이터를 암호화하고 복호화하는 데 사용되며, MySQL 서버 인스턴스 내에 남아 있으며 사용자에게는 접근할 수 없습니다. KDF를 사용하는 것이 매우 권장되며, 사용자가 직접 만든 키를 지정하거나 단순한 방법으로 키를 파생하는 것보다 더 나은 보안을 제공합니다. 함수는 HKDF(OpenSSL 1.1.0부터 사용 가능)를 지원하며, 키 자료에 포함할 선택적 소금 및 컨텍스트별 정보를 지정할 수 있습니다. PBKDF2(OpenSSL 1.0.2부터 사용 가능)에 대해서는 선택적 소금을 지정하고 키를 생성하는 데 사용할 반복 횟수를 설정할 수 있습니다. (WL #12669, WL #15188)

새로운 시스템 상태 변수 Tls_library_version은 MySQL 인스턴스에 사용 중인 OpenSSL 라이브러리의 런타임 버전을 표시합니다. OpenSSL 버전은 TLSv1.3 지원과 같은 기능에 영향을 미칩니다. (WL #13407)

MySQL 8.0.30부터 MySQL Enterprise Encryption의 함수는 openssl_udf 공유 라이브러리에서 설치된 것이 아니라 구성 요소에서 제공됩니다. 구성 요소에서 제공하는 새 함수는 일반적으로 권장되는 RSA 알고리즘만 사용하며, DSA 알고리즘이나 Diffie-Hellman 키 교환 방법은 사용하지 않으며, 최소 키 크기에 대한 최신 권장 사항을 따릅니다. 또한 SHA3 다이제스트 지원(OpenSSL 1.1.1 사용 시 제공)을 추가했으며, 서명을 위한 다이제스트가 필요하지 않지만 이를 지원합니다.
openssl_udf 공유 라이브러리 파일에서 수동으로 함수를 설치한 이전 릴리스에서 MySQL 8.0.30으로 업그레이드하는 경우, 생성된 함수는 계속 사용 가능하며 지원됩니다. 그러나 이러한 레거시 함수는 이번 릴리스부터 사용 중단되었으므로, 구성 요소를 설치하는 것이 권장됩니다. 구성 요소 함수는 이전 함수와의 호환성을 유지하므로, 레거시 함수로 생성된 RSA 공개 및 개인 키, 암호화된 데이터, 서명은 구성 요소 함수에서 사용할 수 있습니다. 레거시 함수에서 생성된 콘텐츠에 대한 복호화 및 검증을 지원하려면 새 시스템 변수 enterprise_encryption.rsa_support_legacy_paddingON으로 설정해야 합니다(기본값은 OFF).
구성 요소 함수는 PKCS #8 형식으로 공개 및 개인 RSA 키를 생성합니다. 최소 키 크기는 2048비트로, 현재 권장되는 최소 RSA 키 길이에 적합합니다. 시스템 변수 enterprise_encryption.maximum_rsa_key_size를 사용하여 최대 키 크기를 16384비트까지 설정할 수 있으며, 기본값은 최대 4096비트입니다. (WL #15024)

MySQL 서버가 오프라인 모드로 설정된 경우, CONNECTION_ADMIN 권한이 있는 사용자의 연결은 종료되지 않습니다. 이는 offline_mode 시스템 변수를 ON으로 설정하여 수행됩니다. 이전에는 CONNECTION_ADMIN 권한이 있는 연결을 확인할 때 다른 스레드에 접근해야 하므로 경합 상태가 발생할 수 있었습니다. 이제 각 스레드에 플래그가 추가되어 해당 스레드의 사용자가 CONNECTION_ADMIN 권한을 가지고 있는지 여부가 캐시됩니다. 사용자의 권한이 변경되면 플래그가 업데이트됩니다. 서버에서 오프라인 모드를 활성화하면, 이 플래그는 다른 스레드의 보안 컨텍스트 대신 각 스레드에 대해 확인됩니다. 이 변경으로 인해 스레드 안전성이 확보됩니다.
또한 오프라인 모드가 활성화되면 SYSTEM_USER 권한이 있는 사용자의 연결은 해당 작업을 수행하는 사용자도 SYSTEM_USER 권한을 가진 경우에만 종료됩니다. SYSTEM_VARIABLES_ADMIN 권한만 있고 SYSTEM_USER 권한이 없는 사용자는 offline_mode 시스템 변수를 ON으로 설정하여 오프라인 모드를 활성화할 수 있습니다. 그러나 그들이 작업을 수행할 때, SYSTEM_USER 권한이 있는 모든 세션과 CONNECTION_ADMIN 권한이 있는 세션은 계속 연결된 상태로 유지됩니다. 이는 작업 당시의 기존 연결에만 적용되며, CONNECTION_ADMIN 권한이 없는 SYSTEM_USER 권한이 있는 사용자는 오프라인 모드에 있는 시스템에 새로 연결할 수 없습니다. (WL #14317)

버그 수정

InnoDB: ALGORITHM=INSTANT를 사용하여 컬럼을 삭제한 후, TRUNCATE TABLE 작업이 데이터 사전에서 컬럼 항목을 제거하지 못했습니다.
기여해주신 Marcelo Altmann님께 감사드립니다. (버그 #34302445)

InnoDB: 즉시 추가된 컬럼이 있는 테이블에서 잘못된 널 가능 컬럼 계산으로 인해 데이터가 잘못 해석되었습니다. (버그 #34243694)

InnoDB: MySQL 8.0.29로 업그레이드한 후, 즉시 추가된 컬럼이 있는 테이블에 접근하려 할 때 실패가 발생했습니다. (버그 #34233264)

InnoDB: 즉시 추가된 컬럼의 물리적 위치만이 기록되어 인덱스 복구에 충분하지 않았습니다. 컬럼의 논리적 위치도 필요했습니다. (버그 #34181432)

InnoDB: 종속 업데이트 작업 중 자식 테이블의 field_phy_pos 디버그 변수가 업데이트되지 않았습니다. (버그 #34181419)

InnoDB: InnoDB 소스의 rec_get_instant_row_version_old() 함수의 일부 인스턴스가 행 버전 관리를 확인하지 않았습니다. (버그 #34173616)

InnoDB: InnoDB 소스에서 로그 버퍼에서 바이트를 읽는 read_2_bytes() 함수가 널 포인터를 반환했습니다. (버그 #34173425)

InnoDB: 특정 잠금 시나리오에서 암묵적 잠금이 예상대로 명시적 잠금으로 변환되지 않아 lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP, block, heap_no, trx) 디버그 어서션 실패가 발생했습니다. (버그 #34123159)

InnoDB: 즉시 추가된 컬럼이 있는 테이블에서 ADDDROP COLUMN 작업의 성능에 영향을 주었던 테이블 검사가 각 컬럼마다 수행되었습니다. 이제 이 검사는 테이블당 한 번만 수행됩니다. (버그 #34112147)

InnoDB: 다수의 잠금 요청과 많은 타임아웃을 생성하는 워크로드가 긴 세마포어 대기 실패를 초래했습니다. 이 문제를 해결하기 위해 독점적인 글로벌 잠금 시스템 래치 수를 줄이기 위한 최적화가 구현되었습니다. (버그 #34097862)

InnoDB: 단일 로그 쓰기 호출에서 여러 블록이 기록될 때 첫 번째 블록에 설정된 리두 로그 블록 헤더의 m_flush_bit이 아무런 이점도 제공하지 않았기 때문에 제거되었습니다. (버그 #34091444)

InnoDB: clang-tidy와 cppcheck 경고를 수정했으며, 여기에는 사용되지 않는 코드 제거와 불필요한 검사 제거가 포함되었습니다. (버그 #33957087)

InnoDB: 작은 innodb_log_buffer_size 설정을 가진 MySQL 서버 인스턴스에서 리두 로그 파일 미니 트랜잭션(mtr) 복구가 디버그 어서션 실패를 발생시켰습니다.
기여해주신 Mengchu Shi님께 감사드립니다. (버그 #33945602)

InnoDB: WITH_VALGRIND 소스 구성 옵션으로 컴파일할 때 Wunused-variable 경고가 발생했습니다. (버그 #33899862)

InnoDB: 잠금이 없는 해시 테이블(ut_lock_free_hash_t)에서 여러 문제가 수정되었습니다. (버그 #33830934)

InnoDB: 생성된 컬럼과 보조 인덱스를 사용하는 쿼리가 실패를 일으켰습니다. 생성된 컬럼의 위치를 나타내는 필드 번호가 유효하지 않았습니다. (버그 #33825077)

InnoDB: 멀티 값 인덱스 컬럼이 있는 행을 업데이트하고 삽입할 때 메모리 소비가 예상보다 많았습니다. 각 행 업데이트에 대해 멀티 값 컬럼에 할당된 메모리는 파일 핸들이 해제될 때까지 유지되었습니다. (버그 #33766482)

InnoDB: InnoDB 소스에서 UT_LOCATION_HERE 구조체가 일관되게 사용되지 않았습니다. (버그 #33436161)

InnoDB: 생성된 컬럼 값을 계산할 때 멀티 값 인덱스 컬럼에서 값을 가져오기 위한 테이블 객체가 없었습니다. (버그 #32725063)

InnoDB: Windows 32비트 시스템에서 테이블스페이스 파일 크기 4GB 제한이 제거되었습니다. 이 제한은 테이블스페이스를 확장하는 동안 수행된 잘못된 계산 때문이었습니다. (버그 #28934351)

InnoDB: InnoDB 소스의 해시 및 난수 생성기 함수가 개선되었습니다. (버그 #16739204, 버그 #23584861)

InnoDB: 테이블스페이스가 삭제된 테이블에 대해 DROP TABLE 작업이 불필요한 어서션 실패를 일으켰습니다. (버그 #107207, 버그 #34135187)

InnoDB: 멀티 값 인덱스를 추가한 후 JSON 컬럼이 있는 테이블에 대한 쿼리가 부분적인 결과 집합만 반환했습니다. (버그 #106621, 버그 #33917625)

InnoDB: 여러 이진 대형 객체 값을 가진 레코드를 정리할 때 미니 트랜잭션(mtr) 충돌로 인해 삽입 실패가 발생했습니다. (버그 #105592, 버그 #33574272)

InnoDB: 높은 동시성 인스턴스에서 적응형 해시 인덱스(AHI)를 활성화하면 해시 인덱스를 빌드하는 동안 일시적인 AHI 검색 래치 경합이 발생했습니다.
패치를 제공해주신 Tencent의 CDB 팀의 Zhou Xinjing님께 감사드립니다. (버그 #100512, 버그 #31750840)

패키징: Windows용 MySQL 커뮤니티 패키지에서 SASL LDAP 클라이언트 측 플러그인이 누락되었습니다.

복제: 소스와 복제본 간 테이블 정의가 일치하지 않고 복제본에 추가 기본 키가 있는 경우, 소스와 복제본 모두에 존재하는 인덱스가 있는 테이블에서 복제본의 업데이트 및 삭제가 실패했습니다. InnoDB 테이블의 기본 키는 모든 인덱스에 자동으로 포함되며, 복제 적용기는 인덱스를 검색하기 위해 이벤트에 키의 모든 부분이 포함되어야 합니다. 이전에는 사용자 정의 키 부분만 확인되었으나 이제는 자동으로 포함된 키 부분도 이벤트에 있는지 확인합니다. (버그 #34122738)

복제: transaction_write_set_extraction 시스템 변수가 활성화된 경우(기본값임) MySQL 복제가 트랜잭션에서 추출한 쓰기 집합은 기본 키, 고유 키 및 외래 키에서 추출됩니다. 이들은 트랜잭션 간 종속성과 충돌을 감지하는 데 사용됩니다. 이전에는 다중 열 외래 키와 관련된 쓰기 집합이 각 열을 별도의 외래 키로 잘못 식별했습니다. 이제 외래 키 쓰기 집합에 참조된 모든 키 열이 포함됩니다. (버그 #34095747, 버그 #34144531)

복제: 행 기반 복제 사용 시, 복제본이 추가된 컬럼 문제를 피하기 위해 소스에서 전송된 SQL 모드 값을 무시하고 덮어쓸 수 있었습니다. 심각한 경우 데이터 불일치가 발생할 수 있었습니다. 이제 복제본이 가능하면 소스의 SQL 모드를 유지합니다. (버그 #33945038)

복제: MySQL의 반동기 복제가 net_read_timeout 시스템 변수 값을 무시하고 1밀리초의 짧은 읽기 제한을 강제로 적용했습니다. 이로 인해 ACK 메시지의 부분적 읽기나 패킷 순서가 뒤섞이는 문제가 발생할 수 있었습니다. 이제 반동기 복제에서는 net_read_timeout 시스템 변수 값이 제대로 적용됩니다. (버그 #101056, 버그 #31976209)

복제: --replicate-same-server-id 옵션을 사용하여 복제본이 자신의 서버 ID를 포함하는 이벤트를 건너뛰지 않도록 설정했을 때 로그 파일이 회전되면 복제가 오류로 중단되었습니다. 이제 로그 회전 이벤트가 현재 옵션 값을 확인하고 적용합니다. (버그 #89375, 버그 #27492990)

그룹 복제: Performance Schema 테이블 replication_group_member_statsCOUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE 열이 이미 적용된 View_change_log_event와 관련된 트랜잭션을 지속적으로 표시할 수 있었습니다. 이제 해당 트랜잭션이 올바른 지점에서 카운트되며, 복제기가 바쁠 때가 아니면 카운터가 0으로 설정됩니다. (버그 #33602354, 버그 #33674059)

그룹 복제: 그룹 복제에서 멤버가 서비스 인프라와 상호작용하는 동안(예: 가입 멤버가 호환되지 않는 구성을 확인하고 그룹을 떠나는 경우) 교착 상태가 발생할 수 있었습니다. 이제 이 문제가 수정되었습니다. (버그 #32688091)

그룹 복제: 이전에 동일한 서버의 인스턴스가 그룹 복제 토폴로지에 존재하는 경우 멤버가 다시 가입하려고 할 때 기록되던 메시지가 정보성 노트에서 경고 메시지로 업그레이드되었습니다. (버그 #32651024)

API: 이전에 MySQL 클라이언트 라이브러리를 사용하여 서버에 자동으로 재연결을 시도하던 애플리케이션이 서버 업그레이드 후 다음과 같은 mysql_query 오류를 수신했습니다:
[4031] 클라이언트가 비활성 상태로 인해 서버에 의해 연결이 끊어졌습니다. 이 동작을 구성하려면 wait_timeoutinteractive_timeout을 참조하십시오. (버그 #105229, 버그 #34007830)

유도 테이블로 조건을 푸시하는 과정이 모든 경우에 올바르게 처리되지 않았습니다. (버그 #34311090)

집합 연산이 있는 유도 테이블로 조건을 푸시한 후, 항상 참인 부울 조건을 접을 때, 복제된 조건의 abort_on_null을 true로 설정하지 않아 재작성에 오류가 발생했습니다. (버그 #34298238)

뷰 정의에서 잘못된 ORDER BY 표현을 처리하는 중에 오류 반환이 누락되어 디버그 빌드에서 어서트가 발생했습니다. (버그 #34239456)

MySQL 서버가 최신 Visual Studio 2022 버전으로 컴파일되지 않았습니다. (버그 #34231639)

조건 푸시다운 중 시스템 변수를 복제하려 할 때, 서버가 때때로 복제된 표현식의 올바른 컨텍스트를 결정하지 못했습니다.
이를 방지하기 위해 시스템 변수를 사용하는 경우 또는 유도 테이블의 기본 표현식에 시스템 변수가 포함된 경우 조건 푸시다운을 허용하지 않습니다. (버그 #34205559)

Enterprise Linux 9 (EL9) 지원이 추가되었습니다. (버그 #34190004)

macOS 11에서 MySQL 서버가 예상치 못한 중단 시 코어 덤프를 생성할 수 있는 적절한 권한이 없었습니다. 이제 빌드 시 코어 덤프 생성을 허용하는 WITH_DEVELOPER_ENTITLEMENTS 빌드 옵션이 추가되었습니다. (버그 #34163987)

libevent-devel 또는 libedit-devel이 없는 시스템에서 -DWITH_LIBEVENT=system-DWITH_EDITLINE=system에 대한 오류 처리가 개선되었습니다. (버그 #34131334, 버그 #34123545)

MySQL 8.0.29에서 발생한 버그 #33830493의 수정 사항은 SET PERSIST 문으로 시스템 변수 설정을 기록한 후 MySQL 인스턴스가 예기치 않게 중지되거나 다시 시작된 경우 구성 파일 mysqld-auto.cnf가 비어 있을 수 있는 상황을 해결했습니다. 이제 설정된 시스템 변수는 백업 파일에 기록되며, 쓰기가 성공적으로 완료된 후에만 mysqld-auto.cnf로 이름이 변경됩니다. (버그 #34122866)

-DENABLE_GCOV CMake 옵션이 수정되었습니다. (버그 #34113243)

MySQL 8.0.29에 도입된 SENSITIVE_VARIABLES_OBSERVER 권한은 업그레이드 시 SYSTEM_VARIABLES_ADMIN 권한을 가진 사용자에게 부여됩니다. 이전에는 이 권한이 업그레이드 중에 어느 데이터베이스 사용자에게도 부여되지 않았습니다. (버그 #34068378)

왼쪽 조인을 사용한 뷰에서 결과가 반환되지 않았습니다. (버그 #34060289)

특정 상황에서 TRUNCATE performance_schema.accountsglobal_status에서 중복된 카운트를 발생시켰습니다.
이는 일부 호스트가 계측되지 않았을 때 발생했습니다. 예를 들어, performance_schema_hosts_size가 낮게 설정된 경우입니다.
기여해주신 Yuxiang Jiang 및 Tencent 팀에 감사드립니다. (버그 #34057013, 버그 #106939)

특정 조건에서 EXPLAIN ANALYZE가 존재하지 않는 반복자를 접근하려 시도할 수 있었습니다. (버그 #34051681)
참조: 이 문제는 버그 #33905399의 회귀입니다.

OpenSSL 3으로 keyring_oci 플러그인을 컴파일할 수 있도록 지원이 추가되었습니다. (버그 #34043013)

EXPLAIN ANALYZE에서 발견된 두 가지 문제가 수정되었습니다:

  • 실제 시간으로 표시된 타이밍이 누적되지 않았습니다.
  • 물질화된 테이블에 대해, 출력에 물질화된 테이블에서 읽은 행 수 대신 물질화된 행 수가 표시됩니다.

(버그 #34025798, 버그 #34135465)
참조: 버그 #33834146, 버그 #34678179도 참조하십시오.

퍼포먼스 스키마 테이블에 기록된 스레드 생성 및 삭제 이벤트가 클라이언트 연결이 종료된 후에도 유지되어 서버가 종료될 때까지 제거되지 않았습니다. 이제 사용자 세션을 위한 퍼포먼스 스키마 계측이 생성된 후 스레드 생성 및 삭제가 발생하므로 세션 종료 시 정리됩니다. (버그 #34019988)

번들된 zlib 라이브러리가 zlib 1.2.12로 업그레이드되었습니다. 또한 zlib 1.2.12가 지원되는 최소 zlib 버전으로 설정되었으며, WITH_SYSTEM_LIBS CMake 옵션에서 WITH_ZLIB이 제거되었습니다. (버그 #34015600)

CONNECTION_ID() 함수는 세션 ID를 반환하는데, 이 세션 ID는 세션 동안 일정하게 유지되므로 상수 함수로 처리되었습니다. 그러나 이로 인해 CONNECTION_ID()가 세션 재사용 시 트리거 내에서 사용되면 문제가 발생했습니다. 이제 이 함수를 실행 시 상수로 처리하고 함수가 평가될 때 실제 세션 ID를 반환하도록 수정했습니다. (버그 #34009876)

소스 코드에서 codespell을 실행하여 코드 주석에서 발견된 철자 오류를 수정했습니다. (버그 #34006439)

MySQL Enterprise Encryption의 openssl_udf 함수 라이브러리 플러그인이 OpenSSL 3 API를 사용하도록 재구현되었습니다. (버그 #33992115)

FEDERATED 스토리지 엔진 코드가 NULL 포인터 및 변수 접근 문제를 해결하도록 수정되었습니다. (버그 #33962357)

MySQL의 히스토그램에서 버킷 외부 값에 대한 선택 추정값이 0으로 반환되었습니다. 이는 샘플링 중 누락되었거나 히스토그램이 오래되었기 때문에 값이 누락되었음을 의미합니다. 이를 방지하기 위해 누락된 값에 대해 생성된 히스토그램 선택 추정값에 대해 상수 하한값 0.001을 도입했습니다. 이 상수 하한값은 샘플링 중 놓칠 가능성이 있는 값 또는 범위에 대한 선택 추정값과 대응합니다.
상수 하한값을 사용하면 누락된 값의 선택성을 추정하는 데 통계적 추정값을 사용하는 것보다 단순성 및 예측 가능성의 이점이 있으며, 오래된 히스토그램과 버킷 내 휴리스틱으로 인한 선택성 과소 평가를 방지할 수 있습니다.
MySQL의 히스토그램에 대한 자세한 내용은 Optimizer Statistics를 참조하십시오. (버그 #33935417)

특정 쿼리에서 공통 테이블 식(CTE)을 사용할 때, CTE가 실행된 것으로 알려졌음에도 불구하고 EXPLAIN ANALYZE가 CTE에 대한 프로파일링 데이터를 제공하지 못했습니다. 이 문제는 다음 조건을 충족할 때 발생했습니다:

  • CTE가 쿼리 계획에서 여러 번 참조되었습니다.
  • CTE에 대한 첫 번째 참조가(CTE의 첫 번째 참조는 EXPLAIN FORMAT=TREE의 출력 순서에 따름) 실행되지 않았습니다.
  • 후속 참조 중 하나 이상이 적어도 한 번 이상 실행되었습니다.

문제는 CTE 계획이 CTE에 대한 첫 번째 참조에서 항상 인쇄되었지만 해당 참조가 실행되지 않으면 그 시점에 CTE가 구체화되지 않아 인쇄할 프로파일링 데이터가 없었다는 점입니다.
이 문제를 해결하기 위해 CTE가 처음 실행될 때, 즉 구체화될 시점에 CTE 계획을 인쇄하도록 수정했습니다. 그런 다음 출력에는 프로파일링 데이터가 포함됩니다. CTE가 전혀 실행되지 않으면 마지막 참조에서 프로파일링 데이터 없이 계획이 인쇄됩니다. (버그 #33905399)

mysqld --verbose --help 명령의 출력에서 플러그인 로드 옵션이 기본적으로 꺼져 있거나 옵션을 사용해 비활성화된 경우에도 ON으로 표시되었습니다. 이제 출력은 플러그인의 현재 값을 올바르게 표시합니다. (버그 #33870892)

이제 서버는 curl(7.83.1)을 번들로 제공하며, openssl11을 사용하는 EL7과 같은 대체 SSL 시스템에서만 이를 사용합니다. (버그 #33859507, 버그 #34154806)

이제 MySQL의 디버그 바이너리는 -0g-fno-inline을 사용하여 빌드할 수 있습니다. (버그 #33855533)

MySQL 8.0.27에서 도입된 FIREWALL_EXEMPT 권한은 이제 업그레이드 중 SYSTEM_USER 권한이 있는 사용자에게 부여됩니다. 이전에는 업그레이드 중 어떤 데이터베이스 사용자에게도 권한이 부여되지 않았습니다. (버그 #33854409)

상관 서브쿼리가 예상대로 기능적 인덱스를 사용하지 않았습니다. 이는 서브쿼리 내에서 사용된 외부 열 참조가 서브쿼리 실행 시 상수로 간주되지 않아 기능적 인덱스를 건너뛸 수 있도록 허용된 경우에 발생했습니다.
이 문제는 서브쿼리를 실행하는 동안 외부 열 참조가 상수로 간주되도록 하여 해결되었습니다. (버그 #33851055)

OpenSSL의 대체 시스템 패키지 지원이 추가되었으며, EL7에서는 openssl11, EL8에서는 openssl3을 WITH_SSL Cmake 옵션에 전달할 수 있습니다. LDAP 및 Kerberos와 같은 인증 플러그인은 이러한 OpenSSL 대체 버전을 지원하지 않으므로 비활성화됩니다. (버그 #33835934)

테이블을 참조하지 않는 서브쿼리를 포함한 준비된 문장이 있었으나 서브쿼리 평가에서 오류가 발생한 경우, 디버그 빌드에서 assert 실패가 발생했습니다. (버그 #33773799)

일부 저장된 함수가 처음 호출된 후에 올바르게 실행되지 않았습니다. (버그 #33754993)

상수 술어 제거 후 쿼리 표현식 제거가 발생한 경우 재귀 공통 테이블 식(CTE)을 사용한 쿼리를 수행할 때 CTE 임시 테이블에 대한 테이블 객체 참조 카운트가 0이 되면 테이블을 다시 만들 수 있어야 하지만, 특정 경우 CTE에 연결된 테이블 참조 중 하나가 제대로 기록되지 않았습니다. (버그 #33725503)
참조: 버그 #32962511도 참조하십시오.

구문 분석기에서 누락된 오류 반환이 추가되었습니다. (버그 #33725502)

외부 참조를 사용하는 조건 푸시다운에 대한 여러 문제가 확인되었으며 해결되었습니다. 이 문제들은 주로 MySQL 8.0.22에서 구현된 물리화된 파생 테이블에 대한 조건 푸시다운과 관련이 있었습니다. (버그 #33725403, 버그 #33725500, 버그 #33725508, 버그 #33725534, 버그 #33725545)

공통 테이블 식을 사용한 SELECT 쿼리에서 생성된 계획에는 테이블 물리화와 물리화된 테이블에 대한 인덱스 스캔이 포함됩니다. 그러나 temptable 엔진은 아직 모든 인덱스 스캔 메서드를 지원하지 않기 때문에 이러한 쿼리가 항상 제대로 실행되는 것은 아닙니다.
다른 MySQL 엔진의 경우 액세스 경로가 기본이 아닌 것으로 간주될 때 물리화 액세스 경로가 특별히 처리됩니다. 그러나 temptable의 경우 인덱스 스캔이 기본으로 간주되지 않아 정의되지 않은 동작이 발생했습니다.
이 문제는 인덱스 스캔 액세스 경로를 기본으로 간주하여 temptable 테이블에서 인덱스 스캔 액세스 메서드 사용을 피하는 방식으로 해결되었습니다. (버그 #33700735)

새 데이터 파일을 InnoDB 시스템 테이블스페이스에 추가한 후 INFORMATION_SCHEMA.FILES 테이블의 Data_free 열이 업데이트되지 않았습니다. (버그 #33508534)

플러그인이 기존 시스템 변수와 동일한 이름으로 시스템 변수를 등록하려고 시도한 경우, 기존 정적 시스템 변수가 덮어쓰일 수 있으며 플러그인을 제거한 후에도 해제된 메모리에 대한 포인터가 남을 수 있습니다. 이 문제들이 해결되었습니다. (버그 #33451101)

퍼포먼스 스키마 테이블에 대한 개별 접근 권한만 있는 경우, SHOW TABLESSELECT * FROM INFORMATION_SCHEMA.TABLES가 퍼포먼스 스키마에서 결과를 반환하지 않았습니다. (버그 #33283709)

data_masking 플러그인 설치 없이 해당 플러그인 관련 함수를 호출하면 서버가 예기치 않게 종료되었습니다. 이 플러그인과 관련된 함수는 init 함수 호출을 통해 초기화되며, 이는 UDF 메타데이터 서비스에 접근합니다. 그러나 이러한 작업은 data_masking 플러그인이 설치된 경우에만 유효합니다. 이 문제는 플러그인 설치 여부를 확인한 후 플러그인을 초기화하는 방식을 사용하여 플러그인이 설치되지 않은 경우 적절한 오류 메시지를 반환하도록 수정되었습니다. (버그 #33234046)

특정 상황에서 서버는 max_execution_time 값이 만료되거나 KILL 문이 실행되는 것을 제대로 처리하지 못했습니다. (버그 #33218625)

mysqlslap은 서버에 여러 스레드를 연결하는 도구로, FIDO 인증을 사용하는 사용자 계정과 함께 실행되지 않았습니다. 이 문제는 FIDO 라이브러리를 업데이트하여 여러 스레드에서 인증을 수행할 수 있도록 하여 해결되었습니다. (버그 #33067183)

세션 중에 binlog_checksum 시스템 변수에 잘못된 값이 설정된 경우, 같은 세션에서 소스로부터 이진 로그 스트림을 요청하는 COM_BINLOG_DUMP 명령이 실패했습니다. 이제 서버는 체크섬 알고리즘 설정 프로세스를 시작하기 전에 지정된 체크섬 값을 확인합니다. (버그 #32442749)

느린 쿼리 로그를 사용할 때, Slow_queries 상태 변수가 느린 쿼리 로그가 활성화되지 않았음에도 불구하고 구현되었습니다. 이는 문서와 상반된 내용이었습니다. (버그 #28268680, 버그 #91496)

감사 플러그인에 examined_row_count, affected_row_count, return_row_count라는 새로운 매개변수가 추가되었습니다. J D에게 기여에 감사드립니다. (버그 #110628, 버그 #35267239)

준비된 문장이 빈 문자열을 유효한 실수 값으로 허용할 수 있었으며, 이는 8.0.27의 동작과 달리 나타난 회귀 문제였습니다. 이 수정 사항은 해석된 문자열의 길이가 비어 있지 않고 (실수로) 숫자로 완전히 해석되었는지 명시적으로 확인합니다. 또한 새 검증은 다음을 보장합니다:

  • 빈 문자열 및 공백 문자열과 함께 모든 숫자 값이 지원됩니다.
  • 일반 숫자 값뿐만 아니라 앞뒤에 공백이 있는 숫자 값도 지원됩니다.

(버그 #107399, 버그 #34213338)
참조: 이 문제는 버그 #32213576의 회귀 문제입니다.

MySQL 8.0.29로 업그레이드할 때 기존 공간 인덱스에 문제가 발생했습니다(참조: Creating Spatial Indexes). 문제의 근본 원인은 포함된 Boost 라이브러리(8.0.29에서 Boost 버전 1.77.0으로 업그레이드됨)가 지리적 영역 계산을 수행하는 방식의 변경이었습니다. 이를 해결하기 위해 이러한 계산이 수행될 때 새 방법을 수용하도록 수정했습니다. (버그 #107320, 버그 #34184111)
참조: 이 문제는 버그 #33353637의 회귀 문제입니다.

파라미터를 포함한 조건을 파생 테이블로 푸시 다운할 때, 파생 테이블에 UNION이 포함된 경우 조건을 복제합니다. 실행 중에 서명이 지정된 값과 실제 데이터 유형이 일치하지 않는 경우와 같이 문장을 다시 준비해야 할 때, 파라미터가 제대로 복제되지 않아 오류가 발생했습니다. 이는 파라미터로 지정된 값이 ? 리터럴 플레이스홀더 문자 대신 문자열을 다시 구문 분석하는 데 사용되었기 때문입니다.
이제 이러한 경우 QT_NO_DATA_EXPANSION 플래그를 설정하여 파라미터를 다시 구문 분석할 때 ? 플레이스홀더가 인쇄되도록 하여 실제 값 대신 ?가 표시되도록 했습니다. (버그 #107230, 버그 #34148712)

MacOS에서 Homebrew의 잠재적으로 호환되지 않는 시스템 Boost 버전이 사용될 수 있는 문제를 개선하여 Boost 라이브러리 감지 논리가 향상되었습니다. 이 문제는 -DWITH_BOOST가 설정된 상태에서도 발생할 수 있었습니다. (버그 #107151, 버그 #34121866)
참조: 이 문제는 버그 #33769505의 회귀 문제입니다.

RHEL 7.x에서 CPU 캐시 라인 크기를 가져오면 s390x RHEL 7.x에서 0을 반환하여 rpl_commit_order_queue 및 integrals_lockfree_queue가 실패했습니다.
기여해주신 Namrata Bhave에게 감사드립니다. (버그 #107081, 버그 #34095278)

mysql 클라이언트가 서버의 예기치 않은 중단 후 다시 연결하지 못한 경우, 완료 해시를 빌드하는 프로세스에서 해제되지 않은 메모리가 할당되었습니다. 이제 다시 연결에 실패하면 완료 해시가 빌드되지 않으며, 클라이언트가 연결이 끊긴 경우 해당 메모리가 해제됩니다. (버그 #106864, 버그 #34019571)

s390x 아키텍처용 사이클 타이머가 추가되었습니다.
기여해주신 Namrata Bhave에게 감사드립니다. (버그 #106824, 버그 #33997819)

물질화된 세미조인을 실행할 때 WHERE 절에 동일성이 포함된 경우 잘못된 결과가 나올 수 있었습니다. 일부 경우, 한쪽이 IN 또는 NOT IN 서브쿼리인 경우, 동일성이 물질화된 서브쿼리로 푸시되지 않거나 세미조인 일부로 평가되지 않았습니다. 이는 일부 내부 해시 조인에서도 문제를 일으켰습니다. (버그 #106710, 버그 #106718, 버그 #33952115, 버그 #33957233)
참조: 버그 #84705, 버그 #25466100도 참조하십시오.

(<date column> <non-date column>) IN ((val1, val2), (val3, val4), …)와 같은 쿼리에서 비교 함수가 잘못된 결과를 반환할 수 있었습니다. (버그 #106567, 버그 #33897969)

SetOsLimitMaxOpenFiles의 assert 정의가 수정되었습니다. 기여해주신 hongyuan li에게 감사드립니다. (버그 #106555, 버그 #33893197)

이전에는 동일한 널이 될 수 없는 표현식이 LIKE의 첫 번째 및 두 번째 인수로 사용된 경우 결과가 항상 참(true)이라고 가정하여 최적화할 수 있다고 판단했습니다. 하지만 LIKEESCAPE가 지정되지 않은 경우에도 백슬래시(\)를 이스케이프 문자로 처리하기 때문에 이러한 가정은 잘못된 것으로 나타났습니다. 이는 조건이 SELECT 목록에서 사용되었을 때와 WHERE 절에서 사용되었을 때 다른 결과를 초래했습니다. 문제를 해결하기 위해 이제는 LIKE에서 ESCAPE 절이 있든 없든 이 최적화를 수행하지 않습니다. (버그 #106444, 버그 #33852756)

전역 트랜잭션 ID 이외의 인수(열 값과 같은)를 GTID_SUBSET()에 전달했을 때 예상되는 NULL 값이 반환되지 않았습니다. (버그 #106298, 버그 #33793942)

일반적인 양화된 비교 술어를 평가하는 동안, 술어의 왼쪽이 NULL인 경우 문제가 발생했습니다. 이러한 경우 하위 쿼리 평가의 값이 캐시되며, 하위 쿼리에서 일치하는 행이 없는 경우에는 결과가 TRUE로 평가되었습니다. 그러나 후속 실행에서 하나 이상의 행이 일치하는 경우에도 예상대로 FALSE 대신 TRUE가 반환되었습니다.
이 문제를 해결하기 위해 이제 하위 쿼리 술어 실행 후 정리 작업 중에 result_for_null_param이 제대로 초기화되도록 했습니다. (버그 #106164, 버그 #33755139)

--async-client 옵션과 종료 명령을 사용하여 실행된 테스트 케이스가 mysqltest를 예기치 않게 종료시켰습니다. (버그 #105797, 버그 #33643149)

MySQL은 선택성 추정치를 개선하기 위해 동일한 높이 히스토그램을 사용할 수 있습니다. 열에 대한 동일 높이 히스토그램의 각 버킷에는 대략 동일한 수의 값(행)이 포함되어야 합니다. 버킷을 작게 유지하면 오류를 최소화할 수 있습니다.
동일한 높이의 히스토그램을 구성할 때 너무 많은 값이 하나의 버킷에 배치되어 선택성 추정에서 상당한 오류가 발생할 수 있었습니다. 이 문제를 해결하기 위해 낮은 오류를 보장하는 새로운 동일 높이 생성 알고리즘을 도입하여 데이터 분포에 적응하여 버킷을 효율적으로 사용할 수 있도록 했습니다. 또한 히스토그램 버킷의 고유 값 수에 대한 새로운 추정기를 통해 최악의 경우에 대한 오류 보증이 개선되었습니다.
자세한 내용은 The INFORMATION_SCHEMA COLUMN_STATISTICS TableOptimizer Statistics을 참조하십시오. (버그 #104789, 버그 #33302021)

클라이언트 프로그램에 반환된 사용 중단 경고가 stderr 대신 stdout으로 전송되었으며, 이로 인해 mysqldump의 덤프 파일이 제대로 작동하지 않을 수 있었습니다. 이제 문제를 해결하여 경고가 stderr로 전송되도록 했습니다. (버그 #104769, 버그 #33733529)

연결된 SSL 인증서에 대한 지원이 확장되었습니다. (버그 #54158, 버그 #27491518)

Leave a Comment



이 문서 공유

8.0.30 변경 사항 (2022-07-26 GA)

링크 복사

CONTENTS