MySQL 8.0 Release Note

8.0.18 변경 사항 (2019-10-14 GA)

Estimated reading: 7 minutes 79 views

공식 문서: Changes in MySQL 8.0.18 (2019-10-14, General Availability)

계정 관리 관련 사항

CREATE USER, ALTER USER, SET PASSWORD 구문에서 이제 관리자가 명시한 암호 대신, 사용자 계정을 위한 임의의 암호를 생성할 수 있는 기능이 추가되었습니다. 자세한 내용은 암호 관리를 참조하십시오. (WL #11772)

컴파일 관련 사항

비호환 변경: MySQL 소스 코드에서 my_ulonglong 타입이 더 이상 사용되지 않습니다. 이 타입을 사용하던 타사 코드는 uint64_t C 타입을 사용해야 합니다. 또한, my_ulonglong 변수를 출력하는 printf() 포맷 문자열을 조정해야 할 수 있습니다. (버그 #29453827)

MySQL 8.0을 빌드하기 위한 Protobuf의 최소 요구 버전이 2.5에서 3.0으로 변경되었습니다. (버그 #30141272)

서버 빌드를 위한 Boost 라이브러리의 최소 버전이 이제 1.70.0입니다. (버그 #29639344)

디버그 코드를 작성하는 데 도움이 되는 DBUG_TRACE 매크로가 추가되었습니다. 이는 진입/종료 매크로 쌍을 대체하는 편의 매크로입니다. 예를 들어, 아래 코드를 대신하여:

void foo() {
  DBUG_ENTER("foo");
  bar();
  DBUG_VOID_RETURN;
}

다음과 같이 작성할 수 있습니다:

void foo() {
  DBUG_TRACE;
  bar();
}

(버그 #29589102)

구성 관련 사항

CMake는 이제 fastcov가 사용 가능한 경우 이를 활성화할 수 있습니다. fastcovlcov 또는 gcov보다 빠릅니다. 이를 위해 GCC와 gcov 버전 9 이상이 필요합니다. (버그 #30011512)

DISABLE_SHARED CMake 옵션은 사용되지 않아 제거되었습니다. (버그 #29971049, 버그 #96027)

Protobuf 실행 파일을 찾는 CMake 코드가 이제 여러 패키지로 분할된 플랫폼에서도 작동합니다. (버그 #29953773)

ADD_GDB_INDEX CMake 옵션은 바이너리에서 .gdb_index 섹션 생성 여부를 결정합니다. 이 섹션은 디버거에서 바이너리를 더 빠르게 로드할 수 있게 합니다. 기본적으로 이 옵션은 비활성화되어 있으며, lld 또는 GNU gold 외의 링커를 사용하는 경우에는 아무런 영향을 미치지 않습니다. (버그 #29925009, 버그 #95857)

INSTALL_LAYOUT CMake 옵션에서 SLESWIN 옵션 값은 사용되지 않아 제거되었습니다. (버그 #29871520, 버그 #95654)

max_prepared_stmt_count 시스템 변수의 최대 값이 1백만(1,048,576)에서 4백만(4,194,304)으로 증가했습니다. 기본값은 16,382로 변경되지 않았습니다. (WL #13342)

MySQL 8.0에서는 더 이상 wolfSSL을 사용한 빌드를 지원하지 않습니다. 모든 MySQL 빌드는 이제 OpenSSL을 사용합니다. (WL #13290)

MySQL에서는 더 이상 RE2 라이브러리를 사용하지 않습니다. 이 라이브러리는 소스 배포본에 번들로 포함되지 않으며, WITH_RE2 CMake 옵션은 더 이상 유효하지 않습니다.

연결 관리 관련 사항

MySQL은 이제 서버로의 연결에서 전송되는 바이트 수를 최소화하기 위해 압축 사용에 대한 더 많은 제어 기능을 제공합니다. 이전에는 주어진 연결이 압축되지 않았거나 zlib 압축 알고리즘을 사용했습니다. 이제 zstd 알고리즘(zstd 1.3)을 사용할 수 있으며, zstd 연결에 대해 압축 수준을 선택할 수 있습니다. 허용되는 압축 알고리즘은 서버 측에서 구성할 수 있으며, 클라이언트 프로그램의 연결 또는 마스터/슬레이브 복제 또는 그룹 복제에 참여하는 서버 간의 연결에서도 구성할 수 있습니다. 자세한 내용은 연결 압축 제어를 참조하십시오.
zstd 알고리즘을 사용하는 연결 압축은 서버가 zstd 라이브러리 지원으로 빌드된 경우에만 가능합니다. 새 WITH_ZSTD CMake 옵션은 번들 또는 시스템 zstd 라이브러리를 사용할지 여부를 나타냅니다.
--compress 클라이언트 옵션과 같은 기존 압축 제어 매개변수는 더 이상 사용되지 않으며, 향후 MySQL 버전에서 제거될 예정입니다.
이 작업의 일부는 Facebook의 기여를 기반으로 했습니다. (WL #12039, WL #12475)

사용 중단 및 제거 관련 사항

MySQL 암호를 지정하기 위해 MYSQL_PWD 환경 변수를 사용하는 것은 다른 시스템 사용자가 그 값을 볼 수 있어 안전하지 않다고 간주됩니다. 이제 MYSQL_PWD는 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. (WL #13449)

relay_log_info_file 시스템 변수와 --master-info-file 옵션은 이제 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 이 옵션들은 relay_log_info_repository=FILEmaster_info_repository=FILE이 설정되었을 때 릴레이 로그 정보 로그와 마스터 정보 로그의 이름을 지정하는 데 사용되었으나, 이러한 설정은 사용 중단되었습니다. 릴레이 로그 정보 로그와 마스터 정보 로그에 파일을 사용하는 대신, MySQL 8.0에서는 기본적으로 충돌 안전 슬레이브 테이블을 사용합니다. (WL #11031)

slave_rows_search_algorithms 시스템 변수는 이제 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 이 변수는 행 기반 로깅 및 복제를 위한 행 배치를 준비할 때 일치하는 행을 검색하는 방법을 제어하는 데 사용되었습니다. 기본 설정인 INDEX_SCAN,HASH_SCAN은 성능에 최적화되어 있으며, 모든 시나리오에서 올바르게 작동합니다. (WL #12892)

log_bin_use_v1_row_events 시스템 변수는 이제 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 이 변수를 ON으로 설정하면, mysqld가 기본값인 버전 2 바이너리 로그 행 이벤트 대신 버전 1 바이너리 로그 행 이벤트를 사용하여 바이너리 로그를 기록하게 됩니다. (기본값은 OFF입니다.) 버전 1 바이너리 로그 행 이벤트의 사용은 버전 2 바이너리 로그 행 이벤트를 사용할 수 없었던 MySQL 서버 5.5 이하 버전에서의 행 기반 복제를 가능하게 했습니다. (WL #12926)

WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() 함수는 이제 사용 중단되었으며, 대신 WAIT_FOR_EXECUTED_GTID_SET() 함수를 사용해야 합니다. 두 함수 모두 지정된 트랜잭션이 적용될 때까지 또는 선택적 타임아웃이 경과할 때까지 대기합니다. 그러나 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()는 특정 복제 채널에 적용되며, 해당 채널에서 트랜잭션이 적용된 후에만 중지되었습니다. 반면 WAIT_FOR_EXECUTED_GTID_SET()는 지정된 트랜잭션이 서버에 적용된 후에 중지되며, 복제 채널이 실행 중인지 여부와 관계없이 작동합니다. WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()는 예상 트랜잭션이 다른 복제 채널에서 도착하거나 사용자 클라이언트에서 도착하는 경우, 타임아웃이 설정되지 않았다면 무기한 대기할 수 있습니다. (WL #13178)

키링 관련 사항

이제 MySQL Enterprise Edition에는 키링 저장소의 백엔드로 HashiCorp Vault를 사용하는 keyring_hashicorp 플러그인이 포함되었습니다. 자세한 내용은 MySQL 키링을 참조하십시오. (WL #12522)

로깅 관련 사항

서버 시작 시 출력이 오류 로그에 나타나는 지연을 줄이기 위해 로그 버퍼링이 조정되었습니다. (버그 #30019632)

옵티마이저 관련 사항

첫 번째 매치 스플릿 점프 작업을 포함하는 쿼리가 반복자 실행기에서 잘못 처리되었습니다. 이제 해당 쿼리는 위드아웃(weedout)으로 다시 작성됩니다. (버그 #30220791)

해시 조인은 MySQL에서 내부 동등 조인을 실행하는 새로운 방법으로 구현되었습니다. 예를 들어, 다음과 같은 쿼리는 이번 릴리스부터 해시 조인으로 실행될 수 있습니다:

SELECT *
    FROM t1
    JOIN t2
        ON t1.c1 = t2.c1;

동등 조인을 사용하는 다중 테이블 조인도 이 최적화를 활용할 수 있습니다.
해시 조인은 실행을 위해 인덱스가 필요하지 않습니다. 대부분의 경우, 해시 조인은 인덱스 없이 동등 조인을 수행하는 데 사용되었던 블록 중첩 루프 알고리즘보다 더 효율적입니다.
이번 릴리스부터 기본적으로, 조인이 적어도 하나의 동등 조인 조건을 포함하고, 해당 조건에 적용할 인덱스가 없는 경우 해시 조인이 사용됩니다. (해시 조인은 단일 테이블 조건에만 인덱스가 적용되는 경우에도 사용할 수 있습니다.) 이 기본 설정은 hash_join 옵티마이저 스위치를 off로 설정하거나 NO_HASH_JOIN 옵티마이저 힌트를 사용하여 무시할 수 있습니다. 또한, join_buffer_size를 설정하여 해시 조인에 사용되는 메모리 양을 제어할 수 있습니다. 메모리 요구량이 이 값을 초과하는 조인은 디스크에서 실행되며, 디스크 기반 해시 조인은 디스크 파일을 여러 개 사용하고, 그 수가 open_files_limit을 초과할 경우 실행되지 않을 수 있습니다.
조인된 테이블 쌍에 대한 모든 조인 조건 중 하나 이상의 동등 조인 조건이 포함되지 않으면 해시 조인을 사용할 수 없습니다. 해시 조인은 조인 조건을 전혀 지정하지 않는 카테시안 곱(Cartesian product)에 대해서도 사용됩니다.
해시 조인이 쿼리 최적화에 사용되었는지는 EXPLAIN FORMAT=TREE 또는 EXPLAIN ANALYZE 출력에서 확인할 수 있습니다.
또한, 해시 조인을 사용하는 내부 조인은 이제 배치 키 접근(BKA)을 활용할 수 있습니다. 외부 조인은 여전히 전체 조인 버퍼를 할당합니다.
자세한 내용은 해시 조인 최적화를 참조하십시오. (WL #2241, WL #13002)

EXPLAIN ANALYZE가 추가되었으며, 이 명령은 TREE 형식으로 쿼리에 대한 반복자 기반 타이밍, 비용 및 기타 정보를 제공합니다. 이 명령은 EXPLAIN과 유사한 출력을 생성하지만, 옵티마이저의 예상이 실제 실행과 얼마나 일치하는지에 대한 추가 정보를 포함합니다. (WL #4168)

MySQL은 이제 특정 데이터 유형 불일치를 방지하기 위해 쿼리에 캐스팅을 삽입합니다. 즉, 옵티마이저는 인수의 데이터 유형과 기대되는 데이터 유형이 일치하지 않는 표현식 및 조건 내 항목 트리에 캐스팅 작업을 추가합니다. 이를 통해 쿼리는 이전 버전의 MySQL과의 하위 호환성을 유지하면서 SQL 표준을 준수하는 쿼리와 동일하게 실행됩니다.
이러한 암시적 캐스팅은 표준 숫자 비교 연산자를 사용하여 비교할 때 시간 유형과 숫자 유형 간에 이제 두 인수를 DOUBLE로 캐스팅하는 방식으로 수행됩니다. 또한, 이러한 비교는 DATE 또는 TIME 값과 DATETIME 값 간에도 수행되며, 이 경우 인수는 DATETIME으로 캐스팅됩니다.
예를 들어, SELECT * FROM t1 JOIN t2 ON t1.int_col = t2.date_col과 같은 쿼리는 SELECT * FROM t1 JOIN t2 ON CAST(t1.int_col AS DOUBLE) = CAST(t2.date_col AS DOUBLE)로 다시 작성되어 실행되며, SELECT * FROM t1 JOIN t2 ON t1.time_col = t2.date_col은 실행 전에 SELECT * FROM t1 JOIN t2 ON CAST(t1.time_col AS DATETIME) = CAST(t2.date_col AS DATETIME)으로 변환됩니다.
특정 쿼리에 캐스팅이 삽입되었는지는 EXPLAIN ANALYZE, EXPLAIN FORMAT=JSON, 또는 EXPLAIN FORMAT=TREE 출력에서 확인할 수 있습니다. EXPLAIN도 사용할 수 있지만, 이 경우에는 추가로 SHOW WARNINGS 명령을 실행해야 합니다.
이 변경으로 인해 쿼리 결과나 성능에 차이가 발생할 것으로 예상되지 않습니다. (WL #12108)

패키징 관련 사항

component_test_page_track_component.so 테스트 플러그인이 이제 -test 패키지로 이동되었습니다. (버그 #30199634)

시스템 curl 라이브러리가 아닌 curl을 포함하는 바이너리 패키지가 curl 7.65.3으로 업그레이드되었습니다. (버그 #30015512)

플러거블 인증

LDAP 인증 플러그인을 사용하는 계정에 대한 연결 실패 디버깅을 돕기 위해, authentication_ldap_simple_log_statusauthentication_ldap_sasl_log_status 시스템 변수의 최대 값이 기존 5에서 6으로 증가했습니다. 이 변수를 6으로 설정하면 해당 플러그인에 대해 LDAP 라이브러리의 디버깅 메시지가 오류 로그에 기록됩니다. (버그 #29771393)

보안 관련 사항

OpenSSL 라이브러리가 번들로 포함된 플랫폼의 경우, MySQL 서버에 연결된 OpenSSL 라이브러리가 1.1.1c 버전으로 업데이트되었습니다. 새로운 OpenSSL 버전에서 수정된 문제는 https://www.openssl.org/news/cl111.txthttps://www.openssl.org/news/vulnerabilities.html에서 확인할 수 있습니다. (버그 #29868818)

공간 데이터 지원

이전에는 지리적 SRS의 기하 도형 인수에 대해 ST_Distance()PointPoint, 또는 PointMultiPoint 인수 유형만 지원했습니다. 이제 ST_Distance()는 모든 기하 도형 유형의 지리적 SRS 인수에 대한 거리 계산을 지원합니다. 자세한 내용은 객체 도형을 사용하는 공간 관계 함수를 참조하십시오. (WL #12216)

sys 스키마 관련 사항

sys.schema_unused_indexes 뷰는 이제 고유 인덱스를 필터링합니다. Gillian Gunson에게 감사드립니다. (버그 #24798995, 버그 #83257)

sys.ps_is_consumer_enabled() 함수는 이제 인수가 알려지지 않은 NULL이 아닌 소비자 이름일 경우 NULL을 반환하는 대신 오류를 발생시킵니다. (버그 #24760317)

이전에는 sys 스키마 소스가 별도의 Git 저장소에서 유지 관리되었습니다. 이제 sys 스키마 소스는 MySQL 소스 배포본에 포함되어 scripts/sys_schema 하에 유지 관리됩니다. 이 변경의 결과로, sys 스키마 스크립트의 유지 관리를 단순화하기 위해, init_file 시스템 변수로 지정된 파일의 허용되는 명령문 형식이 확장되었습니다. 자세한 내용은 서버 시스템 변수에서 해당 변수를 참조하십시오.
sys.version 뷰는 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 영향을 받는 애플리케이션은 대안을 사용하도록 조정해야 합니다. 예를 들어, MySQL 서버 버전을 검색하려면 VERSION() 함수를 사용할 수 있습니다. (WL #12673)

테스트 스위트 관련 사항

MySQL 테스트는 최신 버전의 googletest를 사용하도록 업데이트되었습니다. (버그 #30079649)

X Plugin 관련 사항

X 프로토콜은 동일한 쿼리에서 발생한 대량의 경고 메시지를 제대로 표시하지 못했습니다. (버그 #30055869)

NO_BACKSLASH_ESCAPES SQL 모드가 활성화된 경우, X 플러그인은 컬렉션을 테이블로 잘못 보고했습니다. (버그 #28208285)

기능 추가 및 변경 사항

복제; 그룹 복제: 기본적으로, MySQL 복제(그룹 복제를 포함하여)는 다른 서버에서 이미 승인된 트랜잭션이 복제 슬레이브 또는 그룹 멤버에서 적용될 때 권한 검사를 수행하지 않습니다. MySQL 8.0.18부터는 적절한 권한을 가진 사용자 계정을 생성하여 해당 채널에서 복제되는 트랜잭션을 적용할 수 있으며, 이를 복제 적용기의 PRIVILEGE_CHECKS_USER 계정으로 지정할 수 있습니다. MySQL은 각 트랜잭션을 사용자 계정의 권한과 대조하여 해당 채널에서 해당 작업이 승인되었는지 확인합니다. 이 계정은 또한 관리자가 mysqlbinlog 출력에서 트랜잭션을 적용하거나 다시 적용하는 데 사용할 수 있으며, 예를 들어 복제 오류가 발생한 경우 복구 목적으로 안전하게 사용할 수 있습니다. PRIVILEGE_CHECKS_USER 계정의 사용은 권한이 없는 작업이나 원치 않는 작업이 복제 채널에서 실행되지 않도록 보안 강화에 기여합니다.
복제 적용기 스레드에서 PRIVILEGE_CHECKS_USER로 지정하려면 REPLICATION_APPLIER 권한을 부여하여 이 계정이 내부적으로 사용되는 BINLOG 명령문을 실행할 수 있게 해야 합니다. 계정을 설정한 후 GRANT 명령을 사용하여 데이터베이스에서 복제 적용기 스레드가 수행할 것으로 예상되는 변경 작업을 허용하는 추가 권한을 부여할 수 있습니다. 만약 예상치 못한 작업이 시도되고 해당 작업에 적절한 권한이 부여되지 않은 경우, 해당 작업은 허용되지 않으며 복제 적용기 스레드는 오류와 함께 중지됩니다. (WL #12966)

그룹 복제: 그룹 통신 연결에 대해 그룹 복제는 이제 MySQL 서버 8.0.16부터 지원된 TLSv1.3 프로토콜을 지원합니다. TLSv1.3 프로토콜을 사용하려면 MySQL 서버가 OpenSSL 1.1.1 또는 그 이상의 버전으로 컴파일되어야 합니다. 그룹 복제에 대한 암호화된 연결 설정에 대한 자세한 내용은 SSL을 사용하여 그룹 통신 연결 보안을 참조하십시오. (WL #12990)

그룹 복제: 새 옵션 OFFLINE_MODEgroup_replication_exit_state_action 시스템 변수에 추가되었습니다. 이 변수는 예기치 않게 서버 인스턴스가 그룹을 떠날 때, 예를 들어 적용기 오류가 발생했거나 과반수 손실이 발생했을 때, 또는 다른 그룹 멤버가 시간 초과로 인해 해당 서버를 추방할 때 그룹 복제가 어떻게 동작할지를 지정합니다.
OFFLINE_MODE가 종료 동작으로 지정되면, 그룹 복제는 MySQL을 오프라인 모드로 전환하여 offline_modeON으로 설정합니다. 멤버가 오프라인 모드에 있을 때, 연결된 클라이언트 사용자는 다음 요청 시 연결이 끊어지며, CONNECTION_ADMIN 또는 SUPER 권한이 있는 클라이언트 사용자만이 연결을 허용받습니다. 그룹 복제는 또한 시스템 변수 super_read_onlyON으로 설정하여, 클라이언트가 업데이트를 수행하지 못하게 합니다. 이때 SUPER 권한을 가진 사용자도 예외는 아닙니다.
OFFLINE_MODE 종료 동작은 기본 READ_ONLY 종료 동작과 마찬가지로 업데이트를 방지하지만, 예외 권한을 가진 사용자 이외에는 오래된 데이터를 읽는 것도 방지하며, MySQL 라우터와 같은 프록시 도구가 서버가 사용할 수 없음을 인식하고 클라이언트 연결을 재지정할 수 있도록 합니다. 또한, 기존의 ABORT_SERVER 종료 동작과 달리 인스턴스를 종료하지 않고도 관리자가 문제를 해결할 수 있도록 서버 인스턴스를 계속 실행 상태로 둡니다. (WL #12895)

그룹 복제: 그룹 복제에 내부 메시지 서비스가 추가되었습니다. MySQL 모듈은 그룹 복제의 기존 그룹 통신 연결을 사용하여 식별 태그가 있는 일반 메시지를 모든 그룹 멤버에게 전송할 수 있습니다. (WL #12896)

서버가 --initialize 옵션으로 실행되는 경우, 초기 플러그인 외의 플러그인을 로드할 이유가 없습니다. 이제 서버는 경고를 기록하고 --plugin-load 또는 --plugin-load-add 옵션을 무시합니다. (버그 #29622406)

서버 시작 시 INFORMATION_SCHEMA 업그레이드와 관련된 진단 메시지의 수가 줄어들었습니다. (버그 #29440725, 버그 #94559)

MySQL 8.0 이전 버전에서는, REVOKE 명령으로 알려지지 않은 권한을 취소하려고 할 경우 오류가 발생했습니다. MySQL 8.0에서는 컴포넌트나 플러그인이 설치된 동안 부여된 동적 계정이 서버에 현재 알려지지 않은 권한을 가질 수 있습니다. 이러한 컴포넌트나 플러그인이 나중에 제거되면 권한은 등록 해제되지만, 해당 권한을 가진 계정은 여전히 그 권한을 보유하게 됩니다. 이와 같이 등록 해제된 권한을 취소하는 것은 실제로 무효한 권한을 취소하는 것과 구분할 수 없기 때문에, 이제 REVOKE는 알려지지 않은 권한을 취소하려고 할 때 오류를 발생시키지 않습니다. 대신, 해당 권한이 현재 알려지지 않았음을 나타내기 위해 경고를 발생시킵니다. (버그 #29395197)

새로운 innodb_idle_flush_pct 변수를 통해 유휴 기간 동안 페이지 플러시를 제한할 수 있게 되었습니다. 이로 인해 SSD와 같은 솔리드 스테이트 저장 장치의 수명을 연장하는 데 도움이 될 수 있습니다. 자세한 내용은 유휴 기간 동안의 버퍼 플러시 제한을 참조하십시오.
기여해주신 Facebook에 감사드립니다. (버그 #27147088, 버그 #88566, WL #13115)

mysqld--help 옵션으로 실행될 때, secure_file_priv 인수가 없으면 더 이상 중단되지 않습니다. (버그 #26336130)

이제 Protobuf 라이브러리가 동적으로 연결됩니다. 기본 위치는 RPM의 경우 /usr/lib64/mysql/private/, DEB의 경우 /usr/lib/mysql/private/, TAR 빌드의 경우 /lib/private/입니다. 새 INSTALL_PRIV_LIBDIR CMake 변수를 통해 이 위치를 제어할 수 있습니다. (WL #13126)

버그 수정

NDB Cluster: 푸시된 조건을 처리한 쿼리가 ORDER BY 절을 포함할 때 잘못된 결과를 생성했습니다. (버그 #29595346)
참고: 이 문제는 버그 #28672214의 회귀 문제입니다.

NDB Cluster: NDB 전송 레이어는 메시지 크기를 32,768바이트로 제한하며, 전송 버퍼는 메시지 크기에 추가적인 (더 엄격한) 제한을 둡니다. 메시지가 전송 버퍼에 추가될 때, 메시지가 사용 가능한 공간에 맞는지 확인하기 위한 페이지 검사가 수행됩니다. 맞지 않을 경우 새 페이지가 사용됩니다. 이번 문제는 빈 페이지에 메시지가 맞는지 확인하지 않았기 때문에 발생했습니다. 메시지 크기가 빈 페이지를 초과하면 버퍼 오버라이트와 메모리의 다음 페이지가 덮어써지는 문제가 발생했습니다. 데이터 노드의 경우 전송 버퍼(thr_send_page)가 지원하는 최대 메시지 크기는 32,756바이트입니다. API 및 관리 노드의 최대 메시지 크기는 32,752바이트입니다. 이제 새 페이지가 사용될 때, 메시지 크기가 새 페이지에 맞는지 확인합니다.
위 문제를 해결하는 과정에서, 관련 테스트 및 디버깅을 돕기 위해 세 가지 새로운 DUMP 명령이 추가되었습니다: DUMP 103003 (CmvmiRelayDumpStateOrd)는 다른 노드를 사용하여 DUMP 명령을 보냅니다. DUMP 103004 (CmvmiDummySignal) 및 DUMP 103005 (CmvmiSendDummySignal)은 긴 메시지를 보내는 데 사용됩니다. (버그 #29024275)

NDB Cluster:EXPLAIN FORMAT=TREENDBCLUSTER 스토리지 엔진으로 푸시된 조건과 조인에 대한 적절한 설명을 제공하지 않았습니다. 문제는 다음을 포함했습니다:

  • 푸시된 조건이 표시되지 않았습니다.
  • 푸시된 조인의 루트가 표시되지 않았습니다.
  • 푸시된 조인의 자식이 부모 작업에 대한 참조를 포함하지 않았습니다.

InnoDB: 내부 함수(btr_push_update_extern_fields())는 비관적 업데이트 중 또는 레코드의 이전 버전으로 돌아갈 때 새로 추가된 외부 저장 필드를 가져와 업데이트하는 데 사용되었으나 더 이상 필요하지 않았습니다. 새로 추가된 외부 저장 필드는 다른 함수에 의해 업데이트됩니다. 또한 외부 저장 필드의 수를 결정하는 방법이 수정되었습니다. (버그 #30342846)

InnoDB: 데이터 파일이 누락된 undo 테이블스페이스에서 DROP UNDO TABLESPACE 작업이 세그멘테이션 오류를 유발했습니다. (버그 #30155290)

InnoDB: 내부 trx_rseg_add_rollback_segments 함수에서 발생한 오류가 수정되었습니다. (버그 #30114226, 버그 #96372)

InnoDB: Contention-Aware Transaction Scheduling (CATS) 코드에서 발생한 문제성 어설션 코드가 수정되었습니다. (버그 #30086559)

InnoDB: ib::fatalib::fatal_or_error 생성자에서 파생 클래스에 전달된 인수가 무시되어 잘못된 오류 메시지가 발생할 수 있었습니다. 또한, 치명적인 오류가 발생할 경우, ib::fatal_or_error 소멸자는 메시지를 출력하기 전에 서버를 종료할 수 있었습니다. (버그 #30071930)

InnoDB: 손상된 테이블이 테이블 캐시에서 참조 횟수가 0이 되기 전에 제거될 수 있었습니다. (버그 #30065947, 버그 #96224)

InnoDB: 내부 row_update_inplace_for_intrinsic() 함수의 코드 경로에 필요한 mini-transaction (mtr) 커밋이 포함되지 않아 디버그 어설션 오류가 발생했습니다. (버그 #30065518)

InnoDB: 시작 중에 호출된 내부 fsp_srv_undo_tablespace_fixup() 함수가 undo::ddl_mutex 잠금을 취하지 않아 특정 상황에서 어설션 실패를 일으킬 수 있었습니다. (버그 #30029433, 버그 #30461911, 버그 #97356)

InnoDB: rename_tablespace_name() 함수 검토 결과, old_shard->get_space_by_id(space_id)에서 테이블스페이스 ID를 찾지 못할 경우 old_shard->mutex_release()를 호출하지 않고 반환하는 문제가 있었습니다. (버그 #30027771)

InnoDB: 이름에 “FTS”가 포함된 테이블스페이스가 전체 텍스트 인덱스 테이블의 테이블스페이스로 잘못 인식되어 데이터 사전에서 등록되지 않아 업그레이드 작업이 실패했습니다. (버그 #29992589)

InnoDB: 변경 버퍼의 페이지 병합 및 삭제를 담당하는 ibuf_merge_or_delete_for_page() 함수가 undo 테이블스페이스 및 임시 테이블스페이스에 대해 더 이상 호출되지 않습니다. 변경 버퍼는 이러한 테이블스페이스 유형에 대한 항목을 포함하지 않습니다. (버그 #29960394, 버그 #95989)

InnoDB: 버퍼 풀 크기 변수(--innodb-buffer-pool-instances, --innodb-buffer-pool-size, 및 --innodb-buffer-pool-chunk-size)의 일부 조합이 청크 크기를 0, 1 또는 페이지 크기의 배수가 아닌 값으로 설정하여 버퍼 풀 생성 및 크기 조정 중에 오류가 발생할 수 있었습니다. (버그 #29951982)

InnoDB: undo 테이블스페이스가 잘리는 동안 서버가 종료되면 서버 재시작 후 클론 작업이 롤포워드될 때 다음 오류가 발생했습니다: [ERROR] [MY-011825] [InnoDB] [FATAL] Clone File Roll Forward: Invalid File State: 0. (버그 #29949917)

InnoDB: ALTER TABLE ... DISCARD TABLESPACE 작업이 일시정지 상태를 유발했습니다. (버그 #29942556, 버그 #30324703)

InnoDB: 아카이브 스레드 실패 후 클론 작업이 다음 오류와 함께 실패했습니다: ERROR 3862 (HY000): Clone Donor Error: 1317 : Query execution was interrupted. (버그 #29930839)

InnoDB: 클론 관련 회귀로 인해 인덱스 및 비인덱스 업데이트 작업의 성능이 약간 저하되었습니다. (버그 #29925409)

InnoDB: InnoDB는 이제 시작 시 테이블스페이스 검색 동안 숨겨진 디렉터리 및 파일을 무시합니다. 숨겨진 디렉터리 및 파일은 “.”으로 시작하는 항목과 Windows에서 속성으로 숨겨진 디렉터리 및 파일을 포함합니다. (버그 #29900671, 버그 #95071, 버그 #30068072)

InnoDB: 교착 상태 감지를 개선하기 위해 데이터 잠금 간의 교착 상태 사이클을 감지하는 작업이 트랜잭션 스레드에서 전용 백그라운드 스레드로 이동되었습니다. (버그 #29882690)

InnoDB: mysqld 초기화 중에 mysql.gtid_executed 테이블을 업데이트하면 다음 경고가 오류 로그에 출력되었습니다: [Warning] [MY-010015] [Repl] Gtid table is not ready to be used. Table ‘mysql.gtid_executed’ cannot be opened. 이제 이 업데이트와 관련된 경고는 더 이상 발생하지 않습니다. (버그 #29871809)

InnoDB: InnoDB 표준 모니터 출력(SHOW ENGINE INNODB STATUS로도 인쇄됨)의 LATEST DETECTED DEADLOCK 섹션에 교착 상태 사이클에 참여하는 트랜잭션에 대한 추가 정보가 포함되었습니다. (버그 #29871641)

InnoDB: 버퍼에 저장된 직렬화된 사전 정보(SDI) 입력 및 출력 값을 비교할 때 잘못된 인수가 사용되었습니다. (버그 #29871525, 버그 #95606)

InnoDB: 클론 작업 중 이름이 동일한 undo 테이블스페이스 파일이 서로 다른 디렉터리에서 제공자로부터 동일한 디렉터리로 복사될 때 undo 테이블스페이스 파일이 덮어씌워졌습니다. 클론 작업은 이제 중복된 undo 테이블스페이스 이름이 발견되면 오류를 보고합니다. 데이터가 수신자로 클론될 때 undo 테이블스페이스 파일은 innodb_undo_directory 변수로 정의된 디렉터리로 클론됩니다. 파일이 동일한 디렉터리로 클론되기 때문에 중복된 undo 테이블스페이스 파일 이름은 허용되지 않습니다. (버그 #29837617)

InnoDB: 클론 작업이 작은 리두 로그 파일 크기와 다수의 트랜잭션이 있는 MySQL 서버 인스턴스에서 클론할 때 다수의 리두 로그 파일을 생성했습니다. 리두 로그 파일 수가 많아지면 서버 시작이 일시 중지되거나 어설트가 발생할 수 있었습니다. 그렇지 않으면 시작이 허용되었으나 리두 로그 파일이 과도하게 많은 상태에서 진행되었습니다. (버그 #29837490)

InnoDB: 복구 중 암호화된 테이블에 리두 로그를 적용할 때 발생하는 누락된 테이블 오류가 무시될 수 있었으며, 이는 서버 시작을 허용했습니다. 이 경우 서버 시작이 중지되어야 했습니다. (버그 #29820184, 버그 #95183)

InnoDB: 잘못된 리두 로그 파일 크기가 서버 오류 로그에 출력되었습니다. (버그 #29818711)

InnoDB: 잠금 큐에서 레코드 잠금 요청이 있을 때 잠금 객체(lock_t 구조체)의 재사용을 방지하는 제한이 제거되었습니다. (버그 #29814308)

InnoDB: 긴 파티션 테이블 이름을 파일 이름으로 변환할 때 파일 이름을 보유하는 버퍼에 공간이 부족하여 어설션 실패가 발생했습니다. (버그 #29813582)

InnoDB: 일부 트랜잭션 잠금 구조 필드(trx->lock)가 적절하게 뮤텍스로 보호되지 않았습니다. (버그 #29809137)

InnoDB: 복구 중 빈 undo 세그먼트 업데이트가 어설션을 발생시켰습니다. (버그 #29802703)

InnoDB: 수신자 데이터에 전체 텍스트 인덱스가 포함된 테이블이 있을 경우 클론 작업이 실패했습니다. (버그 #29796507)

InnoDB: 파일별 테이블 테이블스페이스가 삭제된 후, 기존 테이블을 이름 변경하고 동일한 이름의 새 테이블을 생성하려고 할 때 오류가 발생했습니다. 이 오류는 오래된 파일 경로 정보로 인해 발생했습니다. (버그 #29793800)

InnoDB: 서버가 디스크가 가득 찬 상태에서 파일을 읽기 전용 모드로 열려고 시도하는 테스트 케이스가 디버그 어설션 실패를 일으켰습니다. 어설션이 제거되어 서버가 파일을 열려고 다시 시도하고 여러 번 시도한 후 실패하면 오류를 보고할 수 있도록 했습니다. (버그 #29692250, 버그 #95128)

InnoDB: RENAME TABLE 작업 중 생성된 외래 키 관련 테이블에 오래된 테이블 이름이 포함되었습니다. (버그 #29686796)

InnoDB: 서버는 데이터 길이가 0이 아닌 열에 대해 NULL 값을 전달했습니다. (버그 #29654465)

InnoDB: 파티션 테이블을 MySQL 8.0.13 (또는 그 이전 버전) 인스턴스에서 MySQL 8.0.14, 8.0.15 또는 8.0.16 인스턴스로 가져오면 소스 및 대상 인스턴스가 lower_case_table_names=1으로 정의된 경우 “테이블스페이스가 누락되었습니다” 오류가 발생했습니다. 파일 이름 대소문자 불일치로 인해 가져오기 작업에 사용된 테이블스페이스 파일과 메타데이터 파일을 찾을 수 없었습니다. (버그 #29627690, 버그 #94850)
참고: 이 문제는 버그 #26925260의 회귀 문제입니다.

InnoDB: QUICK_SKIP_SCAN_SELECT::get_next() 메서드 호출에서 핸들러 메서드 호출을 위한 TABLE::read_set이 제대로 설정되지 않아 어설션 실패가 발생했습니다. (버그 #29602393)

InnoDB: 마스터 키 회전 중 테이블스페이스 잘라내기 작업을 차단하기 위해 이제 배타적인 백업 잠금이 사용됩니다. 이전에는 undo 테이블스페이스 이름에 대한 메타데이터 잠금을 사용하여 작업을 동기화했습니다. 이 패치는 또한 마스터 키 회전과 undo 테이블스페이스 삭제 작업 간의 교착 상태가 발생할 수 있는 문제도 해결합니다. (버그 #29549938, 버그 #30461225, 버그 #97352)

InnoDB: WHERE 조건에서 범위를 지정한 SELECT...FOR [SHARE|UPDATE] 쿼리를 수행할 때 불필요한 다음 키 잠금이 발생하여 너무 많은 행이 잠겼습니다. 이제 검색된 범위와 교차하는 행과 간격만 잠기도록 문제를 해결했습니다. (버그 #29508068)

InnoDB: 첫 번째 위치에 가상 열을 추가하고 동시에 일반 열을 추가하면 어설션 실패가 발생했습니다. (버그 #29501324)

InnoDB: 종료 프로세스가 InnoDB 백그라운드 스레드가 종료될 때까지 기다리지 않아 백그라운드 스레드가 MySQL 트랜잭션 목록에서 트랜잭션을 제거하는 동안 종료가 정지될 수 있었습니다. 이제 InnoDB 백그라운드 스레드가 제대로 종료되었는지 확인하는 검사가 추가되었습니다. 또한 InnoDB 마스터 스레드에 대해 종료 타이밍을 개선하기 위해 중간 종료 상태가 추가되었습니다. (버그 #29417503)

InnoDB: TempTable 스토리지 엔진 작업 중 메모리 누수가 발생했습니다. 이는 TempTable이 스레드가 종료될 때까지 스레드 로컬 스토리지에서 마지막으로 할당된 메모리 블록을 해제하지 못한 경우였습니다. (버그 #29300927)

InnoDB: 작은 innodb_io_capacity_max 설정, 단일 페이지 클리너 스레드, 다중 버퍼 풀 인스턴스를 사용하는 상태에서 무거운 작업 부하로 인해 처리량이 정지되었습니다. (버그 #29029294)

InnoDB: 동시 삽입을 사용하는 긴 ALTER TABLE ... ADD INDEX 작업이 세마포어 대기를 유발했습니다. Satya Bodapati에게 패치 기여에 감사드립니다. (버그 #29008298)

InnoDB: MySQL 5.7에서 MySQL 8.0으로 업그레이드한 후 INFORMATION_SCHEMA.INNODB_COLUMNS 테이블에 파티션된 테이블 열이 표시되지 않았습니다. MySQL 8.0 릴리스에서 생성된 파티션된 테이블의 경우 INFORMATION_SCHEMA.INNODB_COLUMNS 테이블은 첫 번째 테이블 파티션에 대한 열만 표시했습니다. (버그 #28869903, 버그 #93033)

InnoDB: 내부 rtr_page_split_and_insert() 함수가 재귀적으로 호출됩니다. 함수의 내부 호출이 외부 호출에서 아직 사용 중인 객체를 해제하여 어설션 실패가 발생했습니다. (버그 #28569379)

InnoDB: 특정 상황에서 innodb_limit_optimistic_insert_debug 변수를 2로 설정하면 오류가 보고되지 않고 디버그 어설션이 발생했습니다. (버그 #28552330, 버그 #92187)

InnoDB: 트랜잭션이 레코드 잠금을 다음 키 잠금으로 업그레이드하려고 시도할 때 교착 상태가 발생할 수 있었습니다. (버그 #23755664, 버그 #82127)

InnoDB: INFORMATION_SCHEMA.INNODB_METRICS lock_deadlocks 카운터가 모든 교착 상태를 카운트하지 않았습니다. Laurynas Biveinis에게 기여에 감사드립니다. (버그 #21278148, 버그 #77399)

InnoDB: 읽기 작업 중 보고된 오류에 파일 이름이 누락되었습니다. (버그 #21120885, 버그 #76020)

복제: group_replication_set_communication_protocol() 함수를 사용하여 일부 그룹 멤버가 지원하지 않는 통신 프로토콜 버전을 설정하면 프로토콜 변경 절차가 올바르게 중단되지 않았습니다. 이제 이 문제가 해결되었습니다. (버그 #30209596)

복제: default_table_encryption 시스템 변수의 세션 값이 복제되어, 복제 슬레이브가 데이터베이스와 테이블스페이스의 올바른 암호화 설정을 유지하게 되었습니다. table_encryption_privilege_check 시스템 변수가 ON으로 설정된 복제 채널에서는 세션 값이 변경되는 이벤트를 적용하려면 TABLE_ENCRYPTION_ADMIN 권한이 필요했습니다. 이 권한이 복제 슬레이브에 부여되지 않은 경우, 해당 이벤트에 필요한 암호화 설정이 슬레이브의 기본 암호화 설정과 동일함에도 불구하고 복제가 일부 상황에서 오류와 함께 중지되었습니다. 또한, 슬레이브의 암호화 설정과 다른 설정이 있는 명령문이 성공하는 경우도 있었습니다. 이제 복제 슬레이브에 TABLE_ENCRYPTION_ADMIN 권한이 없는 경우에도 이벤트가 슬레이브의 기본 암호화 설정과 일치하는 경우에는 이벤트가 성공하도록 수정되었습니다. 또한, 다른 암호화 설정이 필요한 경우에는 적절한 권한 검사가 계속 이루어집니다. (버그 #29818605)

복제: group_replication_unreachable_majority_timeout 시스템 변수에 의해 지정된 초 단위의 타임아웃은 2초마다 한 번만 체크되었습니다. 이제 타임아웃이 1초마다 체크되어 홀수 값도 반영됩니다. (버그 #29762005)

복제: 슬레이브 SQL 스레드를 중지하는 동안 START SLAVE 명령을 실행하고 동시에 슬레이브 상태를 요청하면 세 개의 스레드 간 교착 상태가 발생할 수 있었습니다. 이제 SQL 스레드가 중지되는 동안 잠금을 더 일찍 해제하여 이 문제가 해결되었습니다. (버그 #29697588, 버그 #95115)

복제: WAIT_FOR_EXECUTED_GTID_SET() 함수에서 잠금 문제로 인해 특정 상황에서 서버가 멈출 수 있었습니다. 이제 이 문제가 해결되었습니다. (버그 #29550513)

복제: binlog_encryption 시스템 변수의 값을 변경하는 동안 START SLAVE 명령을 실행하면 교착 상태가 발생할 수 있었습니다. (버그 #29515210)

복제: 복제 슬레이브의 하트비트 간격은 CHANGE MASTER TOMASTER_HEARTBEAT_PERIOD 옵션으로 제어되며, 밀리초 단위로 지정될 수 있습니다. 이전에는 마스터의 바이너리 로그 덤프 스레드가 초 단위의 그라뉴러리티로 하트비트 신호를 계산하여 여러 이벤트가 건너뛰어졌을 때 과도한 하트비트 활동을 초래할 수 있었습니다. 이 문제를 해결하기 위해 마스터와 슬레이브의 모든 하트비트 관련 계산이 이제 나노초 그라뉴러리티로 수행되어 정확도가 향상되었습니다. Facebook에 이 기여에 감사드립니다. (버그 #29363787, 버그 #94356)

복제: 함수형 인덱스를 사용하여 테이블을 생성하면 해당 테이블에 숨겨진 생성 열이 생성되는데, 이 열이 항상 테이블 내에서 동일한 위치에 나타나지 않았습니다. 따라서 테이블에 열을 추가할 때, 단일 CREATE TABLE 문을 사용하여 추가된 열이 있는 테이블과 비교했을 때 숨겨진 열이 다른 위치에 있을 수 있었습니다. 예를 들어, 두 테이블 t1t2에서 이 차이가 발생할 수 있습니다. t1CREATE TABLE t (a INT, INDEX ((a+1)))ALTER TABLE t ADD COLUMN b INT 명령어를 사용하여 생성된 반면, t2CREATE TABLE t2 (a INT, b INT, INDEX ((a+1))) 명령어로 생성되었습니다. 비록 SHOW CREATE TABLE t1SHOW CREATE TABLE t2 명령어가 동일한 결과를 반환하더라도(테이블 이름을 제외하고), 내부적으로는 다른 구조를 가질 수 있습니다.
이 문제는 이진 로그의 Table_map_log_events에 의해 설명된 테이블의 내부 정의가 달라지기 때문에 복제 시 문제가 될 수 있습니다. 즉, 마스터에서 CREATE TABLE로 테이블을 생성한 후 ALTER TABLE을 실행하고, 그런 다음 mysqldump을 사용하여 슬레이브를 배포하면, 슬레이브 쪽에서 단일 CREATE TABLE 문으로 테이블이 생성됩니다. 이후에 복제되는 행 이벤트에서 유형 불일치로 인해 오류가 발생할 수 있었습니다.
이 문제는 모든 숨겨진 생성 열이 항상 열 목록의 끝에 위치하도록 강제함으로써 해결되었습니다. 여러 개의 생성 열이 있는 경우, 열은 열 이름 순으로 정렬됩니다. 테이블에 새로운 함수형 인덱스가 추가되면, 새로운 숨겨진 열은 이 규칙에 따라 삽입됩니다. 또한, 사용자가 생성된 열이 아닌 새로운 열을 만들면 해당 열은 항상 첫 번째 숨겨진 열보다 앞에 추가됩니다.

참고
이 변경 사항의 영향을 받는 테이블 구조는 업그레이드 중에 자동으로 변경되지 않으며, 명시적으로 ALTER TABLE 명령어를 실행하여 변경해야 합니다.

(버그 #29317684)

복제: RESET MASTER 명령 실행 중 중지되면 바이너리 로그가 더 이상 기록되지 않았습니다. (버그 #29125121)

복제: GTID가 사용 중인 다중 스레드 슬레이브에서 MASTER_AUTO_POSITION 옵션이 ON으로 설정된 경우, 예상치 않은 중단 후 슬레이브는 릴레이 로그 복구를 시도했으나 릴레이 로그가 손실되면 복구가 실패하여 복제가 시작되지 않았습니다. 그러나 GTID 자동 포지셔닝이 사용되면 누락된 트랜잭션을 복원할 수 있기 때문에 이 단계는 불필요했습니다. 이제 복구 상황에서는 먼저 MASTER_AUTO_POSITION 옵션이 ON인지 확인하고, ON으로 설정된 경우 릴레이 로그가 필요하지 않도록 계산 단계를 생략하여 복구가 원활하게 진행되도록 수정되었습니다. (버그 #28830834, 버그 #92882)

그룹 복제: 네트워크 오류로 인해 TCP 연결이 시간 초과되면 그룹 통신 엔진(XCom)이 로컬 연결을 다시 설정하지 못하여 그룹 복제를 다시 시작해야 했습니다(버그 #25656508 참조). 이 상황에서 그룹 복제를 중지하려고 하면 XCom이 중단되어 그룹 복제를 다시 시작할 수 없었습니다. 이제 XCom이 올바르게 종료되며 그룹 복제를 다시 시작할 수 있도록 수정되었습니다. (버그 #30132500)
참고: 버그 #22158368 참조.

그룹 복제: ANSI_QUOTES SQL 모드가 활성화된 경우, 그룹 복제가 분산 복구를 위해 원격 복제 작업을 수행할 수 있는 MySQL 서버의 클론 플러그인을 확인하는 동안 오류가 발생했습니다. 이제 이 문제가 해결되었습니다. (버그 #30099796)

그룹 복제: default_table_encryption 변수가 그룹 복제 실행 중에 SET PERSIST로 변경될 수 있었습니다. 그러나 이 변수는 그룹 복제 중에 설정할 수 없어야 합니다. (버그 #30031228, 버그 #96158)

그룹 복제: group_replication_local_address 변수를 변경한 후 멤버가 그룹에 다시 참여하면, 그룹 통신 시스템(GCS)에 의해 이전 로컬 주소의 복사본이 일부 위치에 유지되었습니다. 이제 로컬 주소가 필요할 때마다 캐시에서 가져오지 않고 새로 가져옵니다. (버그 #29910699)

그룹 복제: 원격 복제 작업을 통해 트랜잭션을 새 멤버에게 제공하고 새 멤버가 작업 중에 중지되었을 때, 새 멤버가 제대로 종료되지 않았습니다. (버그 #29902389)

그룹 복제: 이 릴리스에 도입된 입력 채널은 TCP 소켓 대신 그룹 통신 엔진(XCom)과 그룹 통신 시스템(GCS) 간의 통신에 공유 메모리 큐를 사용합니다. 이 입력 채널은 SELinux 설치에서 설정할 수 없었기 때문에, MySQL 8.0.14 이상으로 업그레이드된 멤버가 그룹에 다시 참여할 수 없었습니다. 그룹 복제가 시작되면, XCom 인스턴스는 입력 채널을 설정하기 위해 임시 포트 범위에서 포트를 임시로 열었으나, SELinux에서 mysqld 프로세스는 이 포트에 연결할 권한이 없었습니다. SELinux 정책을 수정하여 MySQL이 모든 포트에 연결할 수 있도록 하면 해결할 수 있었으나, 이는 보안을 저하시켰습니다. 이 문제는 이제 해결되었습니다. XCom과 GCS는 더 이상 입력 채널을 설정하기 위해 임시 포트를 사용하지 않고, 대신 group_replication_local_address로 설정된 그룹 통신 포트를 사용합니다. SELinux는 이 작업을 허용해야 합니다. (버그 #29742219, 버그 #30087757)

그룹 복제: 일반 이름에 와일드카드를 사용한 서버 인증서가 잘못 거부되었습니다. (버그 #29683275, 버그 #95068)

그룹 복제: 그룹 통신 시스템(GCS)이 멤버 상태가 OFFLINE인 상태에서 멤버로부터 메시지를 전달하여 오류가 발생할 수 있었습니다. 이제 GCS는 메시지를 전달하기 전에 멤버가 그룹에 속해 있는지 확인합니다. (버그 #29620900)

그룹 복제: 임시 또는 사소한 작업을 수행하는 일부 스레드(예: 지연된 플러그인 초기화 스레드)가 성능 스키마 threads 테이블에 표시되지 않았습니다. (버그 #28930537, 버그 #93212)

그룹 복제: 그룹에서 오류로 인해 멤버가 떠나는 프로세스의 구현이 컴포넌트 간에 표준화되었습니다. 이제 멤버는 그룹을 떠나는 이유와 상관없이 동일한 작업을 수행하고 동일한 오류 메시지를 일관되게 출력합니다. (버그 #28866495, 버그 #93027)

XA COMMIT 문에 대해, 문 실행에 관여하는 플러그인의 호출 순서가 비결정적이어서 복제 문제가 발생할 수 있었습니다. Dennis Gao에게 수정 기여에 감사드립니다. (버그 #31082237, 버그 #99051)

상용 Docker RPM 패키지에 keyring_aws 플러그인이 포함되지 않았습니다. (버그 #30199423)

SQL 스크립트에서 C 소스를 생성할 때, 일부 UTF-8로 인코딩된 문자가 여러 줄에 걸쳐 분할되었습니다. Przemysław Skibiński에게 패치 기여에 감사드립니다. (버그 #30152555, 버그 #96449)

ARRAY 예약어가 INFORMATION_SCHEMA.KEYWORDS 테이블에서 비예약어로 잘못 나열되었습니다. (버그 #30134275, 버그 #96416)

||를 포함하는 일부 문이 PIPES_AS_CONCAT SQL 모드가 활성화되어 있음에도 구문 오류를 일으켰습니다. (버그 #30131161, 버그 #96405)
참고: 이 문제는 버그 #29305022의 회귀 문제입니다.

SET 절이 포함된 LOAD DATA 문이 NO_AUTO_VALUE_ON_ZERO SQL 모드를 무시했습니다. (버그 #30126375)

thread_pool 플러그인이 활성화된 상태에서 자동 업그레이드가 서버 종료로 인해 실패했습니다. (버그 #30121742)

상위 쿼리 블록의 캐시 불가능성을 사용하는 대신 테이블의 리마테리얼라이즈 플래그가 재계산에 사용되어야 하는데, 이로 인해 비병합 뷰에 대한 쿼리가 불필요한 리마테리얼라이제이션을 수행하여 성능이 저하되었습니다. (버그 #30110851)

IGNORE 절을 사용한 LOAD DATACHECK 제약 조건 위반을 일으킨 행을 건너뛰고 다음 행으로 계속해야 하지만, 오류와 함께 중단되었습니다. (버그 #30084966, 버그 #96296)

sql_require_primary_key 변수가 활성화된 경우, 클론 플러그인 초기화가 성능 스키마 테이블에 기본 키를 지원하지 않아 실패했습니다. 이제 sql_require_primary_key의 효과는 복제에 참여할 수 있는 스토리지 엔진(현재는 성능 스키마를 제외한 모든 스토리지 엔진)에만 제한됩니다. (버그 #30083300, 버그 #96281)

macOS에서 Protobuf 컴파일이 실패했습니다. (버그 #30079536, 버그 #96263)

자동 업그레이드의 경우, audit_log 플러그인이 다시 로드되지 않아 감사가 레거시 모드에서 시작되었습니다. (버그 #30068110)

중복된 행을 제거하기 위해서, weedout 최적화는 각 행에 대한 고유 식별자가 필요합니다. 이 고유 식별자는 스토리지 엔진에서 handler::position()을 호출하여 제공됩니다. 하지만 이 함수는 항상 적절한 시점에 호출되지 않거나 불필요하게 호출되는 문제가 있었습니다. 이러한 호출 시점에 관한 문제가 여러 최적화 버그의 원인이 되었습니다. 이 수정은 handler::position() 호출의 책임을 기본적으로 이 작업을 적절히 처리하는 반복자(iterator)로 이동시킵니다. (버그 #30060691)
참고: 관련된 다른 문제: 버그 #29693294, 버그 #30049217, 버그 #30153695.

서버가 COM_PROCESS_INFO 명령을 잘못 처리하여 종료될 수 있었습니다. (버그 #30032302)

서버 시작 시 영구적으로 설정된 시스템 변수를 처리할 때, 사용 중단된 시스템 변수에 대한 경고가 출력되지 않았습니다. (버그 #30030648)

여러 주소를 포함하는 값으로 bind_address를 설정하고 host_cache_size=0을 설정할 경우, 클라이언트가 연결할 때 서버가 종료되는 문제가 있었습니다. (버그 #30018958)

Windows에서 Ninja 빌드 유형에 대해 Protobuf 컴파일이 실패했습니다. (버그 #30018894)

SHOW PROCESSLIST 출력에 이미 완료되어 더 이상 처리 중이 아닌 명령이 포함될 수 있었습니다. (버그 #29999818)

mysqldump 에러 메시지 버퍼가 너무 작아 메시지가 잘리거나 출력이 중단될 가능성이 있었습니다. (버그 #29999782, 버그 #96074)

MySQL 5.7에서 MySQL 8.0으로 인플레이스 업그레이드를 진행하는 동안 잘못된 AUTO_INCREMENT 값이 캐시되어, 업그레이드 후 테이블 캐시에서 잘못된 AUTO_INCREMENT 값이 테이블에 할당되었습니다. (버그 #29996434)

상수 폴딩을 사용하는 준비된 문(statement)을 실행할 때, MEMROOT에 할당되지 않은 롤백 위치가 등록되어 범위를 벗어난 값이 참조될 수 있었습니다. (버그 #29990693)
참고: 관련된 문제: 버그 #29939331.

CREATE TABLE ... ASCREATE TABLE ... LIKE 문이 ZEROFILL 속성이 암시적으로 추가된 YEAR 열을 생성할 때, ZEROFILL 사용 중단 경고가 발생하여 혼란을 줄 수 있었습니다. 이제 이러한 경고는 발생하지 않습니다. (버그 #29961060)

비트 연산자를 사용하는 쿼리(예: WHERE text_col < (int_col & int_col) AND int_col = -1)에서 예상된 행을 반환하지 못한 문제가 있었습니다. (버그 #29957969)

최적화 힌트에서 잘못된 리소스 그룹 이름이 서버의 예기치 않은 동작을 유발할 수 있었습니다. (버그 #29955732)

EXPLAIN에서 FORMAT=TREE를 사용할 때, FORMAT=JSON과 동일한 비용을 표시하지 않았습니다. 특히, FORMAT=TREE를 사용할 때는 조인에 대해 eval_cost를 계산했으나 기본 테이블에 대해서는 계산하지 않았습니다. (버그 #29953579)

Solaris에서 더 이상 필요하지 않은 memcntl() 함수의 프로토타입이 mysqld.cc에 포함되어 있었습니다. 이 프로토타입이 제거되었습니다. (버그 #29953495, 버그 #95971)

Solaris에서 -DWITH_SSL=system 옵션이 GCC로 컴파일할 때 작동하지 않았습니다. (버그 #29953460, 버그 #95970)

-DWITHOUT_SERVER=1로 구성된 MySQL 빌드가 실패했습니다. (버그 #29948728, 버그 #95740)

내부 메서드 Field_tiny::pack()이 항상 예상대로 범위 확인을 수행하지 않았습니다. (버그 #29948029)
참고: 관련된 문제: 버그 #31591391.

플러그인 언로드 처리 오류가 서버 종료를 유발할 수 있었습니다. (버그 #29941948)

내부 MEM_ROOT 클래스가 모든 메모리 부족 오류를 제대로 처리하지 못했습니다. (버그 #29940846)

JSON_SCHEMA_VALIDATION_REPORT()가 JSON 스키마에 따라 유효하지 않은 JSON 문서와 너무 깊게 중첩된 JSON 문서를 구분하지 못하여 잘못된 동작을 초래했습니다. (버그 #29940833)

<=> 연산자를 사용할 때, 매우 큰 상수를 비교할 경우 잘못된 결과가 발생할 수 있었습니다. (버그 #29939331, 버그 #95908)

keyring_aws 플러그인의 일부 유효한 keyring_aws_region 시스템 변수 값이 거부되었습니다. (버그 #29933758)

디버그 빌드에서 UNION 쿼리 실행 중 GEOMETRY 열과 SELECT * FROM (SELECT NULL)을 결합하는 데이터 타입을 계산할 때 어설션이 발생할 수 있었습니다. (버그 #29916900, 버그 #95827)

binary 캐릭터셋으로 정의된 열에 대해 SHOW CREATE TABLE이 구문 오류를 발생시키는 CREATE TABLE 문을 생성할 수 있었습니다. (버그 #29909573, 버그 #95801)

NDB를 위해 스키마에서 특정 스토리지 엔진을 사용하는 테이블 이름을 가져오기 위한 데이터 사전 API가 추가되었습니다. (버그 #29906844, 버그 #95792)

mysqldump--order-by-primary 옵션을 사용할 때 메모리 누수가 발생했습니다. (버그 #29906736)

함수형 인덱스가 포함된 쿼리에서 EXPLAIN FORMAT=TREE가 숨겨진 열 이름 대신 인덱싱된 표현식을 출력하지 않았습니다. (버그 #29904996)

디버그 빌드에서 CREATE TABLE ... IGNORE SELECT ... 문이 마지막 행을 건너뛰었을 때 테이블 상태를 제대로 정리하지 못해 이후 문에서 어설션이 발생할 수 있었습니다. (버그 #29903865)

재귀적 CTE(공통 테이블 표현식)의 종료 조건에 다른 재귀적 CTE를 사용하는 IN 술어가 있을 경우, 쿼리 실행이 제대로 처리되지 않았습니다. (버그 #29899614)

다른 테이블스페이스 파일에 위치한 파티션을 가진 테이블의 SDI(직렬화된 데이터 사전 정보) 역직렬화가 실패했습니다. (버그 #29898965)

LDAP 인증 플러그인을 사용한 인증에서 사용자 DN 부분이 비어 있고 그룹 매핑이 구성된 경우, 인증이 잘못된 사용자 DN을 할당하고 사용자 검색을 건너뛰었습니다. (버그 #29897624)

이름이 없는 제약 조건이 서버 종료를 유발할 수 있었습니다. (버그 #29892876)

MySQL 5.7에서 MySQL 8.0으로 인플레이스 업그레이드를 시도할 때, 누락된 NDB 테이블스페이스로 인해 실패했습니다. (버그 #29889869, 버그 #30113440)

mysqlpump가 MySQL 5.7 이전 버전의 서버에서 오류를 발생시켰습니다. (버그 #29889253)

Boost가 다운로드될 때, CMake 구성 로직에서 다운로드된 파일의 크기를 결정하는 방식이 잘못되어, 다운로드 작업이 성공적으로 완료된 후에도 해당 파일을 제거할 수 있는 문제가 있었습니다. (버그 #29881279)

unsigned 정수 타입 캐스팅으로 인한 정수 오버플로가 발생할 수 있었으며, 이로 인해 이후 버퍼 오버플로가 발생할 가능성이 있었습니다. (버그 #29878914)

클라이언트 캐릭터셋이 latin1이 아닌 경우, 서버가 DECIMAL 값의 문자열 표현을 클라이언트 캐릭터셋으로 변환했습니다. 그러나 이 변환은 필요하지 않았으며, 이제 더 이상 수행되지 않습니다. (버그 #29875672)

vio_description() 디버깅 함수가 비디버그 빌드에서 호출되었습니다. (버그 #29871361)

MySQL 8.0.3에서 이전 문제를 수정하는 과정에서 상수인 DATE 값에 대한 표현식이 캐시될 수 있는지를 확인하는 테스트가 변경되었습니다. 이로 인해 전역 변수를 제외한 모든 표현식을 허용하던 방식이, 상수 여부와 관계없이 모든 함수에 대해 캐시를 허용하지 않도록 변경되었습니다. 이는 문자열을 DATE 값으로 변환해야 하는 쿼리의 성능에 상당한 영향을 미쳤습니다. 이번 수정에서는 해당 테스트가 원래의 방식으로 되돌아갔습니다. (버그 #29871018)
참고: 이 문제는 버그 #85471, 버그 #28576018의 회귀(regression)입니다.

INFORMATION_SCHEMA는 스토리지 엔진에서 동적 테이블 통계를 가져올 수 있지만, 파티션이 있는 테이블에서는 작동하지 않았습니다. (버그 #29870919, 버그 #95641)

접근 제어 명령이 실패할 경우, 다른 스레드가 접근 제어 캐시에 대한 잠금을 획득할 수 있는 잠금 해제 및 재획득 간격에서 교착 상태가 발생할 수 있었습니다. 이제 재시도 중에는 잠금이 해제되지 않습니다. (버그 #29870899, 버그 #95612)

적절한 권한이 없는 사용자가 offline_mode 시스템 변수를 활성화하려고 시도할 때 어설션이 발생할 수 있었습니다. (버그 #29849046)

Fedora 패키징 구성에서 mysql_config_editor의 디버그 정보가 잘못된 패키지에 포함되었습니다. (버그 #29841342)

MeCab 플러그인 초기화 중 해제된 객체를 사용하려고 시도하면 세그멘테이션 오류가 발생했습니다. (버그 #29832534)

무작위 암호를 생성할 때 사용된 엔트로피 함수가 충분한 엔트로피를 제공하지 못하는 경우가 있었습니다. (버그 #29808492)

super_read_only가 활성화된 경우, 서버가 DROP TABLESPACE 명령을 잘못 처리할 수 있었습니다. (버그 #29802833)

왼쪽 조인과 함께 물질화된 세미 조인이 포함된 쿼리가 올바르게 처리되지 않았습니다. (버그 #29800741)

RPM 패키지를 사용하여 MySQL을 설치한 경우, 서버 연결을 테스트하는 초기화 스크립트가 LDAP 인증 플러그인을 사용하는 클라이언트 계정에서 오작동했습니다. (버그 #29786782)

스토리지 엔진 초기화 중 잘못된 잠금으로 인해 서버가 종료될 수 있었습니다. (버그 #29782379)

GTID가 활성화된 서버에서, DROP USER 명령과 뷰를 참조하는 준비된 문(statement)이 동시에 실행되면 교착 상태가 발생할 수 있었습니다. (버그 #29772622)

EXPLAIN FORMAT=JSON을 사용하여 SELECT WHERE NOT EXISTS (SELECT FROM (derived_table) WHERE false_condition) 형식의 쿼리를 실행할 때, 안티조인(antijoin) 변환이 포함된 경우, 서브쿼리가 제거되었으나 그 서브쿼리 내부에 있던 서브쿼리는 함께 제거되지 않고 상위로 이동하는 문제가 있었습니다. (버그 #29759277)
참고: 이 문제는 버그 #30017509와 관련이 있습니다.

중단된 테이블스페이스 암호화 작업이 데이터 사전과 스토리지 엔진 메타데이터 간 불일치를 초래하여 이후 테이블스페이스 접근 시 어설션 오류가 발생했습니다. (버그 #29756808)

이벤트 스케줄러와 DROP EVENT 명령이 동시에 실행될 때, 잠금 획득이 잠금 대기 시간 초과까지 걸리는 문제가 있었습니다. (버그 #29742901, 버그 #95223)

CHECK 제약 조건이 표현식에서 기본값을 가져오는 열에 대해 적용되지 않았습니다. (버그 #29706689, 버그 #95192)

동일한 테이블에 대해 두 개의 정렬을 수행할 때, 두 정렬이 동일한 버퍼를 사용하려고 시도하여 경계 밖 읽기가 발생했습니다. 이는 동일한 쿼리가 DISTINCTORDER BY를 모두 사용할 때 발생할 수 있었습니다. (버그 #29699759)

정렬된 테이블을 사용하는 weedout을 수행할 때, 정렬이 행 ID로 수행되지 않았습니다. (버그 #29693294)

VS2019에서 디버그 컴파일을 선택했을 때 /ZI 플래그 사용으로 인해 컴파일 오류가 발생했습니다. 이제 /Z7 플래그를 사용하도록 수정되었습니다. (버그 #29691691, 버그 #95125)

DBUG 패키지와 관련하여 소스 배포에서 오래된 코드를 정리하는 작업이 수행되었습니다:

  • dbug.cc 파일을 mysys 디렉터리로 이동하고 dbug 라이브러리를 제거했습니다.
  • dbug.cc에서 사용되지 않는 함수를 제거했습니다.
  • 더 이상 필요하지 않은 DBUG_LEAVE 매크로를 제거했습니다.
  • DBUG_LOG 매크로의 본문을 if _db_enabled_()로 감싸서 출력되지 않을 문자열의 형식을 피했습니다.
  • dbug 디렉터리를 제거했습니다.

(버그 #29680868, 버그 #95082)

참조 항목 배열을 할당할 때, 윈도우 함수의 수를 고려하지 않았습니다. 그 결과, 윈도우 함수가 포함된 표현식이 분할될 때, 새 항목 참조를 저장할 추가 공간이 적절히 할당되지 않았습니다. (버그 #29672621)

사용자 변수의 정렬 순서를 설정하는 것이 모든 경우에 제대로 작동하지 않았습니다. (버그 #29665165)

SHOW 명령의 WHERE 절 처리가 일관되게 수행되지 않았습니다. (버그 #29664758)

동일한 ALTER TABLE 명령에서 제약 조건을 삭제하고 추가하는 절을 지정한 경우, 잘못된 순서로 실행되었습니다. (버그 #29652464)

EXPLAIN 명령에서 결과가 행 ID로 정렬될 때를 표시하도록 개선되었습니다. (버그 #29634196)

다음 두 가지 경우에 불필요한 물질화가 더 이상 수행되지 않습니다:

  • 그룹화와 같은 작업을 위해 조인의 끝에서 정렬을 수행할 때, 정렬이 행 ID를 사용하지 않는 경우.
  • 파생 테이블을 물질화할 때, 그 테이블이 한 번 이상 읽힐 필요가 없는 경우.

(버그 #29634179)

CAST(arg AS FLOAT) 구문에서 argFLOAT 값으로 표현되기에는 너무 작은 경우, 예상되는 범위 초과 오류를 반환하지 않았습니다. (버그 #29621333)

FLOAT 값의 내부 변환이 잘못된 시점에 발생하여 결과에 과도한 정밀도가 나타날 수 있는 문제가 있었습니다. 다음과 같이 생성된 테이블을 예로 들어보면:

CREATE TABLE t(f FLOAT);
INSERT INTO t VALUES (2.3);

수정 전에는 SELECT f, IF(f > 0, f, 0) FROM t 쿼리가 (2.3, 2.299999952316284)와 같은 잘못된 결과를 반환하였으나, 수정 후에는 (2.3, 2.3)와 같이 예상된 결과를 반환합니다. (버그 #29621062)

log0meb.cc가 일부 빌드 옵션에서 컴파일되지 않았습니다. (버그 #29616525)

클라이언트 라이브러리가 서버에서 결과 집합 메타데이터를 가져오는 동안 널 포인터를 역참조할 수 있었습니다. (버그 #29597896, 버그 #30689251)

날짜와 간격 값을 더할 때, 간격 값 확인 중 런타임 오류가 발생할 수 있었습니다. (버그 #29587536)

Undefined Behavior Sanitizer가 활성화된 빌드에서, -9223372036854775808과의 곱셈이 경고 및 잘못된 결과를 초래할 수 있었습니다. (버그 #29581610)

서버가 시작 중 이진 로그에 기록되지 말아야 할 작업을 기록하려고 시도했습니다. (버그 #29557747, 버그 #94835)

CREATE VIEW v1 AS SELECT * FROM _table_ WHERE (_constant_ IN (SELECT _constant_ ) IS UNKNOWN) 구문이 어설션을 발생시켰습니다. (버그 #29525304)
참고: 이 문제는 버그 #25466100의 회귀 문제입니다.

EL6에서 FIPS 모드 활성화 시 FIPS 지원 OpenSSL 라이브러리가 없으면 서버가 오작동할 수 있었습니다. (버그 #29519794)

SET PERSIST_ONLY 명령으로 영구적으로 설정할 수 있는 일부 시스템 변수들이 있었으며, 이들은 SET PERSIST에서 지원되지 않았습니다. 이제 서버가 시작할 때 mysqld-auto.cnf에서 해당 변수가 발견되면 경고 메시지를 출력하고 설정을 무시합니다. (버그 #29511118)

서버가 일부 경우에 부분 취소와 스키마 수준 권한을 제대로 통합하지 못했습니다. (버그 #29484519)

디버그 빌드에서, ENUM 또는 SET 열이 DEFAULT 절과 함께 정의되면 어설션 오류가 발생했습니다. (버그 #29480711)

MySQL Installer가 OpenSSL DLL 종속성을 설치하지 않았습니다(Development 컴포넌트를 선택하지 않은 경우). (버그 #29423421, 버그 #94168, 버그 #30199579, 버그 #96573)

READ UNCOMMITTED 격리 수준에서, memcached 클라이언트에서 발생하는 무거운 부하로 인해 세그멘테이션 오류가 발생할 수 있었습니다. 한 트랜잭션에서 업데이트 중인 외부 저장 BLOB 열이 다른 트랜잭션에서 NULL 값으로 읽혔고 데이터 길이가 0이 아니었습니다. (버그 #29396364, 버그 #93961)

IPv6 주소 해석이 정상적으로 작동하는 시스템에서, 연결 시 IPv6 소켓 생성 실패가 메모리 누수를 초래할 수 있었습니다. (버그 #29374606, 버그 #94384)

복제 시나리오에서 여러 클라이언트가 동일한 XID 값을 사용하여 XA COMMIT 또는 XA ROLLBACK 명령을 동시에 실행하면 복제 불일치가 발생할 수 있었습니다. (버그 #29293279, 버그 #94130)

TIMESTAMPADD() 함수의 인수가 준비된 문에서 반대로 사용될 수 있었습니다. (버그 #29268394)

CREATE USER 문에 대한 DEFAULT ROLE 옵션이 이진 로그에 기록되지 않았습니다. (버그 #28948915, 버그 #93252)

명령줄에서 잘못된 memcached 플러그인 변수 설정으로 서버 시작 시 서버가 종료되었습니다. (버그 #28575863)

LOAD DATASET 절이 GEOMETRY NOT NULL 열에 대해 제대로 동작하지 않았습니다. (버그 #28460369, 버그 #91893)

Windows 8 이상에서 keyring_aws 플러그인이 Amazon KMS 서버와 통신할 수 없었습니다. (버그 #28377961)

INFORMATION_SCHEMA 테이블 및 SHOW COLUMNS 명령이 UNION 연산자로 결합된 여러 쿼리 블록을 포함한 뷰의 열 타입을 잘못 표시할 수 있었습니다. (버그 #28278220, 버그 #91486)

Debian에서, InnoDB 복구 시간이 길어지면 systemd 서비스 시작이 실패할 수 있었습니다. 이제 시스템이 시작 시 systemd 서비스 타임아웃이 비활성화됩니다(RHEL과 일관성을 유지). (버그 #28246585, 버그 #91423)

thread_pool 플러그인이 활성화된 경우, sys.processlistsys.session 뷰에서 실제 사용자 이름 대신 스레드 이름을 표시했습니다. (버그 #25906021, 버그 #85976)

sys.schema_index_statistics 뷰의 delete_latency 열이 Performance Schema의 table_io_waits_summary_by_index_usage 테이블의 SUM_TIMER_DELETE 열 대신 SUM_TIMER_INSERT 열을 잘못 참조하고 있었습니다. (버그 #25521928)

sys.diagnostics() 프로시저의 출력에서 user_summary_by_file_io_type 뷰의 latency 열이 형식화된 값이 아닌 원시 피코초로 잘못 표시되었습니다. (버그 #25287996)

MySQL Enterprise 암호화 기능이 Diffie-Hellman(DH) 메서드를 비-DH 키에 적용하여 예측 불가능한 결과나 서버 종료를 초래할 수 있었습니다. (버그 #22839007)

비밀번호 마스킹이 SHOW PROCESSLIST 및 일부 INFORMATION_SCHEMA 및 Performance Schema 테이블에서 불완전했습니다. (버그 #20712046)

엄격한 SQL 모드에서, STR_TO_DATE() 함수가 시간 부분만 포함된 값을 제대로 처리하지 못했습니다. Daniel Black에게 감사를 전합니다. (버그 #18090591, 버그 #71386)

WHERE 절에서 GREATEST() 함수를 사용하는 쿼리가, 특정 경우에 예상한 행을 반환하지 못하거나 잘못된 오류를 발생시킬 수 있었습니다. (버그 #96012, 버그 #29963278)

sort_buffer_size를 최대값 또는 최대값에 근접한 값으로 명시적으로 설정하면 일부 쿼리가 메모리 부족 오류로 실패할 수 있었습니다. (버그 #95969, 버그 #29952775)
참고: 관련된 문제: 버그 #22594514.

후방 인덱스 스캔의 경우 NULL을 포함한 키에 대해 인덱스 조회를 건너뛰는 늦은 NULL 필터링이 수행되지 않았습니다. 전방 인덱스 스캔의 경우에는 수행되었습니다. (버그 #95967, 버그 #29954680)

IFNULL() 또는 ABS() 함수를 함수형 인덱스에서 사용할 때, UNSIGNED 열이 해당 부호 있는 정수 타입의 범위를 초과하는 값을 포함하면 “Value is out of range for functional index…” 오류가 발생했습니다. (버그 #95881, 버그 #29934661)

IFNULL() 함수의 해결 절차가 CASE 연산에서 파생된 다른 모든 함수와 달랐으며, 이는 특정 숫자 표현식에 대해 잘못된 길이 정보를 생성했습니다. (버그 #94614, 버그 #29463760)

UNION ALL ... LIMIT 1 구문을 사용하는 쿼리가 과도한 수의 행을 평가했습니다. 이는 Handler_read_keyHandler_read_next에서 확인할 수 있습니다. (버그 #79340, 버그 #22292995)
참고: 관련된 문제: 버그 #79040, 버그 #22158368, 버그 #92994, 버그 #28866942.

-DWITH_EXAMPLE_STORAGE_ENGINE=1 CMake 옵션이 무시되었으나, 무시되지 않아야 했습니다. -DWITH_EXAMPLE_STORAGE_ENGINE=0이 주어지면, EXAMPLE 스토리지 엔진이 플러그인으로 빌드됩니다. (버그 #70859, 버그 #17772560, 버그 #30133062)
참고: 관련된 문제: 버그 #18324650.

Leave a Comment



이 문서 공유

8.0.18 변경 사항 (2019-10-14 GA)

링크 복사

CONTENTS