MySQL 8.0.18 릴리스 노트
MySQL 8.0.18 Community Server 릴리스 노트를 한국어로 번역하고, DBA가 참고해야 할 핵심 내용을 함께 정리하였습니다.
DBA를 위한 핵심 내용
MySQL 8.0.18은 해시 조인과 EXPLAIN ANALYZE 도입으로 실행계획 분석 방식이 크게 바뀌고, 복제 적용자 권한 검사와 Group Replication 장애 대응 옵션이 추가된 운영 영향이 큰 버전입니다. 외부 자료에서도 해시 조인은 MySQL 8.0.18의 대표 기능으로 다뤄지며, 인덱스 없는 동등 조인에서 이점이 있지만 메모리·디스크 spill과 실행계획 변화 관찰이 필요합니다. 공개 자료 기준으로 광범위한 특정 회귀는 확인하지 못했으나, 후속 NVD 항목에서 8.0.18 이하가 InnoDB/Optimizer 등 취약점 영향 범위에 포함됩니다. (Percona, NVD MySQL 8.0.18 검색)
- 해시 조인이 기본 도입되어 인덱스가 없는 동등 조인에서 block nested loop보다 빠를 수 있습니다. 반대로
join_buffer_size, 임시 파일,open_files_limit에 민감해질 수 있으므로 주요 배치/리포트 쿼리는EXPLAIN FORMAT=TREE와EXPLAIN ANALYZE로 재검증해야 합니다. EXPLAIN ANALYZE가 추가되어 추정 비용과 실제 실행 시간을 함께 볼 수 있습니다. 업그레이드 후 실행계획 회귀를 찾는 표준 도구로 활용하되, 실제로 쿼리를 실행하므로 운영 데이터에서는 부하를 고려해야 합니다.- 복제 및 Group Replication에
PRIVILEGE_CHECKS_USER가 도입되어 applier가 실행하는 변경을 별도 계정 권한으로 제한할 수 있습니다. 복제 채널을 보안 경계로 운영하는 환경에서는 전용 계정, 필요한 최소 권한, 장애 시 수동 재적용 절차를 함께 설계해야 합니다. - Group Replication의
group_replication_exit_state_action=OFFLINE_MODE가 추가되어 멤버가 의도치 않게 그룹을 떠날 때 stale read와 쓰기를 차단하면서도 mysqld를 종료하지 않고 진단할 수 있습니다. Router/프록시 연동 상태 확인이 중요합니다. - 연결 압축 제어가 확장되어
zstd압축과 압축 레벨을 사용할 수 있습니다. WAN 복제나 원격 클라이언트에는 유리할 수 있지만 CPU 사용량과 지연 시간을 함께 측정해야 하며, 레거시--compress계열은 사용 중단 경로에 들어갑니다. MYSQL_PWD,relay_log_info_file,master_info_repository=FILE관련 옵션,slave_rows_search_algorithms,log_bin_use_v1_row_events,WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()등이 사용 중단되었습니다. 크래시 안전 복제 메타데이터(TABLE)와WAIT_FOR_EXECUTED_GTID_SET()기준으로 운영 스크립트를 정리하는 것이 좋습니다.
계정 관리 관련 사항
CREATE USER,ALTER USER, 및SET PASSWORD문은 이제 명시적으로 관리자가 지정한 리터럴 비밀번호를 요구하는 대신, 사용자 계정에 대해 무작위 비밀번호를 생성할 수 있는 기능을 제공합니다. Password Management를 참조하십시오. (WL #11772)
컴파일 관련 사항
-
호환되지 않는 변경:
my_ulonglong타입은 더 이상 MySQL 소스 코드에서 사용되지 않습니다. 이 타입을 사용하던 모든 서드파티 코드는 대신uint64_tC 타입을 사용해야 합니다. 또한my_ulonglong변수를 출력하는 데 사용되는 경우printf()형식 문자열을 조정해야 할 수도 있습니다. (Bug #29453827) -
MySQL 8.0을 빌드할 때 필요한 Protobuf의 최소 버전은 이제 2.5가 아니라 3.0입니다. (Bug #30141272)
-
서버 빌드용 Boost 라이브러리의 최소 버전은 이제 1.70.0입니다. (Bug #29639344)
-
디버그 코드 작성을 지원하기 위해
DBUG_TRACE매크로를 사용할 수 있습니다. 이는 enter/leave 매크로 쌍을 대체하는 편의 기능입니다. 예를 들어 다음과 같이 작성하는 대신:void foo() { DBUG_ENTER("foo"); bar(); DBUG_VOID_RETURN; }대신 다음과 같이 작성하십시오:
void foo() { DBUG_TRACE; bar(); }(Bug #29589102)
설정 관련 사항
CMake는 이제 fastcov를 사용할 수 있는 경우 이를 사용하도록 설정합니다. fastcov는 lcov 또는 gcov보다 빠릅니다. 이를 위해서는 GCC 및 gcov 버전 9 이상이 필요합니다. (Bug #30011512)DISABLE_SHAREDCMake 옵션은 사용되지 않았으며 제거되었습니다. (Bug #29971049, Bug #96027)- Protobuf 실행 파일을 찾는 CMake 코드는 이제 이러한 파일을 여러 패키지로 분리하는 플랫폼에서 동작합니다. (Bug #29953773)
- 새로운
ADD_GDB_INDEXCMake 옵션은 바이너리에.gdb_index섹션 생성을 활성화할지 여부를 결정하며, 이는 디버거에서 바이너리를 더 빠르게 로드하게 합니다. 이 옵션은 기본적으로 비활성화되어 있습니다. lld 또는 GNU gold 이외의 링커가 사용되는 경우에는 효과가 없습니다. (Bug #29925009, Bug #95857) INSTALL_LAYOUTCMake 옵션의 경우,SLES및WIN옵션 값은 사용되지 않았으며 제거되었습니다. (Bug #29871520, Bug #95654)max_prepared_stmt_count시스템 변수의 최댓값이 100만(1,048,576)에서 400만(4,194,304)으로 증가했습니다. 기본값은 16,382로 변경되지 않습니다. (WL #13342)- MySQL 8.0은 더 이상 wolfSSL을 사용한 빌드를 지원하지 않습니다. 이제 모든 MySQL 빌드는 OpenSSL을 사용합니다. (WL #13290)
- RE2 라이브러리는 더 이상 MySQL에서 사용되지 않습니다. 이 라이브러리는 더 이상 소스 배포판에 번들로 포함되지 않으며
WITH_RE2CMake 옵션은 더 이상 사용되지 않습니다.
연결 관리 관련 사항
-
MySQL은 이제 서버로의 연결을 통해 전송되는 바이트 수를 최소화하기 위해 압축 사용을 더 많이 제어할 수 있도록 제공합니다. 이전에는 지정된 연결이 압축되지 않았거나
zlib압축 알고리즘을 사용했습니다. 이제는zstd알고리즘(zstd 1.3)을 사용하는 것도 가능하며,zstd연결에 대한 압축 레벨을 선택할 수도 있습니다. 허용되는 압축 알고리즘은 서버 측에서 설정할 수 있을 뿐만 아니라, 클라이언트 프로그램에 의한 연결 및 마스터/슬레이브 복제 또는 Group Replication에 참여하는 서버에 의한 연결에 대해 연결 시작 측에서도 설정할 수 있습니다. 자세한 내용은 Connection Compression Control을 참조하십시오.zstd알고리즘을 사용하는 연결 압축에는 서버가zstd라이브러리 지원으로 빌드되어 있어야 합니다. 새로운WITH_ZSTDCMake 옵션은 번들된zstd라이브러리 또는 시스템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=FILE및master_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가 MySQL 5.6부터 기본값인 Version 2 바이너리 로그 로우 이벤트 대신 Version 1 바이너리 로그 로우 이벤트를 사용하여 바이너리 로그를 작성하도록 했습니다. (기본값은OFF입니다.) Version 1 바이너리 로그 로우 이벤트를 사용하면 Version 2 바이너리 로그 로우 이벤트를 사용할 수 없었던 MySQL Server 5.5 및 이전 버전을 실행하는 슬레이브와 로우 기반 복제를 사용할 수 있었습니다. (WL #12926) -
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()함수는 이제 사용 중단되었으며, 대신WAIT_FOR_EXECUTED_GTID_SET()함수를 사용해야 합니다. 두 함수는 지정된 모든 트랜잭션이 적용될 때까지 또는 선택적 제한 시간이 경과할 때까지 대기합니다. 그러나WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()는 특정 복제 채널에 적용되었으며, 해당 채널에서 트랜잭션이 적용된 후에만 중지되었고, 이를 위해서는 applier가 실행 중이어야 했습니다. 반대로WAIT_FOR_EXECUTED_GTID_SET()는 지정된 트랜잭션이 서버에 적용된 후에 중지되며, 해당 트랜잭션이 어떻게 적용되었는지(임의의 복제 채널 또는 임의의 사용자 클라이언트에서)와 복제 채널이 실행 중인지 여부와 관계없습니다.WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()는 예를 들어 failover 또는 수동 복구 상황에서 예상된 트랜잭션이 다른 복제 채널이나 사용자 클라이언트에서 도착하고 제한 시간이 설정되지 않은 경우 무기한 중단될 수 있었습니다. (WL #13178)
Keyring 관련 사항
- MySQL Enterprise Edition에는 이제 keyring 저장소의 백엔드로 HashiCorp Vault를 사용하는
keyring_hashicorp플러그인이 포함됩니다. 자세한 내용은 The MySQL Keyring을 참조하십시오. (WL #12522)
로깅 관련 사항
- 서버 시작 중 로그 버퍼링은 오류 로그에 출력이 나타나는 지연을 줄이도록 조정되었습니다. (Bug #30019632)
Optimizer 관련 사항
-
첫 번째 일치 분할 점프 연산과 관련된 쿼리가 iterator executor에서 잘못 처리되었습니다. 이제 해당 쿼리는 weedout으로 다시 작성됩니다. (Bug #30220791)
-
MySQL에서 내부 동등 조인을 실행하는 방법으로 해시 조인이 구현되었습니다. 예를 들어, 다음과 같은 쿼리는 이 릴리스부터 해시 조인으로 실행될 수 있습니다:
SELECT * FROM t1 JOIN t2 ON t1.c1 = t2.c1;동등 조인을 사용하는 다중 테이블 조인도 이 최적화를 활용할 수 있습니다.
해시 조인은 실행에 인덱스가 필요하지 않습니다. 대부분의 경우 해시 조인은 인덱스가 없는 동등 조인에 이전에 사용되던 block-nested loop 알고리즘보다 더 효율적입니다.
기본적으로 이 릴리스부터 조인에 최소 하나의 동등 조인 조건이 포함되어 있고 조인 조건에 적용할 수 있는 인덱스가 없는 경우마다 해시 조인이 사용됩니다. (단일 테이블 조건자에만 적용되는 인덱스가 있는 경우에도 해시 조인은 여전히 사용될 수 있습니다.) 이 선호 동작은
hash_joinoptimizer switch를off로 설정하거나NO_HASH_JOINoptimizer hint를 사용하여 재정의할 수 있습니다. 또한join_buffer_size를 설정하여 해시 조인이 사용하는 메모리 양을 제어할 수 있습니다. 메모리 요구량이 이 값을 초과하는 조인은 디스크에서 실행됩니다. 디스크 기반 해시 조인은 여러 디스크 파일을 사용하며, 이 개수가open_files_limit을 초과하면 실행할 수 없을 수 있습니다.조인된 테이블의 임의의 쌍에 대한 조인 조건이 사용된 모든 조인 조건 중 최소 하나의 동등 조인 조건을 포함하지 않는 경우 해시 조인을 사용할 수 없습니다. 카티전 곱, 즉 조인 조건을 전혀 지정하지 않는 조인에는 해시 조인이 사용됩니다.
EXPLAIN FORMAT=TREE또는EXPLAIN ANALYZE의 출력에서 쿼리를 최적화하는 데 해시 조인이 사용되었는지 확인할 수 있습니다.또한 해시 조인을 사용하는 내부 조인은 이제 Batched Key Access (BKA)도 활용할 수 있습니다. 외부 조인은 여전히 전체 조인 버퍼를 할당합니다.
자세한 내용은 Hash Join Optimization을 참조하십시오. (WL #2241, WL #13002)
-
TREE형식의 쿼리에 대한 iterator 기반 타이밍, 비용 및 기타 정보를 제공하는EXPLAIN ANALYZE가 추가되었습니다. 이 문은EXPLAIN의 출력과 유사한 출력을 생성하지만, Optimizer 추정이 실제 실행과 얼마나 일치하는지에 대한 추가 정보를 포함합니다. (WL #4168) -
MySQL은 이제 특정 데이터 타입 불일치를 방지하기 위해 쿼리에 cast를 삽입합니다. 즉, Optimizer는 이제 인수의 데이터 타입과 예상 데이터 타입이 일치하지 않는 표현식 및 조건 내부의 item tree에 casting 연산을 추가합니다. 이렇게 하면 이전 MySQL 릴리스와의 하위 호환성을 유지하면서, 실행되는 쿼리가 SQL 표준을 준수하는 쿼리와 동등해집니다.
이러한 암시적 cast는 이제 표준 숫자 비교 연산자 중 하나를 사용해 비교될 때 두 인수를 모두
DOUBLE로 cast함으로써 시간 타입과 숫자 타입 사이에서 수행됩니다. 또한 이러한 비교가DATE또는TIME값과DATETIME값 사이에서 수행되는 경우에도 이제 수행되며, 이 경우 인수는DATETIME으로 cast됩니다.예를 들어,
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)로 변환됩니다.특정 쿼리에 cast가 삽입되는 시점은
EXPLAIN ANALYZE,EXPLAIN FORMAT=JSON또는EXPLAIN FORMAT=TREE의 출력을 확인하여 볼 수 있습니다.EXPLAIN도 사용할 수 있지만, 이 경우에는 이후에SHOW WARNINGS도 실행해야 합니다.이 변경으로 쿼리 결과나 성능에 차이가 발생할 것으로 예상되지 않습니다. (WL #12108)
패키징 관련 사항
component_test_page_track_component.so테스트 플러그인이-test패키지로 이동되었습니다. (Bug #30199634)- 시스템
curl라이브러리에 링크하는 대신curl을 포함하는 바이너리 패키지가curl7.65.3을 사용하도록 업그레이드되었습니다. (Bug #30015512)
Pluggable Authentication 관련 사항
- LDAP 인증 플러그인을 사용하는 계정의 실패한 연결 디버깅을 지원하기 위해,
authentication_ldap_simple_log_status및authentication_ldap_sasl_log_status시스템 변수는 이제 최댓값 6(이전에는 5)을 허용합니다. 두 변수 중 하나를 6으로 설정하면 해당 플러그인에 대해 LDAP 라이브러리의 디버깅 메시지가 오류 로그에 기록됩니다. (Bug #29771393)
보안 관련 사항
- OpenSSL 라이브러리가 번들로 제공되는 플랫폼의 경우, MySQL Server에 링크된 OpenSSL 라이브러리가 버전 1.1.1c로 업데이트되었습니다. 새 OpenSSL 버전에서 수정된 문제는 https://www.openssl.org/news/cl111.txt 및 https://www.openssl.org/news/vulnerabilities.html에 설명되어 있습니다. (Bug #29868818)
공간 데이터 지원
- 이전에는 geographic SRS의 geometry 인수에 대해
ST_Distance()가Point와Point, 또는Point와MultiPoint인수 타입만 지원했습니다. 이제ST_Distance()는 모든 geometry 타입의 geographic SRS 인수에 대한 거리 계산을 지원합니다. 자세한 내용은 객체 모양을 사용하는 공간 관계 함수를 참조하십시오. (WL #12216)
sys 스키마 관련 사항
-
sys.schema_unused_indexes뷰는 이제 유니크 인덱스를 필터링하여 제외합니다. 기여해 주신 Gillian Gunson에게 감사드립니다. (Bug #24798995, Bug #83257) -
sys.ps_is_consumer_enabled()함수는 이제 인수가 알 수 없는 non-NULL컨슈머 이름인 경우NULL을 반환하는 대신 오류를 생성합니다. (Bug #24760317) -
이전에는
sys스키마 소스가 별도의 Git 리포지토리에서 유지 관리되었습니다. 이제sys스키마 소스는 MySQL 소스 배포판에 포함되고 그 안에서 유지 관리됩니다(scripts/sys_schema아래). 이 변경의 결과로, 향후sys스키마 스크립트 유지 관리를 단순화하기 위해init_file시스템 변수로 명명된 파일 내 구문의 허용 가능한 형식이 확장되었습니다. 자세한 내용은 Server System Variables에서 해당 변수의 설명을 참조하십시오.sys.version뷰는 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. 영향을 받는 애플리케이션은 대신 대안을 사용하도록 조정해야 합니다. 예를 들어, MySQL 서버 버전을 검색하려면VERSION()함수를 사용하십시오. (WL #12673)
테스트 스위트 관련 사항
- MySQL 테스트가 최신 버전의 googletest를 사용하도록 업데이트되었습니다. (Bug #30079649)
X 플러그인 관련 사항
- X Protocol은 동일한 쿼리에 대해 발생한 많은 수의 경고 메시지를 올바르게 표시하지 않았습니다. (Bug #30055869)
NO_BACKSLASH_ESCAPESSQL 모드가 활성화된 경우, X Plugin이 컬렉션을 테이블로 잘못 보고했습니다. (Bug #28208285)
추가되거나 변경된 기능
-
Replication; Group Replication: 기본적으로 MySQL 복제(Group Replication 포함)는 다른 서버에서 이미 수락된 트랜잭션이 복제 슬레이브 또는 그룹 멤버에 적용될 때 권한 검사를 수행하지 않습니다. MySQL 8.0.18부터는 채널에서 일반적으로 복제되는 트랜잭션을 적용하기 위한 적절한 권한을 가진 사용자 계정을 생성하고, 이를 복제 적용자의
PRIVILEGE_CHECKS_USER계정으로 지정할 수 있습니다. 그러면 MySQL은 각 트랜잭션을 사용자 계정의 권한과 대조하여 해당 채널에 대해 그 작업을 허가했는지 확인합니다. 또한 이 계정은 관리자가 mysqlbinlog 출력의 트랜잭션을 적용하거나 다시 적용하는 데 안전하게 사용할 수 있으며, 예를 들어 채널의 복제 오류에서 복구하는 경우에 사용할 수 있습니다.PRIVILEGE_CHECKS_USER계정을 사용하면 권한이 있는 작업 또는 원하지 않는 작업의 무단 또는 우발적 사용으로부터 복제 채널을 보호하는 데 도움이 됩니다.사용자 계정이 복제 적용자 스레드의
PRIVILEGE_CHECKS_USER로 나타날 수 있도록 하고, mysqlbinlog에서 사용하는 내부 사용 목적의BINLOG문을 실행할 수 있도록 하려면 해당 사용자 계정에REPLICATION_APPLIER권한을 부여합니다. 사용자 계정을 설정한 후에는GRANT문을 사용하여 추가 권한을 부여함으로써, 서버에 보관된 특정 테이블을 업데이트하는 것과 같이 적용자 스레드가 수행할 것으로 예상하는 데이터베이스 변경을 사용자 계정이 수행할 수 있도록 합니다. 이러한 동일한 권한을 통해 관리자는 복제 채널에서 해당 트랜잭션 중 하나를 수동으로 실행해야 하는 경우 이 계정을 사용할 수 있습니다. 적절한 권한을 부여하지 않은 예기치 않은 작업이 시도되면 해당 작업은 허용되지 않으며 복제 적용자 스레드는 오류와 함께 중지됩니다. (WL #12966) -
Group Replication: 그룹 통신 연결의 경우, Group Replication은 이제 MySQL Server 8.0.16부터 지원되었던 TLSv1.3 프로토콜을 지원합니다. TLSv1.3 프로토콜을 사용하려면 MySQL Server가 OpenSSL 1.1.1 이상을 사용하여 컴파일되어야 합니다. Group Replication에 대해 암호화된 연결을 설정하는 방법에 대한 정보는 Securing Group Communication Connections with Secure Socket Layer (SSL)을 참조하십시오. (WL #12990)
-
Group Replication: 예를 들어 applier 오류가 발생한 후, 또는 과반수 손실의 경우, 또는 의심 타임아웃으로 인해 그룹의 다른 멤버가 해당 서버 인스턴스를 추방하는 경우처럼 서버 인스턴스가 의도치 않게 그룹을 떠날 때 Group Replication이 어떻게 동작하는지를 지정하는
group_replication_exit_state_action시스템 변수에 새 옵션OFFLINE_MODE를 사용할 수 있습니다.OFFLINE_MODE가 종료 작업으로 지정되면, Group Replication은 시스템 변수offline_mode를ON으로 설정하여 MySQL을 오프라인 모드로 전환합니다. 멤버가 오프라인 모드에 있으면,CONNECTION_ADMIN또는SUPER권한이 있는 클라이언트 사용자를 제외하고, 연결된 클라이언트 사용자는 다음 요청 시 연결이 끊기며 연결이 더 이상 허용되지 않습니다. 또한 Group Replication은 시스템 변수super_read_only를ON으로 설정하므로, 클라이언트가SUPER권한으로 연결했더라도 어떤 업데이트도 수행할 수 없습니다.OFFLINE_MODE종료 작업은 기본READ_ONLY종료 작업처럼 업데이트를 방지하지만, (명시된 권한이 있는 클라이언트 사용자의 읽기는 제외하고) 오래된 읽기도 방지하며, MySQL Router와 같은 프록시 도구가 서버를 사용할 수 없음을 인식하고 클라이언트 연결을 리디렉션할 수 있게 합니다. 또한 인스턴스를 종료하는 기존 대안인ABORT_SERVER종료 작업과 달리, MySQL을 종료하지 않고 관리자가 문제 해결을 시도할 수 있도록 인스턴스를 계속 실행 상태로 둡니다. (WL #12895) -
Group Replication: 내부 메시지 서비스가 Group Replication에 추가되었습니다. MySQL 모듈은 이 서비스를 사용하여 Group Replication의 기존 그룹 통신 연결을 통해 식별 태그가 있는 일반 메시지를 모든 그룹 멤버에 전송할 수 있습니다. (WL #12896)
-
서버가
--initialize와 함께 실행될 때는 non-early 플러그인을 로드할 이유가 없습니다. 이제 서버는 경고를 로그에 기록하고,--initialize와 함께 제공된--plugin-load또는--plugin-load-add옵션을 무시합니다. (Bug #29622406) -
서버 시작 중
INFORMATION_SCHEMA업그레이드와 관련된 진단 메시지 수가 줄었습니다. (Bug #29440725, Bug #94559) -
MySQL 8.0 이전에는
REVOKE가 알 수 없는 권한을 취소하려는 시도에 대해 오류를 생성했습니다. MySQL 8.0에서는 권한을 등록하는 컴포넌트 또는 플러그인이 설치되어 있는 동안 부여된 동적 계정인 경우, 계정이 현재 서버에 알려지지 않은 권한을 보유할 수 있습니다. 해당 컴포넌트 또는 플러그인이 이후 제거되면, 그 권한을 보유한 계정은 여전히 그 권한을 보유하고 있지만 권한은 등록 해제됩니다. 이러한 권한을 취소하는 것은 실제로 유효하지 않은 권한을 취소하는 것과 구별할 수 없으므로,REVOKE는 더 이상 알 수 없는 권한을 취소하려는 시도에 대해 오류를 생성하지 않습니다. 그러나 권한이 현재 알 수 없는 상태임을 나타내기 위해,REVOKE는 이제 경고를 생성합니다. (Bug #29395197) -
새
innodb_idle_flush_pct변수는 유휴 기간 동안 페이지 플러시를 제한할 수 있게 하며, 이는 솔리드 스테이트 스토리지 장치의 수명을 연장하는 데 도움이 될 수 있습니다. Limiting Buffer Flushing During Idle Periods를 참조하십시오.기여해 주신 Facebook에 감사드립니다. (Bug #27147088, Bug #88566, WL #13115)
-
--help옵션으로 호출된 mysqld는secure_file_priv인자가 존재하지 않는 경우 더 이상 중단되지 않습니다. (Bug #26336130) -
Protobuf 라이브러리는 이제 동적으로 링크됩니다. 기본 위치는 RPM의 경우
/usr/lib64/mysql/private/, DEB의 경우/usr/lib/mysql/private/, TAR 빌드의 경우/lib/private/입니다. 새INSTALL_PRIV_LIBDIRCMake 변수가 위치를 제어합니다. (WL #13126)
수정된 버그
-
NDB Cluster: 푸시된 조건을 사용하여 처리된 쿼리가
ORDER BY절을 포함할 때 잘못된 결과를 생성했습니다. (Bug #29595346)참조: 이 문제는 다음의 회귀입니다: Bug #28672214.
-
NDB Cluster:
NDBtransporter 계층은 메시지 크기를 32768바이트로 제한하며, send buffer는 메시지 크기에 추가적인(그리고 더 엄격한) 제한을 둡니다. 메시지가 send buffer에 추가될 때마다 메시지가 사용 가능한 공간에 맞는지 확인하기 위해 페이지 검사가 수행되며, 맞지 않으면 새 페이지가 사용됩니다. 현재 문제는 이 메시지가 빈 페이지에 맞을 수 있는지 확인하는 검사가 수행되지 않았다는 사실 때문에 발생했으며, 메시지 크기가 빈 페이지를 초과하면 buffer overwrite와 메모리에서 다음 페이지를 덮어쓰는 결과가 발생했습니다. 데이터 노드의 경우 send buffer(thr_send_page)가 지원하는 가장 큰 메시지는 32756바이트이며, API 및 management node의 경우 이 최대값은 32752바이트입니다. (개별 데이터 노드 내부에서 전송되는 signal은 이 경우 send buffer 또는 transporter buffer가 사용되지 않으므로 이러한 제한의 적용을 받지 않습니다). 이제 새 페이지가 사용될 때 메시지 크기가 새 페이지에서 사용 가능한 크기와 비교하여 검사됩니다.방금 설명한 문제를 해결하기 위해 수행된 작업의 일부로, 관련 테스트 및 디버깅을 용이하게 하기 위해 세 개의 새로운
DUMP명령이 추가되었습니다:DUMP 103003(CmvmiRelayDumpStateOrd)은 다른 노드를 사용하여DUMP명령을 전송합니다.DUMP 103004(CmvmiDummySignal) 및DUMP 103005(CmvmiSendDummySignal)는 긴 메시지를 전송하는 데 사용할 수 있습니다. (Bug #29024275) -
NDB Cluster:
EXPLAIN FORMAT=TREE는NDBCLUSTER스토리지 엔진으로 푸시다운된 조건과 조인에 대한 적절한 설명을 제공하지 않았습니다. 문제에는 다음이 포함되었습니다:- 푸시된 조건이 표시되지 않았습니다.
- 푸시된 조인의 루트가 표시되지 않았습니다.
- 푸시된 조인의 자식에 부모 작업에 대한 참조가 포함되지 않았습니다.
-
InnoDB: 비관적 업데이트 중 또는 레코드의 이전 버전으로 돌아갈 때 새로 추가된 외부 저장 필드를 가져오고 업데이트하는 데 사용되던 내부 함수(
btr_push_update_extern_fields())가 더 이상 필요하지 않게 되었습니다. 새로 추가된 외부 저장 필드는 다른 함수에 의해 업데이트됩니다. 또한 외부 저장 필드 수를 결정하는 데 사용되는 메서드가 수정되었습니다. (Bug #30342846) -
InnoDB: 데이터 파일이 누락된 undo tablespace에 대해
DROP UNDO TABLESPACE작업을 수행하면 세그멘테이션 오류가 발생했습니다. (Bug #30155290) -
InnoDB: 내부
trx_rseg_add_rollback_segments함수의 오류가 수정되었습니다. (Bug #30114226, Bug #96372) -
InnoDB: Contention-Aware Transaction Scheduling (CATS) 코드의 문제가 있는 어설션 코드가 개정되었습니다. (Bug #30086559)
-
InnoDB:
ib::fatal및ib::fatal_or_error생성자에서 호출 시 파생 클래스에 전달된 인수가 무시되어 잘못된 오류 메시지가 발생할 수 있었습니다. 또한 치명적 오류의 경우ib::fatal_or_error소멸자가 메시지를 출력하기 전에 서버 종료를 유발할 수 있었습니다. (Bug #30071930) -
InnoDB: 손상된 테이블이 해당 테이블의 참조 카운트가 0에 도달하기 전에 테이블 캐시에서 제거될 수 있었습니다. (Bug #30065947, Bug #96224)
-
InnoDB: 내부
row_update_inplace_for_intrinsic()함수의 코드 경로에 필요한 mini-transaction (mtr) 커밋이 포함되지 않아 디버그 어설션 실패가 발생했습니다. (Bug #30065518) -
InnoDB: 내부
fsp_srv_undo_tablespace_fixup()함수가 시작 중 호출될 때undo::ddl_mutex잠금을 획득하지 않았으며, 이로 인해 특정 상황에서 어설션 실패가 발생할 수 있었습니다. (Bug #30029433, Bug #30461911, Bug #97356) -
InnoDB:
rename_tablespace_name()함수를 검사한 결과,old_shard->get_space_by_id(space_id)가 테이블스페이스 ID를 찾지 못하면old_shard->mutex_release()를 호출하지 않고 반환하는 것으로 나타났습니다. (Bug #30027771) -
InnoDB: 이름에 “FTS”가 포함된 테이블스페이스가 전체 텍스트 인덱스 테이블의 테이블스페이스로 잘못 판단되어 업그레이드 중 데이터 딕셔너리에 등록되지 않았으며, 이로 인해 업그레이드 작업이 실패했습니다. (Bug #29992589)
-
InnoDB: change buffer에서 페이지를 병합하고 삭제하는 역할을 하는
ibuf_merge_or_delete_for_page()함수가 더 이상 undo 테이블스페이스 및 임시 테이블스페이스에 대해 호출되지 않습니다. change buffer에는 해당 테이블스페이스 유형에 대한 엔트리가 포함되지 않습니다. (Bug #29960394, Bug #95989) -
InnoDB: 버퍼 풀 크기 변수(
--innodb-buffer-pool-instances,--innodb-buffer-pool-size, 및--innodb-buffer-pool-chunk-size)의 일부 조합은 0, 1 또는 페이지 크기의 배수가 아닌 값 등의 청크 크기로 이어져, 버퍼 풀 생성 및 크기 산정 중 오류가 발생했습니다. (Bug #29951982) -
InnoDB: undo tablespace가 잘리는 동안 서버가 종료되면, 서버를 재시작한 후 clone 작업을 롤 포워드할 때 다음 오류가 발생했습니다: [ERROR] [MY-011825] [InnoDB] [FATAL] Clone File Roll Forward: Invalid File State: 0. (Bug #29949917)
-
InnoDB:
ALTER TABLE... DISCARD TABLESPACE작업이 중단 상태를 유발했습니다. (Bug #29942556, Bug #30324703) -
InnoDB: archive 스레드 실패 후 clone 작업이 다음 오류와 함께 실패했습니다: ERROR 3862 (HY000): Clone Donor Error: 1317: Query execution was interrupted. (Bug #29930839)
-
InnoDB: clone 관련 회귀로 인해 인덱스 및 비인덱스 업데이트 작업의 성능이 소폭 저하되었습니다. (Bug #29925409)
-
InnoDB: 이제
InnoDB는 시작 시 발생하는 테이블스페이스 검색 스캔 중에 숨겨진 디렉터리와 파일을 무시합니다. 숨겨진 디렉터리와 파일에는 "."로 시작하는 디렉터리와 파일, 그리고 속성으로 식별되는 Windows의 숨겨진 디렉터리 및 파일과 시스템 디렉터리 및 파일이 포함됩니다. (Bug #29900671, Bug #95071, Bug #30068072) -
InnoDB: 교착 상태 감지를 개선하기 위해, 데이터 잠금 간 교착 상태 사이클을 감지하는 작업이 트랜잭션 스레드에서 전용 백그라운드 스레드로 이동되었습니다. (Bug #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. 해당 업데이트와 관련 경고가 더 이상 발생하지 않습니다. (Bug #29871809) -
InnoDB:
InnoDBStandard Monitor 출력(SHOW ENGINE INNODB STATUS에서도 출력됨)의LATEST DETECTED DEADLOCK섹션이 교착 상태 사이클에 참여하는 트랜잭션에 대한 추가 정보를 포함하도록 확장되었습니다. (Bug #29871641) -
InnoDB: serialized dictionary information (SDI)을 저장하는 데 사용되는 버퍼의 크기를 확인할 때 serialized dictionary information (SDI) 입력 값과 출력 값을 비교하는 데 잘못된 인수가 사용되었습니다. (Bug #29871525, Bug #95606)
-
InnoDB: donor의 서로 다른 디렉터리에서 동일한 이름의 undo tablespace 파일이 recipient의 동일한 디렉터리로 복사될 때, cloning 작업 중 undo tablespace 파일이 덮어써졌습니다. 이제 cloning 작업은 중복된 undo tablespace 이름이 발견되면 오류를 보고합니다. 데이터가 recipient로 clone될 때 undo tablespace 파일은
innodb_undo_directory변수로 정의된 디렉터리로 clone됩니다. 파일이 동일한 디렉터리로 clone되므로, 중복된 undo tablespace 파일 이름은 허용되지 않습니다. (Bug #29837617) -
InnoDB: 작은 redo log 파일 크기와 많은 수의 트랜잭션을 가진 MySQL 서버 인스턴스에서 clone할 때, cloning 작업이 많은 수의 redo log 파일을 생성했습니다. 많은 수의 redo log 파일로 인해 시작이 중단되거나 assert가 발생하는 경우가 있었습니다. 그 외의 경우에는 과도한 수의 redo log 파일을 정리하지 않고 시작이 계속 진행되도록 허용되었습니다. (Bug #29837490)
-
InnoDB: 복구 중 암호화된 테이블에 redo log를 적용할 때 발생하는 누락된 테이블 오류가 무시되어 시작이 계속 진행되도록 허용될 수 있었습니다. 이 경우에는 시작이 중단되어야 합니다. (Bug #29820184, Bug #95183)
-
InnoDB: 시작 시 잘못된 redo log 파일 크기가 서버 오류 로그에 출력되었습니다. (Bug #29818711)
-
InnoDB: 대기 중인 레코드 잠금 요청이 있을 때 잠금 큐에서 잠금 객체(
lock_t구조체)를 재사용하지 못하게 하던 제한이 제거되었습니다. (Bug #29814308) -
InnoDB: 긴 파티셔닝된 테이블 이름을 파일 이름으로 변환할 때, 파일 이름을 보관하는 버퍼에 충분한 공간이 없어 assertion 실패가 발생했습니다. (Bug #29813582)
-
InnoDB: 일부 트랜잭션 잠금 구조체 필드(
trx->lock)가 mutex로 적절히 보호되지 않았습니다. (Bug #29809137) -
InnoDB: 복구 중 빈 undo 세그먼트 업데이트에서 assertion이 발생했습니다. (Bug #29802703)
-
InnoDB: recipient 데이터에 full-text 인덱스가 있는 테이블이 포함된 경우 recipient에서 데이터를 삭제하려고 할 때 cloning 작업이 실패했습니다. (Bug #29796507)
-
InnoDB: file-per-table 테이블스페이스가 discard된 후, 이전 테이블의 이름을 변경하고 같은 이름으로 새 테이블을 생성할 때 오류가 보고되었습니다. 이 오류는 오래된 파일 경로 정보 때문이었습니다. (Bug #29793800)
-
InnoDB: 서버가 디스크 가득 참 상태일 때 읽기 전용 모드로 파일을 열려고 시도하는 테스트 케이스에서 debug assertion 실패가 발생했습니다. 해당 assertion은 서버가 파일 열기를 재시도할 수 있도록 하고, 여러 번 시도한 후에도 성공하지 못하면 오류를 보고하도록 제거되었습니다. (Bug #29692250, Bug #95128)
-
InnoDB:
RENAME TABLE작업 중 구성된 외래 키 관련 테이블에 이전 테이블 이름이 포함되었습니다. (Bug #29686796) -
InnoDB: 서버가 0이 아닌 데이터 길이를 가진 컬럼에 대해 NULL 값을 전달했습니다. (Bug #29654465)
-
InnoDB:
lower_case_table_names=1로 정의된 소스 및 대상 인스턴스에서 MySQL 8.0.13 인스턴스(또는 그 이전)에서 MySQL 8.0.14, 8.0.15, 또는 8.0.16 인스턴스로 파티셔닝된 테이블을 가져오면 소스 및 대상 인스턴스에 대해 “tablespace is missing” 오류가 발생하며 실패했습니다. 가져오기 작업에서 사용된 테이블스페이스 파일과 메타데이터 파일을 파일 이름 대소문자 불일치로 인해 찾을 수 없었습니다. (Bug #29627690, Bug #94850)참조: 이 문제는 다음의 회귀입니다: Bug #26925260.
-
InnoDB:
QUICK_SKIP_SCAN_SELECT::get_next()의 핸들러 메서드 호출에 대해 읽기 세트(TABLE::read_set)가 올바르게 설정되지 않아 어설션 실패가 발생했습니다. (Bug #29602393) -
InnoDB: 이제 마스터 키 회전 중에 테이블스페이스 truncate 작업을 차단하기 위해 배타적 백업 잠금이 사용됩니다. 이전에는 undo 테이블스페이스 이름에 대한 메타데이터 잠금이 작업을 동기화하는 데 사용되었습니다. 이 패치는 마스터 키 회전과 drop undo 테이블스페이스 작업 사이에서 발생할 수 있는 데드락도 해결합니다. (Bug #29549938, Bug #30461225, Bug #97352)
-
InnoDB: 범위를 지정하는
WHERE조건이 있는SELECT...FOR [SHARE|UPDATE]쿼리를 수행할 때 불필요한 next key lock이 획득되어, 로우가 하나 더 많이 잠겼습니다. 이 문제의 가장 일반적인 발생 사례가 해결되어, 검색된 범위와 교차하는 로우 및 갭만 잠기도록 했습니다. (Bug #29508068) -
InnoDB: 일반 컬럼과 함께 첫 번째 위치에 가상 컬럼을 추가하면 assertion failure가 발생했습니다. (Bug #29501324)
-
InnoDB: 종료 프로세스가
InnoDB백그라운드 스레드가 종료될 때까지 기다리지 않았으며, 이로 인해 백그라운드 스레드가 MySQL 트랜잭션 목록에서 트랜잭션을 제거할 때까지 기다리면서 종료가 지연될 수 있었습니다. 이제InnoDB백그라운드 스레드가 올바르게 종료되었는지 확인하는 검사가 수행됩니다. 또한InnoDB마스터 스레드의 종료 타이밍을 개선하기 위해 중간 종료 상태가 추가되었습니다. (Bug #29417503) -
InnoDB: TempTable 스토리지 엔진 작업 중 할당된 메모리의 마지막 블록을 해제하지 못해 메모리 누수가 발생했으며, TempTable은 이 메모리를 스레드 종료 시까지 스레드 로컬 스토리지에 보관합니다. (Bug #29300927)
-
InnoDB: 작은
innodb_io_capacity_max설정, 단일 페이지 클리너 스레드 및 여러 버퍼 풀 인스턴스를 사용하는 과중한 워크로드에서 처리량이 정체되었습니다. (Bug #29029294) -
InnoDB: 동시 삽입이 있는 장시간 실행되는
ALTER TABLE... ADD INDEX작업으로 인해 세마포어 대기가 발생했습니다. 패치를 제공해 주신 Satya Bodapati에게 감사드립니다. (Bug #29008298) -
InnoDB: MySQL 5.7에서 MySQL 8.0으로 업그레이드한 후
INFORMATION_SCHEMA.INNODB_COLUMNS테이블이 파티셔닝된 테이블 컬럼을 표시하지 않았습니다. MySQL 8.0 릴리스에서 생성된 파티셔닝된 테이블의 경우,INFORMATION_SCHEMA.INNODB_COLUMNS는 첫 번째 테이블 파티션의 컬럼만 표시했습니다. (Bug #28869903, Bug #93033) -
InnoDB: 내부
rtr_page_split_and_insert()함수는 재귀적으로 호출됩니다. 이 함수에 대한 내부 호출이 동일한 함수에 대한 외부 호출에서 아직 사용 중인 객체를 해제하여 assertion 실패가 발생했습니다. (Bug #28569379) -
InnoDB: 특정 상황에서
innodb_limit_optimistic_insert_debug변수를 2로 설정하면 오류를 보고해야 할 때 debug assertion이 발생했습니다. (Bug #28552330, Bug #92187) -
InnoDB: 트랜잭션이 레코드 잠금을 next key 잠금으로 업그레이드하려고 할 때 데드락이 발생할 수 있었습니다. (Bug #23755664, Bug #82127)
-
InnoDB:
INFORMATION_SCHEMA.INNODB_METRICSlock_deadlocks카운터가 모든 데드락을 계산하지 않았습니다. 기여해 주신 Laurynas Biveinis에게 감사드립니다. (Bug #21278148, Bug #77399) -
InnoDB: 읽기 작업 중에 보고된 오류가 읽은 파일의 이름을 식별하지 않았습니다. (Bug #21120885, Bug #76020)
-
Replication: 일부 그룹 멤버가 지원하지 않는 통신 프로토콜 버전을 설정하는 데
group_replication_set_communication_protocol()함수가 사용된 경우, 프로토콜 변경 절차가 올바르게 중지되지 않았습니다. 이 문제는 이제 수정되었습니다. (Bug #30209596) -
Replication:
default_table_encryption시스템 변수의 세션 값이 복제되므로, 복제 슬레이브가 데이터베이스와 테이블스페이스에 대한 올바른 암호화 설정을 보존합니다.table_encryption_privilege_check시스템 변수가ON으로 설정된 복제 채널의 경우,default_table_encryption의 세션 값이 변경되는 이벤트를 적용하려면TABLE_ENCRYPTION_ADMIN권한이 필요합니다. 이 권한이 복제 슬레이브에 부여되지 않은 경우, 이벤트에 필요한 암호화 설정이 실제로는 슬레이브 자체의 기본 암호화 설정과 동일하여 해당 작업이 동작해야 했던 일부 상황에서 복제가 오류와 함께 중지되었습니다. 또한 슬레이브와 다른 암호화 설정을 가진 명령문이 동작하지 않아야 했는데도 성공할 수 있었습니다. 이제 해당 동작이 수정되어,TABLE_ENCRYPTION_ADMIN권한이 없는 복제 슬레이브는 자체 기본 암호화 설정과 일치하는 이벤트를 적용할 수 있으며, 불필요하게 암호화 설정을 지정하도록 요청받지 않지만, 이벤트에 다른 암호화 설정이 필요한 경우에는 여전히 적절한 권한 검사 대상이 됩니다. (Bug #29818605) -
Replication:
group_replication_unreachable_majority_timeout시스템 변수로 지정된 초 단위 타임아웃이 2초마다 한 번만 확인되었습니다. 이제 홀수 값이 준수되도록 타임아웃을 1초마다 확인합니다. (Bug #29762005) -
Replication: 슬레이브에서 SQL 스레드를 시작하기 위해
START SLAVE문이 실행되었을 때 SQL 스레드가 아직 중지되는 중이었고, 동시에 슬레이브 상태 요청이 이루어진 경우 세 스레드가 관련된 교착 상태가 발생할 수 있었습니다. 이제 SQL 스레드가 중지되는 동안 잠금을 더 일찍 해제하여 이 문제가 수정되었습니다. (Bug #29697588, Bug #95115) -
Replication:
WAIT_FOR_EXECUTED_GTID_SET()함수의 잠금 문제로 인해 특정 상황에서 서버가 중단될 수 있었습니다. 이제 이 문제가 수정되었습니다. (Bug #29550513) -
Replication:
binlog_encryption시스템 변수의 값이START SLAVE문이 실행되는 동안 변경되면 데드락이 발생할 수 있었습니다. (Bug #29515210) -
Replication: 복제 슬레이브의 하트비트 간격은
CHANGE MASTER TO문의MASTER_HEARTBEAT_PERIOD옵션으로 제어되며, 밀리초 단위의 해상도로 지정할 수 있습니다. 이전에는 마스터의 바이너리 로그 덤프 스레드가 하트비트 신호를 슬레이브로 전송해야 하는지 계산하는 데 초 단위의 세분성을 사용했으며, 이로 인해 여러 이벤트를 건너뛴 경우 과도한 하트비트 활동이 발생했습니다. 이 문제를 제거하기 위해 이제 마스터와 슬레이브의 모든 하트비트 관련 계산은 정밀도를 위해 나노초 단위의 세분성을 사용하여 수행됩니다. 기여해 주신 Facebook에 감사드립니다. (Bug #29363787, Bug #94356) -
Replication: 함수형 인덱스가 있는 테이블을 생성하면 테이블에 숨겨진 생성 컬럼이 생성되지만, 이 컬럼이 테이블 내에서 항상 같은 위치에 나타나지는 않았습니다. 이는 나중에 해당 테이블에 컬럼 하나 또는 여러 컬럼을 추가하면, 단일 CREATE TABLE 문에서 추가 컬럼 하나 또는 여러 컬럼을 이미 가지고 있는 그 외에는 동일한 테이블과 비교할 때 숨겨진 컬럼이 다른 위치에 남을 수 있음을 의미했습니다. 예를 들어, 이러한 차이는
CREATE TABLE t (a INT, INDEX ((a+1)))및ALTER TABLE t ADD COLUMN b INT두 문으로 생성된 후 변경된t1과,CREATE TABLE t2 (a INT, b INT, INDEX ((a+1)))를 사용하여 생성된t2라는 두 테이블 사이에서 드러날 수 있었습니다. 이는SHOW CREATE TABLE t1과SHOW CREATE TABLE t2가 동일한 결과를 생성했더라도 마찬가지였습니다(테이블 이름은 제외).방금 설명한 문제는 바이너리 로그에서
Table_map_log_events가 설명하는 테이블의 내부 정의가 서로 다를 수 있다는 사실 때문에 문제가 될 수 있었습니다. 이는 이러한 테이블이 마스터에서CREATE TABLE에 이어ALTER TABLE을 사용하여 생성된 다음, mysqldump를 사용하여 슬레이브가 배포되면, 슬레이브의 테이블 버전은 단일 CREATE TABLE 문을 사용하여 생성되고, 이후 로우 이벤트의 복제가 타입 불일치로 인한 오류와 함께 실패함을 의미했습니다.이 문제는 숨겨진 모든 생성 컬럼이 항상 컬럼 목록의 끝에 위치하도록 강제하고, 여러 생성 컬럼은 컬럼 이름별로 정렬하도록 하여 수정되었습니다. 새 함수형 인덱스 부분이 테이블에 추가되면, 이 규칙에 따라 새 숨겨진 컬럼이 삽입됩니다. 또한 사용자가 생성 컬럼이 아닌 새 컬럼을 생성하는 경우, 해당 컬럼은 항상 첫 번째 숨겨진 컬럼 앞에 추가됩니다.
이 변경의 영향을 받는 테이블의 구조는 업그레이드 중에 자동으로 변경되지 않습니다. 이는
ALTER TABLE을 실행하여 명시적으로 수행해야 합니다.(Bug #29317684)
-
Replication:
RESET MASTER문이 실행 중에 중지되면, 이후 바이너리 로그에 쓰기를 할 수 없었습니다. (Bug #29125121) -
Replication: GTID를 사용하고
MASTER_AUTO_POSITION이ON으로 설정된 멀티스레드 슬레이브에서, 예기치 않은 중단 후 슬레이브가 릴레이 로그 복구를 시도했으며, 릴레이 로그가 손실된 경우 이 복구가 실패하여 복제가 시작되지 못했습니다. 그러나 GTID auto-positioning을 사용하여 누락된 트랜잭션을 복원할 수 있으므로 이 단계는 불필요했습니다. 복구 상황에서 슬레이브는 이제 먼저MASTER_AUTO_POSITION이ON으로 설정되어 있는지 확인하며, 설정되어 있으면 건너뛰어야 하거나 건너뛰지 않아야 하는 트랜잭션을 계산하는 단계를 생략하므로, 이전 릴레이 로그가 필요하지 않으며 복구가 이 로그 없이 진행될 수 있습니다. (Bug #28830834, Bug #92882) -
Group Replication: 긴 네트워크 오류로 인해 Group Replication에서 사용하는 TCP 연결이 시간 초과되면, 그룹 통신 엔진(XCom)이 로컬 연결을 다시 설정할 수 없어 인스턴스에서 Group Replication을 다시 시작해야 했습니다(Bug #25656508 참조). 이전에는 이 상황에서 Group Replication 중지를 시도하면 XCom이 멈추어 다시 시작할 수 없었습니다. 이제 이 문제가 수정되어 XCom이 올바르게 종료되고 Group Replication을 다시 시작하여 로컬 연결을 다시 설정할 수 있습니다. (Bug #30132500)
References: 다음도 참조하십시오: Bug #22158368.
-
Group Replication:
ANSI_QUOTESSQL 모드가 활성화된 경우, Group Replication은 분산 복구를 위한 원격 클로닝 작업을 수행하기 위해 MySQL Server의 clone 플러그인이 있는지 확인할 때 오류를 반환했습니다. 이제 이 문제가 수정되었습니다. (Bug #30099796) -
Group Replication:
default_table_encryption은 이러한 경우에는 이 변수를 설정할 수 없어야 함에도 불구하고, Group Replication이 실행 중인 동안SET PERSIST를 실행하여 변경할 수 있었습니다. (Bug #30031228, Bug #96158) -
Group Replication:
group_replication_local_address가 멤버에 대해 변경된 후 해당 멤버가 그룹에 다시 참여한 경우, 이전 로컬 주소의 복사본이 Group Communication System (GCS)에 의해 일부 위치에 유지되었습니다. 이를 수정하기 위해 이제 필요할 때 로컬 주소를 가져오며, 더 이상 캐시에서 가져오지 않습니다. (Bug #29910699) -
Group Replication: 원격 클로닝 작업을 사용하여 참여 중인 멤버에 트랜잭션을 제공하고 작업 중에 참여 중인 멤버가 중지된 경우, 해당 멤버가 정상적으로 종료되지 않았습니다. (Bug #29902389)
-
Group Replication: 이 릴리스에서 도입된 입력 채널은 Group Replication의 Group Communication System (GCS) 컴포넌트와 로컬 그룹 통신 엔진(XCom) 인스턴스 간 통신에 TCP 소켓 대신 공유 메모리 큐를 사용합니다. 이 입력 채널은 SELinux 설치에서 설정될 수 없었으며, 이는 MySQL 8.0.14 이상으로 업그레이드된 멤버가 그룹에 다시 참여할 수 없음을 의미했습니다. Group Replication이 시작되면 XCom 인스턴스는 GCS가 입력 채널에 대한 연결을 설정할 수 있도록 ephemeral port 범위에서 포트를 일시적으로 열었지만, SELinux에서는 mysqld 프로세스에 이 포트에 연결할 권한이 없었습니다. 해결 방법은 MySQL이 임의의 포트에 연결할 수 있도록 SELinux 정책을 수정하는 것이었지만, 이는 보안을 낮추었습니다. 이 문제는 이제 수정되었습니다. XCom과 GCS는 더 이상 입력 채널에 대한 연결을 설정하는 데 ephemeral port를 사용하지 않고, 대신
group_replication_local_address로 설정된 Group Replication 통신 포트를 사용합니다. 이 동작은 SELinux에서 허용되어야 합니다(Frequently Asked Questions 참조). (Bug #29742219, Bug #30087757) -
Group Replication: Common Name 값에 와일드카드를 사용한 서버 인증서가 잘못 거부되었습니다. (Bug #29683275, Bug #95068)
-
Group Replication:
STOP GROUP_REPLICATION이 실행되고 멤버의 상태가OFFLINE인 후에도 Group Communication System (GCS)이 해당 멤버로부터 메시지를 전달할 수 있었으며, 이로 인해 오류가 발생했습니다. 이제 GCS는 이러한 메시지를 전달하기 전에 해당 멤버가 그룹에 속하는지 확인합니다. (Bug #29620900) -
Group Replication: 지연된 플러그인 초기화 스레드와 같이 일시적이거나 사소한 작업을 실행한 일부 스레드가 Performance Schema
threads테이블에 표시되지 않았습니다. (Bug #28930537, Bug #93212) -
Group Replication: 오류로 인해 멤버가 그룹을 떠나는 프로세스의 구현이 컴포넌트 전반에서 표준화되었습니다. 이를 통해 그룹을 떠나는 원래 이유와 관계없이 멤버가 정확히 동일한 작업을 수행하고 동일한 오류 메시지를 일관되게 발행하도록 보장합니다. (Bug #28866495, Bug #93027)
-
XA COMMIT문에서, 문 실행에 관여하는 플러그인의 호출 순서가 비결정적이었으며, 이로 인해 복제 문제가 발생할 수 있었습니다. 수정 사항을 기여해 주신 Dennis Gao에게 감사드립니다. (Bug #31082237, Bug #99051) -
keyring_aws플러그인이 Commercial Docker RPM 패키지에 포함되지 않았습니다. (Bug #30199423) -
SQL 스크립트에서 C 소스를 생성할 때, 일부 utf8 인코딩 문자가 여러 줄에 걸쳐 분할되었습니다. 패치를 제공해 주신 Przemysław Skibiński에게 감사드립니다. (Bug #30152555, Bug #96449)
-
ARRAY예약어가INFORMATION_SCHEMA.KEYWORDS테이블에서 비예약어로 나열되었습니다. (Bug #30134275, Bug #96416) -
||를 포함하는 일부 문이PIPES_AS_CONCATSQL 모드가 활성화된 경우에도 파싱 오류를 발생시켰습니다. (Bug #30131161, Bug #96405)참조: 이 문제는 다음의 회귀입니다: Bug #29305022.
-
LOAD DATA문이SET절이 있는 경우NO_AUTO_VALUE_ON_ZEROSQL 모드를 잘못 무시했습니다. (Bug #30126375) -
thread_pool플러그인이 활성화된 경우 자동 업그레이드가 서버 종료와 함께 실패했습니다. (Bug #30121742) -
각 실행마다 구체화된 파생 테이블을 다시 계산할지 여부를 결정할 때, 테이블의 rematerialize 플래그(현재
JSON_TABLE()에 대해서만 true임) 대신 부모 쿼리 블록의 캐시 불가능성이 사용되었습니다. 이로 인해 특히 병합되지 않은 뷰에 대해 쿼리를 수행할 때 불필요한 재구체화가 발생하여 성능이 저하될 수 있었습니다. (Bug #30110851) -
IGNORE절이 있는 경우LOAD DATA는CHECK제약 조건 위반을 생성한 로우를 건너뛰고 다음 로우를 계속 처리해야 하지만, 오류와 함께 중지되었습니다. (Bug #30084966, Bug #96296) -
sql_require_primary_key가 활성화된 경우 clone 플러그인 초기화가 실패했는데, 이는 인덱스나 프라이머리 키를 지원하지 않는 두 개의 동적 Performance Schema 테이블을 생성했기 때문입니다. 이제sql_require_primary_key의 영향은 복제에 참여할 수 있는 스토리지 엔진(현재 Performance Schema를 제외한 모든 스토리지 엔진)으로 제한됩니다. (Bug #30083300, Bug #96281) -
macOS에서 Protobuf 컴파일이 실패했습니다. (Bug #30079536, Bug #96263)
-
자동 업그레이드의 경우
audit_log플러그인이 다시 로드되지 않아 감사가 레거시 모드로 시작되었습니다. (Bug #30068110) -
중복 로우를 제거하려면 weedout 최적화에 각 로우의 고유 식별자가 필요하며, 이 식별자는 스토리지 엔진이
handler::position()을 호출하여 제공합니다. 그러나 이 함수가 항상 올바른 시점에 호출되지는 않았거나, 때때로 필요하지 않을 때 호출되었습니다. 이러한 호출을 배치하는 방법과 시점에 관한 문제는 최적화에서 많은 버그의 원인이었습니다. 이 수정은handler::position()호출 책임을 반복자로 이동하며, 반복자의 기본 구현은 일반적으로 이 작업을 자체적으로 적절히 처리합니다. (Bug #30060691)참조: 다음도 참조하십시오: Bug #29693294, Bug #30049217, Bug #30153695.
-
COM_PROCESS_INFO명령 처리 오류로 인해 서버가 종료될 수 있었습니다. (Bug #30032302) -
사용 중단된 시스템 변수에 값이 할당되면 일반적으로 경고가 생성되지만, 서버 시작 중 영속 시스템 변수가 처리될 때는 이 동작이 발생하지 않았습니다. (Bug #30030648)
-
bind_address가 여러 주소를 포함하는 값으로 설정된 상태에서host_cache_size=0을 설정하면 클라이언트 연결 시점에 서버가 종료되었습니다. (Bug #30018958) -
Windows에서 Ninja 빌드 타입에 대해 Protobuf 컴파일이 실패했습니다. (Bug #30018894)
-
SHOW PROCESSLIST출력에 완료되어 더 이상 처리 중이 아닌 문장이 포함될 수 있었습니다. (Bug #29999818) -
mysqldump 오류 메시지 버퍼가 너무 작아 메시지가 잘릴 가능성이 있었습니다. (Bug #29999782, Bug #96074)
-
인플레이스 업그레이드 중 MySQL 5.7에서 MySQL 8.0으로 테이블을 가져오는 동안 “다음에 사용될” 자동 증가 값 대신 마지막으로 사용된 자동 증가 값이 캐시되었으며, 이로 인해 업그레이드 후 테이블 캐시에서 읽힌 모든 테이블에 잘못된 자동 증가 값이 있게 되었습니다. (Bug #29996434)
-
상수 폴딩을 사용하는 prepared statement를 실행할 때
MEMROOT에 할당된 것이 아니라 스택에 할당되어 더 이상 범위 내에 있지 않은 위치를 롤백용으로 등록할 수 있었습니다. (Bug #29990693)참조: 다음도 참조하십시오: Bug #29939331.
-
CREATE TABLE... AS및CREATE TABLE... LIKE문에서YEAR컬럼을 포함하는 테이블을 생성할 때ZEROFILL이 사용 중단되었다는 경고가 생성되었습니다. 이는ZEROFILL속성이YEAR컬럼에 암시적으로만 추가되었을 수 있기 때문에 혼동을 줄 수 있었습니다. 혼동을 방지하기 위해 이러한 문에 대해서는 더 이상 경고가 발생하지 않습니다. (Bug #29961060) -
WHERE text_col < (int_col & int_col) AND int_col = -1에서와 같이 비트 연산자를 사용하는 쿼리가 예상대로 어떠한 로우도 반환하지 못했습니다. (Bug #29957969) -
Optimizer 힌트의 잘못된 형식의 리소스 그룹 이름이 예기치 않은 서버 동작으로 이어질 수 있었습니다. (Bug #29955732)
-
EXPLAIN은FORMAT=TREE를 사용할 때FORMAT=JSON과 동일한 비용을 표시하지 않았습니다. 특히FORMAT=TREE를 사용할 때 계산된 비용은 조인에 대한eval_cost를 고려했지만, 베이스 테이블에 대해서는 고려하지 않았습니다. (Bug #29953579) -
Solaris의 경우,
mysqld.cc에 더 이상 필요하지 않은memcntl()프로토타입이 포함되어 있었습니다. 이 프로토타입은 제거되었습니다. (Bug #29953495, Bug #95971) -
Solaris의 경우, GCC로 컴파일할 때
-DWITH_SSL=system이 작동하지 않았습니다. (Bug #29953460, Bug #95970) -
-DWITHOUT_SERVER=1로 설정된 MySQL 빌드가 실패했습니다. (Bug #29948728, Bug #95740) -
내부 메서드
Field_tiny::pack()이 항상 예상대로 범위 검사를 수행하지는 않았습니다. (Bug #29948029)참조: 다음도 참조하십시오: Bug #31591391.
-
플러그인 언로드를 부적절하게 처리하면 서버 종료가 발생할 수 있었습니다. (Bug #29941948)
-
내부
MEM_ROOT클래스가 모든 메모리 부족 오류를 올바르게 처리하지 않았습니다. (Bug #29940846) -
JSON_SCHEMA_VALIDATION_REPORT()는 JSON 스키마에 따라 검증되지 않은 JSON 문서와 너무 깊게 중첩된 JSON 문서를 구분하지 않았으며, 이로 인해 일부 경우 잘못된 동작이 발생했습니다. (Bug #29940833) -
<=>연산자를 사용하면 매우 큰 상수와 관련된 비교에서 잘못된 결과가 나올 수 있었습니다. (Bug #29939331, Bug #95908) -
keyring_aws플러그인의 경우,keyring_aws_region시스템 변수의 일부 유효한 리전 값이 거부되었습니다. (Bug #29933758) -
debug 빌드에서
GEOMETRY컬럼과SELECT * FROM (SELECT NULL)의 결합된 데이터 타입을 계산할 때UNION쿼리 중 assertion이 발생할 수 있었습니다. (Bug #29916900, Bug #95827) -
binary캐릭터셋으로 정의된 컬럼의 경우,SHOW CREATE TABLE이 실행 시 문법 오류를 생성하는CREATE TABLE문을 생성할 수 있었습니다. (Bug #29909573, Bug #95801) -
특정 스토리지 엔진을 사용하는 스키마의 테이블 이름을 가져오고, 스토리지 엔진이 생성하고 숨긴 스키마의 테이블 이름을 가져오기 위한 데이터 딕셔너리 API가 추가되었습니다. 전자는 NDB에 필요하며, 후자는
DROP DATABASE작업에 필요합니다. (Bug #29906844, Bug #95792) -
mysqldump는
--order-by-primary옵션과 함께 실행될 때 메모리를 누수했습니다. (Bug #29906736) -
functional 인덱스가 포함된 쿼리의 경우,
EXPLAIN FORMAT=TREE는 인덱싱된 표현식 대신 숨겨진 컬럼 이름을 출력했습니다. (Bug #29904996) -
디버그 빌드의 경우,
CREATE TABLE... IGNORE SELECT...문에서 삽입될 마지막 로우가 실패한CHECK제약 조건 때문에 건너뛰어졌을 때 테이블 상태를 제대로 정리하지 않았습니다. 이로 인해 해당 테이블을 사용하는 다음 문에서 assertion이 발생할 수 있었습니다. (Bug #29903865) -
MySQL은 이 CTE에 대한 재귀 쿼리의 종료 조건에 다른 재귀 CTE를 사용하는
INpredicate가 있는 경우 recursive common table expression (CTE)의 실행을 올바르게 처리하지 않았습니다. (Bug #29899614) -
서로 다른 테이블스페이스 파일에 있는 파티션을 가진 테이블에서 serialized dictionary information (SDI)의 역직렬화가 실패했습니다. (Bug #29898965)
-
LDAP 인증 플러그인을 사용하는 인증에서 사용자 DN 부분이 비어 있고 그룹 매핑이 설정된 경우, 인증에서 잘못된 사용자 DN을 할당하고 사용자 검색을 건너뛰었습니다. (Bug #29897624)
-
이름 없이 정의된 제약 조건이 일부 경우에 서버 종료를 일으킬 수 있었습니다. (Bug #29892876)
-
MySQL 5.7에서 MySQL 8.0으로의 인플레이스 업그레이드가 누락된 NDB 테이블스페이스 때문에 실패했습니다. (Bug #29889869, Bug #30113440)
-
mysqlpump는 MySQL 5.7보다 오래된 서버에 대해 실행될 때 오류를 생성했습니다. (Bug #29889253)
-
Boost가 다운로드되었을 때, 다운로드된 파일의 크기를 결정하는 CMake 설정 로직이 올바르지 않았으며, 다운로드 작업이 성공한 후 해당 파일을 제거할 수 있었습니다. (Bug #29881279)
-
부호 없는 정수 타입 캐스팅으로 인한 가능한 정수 오버플로우가 임의 크기 메모리 할당으로 인해 이후 버퍼 오버플로우로 이어질 수 있었습니다. (Bug #29878914)
-
클라이언트 캐릭터셋이
latin1이 아닌 경우, 서버는DECIMAL값의 문자열 표현을latin1에서 클라이언트 캐릭터셋으로 변환했습니다. 지원되는 모든 클라이언트 캐릭터셋은 숫자를latin1과 같은 방식으로 인코딩하므로 이 변환은 필요하지 않았으며, 따라서 더 이상 수행되지 않습니다. (Bug #29875672) -
vio_description()디버깅 함수가 nondebug 빌드에서 호출되었습니다. (Bug #29871361) -
MySQL 8.0.3의 이전 문제에 대한 수정은 상수
DATE값에 대한 표현식을 캐시할 수 있는지 여부를 검사하는 테스트를, 전역 변수를 제외한 모든 표현식을 허용하는 방식에서 상수에 대한 것인지 여부와 관계없이 모든 함수에 대한 전면적인 거부로 변경했으며, 이로 인해 Optimizer가 문자열을DATE값으로 변환해야 하는 관련 쿼리의 성능에 상당한 영향을 주었습니다. 이 테스트는 원래 형식으로 되돌려졌습니다. (Bug #29871018)참조: 이 문제는 다음의 회귀입니다: Bug #85471, Bug #28576018.
-
INFORMATION_SCHEMA는 스토리지 엔진에서 동적 테이블 통계를 가져올 수 있지만, 이는 파티션된 테이블에서는 작동하지 않았습니다. (Bug #29870919, Bug #95641) -
실패한 접근 제어 구문을 재시도하면 메타데이터 잠금이 해제되고 다시 획득되는 시간 창 동안 다른 스레드가 접근 제어 캐시에 대한 잠금을 획득할 수 있어 데드락이 발생했습니다. 이제 재시도 작업 중에는 잠금이 해제되지 않습니다. (Bug #29870899, Bug #95612)
-
적절한 권한이 없는 사용자가
offline_mode시스템 변수를 활성화하려고 하면 assertion이 발생할 수 있었습니다. (Bug #29849046) -
Fedora 패키징 설정은 mysql_config_editor에 대한 디버그 정보를 잘못된 패키지에 넣었습니다. (Bug #29841342)
-
MeCab 플러그인 초기화 중 해제된 객체 사용을 시도하여 세그멘테이션 폴트가 발생했습니다. (Bug #29832534)
-
랜덤 패스워드에 대한 엔트로피를 생성하는 데 사용되는 함수가 때때로 충분한 엔트로피를 제공하지 못할 수 있었습니다. (Bug #29808492)
-
super_read_only가 활성화된 상태에서, 서버가DROP TABLESPACE를 부적절하게 처리할 수 있었습니다. (Bug #29802833) -
서버가 구체화된 semijoin을 포함하는 left join이 있는 쿼리를 올바르게 처리하지 못했습니다. (Bug #29800741)
-
RPM 패키지를 사용하여 설치된 MySQL의 경우, 클라이언트 계정이 LDAP 인증 플러그인을 사용하여 인증되면 서버 연결성을 테스트하는 초기화 스크립트가 잘못 동작했습니다. (Bug #29786782)
-
스토리지 엔진 초기화 중 부적절한 잠금으로 인해 서버 종료가 발생할 수 있었습니다. (Bug #29782379)
-
GTID가 활성화된 서버에서,
DROP USER와 뷰에 접근하는 prepared statement를 동시에 실행하면 교착 상태가 발생할 수 있었습니다. (Bug #29772622) -
antijoin 변환이 포함된
SELECT WHERE NOT EXISTS (SELECT FROM (derived_table) WHERE false_condition)형식의 쿼리에 대해EXPLAIN FORMAT=JSON을 수행할 때, 서브쿼리는 제거되었지만 해당 서브쿼리 자체의 서브쿼리는 함께 제거되지 않고 위로 이동되었습니다. (Bug #29759277)참조: 다음도 참조하십시오: Bug #30017509.
-
중단된 테이블스페이스 암호화 작업으로 인해 데이터 딕셔너리와 스토리지 엔진 메타데이터 사이에 불일치가 발생했으며, 그 결과 이후 테이블스페이스에 액세스하려는 시도에서 어설션 실패가 발생했습니다. (Bug #29756808)
-
event scheduler와
DROP EVENT를 동시에 실행하면 lock wait timeout까지 lock 획득이 중단될 수 있었습니다. (Bug #29742901, Bug #95223) -
컬럼이 표현식에서 기본값을 가져올 때
CHECK제약 조건이 적용되지 않았습니다. (Bug #29706689, Bug #95192) -
임시 테이블 없이 같은 테이블에 대해 두 번 정렬을 수행할 때, 두 정렬 모두 같은 버퍼를 사용하려고 시도하여 범위를 벗어난 읽기가 발생했습니다. 이는 같은 쿼리가
DISTINCT와ORDER BY를 모두 사용할 때 발생할 수 있었습니다. (Bug #29699759) -
정렬된 테이블과 관련된 weedout을 수행할 때, 정렬이 로우 ID별로 수행되지 않았습니다. (Bug #29693294)
-
VS2019는 debug 컴파일이 선택된 상태에서
/ZI플래그 사용으로 인해 컴파일 오류를 발생시켰습니다. 이제 대신/Z7이 사용됩니다. (Bug #29691691, Bug #95125) -
소스 배포판에서는
dbug디렉터리의 오래되고 유지 관리되지 않는 코드를 정리하기 위해 DBUG 패키지와 관련하여 다음 변경이 이루어졌습니다:dbug.cc를mysys디렉터리로 이동하고dbug라이브러리를 제거했습니다.dbug.cc에서 사용되지 않는 함수를 제거했습니다.DBUG_LEAVE매크로를 제거했습니다. 더 이상 필요하지 않습니다.- 어차피 출력되지 않을 가능성이 높은 문자열의 포맷팅을 방지하기 위해
DBUG_LOG매크로의 본문을if _db_enabled_()로 감쌌습니다. dbug디렉터리를 제거했습니다.
(Bug #29680868, Bug #95082)
-
참조 항목 배열을 할당하는 동안, 모든 윈도우 함수에 대한 개수가 고려되지 않았습니다. 그 결과 윈도우 함수를 가진 표현식이 분할될 때, 새 항목 참조를 저장하는 데 필요한 추가 공간이 올바르게 할당되지 않았습니다. (Bug #29672621)
-
사용자 변수의 콜레이션 설정이 모든 경우에 올바르게 작동하지 않았습니다. (Bug #29665165)
-
SHOW문에서WHERE절의 처리가 일관되게 수행되지 않았습니다. (Bug #29664758) -
동일한
ALTER TABLE문 안에 제약 조건을 삭제하고 추가하는 절이 지정된 경우, 해당 절들이 잘못된 순서로 실행되었습니다. (Bug #29652464) -
이제
EXPLAIN은 결과가 로우 ID별로 정렬되는 경우를 표시합니다. (Bug #29634196) -
다음 경우 중 어느 경우에도 더 이상 불필요한 구체화가 수행되지 않습니다:
- 그룹화를 위한 경우와 같이 조인의 끝에서 정렬을 수행하고, 해당 정렬이 로우 ID를 사용하지 않는 경우.
- 한 번 넘게 읽히지 않을 파생 테이블을 구체화하는 경우.
(Bug #29634179)
-
arg가FLOAT값으로 표현하기에 너무 작은 경우,CAST(arg AS FLOAT)는 예상되는 범위 초과 오류를 반환하지 않았습니다. (Bug #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.3)대신(2.3, 2.299999952316284)를 반환했습니다. (Bug #29621062) -
log0meb.cc가 일부 빌드 옵션에서 컴파일되지 않았습니다. (Bug #29616525) -
클라이언트 라이브러리가 서버에서 결과 집합 메타데이터를 가져오는 동안 널 포인터를 역참조할 수 있었습니다. (Bug #29597896, Bug #30689251)
-
날짜 값과 interval 값을 더할 때 interval 값 검사에서 런타임 오류가 발생할 수 있었습니다. (Bug #29587536)
-
Undefined Behavior Sanitizer가 활성화된 빌드에서 -9223372036854775808을 곱하면 경고와 잘못된 결과가 발생할 수 있었습니다. (Bug #29581610)
-
시작 중에 서버가 바이너리 로그에 기록되어서는 안 되는 작업을 기록하려고 시도했습니다. (Bug #29557747, Bug #94835)
-
CREATE VIEW v1 AS SELECT * FROM table WHERE (constant IN (SELECT constant) IS UNKNOWN)형식의 문이 어설션으로 이어졌습니다. (Bug #29525304)참조: 이 문제는 다음의 회귀입니다: Bug #25466100.
-
EL6에서 FIPS가 활성화된 OpenSSL 라이브러리를 사용할 수 없는 경우, FIPS 모드를 활성화하려고 시도하면 서버 오작동이 발생할 수 있었습니다. (Bug #29519794)
-
SET PERSIST_ONLY는SET PERSIST가 (변수 설정이 발생하는 방식 때문에) 지속할 수 없는 일부 시스템 변수를 지속하는 데 사용할 수 있습니다. 이러한 변수가 시작 시mysqld-auto.cnf에서 발견되면, 이제 서버는 경고를 발생시키고 해당 설정을 무시합니다. (Bug #29511118) -
서버가 일부 경우 부분 취소와 스키마 수준 권한을 적절히 집계하지 않았습니다. (Bug #29484519)
-
디버그 빌드에서
DEFAULT절로 정의된ENUM또는SET컬럼이 어설션을 발생시켰습니다. (Bug #29480711) -
MySQL Installer는 Development 컴포넌트가 선택되지 않은 경우 OpenSSL DLL 종속성을 설치하지 않았습니다. (Bug #29423421, Bug #94168, Bug #30199579, Bug #96573)
-
READ UNCOMMITTED격리 수준에서 memcached 클라이언트의 높은 부하가 발생할 때 세그멘테이션 오류가 발생했습니다. 한 트랜잭션이 업데이트 중이던 외부에 저장된BLOB컬럼을 다른 트랜잭션이 NULL 값과 0이 아닌 데이터 길이를 가진 것으로 읽었습니다. (Bug #29396364, Bug #93961) -
IPv6 주소 확인이 동작하는 시스템에서 연결 시점의 IPv6 소켓 생성 실패로 인해 메모리 누수가 발생했습니다. (Bug #29374606, Bug #94384)
-
복제 시나리오에서 여러 클라이언트가 동일한 XID 값을 사용하는
XA COMMIT또는XA ROLLBACK문을 동시에 실행하면 복제 불일치가 발생할 수 있었습니다. (Bug #29293279, Bug #94130) -
TIMESTAMPADD()함수의 인수가 prepared statement에서 뒤바뀔 수 있었습니다. (Bug #29268394) -
CREATE USER문의DEFAULT ROLE옵션이 바이너리 로그에 기록되지 않았습니다. (Bug #28948915, Bug #93252) -
유효하지 않은 memcached 플러그인 변수 설정으로 명령줄에서 서버를 시작하면 서버가 종료되었습니다. (Bug #28575863)
-
LOAD DATA의SET절이GEOMETRY NOT NULL컬럼을 설정하는 데 작동하지 않았습니다. (Bug #28460369, Bug #91893) -
Windows 8 이상에서
keyring_aws플러그인이 Amazon KMS 서버와 통신할 수 없었습니다. (Bug #28377961) -
INFORMATION_SCHEMA테이블과SHOW COLUMNS는 뷰에 대한 쿼리에UNION연산자로 결합된 여러 쿼리 블록이 있는 경우 잘못된 뷰 컬럼 타입을 생성할 수 있었습니다. (Bug #28278220, Bug #91486) -
Debian에서 시작 시 긴
InnoDB복구 시간으로 인해 systemd 서비스 시작 실패가 발생할 수 있었습니다. 이제 이러한 일이 발생하지 않도록 기본 systemd 서비스 타임아웃이 비활성화되었습니다(RHEL과 일치함). (Bug #28246585, Bug #91423) -
thread_pool플러그인이 활성화된 경우sys.processlist및sys.session뷰가 실제 사용자 이름이 아니라 스레드 이름을 표시했습니다. (Bug #25906021, Bug #85976) -
sys.schema_index_statistics뷰의delete_latency컬럼이 Performance Schematable_io_waits_summary_by_index_usage테이블의SUM_TIMER_DELETE컬럼이 아니라SUM_TIMER_INSERT컬럼을 잘못 참조했습니다. (Bug #25521928) -
sys.diagnostics()프로시저의 출력에서,user_summary_by_file_io_type뷰의latency컬럼이 형식화된 값이 아니라 원시 피코초로 잘못 표시되었습니다. (Bug #25287996) -
MySQL Enterprise Encryption 함수가 Diffie-Hellman (DH) 메서드를 DH가 아닌 키에 적용할 수 있었으며, 그 결과 예측할 수 없는 결과 또는 서버 종료가 발생했습니다. (Bug #22839007)
-
SHOW PROCESSLIST및 일부INFORMATION_SCHEMA와 Performance Schema 테이블에서 비밀번호 마스킹이 불완전했습니다. (Bug #20712046) -
strict SQL 모드가 활성화된 경우,
STR_TO_DATE()함수가 시간 부분만 있는 값을 올바르게 처리하지 못했습니다. 기여해 주신 Daniel Black에게 감사드립니다. (Bug #18090591, Bug #71386) -
WHERE절에서GREATEST()를 사용하는 쿼리는 특정 경우에 예상된 로우를 반환하지 못하거나 잘못된 오류를 발생시킬 수 있었습니다. (Bug #96012, Bug #29963278) -
sort_buffer_size를 최댓값 또는 그에 가까운 값으로 명시적으로 설정하면 일부 쿼리가 메모리 부족 오류로 실패했습니다. (Bug #95969, Bug #29952775)참조: 함께 참조하십시오: Bug #22594514.
-
조회 키에 하나 이상의
NULL이 포함된 경우 인덱스 조회를 피하기 위한 지연NULL필터링이 정방향 인덱스 스캔에는 수행되었지만, 역방향 인덱스 스캔에는 수행되지 않았습니다. (Bug #95967, Bug #29954680) -
함수형 인덱스에서
IFNULL()또는ABS()같은 함수를 사용하면, 이러한 함수의 인수로 사용된UNSIGNED컬럼에 해당 부호 있는 정수 타입의 값을 초과하는 값이 포함된 경우 Value is out of range for functional index... 오류가 발생했습니다. (Bug #95881, Bug #29934661) -
IFNULL()함수의 결정 절차가COALESCE()를 포함하여CASE연산에서 파생된 다른 모든 함수의 절차와 달랐으며, 이로 인해 특정 숫자 표현식에 대해 잘못된 길이 정보가 생성되었습니다. (Bug #94614, Bug #29463760) -
UNION ALL... LIMIT 1을 사용하는 쿼리는Handler_read_key및Handler_read_next에 표시된 것처럼 과도한 수의 로우를 평가했습니다. (Bug #79340, Bug #22292995)참조: 함께 참조하십시오: Bug #79040, Bug #22158368, Bug #92994, Bug #28866942.
-
-DWITH_EXAMPLE_STORAGE_ENGINE=1CMake 옵션은 무시되었지만, 무시되어서는 안 되었습니다.-DWITH_EXAMPLE_STORAGE_ENGINE=0이 지정되면,EXAMPLE스토리지 엔진은 플러그인으로 빌드됩니다. (Bug #70859, Bug #17772560, Bug #30133062)참조: 다음도 참조하십시오: Bug #18324650.