MySQL 8.0 Release Note

8.0.26 변경 사항 (2021-07-20 GA)

Estimated reading: 10 minutes 70 views

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

감사 로그 관련 사항

이전에는 MySQL Enterprise Audit에서 기록된 각 이벤트에 SQL 문의 리터럴 텍스트가 포함되었습니다. (SQL 문에 민감한 정보가 포함될 수 있으므로) 이를 대체할 방법으로, 감사 로그 필터링 언어는 이제 문의 리터럴 텍스트 대신 해당 문의 다이제스트를 기록하는 기능을 지원합니다. 예를 들어, 다음과 같은 문의 경우

SELECT * FROM orders WHERE some_sensitive_column=1234567

감사 로그 플러그인은 다음과 같은 다이제스트를 기록할 수 있습니다

SELECT * FROM `orders` WHERE `some_sensitive_column` = ?

이는 이미 준비된 문(statement)에서 기록되는 방식과 유사하며, 실제 데이터 값 대신 매개변수 마커가 나타납니다.
다이제스트 로깅을 수행하려면, 문의 리터럴 텍스트를 해당 다이제스트로 대체하는 감사 필터 정의를 사용해야 하며, 이는 이벤트 필드 값의 대체에서 논의된 바와 같습니다.
텍스트 대체는 감사의 초기 단계(필터링 중)에 발생하므로, 문의 리터럴 텍스트를 기록할지 다이제스트 값을 기록할지의 선택은 나중에 기록되는 로그 형식(XML 또는 JSON 출력 여부)에 관계없이 적용됩니다. (버그 #31482609, WL #14267, WL #14724)

MySQL Enterprise Audit에서, 새로운 audit_log_format_unix_timestamp 시스템 변수를 통해 각 감사 기록에 time 필드를 포함시킬 수 있습니다. 이 필드 값은 감사 이벤트가 생성된 날짜와 시간을 나타내는 UNIX 타임스탬프 값을 나타내는 정수입니다. time 필드는 JSON 형식 로그 파일에서만 지원됩니다. (WL #14600)

MySQL Enterprise Audit에서, 새로운 audit_log_max_size 시스템 변수는 결합된 로그 파일 크기를 기반으로 한 감사 로그 파일의 정리를 가능하게 합니다. audit_log_max_size가 효과를 발휘하려면, audit_log_rotate_on_size가 0보다 커야 합니다. 이 조건이 충족되면 정리 알고리즘은 audit_log_max_sizeaudit_log_prune_seconds를 함께 사용하며, audit_log_max_size의 값이 0이 아닌 경우 audit_log_prune_seconds의 값보다 우선적으로 적용됩니다. 자세한 내용은 감사 로그 파일의 공간 관리를 참조하십시오. (WL #14525)

인증 관련 사항

이전에는 서버가 클라이언트에게 보내는 “hello” 패킷의 일부로 서버 측 인증 플러그인의 이름을 전송했습니다. 이제 서버는 클라이언트 측 플러그인 이름을 전송하며, 이는 클라이언트의 요구에 더 적합하고 불필요한 프로토콜 왕복을 피하는 데 도움이 될 수 있습니다. (WL #14308)

컴파일 관련 사항

macOS: 이제 ARM 기반 macOS 11(즉, Apple M1 시스템)용 MySQL 빌드가 가능합니다. (버그 #32386050, 버그 #102259)

openSUSE 15 및 SLES 15에서 빌드하려면 이제 gcc-9gcc9-c++ 패키지에 포함된 GCC 9가 필요합니다.
SLES 12에서 빌드하려면 이제 gcc-10gcc10-c++ 패키지에 포함된 GCC 10이 필요합니다.
libmysqlclient C API 라이브러리를 기반으로 하는 서드 파티 애플리케이션을 빌드할 때도 지정된 GCC 버전을 사용하는 것이 권장됩니다. (버그 #32886268, 버그 #32886439)

Ubuntu 18.04(bionic)에서 빌드하려면 이제 gcc-8g++-8 패키지에 포함된 GCC 8이 필요합니다. 또한 libmysqlclient C API 라이브러리를 기반으로 하는 서드 파티 애플리케이션을 빌드할 때 GCC 8을 사용하는 것이 권장됩니다. (버그 #32877062)

이제 GCC 10을 사용하여 Solaris에서 MySQL을 빌드할 수 있으며, 이는 기본 및 권장 컴파일러가 됩니다. 또한 libmysqlclient C API 라이브러리를 기반으로 하는 서드 파티 애플리케이션을 빌드할 때 GCC 10을 사용하는 것이 권장됩니다. (버그 #32552988)

컴포넌트 관련 사항

새로운 컴포넌트 서비스가 서버 컴포넌트가 시스템 변수 값을 설정할 수 있도록 합니다. 이 서비스에 대한 정보는 MySQL Server Doxygen 문서에서 확인할 수 있습니다(검색어: s_mysql_mysql_system_variable_update_stringmysql_system_variable_update_string_imp). (WL #12002)

사용 중단 및 제거 관련 사항

TLSv1 및 TLSv1.1 연결 프로토콜은 이제 사용 중단되었으며, 향후 MySQL 버전에서 지원이 제거될 예정입니다. (배경 정보는 IETF 메모 TLSv1.0 및 TLSv1.1 사용 중단을 참조하십시오.) 더 안전한 TLSv1.2 및 TLSv1.3 프로토콜을 사용하여 연결하는 것이 권장됩니다. TLSv1.3을 사용하려면 MySQL 서버와 클라이언트 애플리케이션 모두 OpenSSL 1.1.1 이상으로 컴파일되어야 합니다.
서버 측에서는 이 사용 중단이 다음과 같은 영향을 미칩니다:

  • tls_version 또는 admin_tls_version 시스템 변수에 사용 중단된 TLS 프로토콜이 포함된 값이 할당되면, 서버는 사용 중단된 각 프로토콜에 대해 경고를 생성합니다:
    • 할당이 서버 시작 시 발생하면 경고는 오류 로그에 나타납니다.
    • 할당이 실행 중에 발생하면 경고는 ALTER INSTANCE RELOAD TLS 문 실행 결과에 추가됩니다.
  • 클라이언트가 사용 중단된 TLS 프로토콜을 사용하여 성공적으로 연결하면 서버는 오류 로그에 경고를 기록합니다.

클라이언트 측에서는 이 사용 중단이 가시적인 영향을 미치지 않습니다. 클라이언트는 사용 중단된 TLS 프로토콜을 허용하도록 구성된 경우 경고를 발생시키지 않습니다. 여기에는 다음이 포함됩니다:

  • MySQL 서버와의 연결에 사용할 TLS 프로토콜을 지정하기 위한 --tls-version 옵션을 지원하는 클라이언트 프로그램.
  • 복제본이 소스 서버와의 연결을 위한 TLS 프로토콜을 지정할 수 있도록 하는 명령문. (CHANGE REPLICATION SOURCE TO에는 SOURCE_TLS_VERSION 옵션이 있고, CHANGE MASTER TO에는 MASTER_TLS_VERSION 옵션이 있습니다.)
  • 분산 복구 연결을 위한 TLS 프로토콜을 지정할 수 있는 group_replication_recovery_tls_version 시스템 변수.

(버그 #32565996, WL #14519)

시스템 변수 transaction_write_set_extraction은 이제 사용 중단되었으며, 이를 설정하거나 값을 읽으려고 할 때 경고 메시지가 표시됩니다. 이 변수는 향후 MySQL 릴리스에서 제거될 예정입니다. 이 시스템 변수는 다중 스레드 복제본이 있는 복제 소스 서버에서 트랜잭션의 쓰기 집합에서 추출된 쓰기를 해시하는 데 사용되는 알고리즘을 지정하는 데 사용되었습니다. MySQL 8.0에서 기본값이며 그룹 복제를 위해 필수적인 XXHASH64 알고리즘은 시스템 변수가 사용되지 않을 때 선택됩니다. (WL #13950)

temptable_use_mmap 변수는 이제 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. (WL #14124)

MySQL에서 TLS 지원은 이제 보안 가능한 포트 또는 프로토콜에 적용되는 TLS 매개변수의 명명된 집합을 사용하는 채널 모델로 전환되고 있습니다. 예를 들어, 특정 TLS 채널의 상태를 조회하려면 퍼포먼스 스키마 tls_channel_status 테이블을 사용합니다:

mysql> SELECT VALUE FROM performance_schema.tls_channel_status
       WHERE CHANNEL = 'mysql_main' AND PROPERTY = 'Enabled';
+-------+
| VALUE |
+-------+
| Yes   |
+-------+

이로 인해 TLS 전체에 적용되는 단일 매개변수가 덜 적용되므로, 다음 옵션 및 시스템 변수는 이제 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다:

--ssl--admin-ssl 옵션은 기본적으로 활성화되어 있으므로, 이를 명시적으로 지정할 필요는 없습니다. 주요 인터페이스 또는 관리 인터페이스에 대해 암호화된 연결을 비활성화하려면 해당 TLS 버전 시스템 변수를 빈 값으로 설정하여 TLS 버전이 지원되지 않음을 나타냅니다. 예를 들어, 서버의 my.cnf 파일에 다음 줄을 추가하면 두 인터페이스 모두에 대해 암호화된 연결이 비활성화됩니다:

[mysqld]
tls_version=''
admin_tls_version=''

(WL #14481)

에러 처리

이제 클라이언트 타임아웃에 대한 서버 오류 로그에 기록되는 정보에는 (사용 가능한 경우) 타임아웃 값과 클라이언트 사용자 및 호스트 정보가 포함됩니다. (버그 #31581289, 버그 #100112)

이벤트 스케줄러 관련 사항

이벤트 스케줄러가 활성화된 상태에서 super_read_only 시스템 변수를 활성화하면, events 데이터 사전 테이블에서 이벤트의 “마지막 실행” 타임스탬프가 업데이트되지 않습니다. 이로 인해 이벤트 스케줄러는 예약된 이벤트를 다음에 실행하려 할 때 중지되며, 서버 오류 로그에 메시지를 기록합니다.
이전에는 super_read_only 활성화로 이벤트 스케줄러가 중지된 후, super_read_only 비활성화 시 이벤트 스케줄러를 다시 수동으로 활성화해야 했습니다. 이제 서버는 read_only 또는 super_read_only가 비활성화되면 자동으로 이벤트 스케줄러를 다시 시작합니다. (버그 #31633859)

방화벽 관련 사항

MySQL 8.0.23에서는 MySQL Enterprise Firewall이 여러 계정에 적용할 수 있는 그룹 프로필을 구현했으며, 이전에 구현된 각 계정에 적용되는 계정 프로필과 함께 사용할 수 있습니다. MySQL Enterprise Firewall 사용을 참조하십시오.
하나의 멤버 계정이 있는 그룹 프로필은 해당 계정에 대한 계정 프로필과 논리적으로 동일하므로, 계정 및 그룹 프로필을 혼합하여 사용하는 대신 그룹 프로필만 사용하여 방화벽을 관리할 수 있습니다. 새로운 방화벽 설치의 경우, 새 프로필을 그룹 프로필로 일관되게 생성하고 계정 프로필을 사용하지 않으면 됩니다. 기존에 계정 프로필이 있는 방화벽 설치에서 업그레이드하는 경우, MySQL Enterprise Firewall은 계정 프로필을 그룹 프로필로 변환하기 위한 저장 프로시저인 sp_migrate_firewall_user_to_group()을 제공합니다.
그룹 프로필이 제공하는 유연성으로 인해, 계정 프로필과 관련된 모든 방화벽 기능은 이제 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다:

  • INFORMATION_SCHEMA 테이블: MYSQL_FIREWALL_USERS, MYSQL_FIREWALL_WHITELIST
  • mysql 시스템 스키마 테이블: firewall_users, firewall_whitelist
  • mysql 시스템 스키마 저장 프로시저: sp_reload_firewall_rules(), sp_set_firewall_mode()
  • 로드 가능 함수: read_firewall_users(), read_firewall_whitelist(), set_firewall_mode()

또한 서버가 시작 시 계정 프로필을 감지하면, 성공적으로 로드된 계정 프로필마다 경고 메시지를 기록합니다.
계정 프로필을 그룹 프로필로 변환하는 방법(최대한 빨리 수행해야 함)에 대한 정보는 계정 프로필을 그룹 프로필로 마이그레이션하기를 참조하십시오. (WL #14174)

패키징 관련 사항

시스템 curl 라이브러리에 링크하지 않고 curl을 포함하는 바이너리 패키지가 curl 7.77.0으로 업그레이드되었습니다. (버그 #33077562)

Ubuntu 패키지의 경우, mysqld에 대한 AppArmor 프로필이 PID 및 소켓 파일 이름과 관련하여 너무 제한적이어서 프로필에 정확한 이름이 없는 서버에서는 실패했습니다. 이제 프로필이 파일이 있는 디렉터리에 적용되어 서로 다른 파일 이름과 여러 서버에 적용할 수 있습니다. (버그 #32857611)

dh-systemd 패키지는 Ubuntu 21.04에서 제거되었으므로 해당 배포판에서 빌드된 MySQL 패키지의 종속성이 제거되었습니다. (버그 #32688072)

Debian 패키지의 경우, systemd 서비스가 /etc/default/mysql 파일이 있으면 그곳에서 환경 변수를 읽을 수 있도록 EnvironmentFile 지시어가 추가되었습니다. (버그 #32082863, 버그 #101363)

Debian 패키지는 이제 경로 이름에 /var/run 대신 /run을 사용합니다. (버그 #31955638)

번들된 lz4 라이브러리가 버전 1.9.3으로 업그레이드되었습니다. (버그 #29747853)

Debian 패키지의 경우, MySQL 구성 파일의 update-alternatives 우선순위가 증가하여 이전에 설치된 배포판에서 기존 파일을 대체하도록 보장됩니다. (버그 #29606955)

플러거블 인증

Linux: MySQL Enterprise Edition은 이제 Kerberos 티켓이 적절히 제공되거나 획득될 수 있는 경우, Kerberos를 사용하여 MySQL 서버에 인증할 수 있는 인증 방법을 지원합니다. 이 기능은 Linux에서 실행되는 MySQL 서버 및 클라이언트 호스트에서만 사용할 수 있지만, Linux 이외의 호스트에서 실행 중인 Kerberos 서비스에 액세스할 수 있습니다. 자세한 내용은 Kerberos 플러그형 인증을 참조하십시오.
이 인증 방법은 서버 측의 authentication_kerberos 플러그인과 클라이언트 측의 authentication_kerberos_client 플러그인 쌍을 사용합니다. 서버 측 Kerberos 인증 플러그인은 MySQL Enterprise Edition에만 포함되며, MySQL 커뮤니티 배포판에는 포함되지 않습니다. 클라이언트 측 플러그인은 커뮤니티 배포판을 포함한 모든 배포판에 포함됩니다. 이를 통해 서버 측 플러그인이 로드된 서버에 모든 배포판의 클라이언트가 연결할 수 있습니다. (WL #14336)

서버 관리

innodb_strict_mode 시스템 변수의 세션 값을 설정하는 것이 이제 제한된 작업이 되었으며, 세션 사용자는 제한된 세션 변수를 설정할 수 있는 충분한 권한을 가지고 있어야 합니다.
제한된 세션 변수를 설정하는 데 필요한 권한에 대한 정보는 시스템 변수 권한을 참조하십시오. (버그 #32944980, WL #14610)

공간 데이터 지원

이제 ST_Buffer() 함수는 지리적 공간 참조 시스템(SRS)을 사용하는 지오메트리 인수를 허용하며, 이 경우 지오메트리 값이 점일 때만 가능합니다. 이전에는 ST_Buffer() 함수가 카르티션 SRS에서만 지오메트리 인수를 지원했습니다. 또한, ST_Difference()ST_Union() 함수는 이제 지리적 SRS의 지오메트리 인수를 허용합니다. 이전에는 이 함수들도 카르티션 SRS에서만 지오메트리 인수를 지원했습니다. 자세한 내용은 공간 연산자 함수를 참조하십시오. (WL #14126, WL #14188, WL #14266)

X Plugin 관련 사항

X DevAPI의 Session.run_sql() 메서드를 사용하여 여러 결과를 반환하는 쿼리를 실행할 때, 캐싱 문제로 인해 result.columns 속성이 활성 결과에 있는 열을 반영하지 않았으며, 대신 result.column_names 속성만이 업데이트되었습니다. (버그 #32887586)

업그레이드 과정에서 X 플러그인은 TCP 포트 및 UNIX 소켓이 할당되면 연결을 받을 준비가 되었다는 메시지를 기록했습니다. 그러나 실제로는 업그레이드 과정이 완료된 후에만 연결을 받을 수 있었습니다. 이제 메시지는 업그레이드가 완료된 후에만 발행됩니다. (버그 #32814997)

기능 추가 및 변경 사항

비호환 변경 사항: MySQL 8.0.26부터 “master”와 “slave”라는 용어를 대체하는 새로운 별칭 또는 교체 이름이 제공됩니다. “master”는 “source”로, “slave”는 “replica”로, 그리고 “mts”(multithreaded slave)는 “mta”(multithreaded applier)로 변경되었습니다. 관련된 경우 도움말 텍스트도 이러한 새로운 이름을 사용하도록 변경되었습니다.
다음 이름 변경 사항은 퍼포먼스 스키마 테이블, 프로세스 목록, 그리고 복제본 상태 정보에서 확인할 수 있습니다. 이러한 변경은 이전 버전과의 호환성에 영향을 미치며, 해당 계측 이름을 사용하는 모니터링 도구에 영향을 미칠 수 있습니다:

  • 계측된 잠금(mutexes)은 퍼포먼스 스키마 테이블 mutex_instancesevents_waits_*에서 wait/synch/mutex/ 접두사와 함께 표시됩니다.
  • 읽기/쓰기 잠금은 퍼포먼스 스키마 테이블 rwlock_instancesevents_waits_*에서 wait/synch/rwlock/ 접두사와 함께 표시됩니다.
  • 계측된 조건 변수는 퍼포먼스 스키마 테이블 cond_instancesevents_waits_*에서 wait/synch/cond/ 접두사와 함께 표시됩니다.
  • 계측된 메모리 할당은 퍼포먼스 스키마 테이블 memory_summary_*에서 memory/sql/ 접두사와 함께 표시됩니다.
  • 스레드 이름은 퍼포먼스 스키마 테이블 threads에서 thread/sql/ 접두사와 함께 표시됩니다.
  • 스레드 단계는 퍼포먼스 스키마 테이블 events_stages_*에서 stage/sql/ 접두사와 함께 표시되며, threadsprocesslist 퍼포먼스 스키마 테이블, SHOW PROCESSLIST 명령의 출력, Information Schema의 processlist 테이블 및 슬로우 쿼리 로그에는 접두사가 표시되지 않습니다.
  • 스레드 명령은 퍼포먼스 스키마 테이블 events_statements_history*events_statements_summary_*_by_event_name에서 statement/com/ 접두사와 함께 표시되며, threadsprocesslist 퍼포먼스 스키마 테이블, SHOW PROCESSLIST 명령의 출력, Information Schema의 processlist 테이블, 그리고 SHOW REPLICA STATUS 명령의 출력에서는 접두사가 표시되지 않습니다.

이러한 비호환 변경 사항이 영향을 미치는 경우, 새로운 시스템 변수 terminology_use_previousBEFORE_8_0_26로 설정하여 MySQL 서버가 이전 이름을 사용하도록 할 수 있습니다. 이를 통해 이전 이름에 의존하는 모니터링 도구가 업데이트되기 전까지 계속 작동할 수 있습니다. 이 시스템 변수는 세션 범위에서 설정하여 개별 기능에 적용하거나 글로벌 범위에서 설정하여 모든 새로운 세션에 기본값으로 사용할 수 있습니다. 글로벌 범위를 사용할 때는 슬로우 쿼리 로그에 이전 이름이 기록됩니다.
반동기 복제의 경우, 시스템 변수 및 상태 변수에서 새로운 버전과 이전 버전 중 어느 것을 사용할지 선택할 수 있습니다. 반동기 복제를 구현하는 플러그인의 새로운 버전이 제공되며, “master”와 “slave”를 “source”와 “replica”로 대체합니다. 다음과 같이 새 버전의 플러그인을 설치할 수 있습니다:

  • 소스용 rpl_semi_sync_master 플러그인 (semisync_master.so 라이브러리)의 새 버전은 rpl_semi_sync_source (semisync_source.so 라이브러리)입니다.
  • 복제본용 rpl_semi_sync_slave 플러그인 (semisync_slave.so 라이브러리)의 새 버전은 rpl_semi_sync_replica (semisync_replica.so 라이브러리)입니다.

동일한 인스턴스에 두 플러그인을 모두 설치할 수는 없습니다. 새 플러그인을 사용하면 새 시스템 변수와 상태 변수를 사용할 수 있지만, 이전 버전의 플러그인을 사용하면 이전 변수만 사용할 수 있습니다.
내부적으로 사용되는 항목은 새 용어로 변환되었지만 사용자 또는 모니터링 도구에 표시되지 않으며, MySQL 서버가 필요한 처리를 내부적으로 처리합니다:

  • C++ 소스 코드 파일명
  • C++ 파일의 헤더 가드
  • 디버그 심볼
  • 복제본이 복제 소스 서버에 연결할 때 복제 프로토콜 핸드셰이크로 전달되는 사용자 변수 (복제본은 이전 이름과 새 이름을 모두 설정)

다음 범주의 식별자는 새 별칭이 있으며, 이전 이름을 사용할 때 경고가 표시되지만 이전 이름도 계속 작동합니다. 이러한 이름은 퍼포먼스 스키마 테이블 및 상태 표시에서 모두 사용할 수 있으며, 이러한 경우 읽을 때는 경고가 표시되지 않습니다. 새 별칭은 새로운 시스템 변수 terminology_use_previous의 영향을 받지 않으며, 해당 변수를 설정해도 계속 사용할 수 있습니다:

  • “master”, “slave”, 또는 “mts”라는 용어를 포함하는 시스템 변수들은 NDB에서 정의된 것을 제외하고, 이미 사용 중단이 되었거나 사용 중단이 예정된 일부 변수를 제외하고 해당됩니다. 이러한 시스템 변수가 SET PERSIST 문을 사용하여 지속되는 경우, 구 버전과 신 버전의 이름이 모두 지속되며, 어떤 이름이 명시되었는지에 관계없이 두 이름이 모두 저장됩니다. RESET PERSIST 문을 사용하면 두 이름이 모두 초기화됩니다.
  • “master”, “slave”, 또는 “mts”라는 용어를 포함하는 상태 변수들은 NDB에서 정의된 것을 제외하고 해당됩니다.
  • mysqld의 “master”, “slave”, 또는 “mts”라는 용어를 포함하는 명령줄 옵션들은 NDB에서 정의된 것을 제외하고, 이미 사용 중단이 되었거나 사용 중단이 예정된 일부 변수를 제외하고 해당됩니다.
  • mysqladmin의 “master”, “slave”, 또는 “mts”라는 용어를 포함하는 명령줄 옵션들도 해당됩니다.
  • mysqlbinlog의 “master”, “slave”, 또는 “mts”라는 용어를 포함하는 명령줄 옵션들도 해당됩니다.
  • mysqldump의 “master”, “slave”, 또는 “mts”라는 용어를 포함하는 명령줄 옵션들도 해당됩니다.
  • “master”라는 용어를 포함하는 SQL 함수도 포함됩니다.

새로운 별칭이 있는 식별자 목록(반동기 복제의 경우 교체된 항목 포함)은 다음과 같습니다:

  • 시스템 변수:
    • master_verify_checksum는 이제 source_verify_checksum 별칭을 가집니다.
    • sync_master_info는 이제 sync_source_info 별칭을 가집니다.
    • init_slave는 이제 init_replica 별칭을 가집니다.
    • rpl_stop_slave_timeout는 이제 rpl_stop_replica_timeout 별칭을 가집니다.
    • log_slow_slave_statements는 이제 log_slow_replica_statements 별칭을 가집니다.
    • slave_max_allowed_packet는 이제 replica_max_allowed_packet 별칭을 가집니다.
    • slave_compressed_protocol는 이제 replica_compressed_protocol 별칭을 가집니다.
    • slave_exec_mode는 이제 replica_exec_mode 별칭을 가집니다.
    • slave_type_conversions는 이제 replica_type_conversions 별칭을 가집니다.
    • slave_sql_verify_checksum는 이제 replica_sql_verify_checksum 별칭을 가집니다.
    • slave_parallel_type는 이제 replica_parallel_type 별칭을 가집니다.
    • slave_preserve_commit_order는 이제 replica_preserve_commit_order 별칭을 가집니다.
    • log_slave_updates는 이제 log_replica_updates 별칭을 가집니다.
    • slave_allow_batching는 이제 replica_allow_batching 별칭을 가집니다.
    • slave_load_tmpdir는 이제 replica_load_tmpdir 별칭을 가집니다.
    • slave_net_timeout는 이제 replica_net_timeout 별칭을 가집니다.
    • sql_slave_skip_counter는 이제 sql_replica_skip_counter 별칭을 가집니다.
    • slave_skip_errors는 이제 replica_skip_errors 별칭을 가집니다.
    • slave_checkpoint_period는 이제 replica_checkpoint_period 별칭을 가집니다.
    • slave_checkpoint_group는 이제 replica_checkpoint_group 별칭을 가집니다.
    • slave_transaction_retries는 이제 replica_transaction_retries 별칭을 가집니다.
    • slave_parallel_workers는 이제 replica_parallel_workers 별칭을 가집니다.
    • slave_pending_jobs_size_max는 이제 replica_pending_jobs_size_max 별칭을 가집니다.
    • pseudo_slave_mode는 이제 pseudo_replica_mode 별칭을 가집니다.
    • skip_slave_start는 이제 skip_replica_start 별칭을 가집니다.
  • 새로운 rpl_semi_sync_sourcerpl_semi_sync_replica 플러그인이 반동기 복제에서 사용되는 경우:
    • rpl_semi_sync_slave_enabledrpl_semi_sync_replica_enabled로 교체되었습니다.
    • rpl_semi_sync_slave_trace_levelrpl_semi_sync_replica_trace_level로 교체되었습니다.
    • rpl_semi_sync_master_wait_for_slave_countrpl_semi_sync_source_wait_for_replica_count로 교체되었습니다.
    • rpl_semi_sync_master_enabledrpl_semi_sync_source_enabled로 교체되었습니다.
    • rpl_semi_sync_master_timeoutrpl_semi_sync_source_timeout로 교체되었습니다.
    • rpl_semi_sync_master_trace_levelrpl_semi_sync_source_trace_level로 교체되었습니다.
    • rpl_semi_sync_master_wait_pointrpl_semi_sync_source_wait_point로 교체되었습니다.
  • 다음 시스템 변수는 변경되지 않았습니다:
    • ndb_slave_conflict_role (NDB 시스템 변수는 변경되지 않았습니다).
    • binlog_rotate_encryption_master_key_at_startup (“master key”는 허용된 용어입니다).
    • slave_rows_search_algorithms (이 시스템 변수는 이미 사용 중지 예정 상태입니다).
    • master_info_repository (이 시스템 변수는 이미 사용 중지 예정 상태입니다).
  • 상태 변수:
    • Slave_open_temp_tables는 이제 Replica_open_temp_tables 별칭을 가집니다.
    • Slave_rows_last_search_algorithm_used는 이제 Replica_rows_last_search_algorithm_used 별칭을 가집니다.
  • 새로운 rpl_semi_sync_sourcerpl_semi_sync_replica 플러그인이 반동기 복제에서 사용되는 경우:
    • Rpl_semi_sync_slave_statusRpl_semi_sync_replica_status로 교체되었습니다.
    • Rpl_semi_sync_master_statusRpl_semi_sync_source_status로 교체되었습니다.
    • Rpl_semi_sync_master_clientsRpl_semi_sync_source_clients로 교체되었습니다.
    • Rpl_semi_sync_master_yes_txRpl_semi_sync_source_yes_tx로 교체되었습니다.
    • Rpl_semi_sync_master_no_txRpl_semi_sync_source_no_tx로 교체되었습니다.
    • Rpl_semi_sync_master_wait_sessionsRpl_semi_sync_source_wait_sessions로 교체되었습니다.
    • Rpl_semi_sync_master_no_timesRpl_semi_sync_source_no_times로 교체되었습니다.
    • Rpl_semi_sync_master_timefunc_failuresRpl_semi_sync_source_timefunc_failures로 교체되었습니다.
    • Rpl_semi_sync_master_wait_pos_backtraverseRpl_semi_sync_source_wait_pos_backtraverse로 교체되었습니다.
    • Rpl_semi_sync_master_tx_wait_timeRpl_semi_sync_source_tx_wait_time로 교체되었습니다.
    • Rpl_semi_sync_master_tx_waitsRpl_semi_sync_source_tx_waits로 교체되었습니다.
    • Rpl_seми_sync_master_tx_avg_wait_timeRpl_semi_sync_source_tx_avg_wait_time로 교체되었습니다.
    • Rpl_semi_sync_master_net_wait_timeRpl_semi_sync_source_net_wait_time로 교체되었습니다.
    • Rpl_semi_sync_master_net_waitsRpl_semi_sync_source_net_waits로 교체되었습니다.
    • Rpl_semi_sync_master_net_avg_wait_timeRpl_semi_sync_source_net_avg_wait_time로 교체되었습니다.
  • NDB 관련 상태 변수는 변경되지 않았습니다.
  • mysqld의 경우, 위에 나열된 시스템 변수의 명령줄 버전에는 해당하는 명령줄 별칭이나 교체 항목이 있으며, 다음과 같은 명령줄 옵션에는 시스템 변수가 아닙니다:
    • show-slave-auth-info는 이제 show-replica-auth-info 별칭을 가집니다.
  • 다음 명령줄 옵션은 변경되지 않았습니다:
    • abort-slave-event-count (이 명령줄 옵션은 사용 중지 예정입니다).
    • disconnect-slave-event-count (이 명령줄 옵션은 사용 중지 예정입니다).
    • master-info-file (이 명령줄 옵션은 이미 사용 중지 예정입니다).
    • master-retry-count (이 명령줄 옵션은 이미 사용 중지 예정입니다).
  • mysqladmin의 경우, start-slave 옵션은 이제 start-replica 별칭을 가지며, stop-slave 옵션은 이제 stop-replica 별칭을 가집니다.
  • mysqlbinlog의 경우, read-from-remote-master 옵션은 이제 read-from-remote-source 별칭을 가집니다.
  • mysqldump의 경우, 다음 명령줄 옵션에 새로운 별칭이 있습니다:
    • apply-slave-statements는 이제 apply-replica-statements 별칭을 가집니다.
    • delete-master-logs는 이제 delete-source-logs 별칭을 가집니다.
    • dump-slave는 이제 dump-replica 별칭을 가집니다.
    • include-master-host-port는 이제 include-source-host-port 별칭을 가집니다.
    • master-data는 이제 source-data 별칭을 가집니다.
  • 내장 SQL 함수 MASTER_POS_WAIT는 이제 SOURCE_POS_WAIT 별칭을 가집니다.

(WL #14194, WL #14628)

InnoDB: 새로운 innodb_segment_reserve_factor 시스템 변수는 테이블스페이스 파일 세그먼트 페이지에서 비어 있는 페이지로 예약되는 퍼센티지를 구성할 수 있게 해줍니다. 자세한 내용은 파일 세그먼트 페이지의 예약 비율 구성을 참조하십시오.
기여해주신 Facebook에 감사드립니다. (버그 #32312743, 버그 #102044, WL #14521)

그룹 복제: Group Replication에서 이제 싱글-프라이머리 모드의 그룹을 초읽기 전용 모드로 유지하도록 구성할 수 있습니다. 이렇게 하면 클라이언트로부터 직접 쓰기를 받지 않고 복제된 트랜잭션만 수락할 수 있습니다. 이 설정은 그룹의 목적이 다른 그룹에 대한 재해 복구 백업을 제공하는 경우 보조 그룹이 첫 번째 그룹과 동기화 상태를 유지하도록 보장할 수 있습니다. 새로운 프라이머리가 선출될 때 일반적으로 프라이머리에서 해당 모드를 제거하는 동작을 비활성화하여 그룹을 초읽기 전용 모드로 유지할 수 있습니다.
관리자는 이 구성을 위해 새로운 Group Replication 함수인 group_replication_enable_member_action()group_replication_disable_member_action()을 사용하여 그룹 구성원이 지정된 상황에서 수행할 수 있는 작업을 활성화하고 비활성화할 수 있습니다. 이 함수는 Group Replication 플러그인이 설치된 서버에서 그룹의 일부가 아니더라도 사용할 수 있습니다. 구성원 작업은 프라이머리에서 구성되며 그룹 메시지를 통해 다른 그룹 구성원 및 가입하는 구성원에게 전파됩니다. 또 다른 함수인 group_replication_reset_member_actions()을 사용하면 모든 구성원 작업에 대한 설정을 기본값으로 재설정할 수 있습니다. (WL #13855)

그룹 복제: 그룹 내부적으로 생성된 트랜잭션이 바이너리 로그에 기록될 때, 사용되는 GTID의 일부로 대체 UUID를 선택할 수 있습니다. 이 릴리스에서 추가된 시스템 변수 group_replication_view_change_uuid는 그룹 이름(group_replication_group_name의 값) 대신 사용되는 UUID를 지정합니다. 대체 UUID는 뷰 변경 이벤트와 클라이언트에서 받은 트랜잭션을 구분하기 쉽게 해줍니다. 이는 그룹 간 장애 조치(failover)를 허용하는 설정에서, 백업 그룹에만 관련된 트랜잭션을 식별하고 삭제해야 할 때 유용합니다. 모든 그룹 구성원이 동일한 대체 UUID를 지정해야 하므로, 이렇게 설정된 그룹에는 MySQL 8.0.26 이전 버전의 구성원이 포함될 수 없습니다. (WL #14539)

Boost 다운로드 URL이 업데이트되었습니다. 이 기여에 대해 Marcelo Altmann에게 감사드립니다. (버그 #32856104, 버그 #103611)

클론 플러그인은 이제 동일한 버전 및 릴리스의 핫픽스 MySQL 서버 인스턴스로 클론을 허용합니다. 이전에는 핫픽스 서버 인스턴스가 동일한 MySQL 버전 및 릴리스로 인식되지 않았습니다. (버그 #32523635)

다음 명령어들은 이제 캐릭터셋 이름을 기록할 때 utf8 대신 utf8mb3을 보고합니다: EXPLAIN, SHOW CREATE PROCEDURE, SHOW CREATE EVENT.
데이터 사전에서 검색된 저장 프로그램 정의는 이제 캐릭터셋 참조에서 utf8 대신 utf8mb3을 보고합니다. 이는 SHOW CREATE 명령과 같은 정의에서 생성된 모든 출력에 영향을 미칩니다.
이 오류 메시지도 이제 캐릭터셋 이름을 기록할 때 utf8 대신 utf8mb3을 보고합니다: ER_INVALID_CHARACTER_STRING. (버그 #32233614, 버그 #32392077, 버그 #32392209, 버그 #32428538, 버그 #32428598)

fdatasync() 시스템 호출을 지원하는 플랫폼에서는 새로운 innodb_use_fdatasync 변수를 사용하여 운영 체제 플러시를 위해 fdatasync() 대신 fsync()를 사용할 수 있습니다. fdatasync() 시스템 호출은 이후 데이터 검색을 위해 필요하지 않은 경우 파일 메타데이터의 변경 사항을 플러시하지 않으므로 성능 이점을 제공할 수 있습니다. innodb_use_fdatasync 변수는 SET 문을 사용하여 동적으로 설정할 수 있습니다. (WL #14452)

버그 수정

비호환 변경 사항: 트리거 본문에서 SET 절을 사용하는 INSERT 또는 UPDATE 문에 OLD 또는 NEW 값을 할당 대상으로 지정하면 어설션이 발생하거나 서버가 종료될 수 있었습니다. 이제 이러한 할당은 허용되지 않습니다. (버그 #32803211)

성능: 열 간 값을 복사하는 내부 함수가 개선되어 값이 유사한 유형일 경우 불필요한 계산이 수행되지 않도록 했습니다. 이 개선으로 임시 테이블을 사용하는 쿼리의 실행 속도가 눈에 띄게 빨라졌습니다. 내부 테스트 결과 이러한 쿼리가 이전보다 최대 11% 더 빨리 실행되었지만, 실제 결과는 환경, 구성 및 기타 요인에 따라 다를 수 있습니다. (버그 #32742537)

InnoDB: 오류 로그에 불필요한 경고 메시지 수를 줄이기 위해, InnoDB 소스의 fil_space_acquire() 함수를 가능한 경우 fil_space_acquire_silent() 함수로 대체했습니다. (버그 #32944543)

InnoDB: InnoDB 소스의 TRX_FORCE_ROLLBACK_ASYNC 플래그(트랜잭션이 비동기적으로 또는 소유 스레드에 의해 롤백되었는지를 나타내는 플래그)가 불필요한 것으로 확인되어 제거되었습니다. (버그 #32912595)

InnoDB: InnoDB 소스에서 ut_delete 심볼 대신 UT_DELETE 매크로를 사용한 것이 성능 스키마 메모리 추적을 비활성화하는 빌드에서 실패를 일으켰습니다. (버그 #32910699)

InnoDB: InnoDB 소스의 사전 시스템 mutex_entermutex_exit 호출이 각각 dict_sys_mutex_enter()dict_sys_mutex_exit()로 이름이 변경되었습니다. (버그 #32907980)

InnoDB: 레거시 UNIV_INLINEUNIV_MATERIALIZE 아티팩트가 InnoDB 소스에서 제거되었습니다. UNIV_HOTBACKUP이 일부 헤더 파일의 메서드 선언에 추가되었습니다. (버그 #32894165)

InnoDB: lock_sys 분할 rw_lock 인덱스는 낮은 동시성 워크로드에 최적화되지 않은 ut_rnd_interval() 함수를 사용해 임의 인덱스 값을 생성했습니다. (버그 #32880577)

InnoDB: innodb_redo_log_encrypt 변수에 대한 문자열 값 설정이 올바르게 처리되지 않았습니다. (버그 #32851525)

InnoDB: 트랜잭션 시스템 뮤텍스(trx_sys->mutex) 경쟁을 줄이기 위해 각 전용 뮤텍스가 있는 읽기-쓰기 트랜잭션 세트(trx_sys->rw_trx_set)가 도입되었습니다. 관련 개선 사항으로는 트랜잭션 상태(trx->state) 및 트랜잭션 시작 시간(trx->start_time) 필드를 std::atomic 필드로 변환하고, 트랜잭션에서 작업하는 스레드를 확인하는 새로운 어설션 코드를 추가한 것입니다. (버그 #32832196)

InnoDB: InnoDB memcached GET 명령에 대한 레코드 버퍼 논리가 수정되었습니다. (버그 #32828352)

InnoDB: InnoDB 소스의 ut_list 기본 멤버는 실행 시 목록의 기본 노드에 멤버 포인터를 저장하는 대신 목록 유형의 요소 부분을 사용하여 노드를 찾도록 변경되었습니다. 패치에는 기타 ut_list 관련 코드 개선 사항도 포함되어 있습니다. (버그 #32820458)

InnoDB: MySQL 5.6에서 MySQL 5.7로 업그레이드한 후, undo 로그 잘림이 활성화된 상태에서 서버를 시작하면 undo 테이블스페이스 잘림 작업이 시작될 때 교착 상태가 발생했습니다. 직접 업그레이드를 통해 이 문제를 피할 수 있습니다. (버그 #32800020)

InnoDB: PSI_memory_key 식별자에 대한 타입 안전성이 강화되었습니다. PSI_memory_key 식별자는 메모리 작업의 계측을 위해 퍼포먼스 스키마에서 사용됩니다. 이 개선으로 ut::aligned__'name'_ 라이브러리 함수가 컴파일 타임에 타입 오류를 보고할 수 있게 되었습니다. (버그 #32797838)

InnoDB: buf_get_LRU_mutex() 함수가 플러시 목록에서 플러시할 때 불필요하게 LRU 뮤텍스를 획득하지 않도록 최적화되었습니다. (버그 #32797451, 버그 #103391)

InnoDB: 디버그 빌드에서 Fil_shard::m_deleted_spaces(삭제된 테이블스페이스 벡터)에 대한 접근이 Fil_shard 뮤텍스로 보호되지 않아 실패가 발생했습니다. (버그 #32792816)

InnoDB: 2GB RAM을 가진 머신에서 --innodb-dedicated-server로 MySQL을 시작하려고 할 때 하나의 리두 로그 파일이 생성되어 서버가 시작되지 않았습니다. 이제 이 경우 최소 두 개의 로그 파일이 생성됩니다.
기여해주신 Adam Cable에게 감사드립니다. (버그 #32788772, 버그 #103372)

InnoDB: 너무 많은 열을 테이블에 추가하는 작업 후 파티션된 테이블을 잘라내는 동안 실패가 발생했습니다. 이제 ADD COLUMN 작업이 허용되기 전에 추가되는 열 수를 평가합니다. (버그 #32788564, 버그 #103363)

InnoDB: 디스크가 거의 꽉 찬 상태에서 큰 AUTOEXTEND_SIZE 설정으로 테이블스페이스를 생성하면 장치에 공간이 없다는 오류와 이어지는 InnoDB 복구 실패가 발생할 수 있었습니다. (버그 #32771235)

InnoDB: 트랜잭션이 요청한 테이블 잠금 목록(trx->lock.table_locks), 즉 트랜잭션 잠금 목록(trx->lock.trx_locks)의 하위 집합이 제거되었습니다. 이제 트랜잭션이 요청한 테이블 잠금은 트랜잭션 잠금 목록의 시작 부분에 나열됩니다. (버그 #32762881)

InnoDB: 디스크가 거의 가득 찬 상태에서 복구 중에 실패가 발생하여 데이터가 일관성 없는 상태로 남았습니다. 이 실패는 테이블스페이스 확장 작업을 다시 실행하는 fil_tablespace_redo_extend() 함수에서 발생했습니다. (버그 #32749974, 버그 #32748733)

InnoDB: 파일 별 테이블 테이블스페이스를 오프라인으로 이동하고 innodb_directories 옵션을 사용하여 InnoDB에 새 위치를 알린 후, COPY 알고리즘을 사용한 ALTER TABLE 작업이 스토리지 엔진 오류로 실패했습니다. 이 실패는 데이터 디렉토리 대신 새 디렉토리 위치를 검색하는 이름 변경 검사로 인해 발생했습니다. (버그 #32721533)

InnoDB: ut_allocator()의 C++ 표준 템플릿 라이브러리(STL) 호환성 문제가 해결되었습니다. (버그 #32715698)

InnoDB: InnoDB 소스의 std::vector에 의해 인스턴스화된 ut_allocator::allocate() 인스턴스가 암묵적으로 std::vector에 의해 수행된 메모리 할당 및 할당 해제를 추적하지 못했습니다. 동일한 문제가 다른 C++ 표준 템플릿 라이브러리(STL) 및 STL 유사 자료 구조에서도 발견되었습니다. (버그 #32715688)

InnoDB: C++11 스타일 이전에 구현된 사용자 정의 인터페이스인 InnoDB 소스의 ut_allocator::construct() 인터페이스가 불필요한 오버헤드를 발생시켰습니다. 이 인터페이스는 필요하지 않아 제거되었습니다. (버그 #32715381)

InnoDB: InnoDB 소스의 ut_list 길이 멤버 변수가 원자 필드로 대체되어 잠금 없이 액세스할 수 있게 되었습니다. 기본 ut_list 생성자는 모든 목록 초기화를 수행하는 새로운 생성자로 대체되었습니다. (버그 #32715371)

InnoDB: ut_allocator()의 메모리 부족 보고 메커니즘이 신뢰할 수 없어 제거되었습니다. (버그 #32715359)

InnoDB: InnoDB 소스의 ut_allocator::allocate_large()ut_allocator::deallocate_large() 함수에 대해 퍼포먼스 스키마 메타데이터를 암묵적으로 처리하도록 수정되었습니다. 이 수정은 유사한 할당 함수와의 퍼포먼스 스키마 메타데이터 처리를 일치시킵니다. (버그 #32714144)

InnoDB: 병렬 읽기 스레드 수가 머신 코어 수를 초과할 때 동시 SELECT COUNT(*) 쿼리로 인해 정체가 발생했습니다. 이 문제를 해결하기 위한 패치가 MySQL 8.0.24의 Windows 빌드에 제공되었습니다. MySQL 8.0.26 패치는 다른 플랫폼에서도 동일한 문제를 해결합니다. (버그 #32678019)
참고: 버그 #32224707도 참조하십시오.

InnoDB: 레코드의 각 필드에 대한 오프셋을 결정하는 rec_get_offsets() 함수를 비용이 많이 드는 호출을 피하기 위해, 고정 길이를 가지며 가상 열이나 즉석 열이 없는 인덱스와 같은 특정 요구 사항을 충족하는 인덱스에 오프셋 캐싱이 확장되었습니다. (버그 #32673649)

InnoDB: MySQL Enterprise Backup에 의해 복원된 데이터 디렉토리로 서버를 시작할 때, doublewrite 버퍼(innodb_doublewrite 변수로 제어됨)가 서버가 다시 시작될 때까지 비활성화된 상태로 남아 있었습니다. (버그 #32642866)

InnoDB: 다수의 테이블을 생성할 때 “열린 파일이 너무 많습니다” 오류가 발생했습니다. (버그 #32634620)
참고: 이 문제는 버그 #32541241의 회귀입니다.

InnoDB: 페이지 추적 시스템 복구 실패로 인해 InnoDB 복구가 진행되지 못했으며, 이는 비차단이어야 했습니다. (버그 #32630875)

InnoDB: InnoDB 메캐시드(memcached) 플러그인 소스에서 정수 언더플로우 문제가 해결되었습니다. (버그 #32620378, 버그 #32620398)

InnoDB: 트랜잭션이 잠금을 기다리기 시작했을 때 InnoDB 잠금 시스템은 잠금을 현재 보유 중인 트랜잭션에 대한 정보를 서버에 제공했지만, 잠금이 해제되고 다른 대기 중인 트랜잭션에 잠금이 부여된 후에는 서버에 알리지 않았습니다. 그 결과, 복제 적용 스레드 코디네이터는 이 시나리오에서 세 번째 트랜잭션이 초기 대기 트랜잭션 이후 커밋된 경우 발생할 수 있는 의도된 트랜잭션 커밋 순서의 교착 상태를 감지할 수 없었습니다. (버그 #32618301)

InnoDB: 고유한 보조 인덱스에 레코드를 삽입할 때, 영향받은 범위에 충돌하는 레코드를 삽입하는 것을 방지하기 위해 삽입된 인덱스 레코드 잠금은 범위 이후의 첫 번째 레코드에 불필요한 갭 잠금을 포함했습니다. (버그 #32617942)

InnoDB: 동적으로 할당된 정렬된 유형을 생성하는 InnoDB 코드는 ut::aligned_name 라이브러리 함수로 대체되었습니다. (버그 #32601599)

InnoDB: 과도한 정렬된 유형의 동적 저장을 처리하는 API에 속하는 메모리 할당 함수는 퍼포먼스 스키마를 사용하여 메모리 추적을 지원하도록 확장되었습니다. HAVE_PSI_MEMORY_INTERFACE 소스 구성 옵션은 메모리 추적 모듈을 활성화합니다.
aligned_zalloc() 라이브러리 함수가 API에 추가되어 제로로 초기화된 메모리 할당을 지원합니다. (버그 #32600981)
참고: 버그 #32601599, 버그 #32246061, 버그 #32246200도 참조하십시오.

InnoDB: InnoDB 데이터를 샘플링하여 히스토그램 통계를 생성하는 기능이 이제 InnoDB에서 지원하는 모든 트랜잭션 격리 수준에서 지원됩니다. 이전에는 샘플링이 READ UNCOMMITTED 격리 수준에서만 수행되었습니다. (버그 #32555575)

InnoDB: 767바이트를 초과하는 키 접두사 길이를 가진 인덱스가 REDUNDANT 행 형식으로 정의된 테이블에 허용되었으며, 이는 해당 행 형식에 대한 인덱스 키 접두사 길이 제한을 초과했습니다. 인덱스를 추가하는 ALTER TABLE 작업은 테이블의 실제 행 형식 대신 innodb_default_row_format 변수로 정의된 행 형식에 대해 인덱스 키 접두사 길이를 유효성 검사했습니다. 수정된 내용은 올바른 행 형식에 대해 인덱스 키 접두사 길이를 유효성 검사하도록 합니다. (버그 #32507117, 버그 #102597)

InnoDB: 적응형 해시 인덱스 래치가 의미 있는 래치 위치 정보를 제공하지 않았습니다. (버그 #32477773)

InnoDB: 서버 초기화 시 리두 및 언두 로그 암호화와 관련된 종속성이 제거되었습니다. (버그 #32476724)

InnoDB: 온라인 버퍼 풀 크기 조정 작업이 이전 버퍼 풀 페이지 해시를 해제하여, 이전 페이지 해시가 필요한 동시 버퍼 풀 조회와 충돌했습니다. (버그 #32460315)

InnoDB: TempTable 스토리지 엔진을 사용할 때(internal_tmp_mem_storage_engine=TempTable), SELECT 목록에서 255개 이상의 집계 함수가 내부 변수 오버플로로 인해 오류를 발생시켰습니다. 이 변수는 인덱싱된 열 필드 위치를 저장합니다. (버그 #32458104, 버그 #102468)

InnoDB: 대용량 버퍼 풀을 사용하는 인스턴스에서 언두 테이블스페이스 절단 작업을 실행하는 동안 워크로드가 중단되었습니다. 마크된 언두 테이블스페이스를 절단하는 함수는 이제 독점 래치 대신 공유 래치를 사용하며, 공유 래치는 더 짧은 기간 동안 유지됩니다. (버그 #32353863, 버그 #102143)

InnoDB: 과도한 정렬된 유형의 동적 저장을 처리하기 위한 프로그래밍 인터페이스가 추가되었습니다. (버그 #32246200, 버그 #32246061)

InnoDB: 특정 상황에서 InnoDB 복구 중 실패가 발생할 경우 커밋된 변경 사항이 손실될 수 있었습니다. 복구 중 허용된 체크포인트는 페이지 플러시, 플러시 목록 유지보수 또는 데이터 사전 테이블 버퍼에 대한 변경 사항을 지속하는 작업을 적절히 처리하지 못했습니다. 체크포인트와 체크포인트 LSN의 진행은 리두 로그 복구가 완료되고 데이터 사전 동적 메타데이터(srv_dict_metadata)가 데이터 사전 테이블(dict_table_t) 객체로 전송될 때까지 허용되지 않습니다. 이러한 변경으로 인해 복구 중 또는 복구 후(데이터 사전 동적 메타데이터가 데이터 사전 테이블 객체로 전송되기 전에) 리두 로그 공간이 부족할 경우 innodb_force_recovery 재시작이 필요할 수 있으며, 최소한 SRV_FORCE_NO_IBUF_MERGE 설정으로 시작하거나, 실패할 경우 SRV_FORCE_NO_LOG_REDO 설정을 사용해야 할 수 있습니다. 이 상황에서 innodb_force_recovery 재시작이 실패하면 백업에서 복구해야 할 수도 있습니다. (버그 #32200595)

InnoDB: 롤백 세그먼트는 이제 시작 시 병렬로 초기화됩니다. 이전에는 롤백 세그먼트가 직렬로 초기화되었습니다.
이 버그 수정에 기여한 Tencent Cloud-Native Database 팀의 Zheng Lai에게 감사드립니다. (버그 #32170127, 버그 #101658)

InnoDB: innodb_log_writer_threads 변수 구성을 테스트하는 동안 실패가 발생했습니다. 이 실패는 경쟁 조건으로 인해 발생했습니다. (버그 #32129814)
참고: 이 문제는 버그 #30088404의 회귀입니다.

InnoDB: 언두 테이블스페이스를 절단하는 퍼지 스레드와 INFORMATION_SCHEMA.FILES 테이블을 쿼리한 서버 스레드 간에 경쟁 조건이 발생했습니다. 그 결과, 절단된 언두 테이블스페이스가 INFORMATION_SCHEMA.FILES 테이블에 나타나지 않았고, 이로 인해 MySQL Enterprise Backup이 INFORMATION_SCHEMA.FILES 테이블에 의존하여 언두 테이블스페이스 파일 위치를 찾지 못해 실패했습니다. (버그 #32104924, 버그 #32654667)

InnoDB: DML 작업이 단일 테이블에 집중되면 푸지 작업이 단일 푸지 스레드에서 수행되어 푸지 작업이 느려지고, 푸지 지연이 증가하며, DML 작업에 큰 객체 값이 포함될 경우 테이블스페이스 파일 크기가 증가할 수 있었습니다. 이 문제를 해결하기 위해, 푸지 지연이 innodb_max_purge_lag 설정을 초과할 경우, 푸지 작업이 자동으로 사용 가능한 푸지 스레드 간에 재분배됩니다. (버그 #32089028)

InnoDB: INFORMATION_SCHEMA.INNODB_TABLESPACES 테이블을 채우는 함수가 파일의 공간에 접근하여 보호되지 않은 stat() 작업 및 파일 크기 정보를 가져오는 작업을 수행했습니다. (버그 #32025344)

InnoDB: InnoDB 소스의 trx_t::is_recovered 플래그와 관련된 코드는 다양한 복잡성과 정확성 문제를 해결하기 위해 수정되었습니다. 해결된 문제 중 하나는 클라이언트 세션이 XA PREPARE 이후 XA 트랜잭션에서 연결이 끊어진 경우 XA 트랜잭션이 잘못 “복구됨”으로 설명되는 것이었습니다. (버그 #31870582)

InnoDB: TempTable 디버그 어설션 코드에서 Indexed_cells 멤버 함수(cell_from_mysql_buf_index_read())가 길이가 0인 null이 아닌 열을 고려하지 않았습니다. (버그 #31091089)

InnoDB: InnoDB memcached 플러그인을 사용하여 여러 값을 한 번에 get 명령으로 검색하려고 하면 잘못된 값이 반환되었습니다. (버그 #29675958, 버그 #95032)

InnoDB: trx_sys_t::serialisation_mutex가 도입되어 trx_sys_t::mutex의 경합을 줄였습니다. 새 뮤텍스는 트랜잭션 번호가 할당될 때 trx_sys_t::serialisation_list를 보호하며, 이전에는 trx_sys_t::mutex로 보호되었습니다.
이 기여에 대해 Zhai Weixiang에게 감사드립니다. (버그 #27933068, 버그 #90643)

파티셔닝: TIMESTAMP로 파티셔닝된 테이블에서 SELECT 문장의 WHERE 절에 시간대 오프셋이 있는 타임스탬프 리터럴을 사용하는 경우, 파티션이 결과 집합에서 생략될 수 있었습니다.
타임스탬프 리터럴에 시간대 오프셋이 지정된 경우, 해당 오프셋은 시간대 오프셋이 없는 타임스탬프로 변환된 후 타임스탬프 열과 비교되어야 하지만, 모든 경우에 이를 제대로 처리하지 못하여 쿼리에 대해 스캔할 파티션을 선택할 때 파티션이 제외될 수 있었습니다.
우리는 타임스탬프를 비교하기 전에 항상 시간대 오프셋을 제거하여 타임스탬프가 제대로 변환되도록 수정했습니다. (버그 #101530, 버그 #32134145)

복제; 그룹 복제: replication_optimize_for_static_plugin_config 시스템 변수가 설정된 경우, 그룹 복제 및 반동기 복제 플러그인이 서버 종료 시 깔끔하게 제거되지 않았습니다. (버그 #32798287)

복제: CHANGE REPLICATION SOURCE TO 명령에서 SOURCE_CONNECTION_AUTO_FAILOVER=1 옵션이 설정된 경우, STOP REPLICA IO_THREAD 명령이 채널의 연결 실패를 모니터링하는 스레드를 중지시키지 못했고, 잘못된 경우에 적용 스레드를 중지할 수 있었습니다. (버그 #32892977)

복제: START GROUP_REPLICATIONSTOP GROUP_REPLICATION 명령이 그룹의 뷰 변경이 진행 중일 때 동시에 발행되면 교착 상태가 발생할 수 있었습니다. (버그 #32738137, 버그 #32836868)

복제: 코드의 잘못된 기본값으로 인해 복제 그룹에 허용된 IP 주소 목록이 값이 제공되지 않은 경우에도 암묵적으로 재구성되었습니다. (버그 #32714911)

복제: 그룹 멤버에서 복제 채널이 트랜잭션을 커밋하려고 할 때 STOP GROUP_REPLICATION 명령이 발행되면 교착 상태가 발생할 수 있었습니다. 서버는 이제 관련 잠금을 획득할 수 없는 경우 즉시 트랜잭션을 롤백하여 교착 상태를 방지합니다. (버그 #32633176)

복제: 다중 스레드 복제본에서 트랜잭션을 재시도할 때 활성 이벤트에 대한 참조가 잘못 관리될 때가 있었습니다. (버그 #32590974)

복제: 128개 이상의 파티션을 가진 테이블의 마지막 파티션에서 DML 작업을 수행한 후, MySQL 서버 및 MySQL 클라이언트(mysqlbinlog 등)가 바이너리 로그에서 이벤트 정보를 잘못 파싱하여 부정확한 파티션 ID가 기록되었습니다. 이제 정보는 엔디안 독립적인 이벤트 리더 함수를 사용하여 읽습니다. (버그 #32358736, 버그 #102191)

복제: 새로운 MySQL 서버 설치에서, mysql.gtid_executed 시스템 테이블이 지속 통계를 비활성화하기 위한 STATS_PERSISTENT=0 속성이 누락되었습니다. 이 속성은 다른 복제 관련 테이블에는 존재합니다. (버그 #32250735)

복제: 동일한 이벤트에서 동일한 행이 여러 번 업데이트된 경우, 복제 적용기의 해시 스캔 알고리즘이 binlog_row_value_options=PARTIAL_JSON이 설정된 경우 로그된 JSON 부분 업데이트를 확인하지 않아 복제가 “키를 찾을 수 없음” 오류로 중단될 수 있었습니다. (버그 #32221703)

복제: 복제본 서버는 이제 트랜잭션과 연관된 GTID의 트랜잭션 ID 부분을 적용하고 커밋하기 전에 확인하고 검증합니다. (버그 #32103192)

복제: 쓰기 세트 해시에 고유 보조 키가 포함되지 않으면 다중 스레드 복제본에서 복제가 중단될 수 있었습니다. 이제 고유 보조 키가 읽기 세트 및 쓰기 세트에 포함되지 않더라도 항상 쓰기 세트 해시에 포함됩니다. (버그 #31636339)

복제: MySQL 반동기 복제가 소스로 응답을 보낸 후 연결 아티팩트를 올바르게 정리하지 않아 연결을 다시 설정해야 했습니다. 이 문제가 이제 수정되었습니다. (버그 #31363518, 버그 #32441220, 버그 #32759421)

복제: 다중 스레드 복제본( slave_parallel_workers > 0)에서 GTID 자동 위치 지정 알고리즘이 누락된 트랜잭션을 확인하는 과정에서 계산 중에 잠시 이벤트 위치 값을 낮게 설정합니다. 이 작업이 중단되면 트랜잭션 시퀀스의 간격을 해결하는 복구 프로세스가 실패할 수 있습니다. GTID 자동 위치 지정이 사용될 때 이 프로세스는 실제로 필요하지 않으므로 이제 이 프로세스가 비활성화되었습니다.
이로 인해 다중 스레드 복제본에서, GTID_MODE = ON이 인스턴스에 설정되고 SOURCE_AUTO_POSITIONCHANGE REPLICATION SOURCE TO 명령으로 채널에 설정된 경우, 다음 동작이 적용됩니다:

  • START REPLICA UNTIL SQL_AFTER_MTS_GAPS 명령은 실행할 첫 번째 이벤트를 찾으면 적용기 스레드를 중지하고, 트랜잭션 시퀀스의 간격을 확인하려고 시도하지 않습니다.
  • CHANGE REPLICATION SOURCE TO 명령은 트랜잭션 시퀀스에 간격이 있어도 자동으로 실패하지 않습니다.

이 변경된 동작은 GTID 및 GTID 자동 위치 지정을 사용하는 다중 스레드 복제본에만 적용되며, 바이너리 로그 위치 기반 복제를 사용하는 복제본에는 적용되지 않습니다. (버그 #30571587, 버그 #97694)

그룹 복제: 단일 기본 모드에서 그룹 복제를 실행할 때, 데이터 직렬화 중에 불필요한 트랜잭션 데이터 복사본이 생성되었습니다. 이제 메모리 사용량을 줄이기 위해 단일 단계에서 처리됩니다. (버그 #32781945)

그룹 복제: GTID 기반 복제에서 복제된 트랜잭션은 원본 소스 서버에서 트랜잭션이 커밋된 시간을 나타내는 original_commit_timestamp와 복제본에서 커밋된 시간을 나타내는 immediate_commit_timestamp를 포함합니다. 이전에는 그룹 복제 뷰 변경 이벤트에 대해 original_commit_timestamp가 설정되지 않았으며, 이로 인해 타임스탬프가 출력에서 0으로 표시되었습니다. 가시성을 개선하기 위해 이제 그룹 구성원은 뷰 변경 이벤트와 연관된 트랜잭션에 대해 로컬 타임스탬프 값을 설정합니다. (버그 #32668567)

그룹 복제: 원본 커밋 타임스탬프가 복제본의 즉시 커밋 타임스탬프보다 더 최근인 경우 경고 메시지가 오류 로그에 기록되었습니다. 복제 지연이 기계 간의 시계 차이와 유사한 값을 가질 수 있는 상황에서 이 메시지가 부적절하게 발생할 수 있었습니다. 그룹 복제 장애 조치 중에 이 메시지가 각 트랜잭션마다 반환되어 로그가 넘쳐날 수 있었습니다. 이를 방지하기 위해 경고 메시지가 삭제되었습니다. (버그 #32554807)

그룹 복제: group_replication_consistencyAFTER로 설정되고, 로컬에서 준비된 트랜잭션이 완료될 때까지 뷰 변경 이벤트가 지연되면 다른 GTID가 적용되어 복제 오류가 발생할 수 있었습니다. 이제 데이터를 수신한 순서대로 처리하여 이러한 상황을 방지합니다. (버그 #31872708)

Microsoft Windows: Windows 이벤트 로그에 쓰기가 실패할 수 있었습니다. (버그 #32890918)

JSON: CSV 저장 엔진을 사용하는 테이블에서 JSON 값을 읽는 동안 CHARACTER SET 'binary'를 사용하는 문자열에서 JSON 값을 생성할 수 없다는 오류가 발생했습니다. 이는 CSV 엔진이 레코드 버퍼에 대해 my_charset_bin을 사용했기 때문이며, JSON 값 생성에는 my_charset_bin에 대한 명시적 검사가 포함되어 이 캐릭터셋이 주어지면 오류가 발생합니다.
이제 데이터가 저장된 열의 실제 캐릭터셋을 전달하여 항상 이진인 버퍼의 캐릭터셋을 대신 사용하지 않도록 문제를 해결합니다. (버그 #102843, 버그 #32597017)

파생 조건 푸시다운 최적화를 적용할 수 있는 쿼리가 INSERT ... SELECT 쿼리의 일부일 때는 해당 최적화가 적용되지 않았습니다. (버그 #32959186)

대량의 계정 및 스키마에 대한 액세스 권한 정보 가져오기 작업이 매우 느려졌습니다. (버그 #32934351)

전체 텍스트 인덱스 검색 결과를 정렬해야 하는 쿼리가 일부 상황에서 올바르게 처리되지 않았습니다. (버그 #32924198)

Xiaoyu Wang이 PFS_notification_registry::is_empty() 코드 수정에 기여해 주셨습니다. (버그 #32919118, 버그 #103788)

서브쿼리에서 GROUP BY, ORDER BYLIMIT을 포함하는 쿼리를 커서로 액세스하면 서버가 종료될 수 있었습니다. (버그 #32918240)

--help--verbose 옵션으로 호출할 때 mysqld가 현재 디렉터리에 auto.cnf 파일을 생성했습니다. (버그 #32906164)

뷰 참조와 함께 조건을 푸시다운하는 쿼리가 물리화된 파생 테이블로 인해 서버가 종료될 수 있었습니다. (버그 #32905044, 버그 #32324234)

ER_CANT_INITIALIZE_UDF 오류 메시지가 잘릴 수 있었습니다. (버그 #32891703)

MySQL 8.0.23에서 수행된 스트리밍 집계 최적화(GROUP BY된 정렬된 데이터)가 제대로 작동하지 않는 회귀 문제가 발견되었습니다.
이 문제를 해결하기 위해, 이제 단일 테이블에 대해 암시적 그룹화가 이루어지는 경우(이 테이블이 FULLTEXT 검색의 대상인 경우), MATCH() 임시 데이터를 AggregateIterator로 보내기 전에 강제로 임시 테이블을 삽입하여 이를 구체화(materialize)합니다. 이는 AggregateIterator가 수신한 행을 저장하고 복원하려고 하지만, FULLTEXT 검색 정보가 숨겨져 있어 이를 적절히 포함할 수 없기 때문입니다. (버그 #32889491)
참조: 이 문제는 버그 #31790217의 회귀입니다.

-DBL_MAX를 문자열로 변환하고 다시 더블로 변환할 때, 새 더블 값이 원래 값과 달라서 범위를 벗어난 것으로 거부되었습니다. (버그 #32888982, 버그 #103709)

이제 JSON_LENGTH() 함수에 선택적 _path_ 인수가 포함되면, 서버는 이를 JSON_LENGTH(JSON_EXTRACT(doc, path))로 재작성합니다. 따라서 이제 JSON_LENGTH()는 다음과 같이 경로에 와일드카드($, ., * 등) 및 배열 범위를 지원합니다:

mysql> SELECT JSON_LENGTH('[1,2,3,4,5,6,7]', '$[2 to 4]') AS x;
+------+
| x    |
+------+
|    3 |
+------+

(버그 #32877703)

RPM 및 Debian 패키지에 일반적으로 사용되는 플래그의 경우, 새 WITH_PACKAGE_FLAGS CMake 옵션이 해당 플랫폼의 독립형 빌드에 이러한 플래그를 추가할지를 제어합니다. 기본값은 디버그가 아닌 빌드에 대해 ON입니다. 이 옵션은 빌드를 강화하는 데 사용됩니다. 예: -D_FORTIFY_SOURCE=2를 추가합니다. (버그 #32876974)

NULLIF() 함수가 모든 필수 오류 검사를 수행하지 않았습니다. (버그 #32865008)

다른 뷰에 의존하는 뷰에 대해 덤프 파일을 생성하는 동안 사용된 SHOW CREATE VIEW 명령의 출력이 복원 시 오류를 발생시킬 수 있었습니다. (버그 #32854203, 버그 #103583)

쿼리 속성 코드가 64비트 숫자를 올바르게 처리하지 못했습니다. (버그 #32847269)

퍼포먼스 스키마의 metadata_locks 테이블에서 외래 키 및 CHECK 제약 조건에 대한 정보가 잘못될 수 있었습니다. (버그 #32832004, 버그 #103532)

뷰 열에 대한 고유 이름을 생성할 때 서버는 이제 이름이 표시되는 개체만 고려합니다. (버그 #32821372)

물리화된 파생 테이블에 조건이 푸시다운될 때, 파생 테이블 표현식의 복제본이 조건의 열을 대체합니다. 복제된 항목에 FULLTEXT 함수가 포함된 경우, 파생 테이블 쿼리 블록 대신 외부 쿼리 블록에 추가되었습니다. 이를 수정하기 위해 이제 파생 쿼리 블록을 사용하여 이러한 항목을 복제합니다. (버그 #32820437)

일반 테이블 표현식이 한 번 이상 사용된 경우, 적어도 한 번은 항상 참 또는 항상 거짓으로 평가된 서브쿼리 내에서 사용된 경우가 있었습니다. (버그 #32813547, 버그 #32813554)

준비된 시점에 영구 테이블이었으나 처음 실행 시 임시 테이블이 된 테이블에 대해 문을 준비하면 어설션이 발생할 수 있었습니다. (버그 #32799797)

공간 함수에서 사용된 내부 함수가 메모리를 해제한 후 참조할 수 있었습니다. (버그 #32793104)

impossible filter 최적화가 해당 BKA 액세스 경로에 필요한 MRR 액세스 경로를 제거했습니다. (버그 #32787415)

WITH_AUTHENTICATION_CLIENT_PLUGINS CMake 옵션은 해당하는 서버 인증 플러그인이 빌드되는 경우 자동으로 활성화됩니다. 따라서 이 값은 다른 CMake 옵션에 따라 다르며 명시적으로 설정하지 않아야 합니다. (버그 #32778378)

MRR 이터레이터는 일반적으로 impossible_null_ref()를 확인하여 NULL 키를 필터링하지만, 조인 조건에 IS NULL 조건이 포함되거나 NULL 안전 동등 연산자인 ≪=>가 사용된 경우, 옵티마이저는 조인 조건이 조건 항목을 사용하여 설정되었는지 확인하고, 그러한 경우 내부 플래그 HA_MRR_NO_NULL_ENDPOINTS를 설정하지 않았습니다. 이제 우리는 각 키 열이 NULL을 거부하는지 여부를 비트마스크를 사용하여 확인하며, 이 경우 추가 확인 없이 HA_MRR_NO_NULL_ENDPOINTS를 설정할 수 있습니다. (버그 #32774281)

열거형 타입을 사용하는 시스템 변수에 대해 SET PERSIST_ONLY _var_name_ = DEFAULT 명령이 기호 이름 대신 숫자 값을 영구적으로 저장했습니다. (버그 #32761053)

X DevAPI의 Collection.replaceOneCollection.addOrReplaceOne 작업이 이제 문서의 _id 필드 값이 해당 작업에 지정된 id 매개변수와 일치하는지 확인합니다. 일치하지 않으면 오류가 반환됩니다. (버그 #32753547)

C API를 사용하는 애플리케이션에서 매개변수가 없는 준비된 문장에 대해 쿼리 속성을 사용할 수 없었습니다. (버그 #32753030, 버그 #32790714, 버그 #32955044)

IN() 구문의 인수들이 항상 올바른 캐릭터셋으로 변환되지 않았습니다. (버그 #32746552)

LOCATE() 함수는 인수가 평가되지 못할 경우 무조건 NULL을 반환했습니다. 이제, 평가된 표현식이 NULL이 될 수 없는 경우, 함수는 0을 반환합니다. (버그 #32746536)

내부 함수 my_well_formed_len_utf32()가 잘못된 길이의 문자열을 처리할 때 예외가 발생했습니다. 이제 이 함수는 그러한 경우 잘못된 문자열로 보고합니다. (버그 #32745294)

TRIM(), RTRIM(), LTRIM() 함수가 적절한 오류 검사를 수행하지 않았습니다. (버그 #32744772)

생성된 열이 해결되지 않을 경우 오류를 발생시키도록 하는 내부 수정이 있었습니다. 이 수정은 CREATE TABLE 문장의 일부로 생성된 열에 대해 문제없이 작동했으나, MySQL 5.7에서 생성된 테이블을 MySQL 8.0으로 업그레이드할 때 오류가 발생하여 업그레이드가 종료되었습니다.
이제 fix_generated_columns_for_upgrade() 함수에서 오류를 보고할 때 올바른 포인터를 사용하여 문제를 해결했습니다. (버그 #32738972)

SELECT 목록 내에서 롤업 래퍼를 확인하고 동일한 항목을 GROUP BY 목록에서 찾을 때, 캐시가 표현식 주위에 추가될 수 있다는 점을 고려하지 않았습니다. 이제 그러한 캐시를 해제한 후 항목을 찾습니다. (버그 #32729377, 버그 #32918400)

동적 매개변수가 포함된 경우, MIN() 또는 MAX() 함수를 사용하는 준비된 문장이 잘못된 결과를 반환할 수 있었습니다. (버그 #32713860, 버그 #103170)

XA 트랜잭션이 거부되거나 교착 상태로 인해 강제로 롤백된 직후 DML 문이 실행되면 복제가 실패할 수 있었습니다. (버그 #32707060)

여러 인스턴스의 GROUPING() 함수를 포함하는 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #32695103)

EXPLAIN ANALYZE 실행 시, 마테리얼라이제이션 이터레이터가 모든 init() 호출을 계산하므로, 유지된 기존 데이터를 재사용하는 호출조차 비용이 너무 적게 계산되는 문제가 있었습니다. 이 문제는 마테리얼라이제이션 이터레이터가 자체 호출 및 행 수 데이터를 재정의할 수 있도록 하여 해결되었습니다. (버그 #32688540)

메타데이터 잠금 코드에서 경합 상태가 발생하여 서버 종료가 발생할 수 있었습니다. (버그 #32686116)

커버링 풀텍스트 인덱스에서의 인덱스 전용 스캔이 MATCH() 함수 호출 순서에 따라 쿼리에서 잘못된 결과를 반환할 수 있었습니다. (버그 #32685616)

준비된 문장에서 쿼리 속성을 포함하면 문장 실행 실패를 초래할 수 있었습니다. (버그 #32676878)

시스템 테이블에서 DDL 문을 실행하면 서버 종료가 발생할 수 있었습니다. (버그 #32665990)

--online-migration 옵션을 사용할 때, mysql_migrate_keyring이 마이그레이션 서버에 연결을 설정하는 동안 종료될 수 있었습니다. (버그 #32651203)

mysql_migrate_keyring이 원본 및 대상 키 저장소가 달라야 한다는 조건을 강제하지 않았습니다. (버그 #32637784)

Ubuntu에서 시스템 캐시 크기 확인이 부정확할 수 있었습니다. (버그 #32619199, 버그 #102926)

풀텍스트 인덱스를 사용한 열에서 MATCH ... AGAINST를 사용하는 일부 쿼리가 HAVING 절에 포함될 경우 올바르게 처리되지 않았습니다. (버그 #32617181)
참조: 이 문제는 버그 #30969045의 회귀 문제입니다.

GTID 기반 복제에서 복제된 트랜잭션은 원본 소스 서버에서 트랜잭션이 커밋된 시간을 나타내는 original_commit_timestamp와 복제본에서 커밋된 시간을 나타내는 immediate_commit_timestamp를 포함합니다. 이전에는 그룹 복제 서버가 로컬에서 생성된 트랜잭션을 커밋할 때 original_commit_timestamp를 설정했지만, immediate_commit_timestamp는 설정하지 않았습니다. 이제 그룹 구성원은 이 타임스탬프를 설정하여 가시성을 향상시킵니다. 그룹 내에서 트랜잭션이 발생한 경우 original_commit_timestampimmediate_commit_timestamp는 모두 그룹 복제에서 생성되며 동일합니다. 그룹 외부에서 트랜잭션이 발생한 경우 original_commit_timestamp는 유지되고 immediate_commit_timestamp가 설정됩니다. (버그 #32613896)

내부 함수 Item_func_match::eq()가 디버그 빌드에서 Item_func_match_predicate 인수를 받을 때 assert 실패를 일으켰습니다. 이 assert는 Item_func_match 객체가 Item_func_match_predicate 객체와 비교되지 않을 것이라는 가정 하에 추가되었으나, 나중에 HAVING 절에 해당 조건이 포함될 때 ONLY_FULL_GROUP_BY 검사 중에 이 상황이 발생할 수 있음이 확인되었습니다.
이제 이 assert를 제거하여 함수가 false를 반환하도록 수정되었습니다. (버그 #32611913)

SELECT에서 기본 키 열에 대해 GROUP BY ... WITH ROLLUP을 사용하는 경우, 기본 키가 아닌 열과 비교할 때 다른 결과를 반환했습니다. (버그 #32565875)

SELECT 목록에서 테이블의 항목이 상수로 확인되었을 때, ROLLUP 래퍼를 추가하기 전에 캐시가 추가될 수 있었고, 이로 인해 그룹 목록에서 항목을 찾을 수 없었습니다(그룹 목록에는 이러한 래퍼가 없었습니다). 이제 캐시를 해제하여 이 문제를 해결합니다. (버그 #32559356)

C 클라이언트 라이브러리가 준비된 문장 매개변수가 8KB 이상일 때, 그 다음 매개변수가 NULL 값일 경우, 잘못된 통신 패킷 오류가 발생할 수 있었습니다. (버그 #32558782)

서로 다른 유형의 인수를 비교할 때, 인수가 상수로 간주되면 서버는 반복적인 변환(및 경고 발생)을 방지하기 위해 자체적으로 숨겨진 항목 캐시를 삽입할 수 있습니다. 이는 EXPLAIN과 같은 명령의 출력에는 표시되지 않습니다.
비교가 설정된 후 ROLLUP 해석이 이루어지면, 인수가 교체될 수 있어 비교에서 잘못된 결과를 초래할 수 있습니다. 이제 이러한 상황이 발생할 때, 비교가 캐시를 다시 고려하도록 신호를 보내고, 오래된 값을 재사용하지 않도록 합니다. (버그 #32548377)

로드 가능 함수 구현에서 파괴자의 참조 카운트가 잘못되어 디버그 빌드에서는 assert가 발생하거나, 비디버그 빌드에서는 함수가 존재하지 않는다는 오류가 발생할 수 있었습니다. (버그 #32528898, 버그 #102649)

MySQL 소스 배포본은 이제 Google Test 소스 코드를 번들로 제공하므로 Google Test 기반 단위 테스트를 실행하려면 더 이상 다운로드할 필요가 없습니다. 결과적으로 WITH_GMOCKENABLE_DOWNLOADS CMake 옵션이 제거되었으며, 지정된 경우 무시됩니다.
이 변경 사항은 소스 배포본에 빈 source_downloads 디렉토리가 잘못 포함되고, CMakeWITH_UNIT_TESTS가 활성화되었으나 Google Test 소스가 없을 때 오류를 발생시키지 않는 몇 가지 빌드 문제도 수정합니다. (후자의 문제는 이제 소스가 항상 존재하므로 더 이상 발생하지 않습니다.) (버그 #32512077, 버그 #27326599, 버그 #29935278)

외부 배치 키 액세스와 블록 중첩 루프(또는 해시 조인)가 쿼리에서 함께 발생할 때, 둘 다 경로 액세스 해석에서 중첩 루프로 되돌아갔습니다. 비동등 조인 조건이 BKA 인덱스 조건에 특별히 푸시된 경우, 일반 인덱스 조회로 변환되면서 (BKA 조건을 확인하지 않음) 확인해야 할 조건이 누락될 수 있었습니다.
이 문제를 해결하기 위해 BKA 인덱스 조건을 제거했습니다. BKA 인덱스 조건의 사용 빈도가 매우 낮고, 대부분의 실질적인 쿼리에서 얻을 수 있는 이점이 거의 없기 때문에 이를 제거함으로써 복잡성이 크게 줄어듭니다. (버그 #32424884)

SHOW CREATE USER 명령어는 mysql.user 시스템 테이블의 구조가 수동으로 변경된 경우 예기치 않은 서버 종료를 일으킬 수 있었습니다. (버그 #32417780, 버그 #31654586)

group_concat_max_len 시스템 변수의 값이 큰 경우, GROUP_CONCAT() 함수를 사용하는 준비된 문장이 실행 시마다 불필요하게 다시 준비될 수 있었습니다. (버그 #32413530, 버그 #102344)

준비된 문장 또는 저장 프로시저를 다시 실행할 때 변경 사항이 제대로 롤백되지 않았습니다. (버그 #32384324, 버그 #32573871)

비동기 C API 함수를 사용하는 클라이언트 프로그램에서 연결 시간 초과가 발생할 경우 메모리 누수가 발생할 수 있었습니다. 이 문제를 해결하는 데 기여한 Facebook에 감사드립니다. (버그 #32372038, 버그 #102189, 버그 #32800091, 버그 #103409, 버그 #33171164, 버그 #104461)

트랜잭션이 커밋될지 여부가 알려지기 전에 INFORMATION_SCHEMA에서 동적 통계 캐시가 업데이트되어, 커밋되지 않은 상태에 해당하는 정보를 캐싱할 가능성이 있었습니다. (버그 #32338335)

암시적 트랜잭션의 시작 시 준비된 문장을 다시 준비하면 ER_GTID_NEXT_TYPE_UNDEFINED_GROUP 오류가 발생할 수 있었습니다. (버그 #32326510, 버그 #102031)

USING HASH는 퍼포먼스 스키마가 해시 인덱스를 지원하지 않기 때문에 퍼포먼스 스키마 스레드 풀 테이블 정의에서 제거되었습니다. (버그 #32194617)

명시적 시간대 오프셋을 포함하는 datetime 리터럴을 TIMESTAMP 열에 삽입하면 시스템 시간이 DST 전환을 포함할 때 time_zone=SYSTEM인 경우 잘못된 시간이 기록될 수 있었습니다. (버그 #32173664, 버그 #101670)

윈도우 함수의 ORDER BY를 설정하는 동안, 서브쿼리가 포함된 윈도우 정의가 ORDER BY에서 서브쿼리와 함께 제거되었습니다. (버그 #32103260)

이제 group_replication_force_members 시스템 변수에 대해 SET PERSIST 또는 SET PERSIST_ONLY 명령어의 사용이 허용되지 않습니다. 이 시스템 변수는 START GROUP_REPLICATION 명령을 실행하기 전에 사용 후 반드시 지워야 하므로, MySQL 서버 인스턴스의 옵션 파일에 영구적으로 저장되어서는 안 됩니다. (버그 #31983203)

MySQL 5.7에서 8.0으로 업그레이드할 때, MySQL 설치에 FEDERATED 테이블이 있으면 업그레이드가 실패할 수 있었습니다. (버그 #31973053)

구성 요소 관련 시스템 변수를 영구 저장할 때 불필요한 “알 수 없는 변수” 오류 메시지가 표시될 수 있었습니다. (버그 #31968366)

대량의 데이터를 풀텍스트 검색 인덱스를 포함한 테이블에 로드할 때 메모리 부족 오류가 발생할 수 있었습니다. 풀텍스트 검색 캐시에 할당된 모든 메모리가 풀텍스트 검색 보조 테이블에 데이터를 삽입할 때 제대로 계산되지 않았습니다. (버그 #31576731)

정수와 소수 값을 포함하는 UNION 연산의 경우 정밀도가 잘못 계산되어 결과에서 정수가 잘리게 될 수 있었습니다. (버그 #31348202, 버그 #99567)

InnoDB가 테이블 통계를 계산할 수 없다는 불필요한 경고를 오류 로그에 기록했습니다. (버그 #30865032)

가상 열을 포함하는 보조 인덱스가 온라인으로 빌드될 때 인덱스가 손상될 수 있었습니다.
UPDATE 문에 대해, 인덱스 레코드의 가상 열 값이 NULL로 설정된 경우, 클러스터 인덱스 레코드에서 이 값을 생성하도록 문제를 수정했습니다. (버그 #30556595)

테이블 수가 매우 많은 데이터베이스(백만 개)에 대해 DROP DATABASE 명령을 실행하면 메모리 부족 상태가 발생할 수 있었습니다. (버그 #29634540)

system_time_zone 시스템 변수는 서버 호스트 설정 및 mysqld 환경에서 서버 시작 시 초기화되지만, 서버 호스트 시간대가 변경될 경우(예: 일광 절약 시간) system_time_zone이 이 변경 사항을 반영하지 않았습니다. 이제 반영됩니다. (버그 #29330089, 버그 #94257)

Ubuntu에서 업그레이드할 때, 기존 my.cnf 파일이 발견되면 my.cnf.bak으로 이름이 변경되고 경고 메시지가 표시됩니다. (버그 #24486556, 버그 #82639)

부울 시스템 변수에 음수 값이 할당될 수 있었습니다. (버그 #11758439, 버그 #50643)

준비된 문장이 항상 인덱스 확장을 사용하지 않았습니다(참조: Use of Index Extensions). (버그 #103711, 버그 #32897525)
참조: 버그 #103710, 버그 #32897503도 참조하십시오.

prefer_ordering_index 옵티마이저 스위치가 활성화되면 준비된 문장의 성능에 부정적인 영향을 미칠 수 있었습니다. (버그 #103710, 버그 #32897503)
참조: 버그 #103711, 버그 #32897525도 참조하십시오.

연속적인 INSERT() 함수 호출이 때때로 잘못된 NULL 결과를 반환할 수 있었습니다. (버그 #103513, 버그 #32824978)

일부 NOT IN 서브쿼리가 NULL 처리의 회귀로 인해 올바른 결과를 반환하지 않았습니다. (버그 #103331, 버그 #32773801)
참조: 이 문제는 버그 #30473261의 회귀 문제입니다.

SELECT ... FOR UPDATE NOWAIT 문이 레코드 잠금을 얻지 못할 때, 메시지 “Got error 203 when reading table …”가 오류 로그에 기록되었습니다. 이러한 상황은 상대적으로 자주 발생하며, 이로 인해 디스크 공간이 과도하게 사용될 수 있었습니다.
기여해주신 Brian Yue에게 감사드립니다. (버그 #103159, 버그 #32705614)

0 - (MAX(BIGINT) + 1)-(MAX(BIGINT) + 1)을 반환했습니다. 이제는 범위 초과 오류가 대신 반환됩니다. (버그 #103093, 버그 #32693863)

Leave a Comment



이 문서 공유

8.0.26 변경 사항 (2021-07-20 GA)

링크 복사

CONTENTS