MySQL 8.0 Release Note

8.0.4 변경 사항 (2018-01-23 RC)

Estimated reading: 14 minutes 41 views

공식 문서: Changes in MySQL 8.0.4 (2018-01-23, Release Candidate)

컴파일 관련 사항

Linux: Linux 플랫폼에서 바이너리 패키지는 이제 GCC 6을 사용하여 빌드됩니다. 최적화 수준이 -O3에서 -O2로 변경되었습니다. (WL #10343)

macOS; Microsoft Windows: 소스에서 MySQL을 컴파일할 때, 이제 -DWITH_SSL=system CMake 옵션이 Windows 및 macOS에서도 작동합니다. (버그 #26907731, 버그 #87938)

GNU gold 링커를 사용하는 플랫폼에서는 이제 사용되지 않는 함수가 제거되어 바이너리 크기가 줄어들었습니다. (버그 #26612067, 버그 #87372)

소스 파일의 #include 지시문이 명확하게 재작성되고 재구성되었습니다. (버그 #26597243, 버그 #87358, 버그 #26897738)

컴파일 스크립트를 포함하는 BUILD 디렉터리는 더 이상 유지 관리되지 않으며 MySQL 소스 트리에서 제거되었습니다. (버그 #26576219, 버그 #87323)

서버 빌드에 필요한 최소 Boost 라이브러리 버전이 이제 1.65.0입니다. (버그 #26574924, 버그 #87317)

이제 Unix 및 유사 Unix 시스템에서 MySQL을 OpenSSL 1.1과 연결할 수 있습니다. (버그 #25094892, 버그 #83814)

소스 코드 베이스를 정리하는 작업이 수행되었으며, 여기에는 불필요한 CMake 검사 제거, 소스 파일에서 사용되지 않는 매크로 제거, 종속성을 줄이고 모듈화하기 위해 헤더 파일을 재구성, 정의 없이 선언된 함수 제거, 표준 라이브러리의 동등한 함수로 대체하는 작업이 포함됩니다.

컴포넌트 관련 사항

validate_password 플러그인은 이제 컴포넌트 인프라를 사용하도록 재구현되었습니다. validate_password 컴포넌트를 설치 및 제거하려면 다음 명령문을 사용하십시오:

INSTALL COMPONENT 'file://component_validate_password';
UNINSTALL COMPONENT 'file://component_validate_password';

INSTALL PLUGINUNINSTALL PLUGIN은 여전히 validate_password 플러그인을 설치 및 제거하는 데 사용할 수 있지만 경고를 생성합니다. validate_password 플러그인 형식은 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. 플러그인을 사용하는 MySQL 설치는 컴포넌트로 전환해야 합니다. 비밀번호 유효성 검사 컴포넌트로의 전환을 참조하십시오.
validate_password의 컴포넌트와 플러그인 구현 간의 사용 차이점은, 플러그인은 시스템 및 상태 변수를 validate_password_로 시작하는 이름으로 노출하는 반면, 컴포넌트는 컴포넌트 이름과 점을 시작으로 변수를 노출하는 규칙을 사용한다는 점입니다. 예를 들어, 플러그인은 validate_password_policy 시스템 변수와 validate_password_dictionary_file_words_count 상태 변수를 노출하는 반면, 컴포넌트에서 노출되는 해당 변수는 validate_password.policyvalidate_password.dictionary_file_words_count입니다. 플러그인 변수는 플러그인 자체와 같이 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. (WL #6667)

구성 관련 사항

복제: 바이너리 로그 만료 기간을 계산할 때, 사용 중단된 expire_logs_days 시스템 변수에 지정된 값은 이제 binlog_expire_logs_seconds가 설정된 경우 무시되며 binlog_expire_logs_seconds의 값만 사용됩니다. 이전에는 binlog_expire_logs_secondsexpire_logs_days의 효과가 누적되었습니다.
시작 시 두 시스템 변수에 대해 값을 설정하면, expire_logs_days의 값이 무시된다는 경고 메시지가 표시됩니다. 하나의 옵션이 설정된 상태에서 다른 옵션의 값을 동적으로 설정하거나 변경할 수 없으며, 이 상황에서 오류 메시지가 발생합니다.
MySQL 8.0.2에서 변경된 기본 바이너리 로그 만료 기간인 30일은 시작 시 binlog_expire_logs_seconds 또는 expire_logs_days에 값이 설정되지 않은 경우에 적용됩니다. 시작 시 binlog_expire_logs_seconds 또는 expire_logs_days에 대해 값을 설정하면 이 값이 기본 바이너리 로그 만료 기간을 무시합니다. 바이너리 로그의 자동 삭제를 비활성화하려면 binlog_expire_logs_secondsexpire_logs_days를 모두 0으로 명시적으로 설정해야 합니다. (버그 #26274274, 버그 #86698)

RHEL, SLES, Fedora RPM에 대해, 디버그 빌드의 기본 플러그인 디렉터리가 /usr/lib64/mysql/plugin에서 /usr/lib64/mysql/plugin/debug로 변경되었습니다. (버그 #27072155, 버그 #88363)

새로운 WITH_LZMAWITH_RE2 CMake 옵션은 번들 또는 시스템 LZMA 및 RE2 라이브러리와 함께 컴파일할지를 제어합니다.

table_open_cache 시스템 변수의 기본값이 2000에서 4000으로 증가했습니다. 이는 자동 크기 조정된 table_definition_cache 시스템 변수의 기본값도 1400에서 2000으로 변경합니다. (WL #9703)

optimizer_trace_max_mem_size 시스템 변수 기본값이 16KB에서 1MB로 변경되어 옵티마이저 추적 잘림 가능성을 줄였습니다. (WL #11345)

log_error_verbosity 시스템 변수의 기본값이 3 (오류, 경고 및 정보 메시지)에서 2 (오류 및 경고 메시지)로 변경되어 기본적으로 mysqld 오류 로그가 덜 상세해졌습니다. (WL #11143)

사용 중단 및 제거 관련 사항

InnoDB: innodb_undo_tablespaces 구성 옵션은 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. (WL #10473)

복제: group_replication_primary_member 상태 변수는 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. (WL #10958)

복제: group_replication_allow_local_disjoint_gtids_join 시스템 변수가 제거되었습니다. (WL #11139)

libmysqld 임베디드 서버 라이브러리가 MySQL 8.0.1에서 제거되었을 때, libmysqld에만 사용되던 다음 mysql_options() 옵션이 제거되지 않았습니다. 이제 이 옵션들이 제거되었습니다.

MYSQL_OPT_GUESS_CONNECTION
MYSQL_OPT_USE_EMBEDDED_CONNECTION
MYSQL_OPT_USE_REMOTE_CONNECTION
MYSQL_SET_CLIENT_IP

(버그 #26712418)

mysqlpump는 이제 SQL_NO_CACHE 수정자를 명령문에 포함하지 않습니다. 이 수정자는 사용 중단 상태이며 사용 시 사용 중단 경고가 발생합니다. (버그 #26694675)

생성된 열은 이제 생성 표현식에서 사용 중단된 함수를 허용하지 않아, 사용 중단된 함수가 제거된 버전으로 MySQL을 업그레이드할 때 발생할 수 있는 문제를 방지합니다. (버그 #26279884, 버그 #86712)

Performance Schema setup_timers 테이블과 performance_timers 테이블의 TICK 행이 제거되었습니다. (버그 #18296337, WL #10985, WL #10986)

SQL 함수 및 연산자 관련 사항

비호환 변경: 이전에 MySQL은 정규 표현식 연산자(REGEXP, RLIKE)를 지원하기 위해 Henry Spencer 정규 표현식 라이브러리를 사용했습니다. 정규 표현식 지원은 이제 ICU(International Components for Unicode) 라이브러리를 사용하여 재구현되어 전체 유니코드 지원을 제공하며 다중 바이트에 안전합니다. REGEXP_LIKE() 함수는 이제 REGEXPRLIKE 연산자의 기능을 수행하며, 이들 연산자는 해당 함수의 동의어로 취급됩니다. 또한, 일치 위치를 찾고 서브스트링 대체 및 추출을 수행하는 REGEXP_INSTR(), REGEXP_REPLACE(), REGEXP_SUBSTR() 함수가 제공됩니다. regexp_stack_limitregexp_time_limit 시스템 변수는 매칭 엔진의 리소스 소비를 제어합니다.
MySQL 소스 배포본에는 ICU 라이브러리가 포함되어 있으며, WITH_ICU CMake 옵션을 사용하여 번들된 ICU 라이브러리 또는 시스템 ICU 라이브러리와 함께 컴파일할지를 제어합니다. ICU_VERSION() 함수는 ICU 라이브러리 버전을 반환합니다.
자세한 내용은 정규 표현식을 참조하십시오. 정규 표현식을 사용하는 애플리케이션이 구현 변경에 의해 영향을 받을 수 있는 방식에 대한 정보는 정규 표현식 호환성 고려사항을 참조하십시오. (WL #8987)

SQL 명령문에 대한 다이제스트 정보를 제공하기 위해 두 가지 새로운 SQL 함수가 추가되었습니다. SQL 명령문을 문자열로 제공하면 STATEMENT_DIGEST()는 명령문 다이제스트 해시 값을 반환하고, STATEMENT_DIGEST_TEXT()는 정규화된 명령문 다이제스트를 반환합니다. 암호화 및 압축 함수를 참조하십시오. (WL #9637)

InnoDB 관련 사항

MySQL 8.0.3에서 추가된 외래 키가 있는 부모 열의 이름 변경에 대한 제한이 해제되었습니다. (버그 #26659110, 버그 #87490, 버그 #25722221)
참고: 관련 정보는 버그 #26334071을 참조하십시오.

설치 관련 사항

systemd를 사용하는 플랫폼(참고: systemd로 MySQL 서버 관리)의 경우, 서버 시작 시 데이터 디렉터리가 비어 있으면 초기화됩니다. 데이터 디렉터리가 일시적으로 사라진 원격 마운트일 경우, 마운트 지점이 빈 데이터 디렉터리로 인식되어 새로운 데이터 디렉터리로 초기화될 수 있습니다. 이 자동 초기화 동작을 억제할 수 있습니다. /etc/sysconfig/mysql 파일에 다음 행을 지정하십시오(파일이 없는 경우 생성):

NO_INIT=true

(버그 #26595288, 버그 #87287)

키링 관련 사항

이제 MySQL은 기본 키링 키스토어 간의 키 마이그레이션을 지원하여 DBAs가 MySQL 설치를 한 키링 플러그인에서 다른 키링 플러그인으로 전환할 수 있게 합니다. 키링 키스토어 간 키 마이그레이션을 참조하십시오. (WL #9769)

로깅 관련 사항

새로운 오류 로그 필터 컴포넌트 log_filter_dragnet가 추가되어, dragnet.log_error_filter_rules 시스템 변수의 값으로 지정된 사용자 정의 규칙을 기반으로 오류 로그에 기록되는 이벤트를 제어할 수 있습니다. 이 새로운 필터링 기능은 기본 제공 log_filter_internal 필터 컴포넌트 및 log_error_verbosity 시스템 변수를 사용하는 것보다 유연성이 높습니다. 자세한 내용은 오류 로그 필터링 유형을 참조하십시오. (WL #9651)

log_sink_internal 로그 싱크 컴포넌트에서 오류 로그에 기록되는 메시지에 오류 ID 표시가 추가되었습니다. 이 ID의 형식은 [error_id]입니다. 심각도 표시 뒤에 오며 메시지 텍스트 앞에 위치합니다. 자세한 내용은 오류 로그 출력 형식을 참조하십시오. (WL #11009)

오류 로깅을 위한 log_error_verbosity 시스템 변수가 경고 및 정보 메시지를 필터링하도록 설정된 경우, 이제 선택된 중요 메시지가 오류 로그에 시스템 메시지로 출력됩니다. 이러한 메시지는 이전에는 오류로 처리되고 오류로 레이블이 지정되어 log_error_verbosity=1이 설정된 경우에만 로그에 기록되었습니다. 이제 이 메시지에 대해 레이블링 기능이 처리 기능에서 분리되어, 적절한 레이블을 지정할 수 있게 되었습니다.
MySQL 오류 로그에서 시스템 메시지는 이제 “System” 레이블을 가집니다. 다른 로그 싱크가 사용자 지정 레이블을 지원하는 경우, 이 규칙을 사용할 수 있습니다. 사용자 지정 레이블을 지원하지 않는 로그에서는 정보 수준 심각도에 해당하는 레이블로 시스템 메시지가 출력됩니다. 그러나 이 메시지들은 log_error_verbosity 설정이 이 수준의 메시지를 일반적으로 제외하더라도 포함됩니다.
시스템이 정보 수준으로 레이블이 지정된 메시지를 삭제하거나 오류로 레이블이 지정된 메시지와 다른 대상으로 리디렉션하도록 추가 구성을 수행한 경우, 시스템 메시지는 이 동작을 무시하지 않습니다. 로그 싱크가 “System” 레이블을 사용하지 않는 경우, 시스템 메시지는 다른 정보 수준 메시지와 함께 삭제되거나 리디렉션됩니다.
이제 “System” 레이블로 출력되는 메시지에는 다음과 같은 시작 및 종료 메시지와 설정의 주요 변경 사항이 포함됩니다:

(WL #10942)

패키징 관련 사항

모든 MySQL 바이너리 배포본이 이제 OpenSSL과 연결되며, 이전에 yaSSL과 연결되었던 Community 배포본도 포함됩니다. 또한, OpenSSL은 정적이 아닌 동적으로 연결되어, MySQL과 함께 사용할 SSL 라이브러리를 대체할 수 있습니다. 일부 플랫폼의 경우, 라이브러리 가용성을 보장하기 위해 바이너리 배포본에 OpenSSL 라이브러리가 포함됩니다:

  • Windows: 배포본에는 libeay32.dllssleay32.dll이 포함되어 있으며, MySQL 바이너리와 동일한 디렉터리에 설치됩니다. 다른 라이브러리는 해당 라이브러리 파일을 대체하거나 Windows에서 지원하는 다른 라이브러리 선택 방법을 사용하여 사용할 수 있습니다. (참고: https://msdn.microsoft.com/en-us/library/7d83bc18.aspx)
  • macOS: 배포본에는 libssl.dyliblibcrypto.dylib이 포함됩니다. MySQL 바이너리는 해당 라이브러리가 동일한 디렉터리에 있는 것으로 연결되며, 이곳에서 실제 라이브러리 위치로 심볼릭 링크가 연결됩니다.
  • Linux (일반 압축 tar 파일 배포본에 한함): 배포본에는 libssl.solibcrypt.so가 포함되어 있으며, libmysqlclient.so 클라이언트 라이브러리와 동일한 디렉터리에 설치됩니다.

(버그 #26272084, 버그 #26134893, 버그 #26927607, 버그 #87996, WL #10524)

Performance Schema 관련 사항

Performance Schema는 이제 MD5 해시 대신 SHA-256 해시를 사용하여 명령문 다이제스트를 처리합니다. SHA-256 값에 필요한 저장 용량을 늘리기 위해 Performance Schema 테이블의 DIGEST 열이 VARCHAR(32)에서 VARCHAR(64)로 확장되었습니다. (버그 #26727443)

보안 관련 사항

비호환 변경: caching_sha2_passwordsha256_password 인증 플러그인과 PASSWORD() 함수(old_passwords=2일 때)에서 비밀번호가 최대 256자로 제한됩니다. 또한, 비밀번호 해싱 라운드 수가 CPU 사용 시간을 제한하도록 설정되었습니다. (버그 #27099029, 버그 #27194270)

비호환 변경: caching_sha2_passwordsha256_password 인증 플러그인은 mysql_native_password 플러그인보다 더 안전한 비밀번호 암호화를 제공하며, caching_sha2_passwordsha256_password보다 더 나은 성능을 제공합니다. 이와 같은 보안성과 성능상의 이점으로 인해 caching_sha2_password가 이제 기본 인증 플러그인이 되었으며, mysql_native_password 대신 기본 인증 플러그인으로 설정되었습니다. 이 변경은 서버와 libmysqlclient 클라이언트 라이브러리에 영향을 줍니다:

  • 서버에서는 default_authentication_plugin 시스템 변수의 기본값이 mysql_native_password에서 caching_sha2_password로 변경됩니다.
  • libmysqlclient 라이브러리는 mysql_native_password 대신 caching_sha2_password를 기본 인증 플러그인으로 간주합니다.

이 변경에 따른 영향은 다음과 같습니다:

  • 이 변경은 새로운 MySQL 계정을 생성할 때 사용되는 인증 플러그인에만 영향을 미칩니다. 업그레이드된 설치에서 이미 존재하는 계정의 경우 인증 플러그인은 변경되지 않습니다.
  • caching_sha2_password로 인증하는 계정을 사용하는 클라이언트는 보안 연결(TCP를 사용한 TLS/SSL 인증서, Unix 소켓 파일, 공유 메모리 중 하나로 생성된 연결)이나 RSA 키 쌍을 사용하는 암호 교환을 지원하는 암호화되지 않은 연결을 사용해야 합니다. 이 보안 요구사항은 mysql_native_password에는 적용되지 않으므로 caching_sha2_password로 전환할 때 추가 구성이 필요할 수 있습니다(참고: 캐싱 SHA-2 플러그 가능 인증). 그러나 MySQL 8.0 클라이언트 연결은 기본적으로 TLS/SSL 사용을 선호하므로, 이미 해당 구성을 준수하는 클라이언트는 추가 구성이 필요하지 않을 수 있습니다.
  • libmysqlclient 클라이언트 라이브러리에서도 caching_sha2_password가 기본 인증 플러그인으로 변경됨에 따라, MySQL 8.0 클라이언트가 mysql_native_password(이전 기본 인증 플러그인)를 사용하는 계정에 연결할 때 클라이언트/서버 프로토콜에서 추가 라운드 트립이 필요합니다. 이를 방지하려면 클라이언트 프로그램을 --default-auth=mysql_native_password 옵션과 함께 실행해야 합니다.
  • 비호환성: caching_sha2_password를 인식하지 못하는 클라이언트와 커넥터는 이 플러그인을 유효한 플러그인으로 인식하지 않으므로 caching_sha2_password로 인증하는 계정에 연결할 수 없습니다. 이 문제를 해결하려면 MySQL 8.0.4 이상의 libmysqlclient를 사용하여 클라이언트를 재링크하거나 caching_sha2_password를 인식하는 최신 커넥터를 얻으십시오.
  • 비호환성: caching_sha2_password를 인식하지 못하는 클라이언트와 커넥터는 기본 인증 플러그인이 caching_sha2_password로 설정된 MySQL 8.0 서버에 연결하는 데 문제가 발생할 수 있습니다. 이 경우, 서버는 클라이언트에 기본 인증 플러그인 이름을 지정하기 때문입니다. 클라이언트 또는 커넥터가 인식되지 않은 기본 인증 플러그인을 처리하지 못하는 클라이언트/서버 프로토콜 구현을 기반으로 하는 경우 오류가 발생할 수 있습니다.

caching_sha2_password의 주요 역할에 대한 자세한 내용과 호환성 문제와 솔루션에 대한 논의를 포함한 정보는 기본 인증 플러그인으로서의 caching_sha2_password를 참조하십시오.
또한 복제 슬레이브는 이제 RSA 키 쌍 기반 비밀번호 교환을 통해 마스터에 연결할 수 있습니다. 이 RSA 기능은 caching_sha2_password 또는 sha256_password 인증 플러그인으로 인증하는 계정에 적용됩니다. (이전에는 이러한 플러그인으로 인증할 수 있었지만, 보안 연결이 필요했고 RSA 암호 교환을 사용할 수 없었습니다.) 이 새로운 슬레이브 RSA 기능을 사용할 수 있도록 다음 변경 사항이 추가되었습니다:

이제 더 많은 프로그램이 RSA 키 쌍 기반 비밀번호 교환을 위해 caching_sha2_password 또는 sha256_password 인증 플러그인으로 인증하는 계정에 대해 RSA 공개 키가 포함된 클라이언트 측 파일을 지정할 수 있는 --server-public-key-path 옵션을 지원합니다: mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlshow, mysqlslap, mysql_upgrade. 이전에는 mysqlmysqltest--server-public-key-path를 지원했습니다. --server-public-key-path 옵션은 --get-server-public-key의 대안으로, 서버에 필요한 RSA 공개 키 사본이 포함된 클라이언트 측 파일을 사용할 수 있으며, 서버에 공개 키 요청을 보내는 대신 사용할 수 있습니다.
새로운 mysql_reset_server_public_key() C API 함수는 클라이언트 라이브러리의 서버 RSA 공개 키에 대한 모든 캐시된 사본을 지웁니다. mysql_reset_server_public_key()를 참조하십시오.
새로운 caching_sha2_password_auto_generate_rsa_keys 시스템 변수는 sha256_password_auto_generate_rsa_keys 시스템 변수와 유사하게 자동 RSA 개인/공개 키 쌍 파일 생성을 가능하게 합니다. 자동 SSL 및 RSA 파일 생성을 참조하십시오.
새로운 Caching_sha2_password_rsa_public_key 상태 변수는 RSA 키 쌍 기반 비밀번호 교환을 위해 caching_sha2_password 인증 플러그인이 사용하는 공개 키를 노출합니다. (버그 #26751594, WL #11057)

MySQL 서버에 연결된 OpenSSL 라이브러리가 버전 1.0.2n으로 업데이트되었습니다. 새로운 OpenSSL 버전에서 수정된 문제는 http://www.openssl.org/news/vulnerabilities.html에 설명되어 있습니다. (버그 #27212666, 버그 #27236394)

이제 mysqldmysql_ssl_rsa_setup이 자동으로 생성하는 인증서는 X509 v3을 사용하며, 이전에는 v1을 사용했습니다. (버그 #26521654)

서버 관리

새로운 RESTART SQL 명령문이 추가되어, 클라이언트 세션에서 MySQL 서버 인스턴스를 다시 시작할 수 있습니다. 이 기능은 서버 종료 후 다시 시작을 수행하는 모니터링 프로세스를 사용할 수 있는 플랫폼에서 지원됩니다: Windows (mysqld가 Windows 서비스 또는 독립형으로 시작된 경우)와, 시스템이 systemd 또는 mysqld_safe를 사용하여 mysqld를 관리하는 Unix 및 유사 Unix 시스템. RESTART 명령문을 참조하십시오. (WL #9809)

공간 데이터 지원

비호환 변경: 이제 지리적 공간 참조 시스템의 데이터를 가져오는 다음 함수들은 좌표가 유효 범위를 벗어나는 경우 오류를 반환합니다: ST_GeomCollFromText(), ST_GeomCollFromTxt(), ST_GeomCollFromWKB(), ST_GeometryCollectionFromText(), ST_GeometryCollectionFromWKB(), ST_GeometryFromText(), ST_GeometryFromWKB(), ST_GeomFromGeoJSON(), ST_GeomFromText(), ST_GeomFromWKB(), ST_LineFromText(), ST_LineFromWKB(), ST_LineStringFromText(), ST_LineStringFromWKB(), ST_MLineFromText(), ST_MLineFromWKB(), ST_MPointFromText(), ST_MPointFromWKB(), ST_MPolyFromText(), ST_MPolyFromWKB(), ST_MultiLineStringFromText(), ST_MultiLineStringFromWKB(), ST_MultiPointFromText(), ST_MultiPointFromWKB(), ST_MultiPolygonFromText(), ST_MultiPolygonFromWKB(), ST_PointFromText(), ST_PointFromWKB(), ST_PolyFromText(), ST_PolyFromWKB(), ST_PolygonFromText(), ST_PolygonFromWKB(). (ST_LatFromGeoHash(), ST_LongFromGeoHash(), ST_PointFromGeoHash() 함수는 범위를 벗어난 값을 나타낼 수 없으므로 해당 동작이 적용되지 않습니다.)
또한, ST_GeomFromGeoJSON()는 GeoJSON 문서의 하위 수준에서 최상위 개체 SRID와 다른 SRID를 지정하는 crs 멤버가 발견되면 오류를 반환합니다.

참고
지리적 공간 참조 시스템을 참조하는 SRID 값을 포함한 공간 데이터가 있으며 데이터 좌표가 범위를 벗어날 경우, 이러한 함수를 사용하는 기존 쿼리는 이전 MySQL 버전과 다른 결과를 반환할 수 있습니다.

(버그 #26941370, 버그 #88031, WL #9449)

비호환 변경: 이전에는 이러한 공간 함수들이 기하 인수에 대해 공간 참조 시스템(SRS)을 무시하고 데카르트 평면에서 결과를 계산했습니다. 이제는 지리적 SRS를 지정하는 기하 인수에 대해 계산을 지원합니다: ST_Distance_Sphere(), ST_IsSimple(), ST_IsValid(), ST_Length().
이전에는 이러한 공간 함수들이 모든 기하 인수에 대해 SRS를 무시하고 데카르트 평면에서 결과를 계산했습니다. 이제 지리적 SRS를 지정하는 기하 인수로 호출되면 오류를 발생시킵니다: ST_Area(), ST_Buffer(), ST_Centroid(), ST_ConvexHull(), ST_Difference(), ST_Envelope(), ST_Intersection(), ST_IsClosed(), ST_MakeEnvelope(), ST_Simplify(), ST_SymDifference(), ST_Union(), ST_Validate().
이전에는 이러한 공간 함수들이 정의되지 않은 SRS가 있는 기하 인수를 허용했습니다. 이제 정의되지 않은 SRS가 있는 기하 인수로 호출되면 오류를 발생시킵니다: ST_Dimension(), ST_Distance_Sphere(), ST_EndPoint(), ST_ExteriorRing(), ST_GeometryN(), ST_GeometryType(), ST_InteriorRingN(), ST_IsEmpty(), ST_IsSimple(), ST_IsValid(), ST_Length(), ST_NumGeometries(), ST_NumInteriorRing(), ST_NumInteriorRings(), ST_NumPoints(), ST_PointN(), ST_StartPoint(), ST_SwapXY(), ST_X(), ST_Y().
이전에 ST_GeoHash() 공간 함수는 모든 SRID의 점을 허용했습니다. 이제 ST_GeoHash()는 SRID 0 또는 4326의 점만 허용합니다.

참고
공간 데이터에 대해 이전과 다른 방식으로 해석되는 기하 값을 포함하는 경우, 이러한 함수를 사용하는 기존 쿼리는 이전 MySQL 버전과 다른 결과를 반환할 수 있습니다.

(WL #10416, WL #10926, WL #10927, WL #10999, WL #11096)

비호환 변경: SRID 인수를 사용하는 다음 공간 함수들은 이제 SRID가 존재하지 않으면 오류를 반환합니다: ST_GeomCollFromText(), ST_GeomCollFromTxt(), ST_GeomCollFromWKB(), ST_GeometryCollectionFromText(), ST_GeometryCollectionFromWKB(), ST_GeometryFromText(), ST_GeometryFromWKB(), ST_GeomFromGeoJSON(), ST_GeomFromText(), ST_GeomFromWKB(), ST_LineFromText(), ST_LineFromWKB(), ST_LineStringFromText(), ST_LineStringFromWKB(), ST_MLineFromText(), ST_MLineFromWKB(), ST_MPointFromText(), ST_MPointFromWKB(), ST_MPolyFromText(), ST_MPolyFromWKB(), ST_MultiLineStringFromText(), ST_MultiLineStringFromWKB(), ST_MultiPointFromText(), ST_MultiPointFromWKB(), ST_MultiPolygonFromText(), ST_MultiPolygonFromWKB(), ST_PointFromGeoHash(), ST_PointFromText(), ST_PointFromWKB(), ST_PolyFromText(), ST_PolyFromWKB(), ST_PolygonFromText(), ST_PolygonFromWKB(). (ST_SRID() 함수는 이미 이 동작을 따릅니다.)

참고
공간 데이터에 존재하지 않는 공간 참조 시스템을 참조하는 SRID 값이 포함된 경우, 이러한 함수를 사용하는 기존 쿼리는 이전 MySQL 버전과 다른 결과를 반환할 수 있습니다.

(WL #9450)

옵티마이저가 절대 사용하지 않는 SPATIAL 인덱스가 생성될 경우, 서버는 이제 경고를 출력합니다. (버그 #27015964)

공간 계산에 필요한 공간 참조 시스템 데이터를 포함하는 EPSG 데이터셋이 버전 9.0에서 9.2로 업그레이드되었습니다. (버그 #26711258, 버그 #87564, 버그 #26990896)

MySQL은 이제 데이터 딕셔너리에서 공간 참조 시스템(SRS) 정의를 생성 및 제거하기 위한 CREATE SPATIAL REFERENCE SYSTEMDROP SPATIAL REFERENCE SYSTEM 명령문을 지원합니다. CREATE SPATIAL REFERENCE SYSTEM 명령문DROP SPATIAL REFERENCE SYSTEM 명령문을 참조하십시오. 이러한 명령문이 구현됨에 따라, SELECT, INSERT, UPDATE 등의 명령문을 사용하여 mysql.st_spatial_reference_systems 데이터 딕셔너리 테이블에 직접 접근할 필요가 없으며, 이는 더 이상 허용되지 않습니다. SRS 정의에 대한 읽기 접근은 이전과 마찬가지로 INFORMATION_SCHEMAST_SPATIAL_REFERENCE_SYSTEMS 테이블을 통해 가능합니다. (WL #9059)

테스트 스위트 관련 사항

MySQL 테스트 스위트의 문서는 이제 Doxygen을 사용하여 MySQL 소스 트리에서 관리됩니다(자세한 내용은 https://dev.mysql.com/doc/index-other.html에서 MySQL Server Doxygen 문서를 참조하십시오). 이전에는 구형 테스트 스위트 매뉴얼을 기반으로 Unix 매뉴얼 페이지가 생성되었으나, 더 이상 업데이트되지 않아 MySQL 배포본에 포함되지 않습니다. (버그 #27021754)

MySQL 테스트 스위트에는 이제 CRC32() 테스트가 포함됩니다. 패치를 제공해준 Daniel Black에게 감사드립니다. (버그 #26495791, 버그 #87136)

mysqltest는 이제 copy_file, copy_files_wildcard, file_exists, move_file, remove_file, remove_files_wildcard 명령에 대해 선택적 retry 인수를 허용합니다. 사용법은 다음과 같습니다:

--file_operation file_name ... [retry]

인수를 지정하면, 명령은 실패한 작업을 주어진 횟수만큼 1초 간격으로 재시도합니다. (버그 #24671890)

X Plugin 관련 사항

X Plugin은 JSON 문자열을 기대하는 함수에 전달된 매개변수에서 따옴표를 잘못 제거하여 오류를 발생시킬 수 있었습니다. (버그 #26906519)

컬렉션에 인덱스를 생성한 후, X Plugin이 해당 컬렉션을 관계형 테이블로 표시하고 컬렉션으로 더 이상 표시하지 않는 문제가 있었습니다. (버그 #26906487)

X Protocol은 DATE 데이터 유형을 DATETIME 데이터 유형과 동일하게 표시했습니다. 이제 두 데이터 유형이 다르게 처리됩니다. (버그 #26647488)

mysqlxtestDATETIME 값의 초 단위 소수 자릿수를 올바르게 표시하지 못했습니다. (버그 #26638422)

X Plugin은 JSON 열에 대해 관련이 없는 소수 자릿수 정보가 포함된 열 메타데이터 필드를 반환했습니다. 이제 해당 필드는 반환되지 않습니다. (버그 #26258481)

IP 주소가 빈 호스트 이름으로 확인될 경우, X Plugin이 사용자 계정 조회를 잘못 처리했습니다. (버그 #26042786)

X Plugin은 이제 유휴 상태로 간주되는 인증된 연결을 중단하도록 구성할 수 있습니다. 다음 시스템 변수가 추가되었습니다:

(WL #9267)

X Plugin은 이제 캐싱 SHA-2 플러그 가능 인증을 지원합니다. 지원을 활성화하려면 다음을 실행하십시오:

INSTALL PLUGIN mysqlx_cache_cleaner SONAME 'mysqlx.so';

이 플러그인은 캐시를 유지 관리하고 수정된 계정에 대한 모든 항목을 제거합니다. (WL #10992)
참고: 버그 #27213213, 버그 #27042109를 참조하십시오.

기능 추가 및 변경 사항

InnoDB: MySQL 8.0.3 이상으로 업그레이드한 후 더 이상 필요하지 않은 InnoDB 시스템 테이블이 성공적인 업그레이드 후 삭제됩니다. (버그 #26757171)

InnoDB: MySQL 바이너리를 새 버전으로 업그레이드한 후 MySQL 서버를 시작할 때 데이터 사전 테이블 정의를 자동으로 업그레이드하는 기능이 추가되었습니다. 시작 시 서버의 데이터 사전 버전이 데이터 사전에 저장된 버전 정보와 비교되어 데이터 사전 테이블의 업그레이드 필요 여부가 결정됩니다. 업그레이드가 필요하고 지원되는 경우, 서버는 업데이트된 정의로 데이터 사전 테이블을 생성하고, 영구 메타데이터를 새 테이블로 복사하며, 기존 테이블을 새 테이블로 원자적으로 교체하고 데이터 사전을 다시 초기화합니다. 업그레이드가 필요하지 않은 경우, 데이터 사전 테이블을 업데이트하지 않고 시작이 계속됩니다.
mysqld --no-dd-upgrade 옵션을 사용하여 시작 시 데이터 사전 테이블의 자동 업그레이드를 방지할 수 있습니다. (WL #9553)

InnoDB: 서버가 오프라인 상태일 때 테이블스페이스 파일을 새로운 위치로 이동하거나 복원하는 것을 지원하는 새로운 --innodb-directories 옵션이 추가되어 시작 시 테이블스페이스 파일을 검색할 디렉터리를 정의합니다. 자세한 내용은 서버가 오프라인일 때 테이블스페이스 파일 이동을 참조하십시오.
--innodb-directories 기능이 도입됨에 따라, 절대 경로 또는 데이터 디렉터리 외부의 위치에서 생성된 파일별 테이블 및 일반 테이블스페이스 파일의 위치는 innodb_directories 인수 값에 추가되어야 합니다. 그렇지 않으면 InnoDB는 복구 중 이러한 파일을 찾을 수 없습니다. 테이블스페이스 파일 위치를 보려면 INFORMATION_SCHEMA.FILES 테이블을 조회하십시오:

mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES \G

CREATE TABLESPACE ... ADD DATAFILE 명령문은 이제 InnoDB가 알고 있는 디렉터리에서만 디렉터리를 지정할 수 있습니다. 알고 있는 디렉터리에는 innodb_directories 옵션에 의해 암시적 또는 명시적으로 정의된 디렉터리가 포함됩니다.
innodb_directories는 삭제된 innodb_scan_directories를 대체합니다. (WL #8619)

InnoDB: InnoDB는 이제 클러스터형 인덱스 페이지 외부에 저장된 외부 필드의 대용량 객체(LOB) 데이터를 부분적으로 업데이트하는 기능을 지원하며, JSON 문서가 JSON_SET()JSON_REPLACE()로 업데이트될 때에도 지원합니다. 이전에는 LOB 값을 전체로 읽거나 수정할 수 있었으며, JSON 열 값을 업데이트할 때 이전 문서를 완전히 제거하고 새 문서를 기록하는 방식이었습니다.
부분 업데이트는 내부 LOB 인덱스를 사용하며, 압축된 LOB 데이터의 경우 ZLOB 인덱스를 사용하여 새로 삽입되거나 업데이트된 LOB 데이터를 포함하는 행에 대해 하나 이상의 LOB 페이지에 생성되고 저장됩니다. 따라서 새로 삽입된 행에 대해 LOB 데이터의 부분적 가져오기 및 업데이트가 지원되지만, 기존의 LOB 데이터를 포함하는 행은 부분적 가져오기 및 업데이트 지원을 위해 업데이트되어야 합니다. LOB 인덱스 데이터가 추가됨에 따라 LOB 값이 차지하는 저장 공간이 소폭 증가합니다.
이 기능은 비압축 및 압축된 LOB 데이터를 저장하기 위한 다음의 InnoDB 페이지 유형을 추가합니다:

  • FIL_PAGE_TYPE_LOB_INDEX
  • FIL_PAGE_TYPE_LOB_DATA
  • FIL_PAGE_TYPE_LOB_FIRST
  • FIL_PAGE_TYPE_ZLOB_FIRST
  • FIL_PAGE_TYPE_ZLOB_DATA
  • FIL_PAGE_TYPE_ZLOB_INDEX
  • FIL_PAGE_TYPE_ZLOB_FRAG
  • FIL_PAGE_TYPE_ZLOB_FRAG_ENTRY

(WL #8960)

InnoDB: 스토리지 엔진 전용 필드인 mysql.tablespaces 데이터 사전 테이블과 InnoDB 테이블스페이스 파일의 페이지 0에 MySQL 서버 버전 및 테이블스페이스 버전 정보가 저장됩니다. MySQL 서버 버전은 테이블스페이스를 생성한 버전, 테이블스페이스가 가져온 버전 또는 마지막 주요 MySQL 업그레이드 버전입니다. 테이블스페이스 버전은 테이블스페이스 형식 변경을 추적합니다. SERVER_VERSIONSPACE_VERSION 필드는 이 데이터를 제공하기 위해 INFORMATION_SCHEMA.INNODB_TABLESPACES 테이블에 추가되었습니다. (WL #5989, WL #11063)

그룹 복제: 호스트 이름을 그룹 복제 연결에 대한 허용 목록의 일부로 지정할 수 있으며, 이는 group_replication_ip_whitelist 시스템 변수를 통해 지원됩니다. 호스트 이름은 CIDR 표기법을 지원하며, IPv6 주소로 확인되는 호스트 이름은 지원되지 않습니다.
호스트 이름의 경우 다른 서버에서 연결 요청이 있을 때만 이름 확인이 수행됩니다. 확인할 수 없는 호스트 이름은 허용 목록 유효성 검사에 포함되지 않으며, 오류 로그에 경고 메시지가 기록됩니다. 해결된 호스트 이름에 대해 역방향 확인된 DNS(FCrDNS) 검증이 수행됩니다.

경고
호스트 이름은 본질적으로 허용 목록에서 IP 주소보다 보안성이 낮습니다. FCrDNS 검증은 높은 수준의 보호를 제공하지만 특정 유형의 공격에 취약할 수 있습니다. 호스트 이름을 허용 목록에 추가할 때는 반드시 필요한 경우에만 추가하고 DNS 서버와 같은 이름 확인에 사용되는 모든 구성 요소가 사용자 제어 하에 유지되도록 하십시오. 또한, 외부 구성 요소 사용을 피하기 위해 hosts 파일을 사용하여 로컬에서 이름 확인을 구현할 수 있습니다.

(WL #10803, WL #11298)

JSON: JSON_TABLE() 함수가 추가되어, JSON 데이터를 수락하고 지정된 열로 구성된 관계형 테이블로 반환합니다. 이 가상 테이블은 표준 SQL 메커니즘을 사용하여 액세스할 수 있습니다.
이 함수의 구문은 JSON_TABLE(expr, path COLUMNS column_list) [AS] alias)이며, 여기서 expr은 JSON 데이터를 반환하는 표현식이고, path는 소스에 적용되는 JSON 경로, column_list는 열 정의 목록입니다. 열은 다음과 같이 FOR ORDINAL, PATH, EXISTS PATH, NESTED PATH 또는 NESTED 유형일 수 있습니다:

  • FOR ORDINAL: 이 열은 AUTO_INCREMENT 열과 유사한 카운터입니다.
  • PATH: 이 열은 지정된 JSON 경로를 사용하여 스칼라 값을 보유합니다. 불법 값(예: 비스칼라) 및 빈 값 처리를 위한 ON ERRORON EMPTY 옵션을 지원합니다.
  • EXISTS PATH: 지정된 JSON 경로에 대한 일치 항목이 있는 경우 열 값은 1이며, 그렇지 않으면 0입니다.
  • NESTED PATH: 지정된 JSON 경로에서 발견된 중첩된 객체나 배열이 상위 객체 또는 배열의 JSON 값과 함께 단일 행으로 평탄화됩니다. PATH 키워드는 선택 사항입니다.

다음은 두 가지 간단한 예입니다:

mysql> SELECT *
    -> FROM
    ->   JSON_TABLE(
    ->     '[1, 3, 5, 7, 9]',
    ->     "$[*]" COLUMNS(rowid FOR ORDINALITY, col VARCHAR(50) PATH "$")
    ->   ) AS t1;
+-------+------+
| rowid | col  |
+-------+------+
|     1 | 1    |
|     2 | 3    |
|     3 | 5    |
|     4 | 7    |
|     5 | 9    |
+-------+------+

mysql> SET @j = '[{"a": [{"x":"3"},{"y":"2"}]},
    '>   {"b": [{"x":"1"},{"y":"1"}]},
    '>   {"a": [{"x":"2"},{"y":"3"}]}]';

mysql> SELECT *
    -> FROM  JSON_TABLE(
    ->         @j,
    ->         "$[*]"  COLUMNS(
    ->                   rowid FOR ORDINALITY,
    ->
    ->                   xa INT EXISTS PATH "$.a",
    ->                   xb INT EXISTS PATH "$.b",
    ->
    ->                   ja JSON PATH "$.a",
    ->                   jb JSON PATH "$.b"
    ->                 )
    ->       ) AS jts;
+-------+------+------+--------------------------+--------------------------+
| rowid | xa   | xb   | ja                       | jb                       |
+-------+------+------+--------------------------+--------------------------+
|     1 |    1 |    0 | [{"x": "3"}, {"y": "2"}] | NULL                     |
|     2 |    0 |    1 | NULL                     | [{"x": "1"}, {"y": "1"}] |
|     3 |    1 |    0 | [{"x": "2"}, {"y": "3"}] | NULL                     |
+-------+------+------+--------------------------+--------------------------+

JSON 소스 표현식은 JSON 리터럴, 테이블 열 또는 JSON을 반환하는 함수 호출(JSON_EXTRACT(t1, data, '$.post.comments')와 같은) 등 유효한 JSON 문서를 반환하는 모든 표현식일 수 있습니다. 이 함수에 대한 전체 구문 및 자세한 내용은 JSON 테이블 함수를 참조하십시오. (WL #8867)

-DWITH_ASAN_SCOPE CMake 옵션은 사용 후 영역 검출을 위한 AddressSanitizer -fsanitize-address-use-after-scope Clang 플래그를 활성화합니다. 기본값은 비활성화입니다. 이 옵션을 사용하려면 -DWITH_ASAN도 활성화해야 합니다. (버그 #27095089)

JSON 문서 처리가 더 강력해졌습니다. (버그 #26787468, 버그 #87734)

MySQL 8.0.3에서는 LOCK TABLES가 활성 상태일 때 외래 키 관계에 있는 테이블에서 ALTER TABLE RENAME을 제한했으나, 이 제한이 해제되었습니다. (버그 #26647340, 버그 #87467)

서버 PID 파일이 모든 사용자가 쓰기 가능한 위치에 생성되도록 구성된 경우, 서버는 더 안전한 위치를 사용할 것을 권장하는 경고를 이제 표시합니다. (버그 #26585560)

_charset 캐릭터셋 도입자(예: _utf8mb4 'abc')를 사용하는 구문의 경우, 도입자를 적절한 캐릭터셋으로 매핑하는 조회 성능이 향상되었습니다. (버그 #25680866, 버그 #85331)

버그 수정

중요 변경: 다음과 같은 PERIOD_ADD()PERIOD_DIFF() 함수의 변경 사항이 있습니다:

  • 이 함수들에 사용되는 기간 값은 음수일 수 없습니다.
  • 기간 값의 월 부분이 0일 수 없습니다.

이제 이러한 조건 중 하나 이상을 충족하는 기간 값이 사용될 경우 함수가 오류와 함께 실패합니다. (버그 #27004699, 버그 #27004729)

중요 변경: LEAST()GREATEST() 함수는 더 이상 사용된 표현식에서 인수의 컨텍스트를 추론하려 하지 않습니다. 예를 들어, LEAST('11', '45', '2')'11'을 반환하지만, LEAST('11', '45', '2') + 0은 인수를 문자열이 아닌 정수로 처리하여 2를 반환했습니다. 이제 이 함수들은 항상 인수를 엄격하게 유형에 따라 평가하며, 함수가 포함된 표현식에 의한 데이터 유형 변환은 함수가 반환하는 결과에 대해서만 수행됩니다. 따라서 LEAST('11', '45', '2') + 0 표현식은 이제 '11' + 0로 평가되어 정수 값 11을 반환합니다.이 변경은 다음과 같은 이유로 이루어졌습니다:

  • 컨텍스트를 유도하는 규칙이 항상 명확하거나 일관되지 않았습니다.
  • 표현식에서 사용된 경우 이러한 함수의 결과가 COALESCE() 또는 UNION 쿼리의 결과와 일치하지 않았습니다.

표현식 내에서 이러한 함수를 사용하는 애플리케이션은 이전 동작에 의존하지 않는지 확인하고, 그렇다면 업데이트해야 합니다. (버그 #83895, 버그 #25123839)

InnoDB: 마스터에서 XA 준비 단계까지 성공적으로 실행된 동시 XA 트랜잭션이 슬레이브에서 재생될 때 충돌하여 응용 스레드에서 잠금 대기 시간이 초과되었습니다. 이 충돌은 트랜잭션이 슬레이브에서 직렬로 재생될 때 GAP 잠금 범위가 달라졌기 때문에 발생했습니다. 이를 방지하기 위해 READ COMMITTED 격리 수준에서 XA 트랜잭션이 준비 단계에 도달하면 GAP 잠금이 해제(더 이상 상속되지 않음)됩니다. (버그 #27189701, 버그 #25866046)

InnoDB: 가상 생성 열을 참조하는 외래 키 제약을 추가하는 ALTER TABLE 작업에서 어설션이 발생했습니다. (버그 #27189701)

InnoDB: 일반 테이블스페이스 데이터 파일이 누락되어 DROP DATABASE 작업에서 어설션이 발생했습니다. (버그 #27151163)

InnoDB: Windows에서 테이블 파티션을 변경하는 작업에서 어설션이 발생했습니다. 테이블 이름이 올바르게 구문 분석되지 않았습니다. (버그 #27075816)

InnoDB: 임시 테이블에 대해 TRUNCATE TABLE 작업을 수행할 때 어설션이 발생했습니다. (버그 #27073280)

InnoDB: DDL 작업의 후속 DDL 단계에서 복구 관련 함수를 호출할 때 어설션이 발생했습니다. (버그 #27041487, 버그 #88263)

InnoDB: SRID 속성이 있는 열을 참조하는 공간 인덱스를 추가할 때 오류가 반환되었습니다. (버그 #27021029)

InnoDB: 64자 외래 키 이름을 가진 테이블로 인해 업그레이드 실패가 발생했습니다. 64자 길이의 외래 키 이름이 허용되어야 합니다. (버그 #27014308, 버그 #88196)

InnoDB: MySQL 5.7에서 MySQL 8.0으로 업그레이드된 압축 테이블에 대해 InnoDB 복구 프로세스가 테이블스페이스 크기 오류로 실패했습니다.
이제 압축 테이블의 테이블스페이스 파일은 InnoDB 페이지 크기 대신 물리적 페이지 크기를 사용하여 생성되므로 비어 있는 압축 테이블에 대한 테이블스페이스 파일의 초기 크기가 이전 MySQL 릴리스보다 작아졌습니다. (버그 #27014083, 버그 #88195)

InnoDB: 불필요한 테이블스페이스 가져오기 및 캐시 업데이트 작업으로 인해 서버 시작이 지연되었습니다. (버그 #26995951)
참고: 이 문제는 버그 #26832347의 회귀입니다.

InnoDB: 고아가 된 .frm 파일로 인해 업그레이드 실패가 발생했으며, 첫 업그레이드 시도에서 이름이 변경된 전문 검색 보조 테이블로 인해 이후 업그레이드 시도도 실패했습니다. (버그 #26995951)

InnoDB: 동시 CREATE TABLE 작업 중에 발생하는 충돌하는 직렬화된 사전 정보(SDI) 삽입 문제를 해결하기 위해 도입된 해결 방법이 제거되었습니다. (버그 #26995534)
참고: 버그 #26539665도 참조하십시오.

InnoDB: “장치에 공간이 부족합니다” 오류가 잘못된 오류 메시지를 보고했습니다. (버그 #26960345)

InnoDB: 빠른 종료 중에 InnoDB가 파일을 닫은 후 동적 메타데이터를 데이터 사전에 기록하려고 시도하여 데이터 사전 테이블스페이스에 대한 보류 중인 I/O로 인해 초기화 실패가 발생했습니다. (버그 #26950659)

InnoDB: MySQL 8.0.4로 업그레이드한 후 시작 시 반복적으로 제거된 InnoDB 시스템 테이블을 로드하려고 시도하여 스택 오버플로 오류가 발생했습니다. (버그 #26945437, 버그 #88042)

InnoDB: 압축된 테이블을 가져오는 작업에서 어설션이 발생했습니다. 이 작업은 SDI 페이지를 변환하기 위해 테이블의 클러스터형 인덱스를 사용했습니다. (버그 #26938297)

InnoDB: 디버그 빌드에서 REPLACE 작업 중 임시 테이블 생성 실패 시 잘못된 어설션이 발생했습니다. (버그 #26919378, 버그 #26958868)

InnoDB: 데이터베이스 테이블이 일반 테이블스페이스에 생성된 경우 DROP DATABASE 작업이 실패했습니다. 일반 테이블스페이스 플래그가 잘못 등록되어 직렬화된 사전 정보(SDI) 작업이 실패했습니다. (버그 #26834496)

InnoDB: 바이너리 로깅이 활성화된 상태에서 ALTER TABLESPACE ... RENAME 작업이 “cannot find space” 오류로 실패했습니다. (버그 #26832347)

InnoDB: 인덱스 추가에 실패한 작업에서 잘못된 적응형 해시 인덱스 어설션이 발생했습니다. (버그 #26788968)

InnoDB: 데이터 사전에서 읽은 유효한 테이블 행 유형 값이 잘못된 어설션을 발생시켰습니다. (버그 #26773152)

InnoDB: innodb_force_recovery=5를 설정하여 업그레이드를 시작하면 InnoDB 백그라운드 스레드가 초기화되었으나, 오류가 발생했을 때 스레드가 정상적으로 종료되지 않았습니다. 이제 비영(非0) innodb_force_recovery 설정으로 업그레이드가 허용되지 않습니다. (버그 #26766632)

InnoDB: 실패한 CREATE TEMPORARY TABLE 문이 INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO에 항목을 남겼습니다. 메모리 내 테이블 객체가 해제되지 않았습니다. (버그 #26765438)

InnoDB: InnoDB가 외래 키에 적합한 인덱스를 찾으려고 할 때 잘못된 dict_table_t 배열에서 가상 열 이름을 조회했습니다. (버그 #26764604)

InnoDB: table_statsindex_stats 데이터 사전 테이블을 업데이트하는 쓰기 가능한 연결 가능한 트랜잭션이 동일한 행을 업데이트하려 시도하여 교착 상태가 발생했습니다. (버그 #26762517)

InnoDB: 복구 중에 메모리 내 테이블스페이스 객체의 테이블스페이스 이름이 테이블 이름 캐릭터셋이 아닌 파일 이름 캐릭터셋을 사용하여 정의되어 “missing tablespace” 오류가 발생했습니다. (버그 #26761960)

InnoDB: 부트스트랩 코드가 데이터 사전 테이블을 위해 처음 1024개의 테이블 ID를 예약하지 않았습니다. (버그 #26757227)

InnoDB: 여러 클라이언트가 파티션 테이블에 대해 업데이트를 수행하면서 잘못 설정된 잠금 유형으로 인해 예기치 않은 잠금 대기 시간이 초과되었습니다. (버그 #26731025, 버그 #87619)

InnoDB: 메타데이터 잠금을 획득하려던 비동기 롤백 스레드가 중단되었으나, 생성된 오류가 서버에 반환되지 않았습니다. 이 문제는 비동기 롤백에 메타데이터 잠금 획득이 필요하지 않기 때문에 해당 획득을 제거하여 해결되었습니다.
메모리 내 테이블만이 롤백 처리 중 열렸으므로 데이터 사전도 확인하여 테이블이 메모리에 존재하지 않는 경우에 대비하도록 변경되었습니다. (버그 #26678883)

InnoDB: 예상보다 긴 이름을 가진 전문 검색 보조 테이블을 열려고 할 때 어설션이 발생했습니다. (버그 #26649020)

InnoDB: 데이터 사전 테이블 열기 함수가 테이블과 스키마 이름의 캐릭터셋 변환을 올바르게 처리하지 않아 복구 중에 오류가 발생했습니다. (버그 #26640776)

InnoDB: 일부 ALTER TABLE ... PARTITION 시나리오에서 트랜잭션 end_stmt() 함수가 호출되지 않아 타임아웃이 발생했습니다. (버그 #26629790, 버그 #25886814)

InnoDB: DDL 작업의 커밋 단계에서 직렬화된 사전 정보(SDI) 테이블에 메타데이터 잠금을 획득하려 할 때 잠금 대기 시간이 초과되거나 쿼리가 중단되었습니다. (버그 #26628126)

InnoDB: 동적 메타데이터 업데이트에 대한 redo 로그가 redo 로그 여유 검사 시 고려되지 않았습니다. 또한 읽기 전용 모드에서는 redo 로그에서 메타데이터를 기록하기 위해 innodb_dynamic_metadata 데이터 사전 테이블이 불필요하게 열렸습니다. (버그 #26589535)

InnoDB: memcached 플러그인 설치 시도가 실패한 후 예기치 않은 오류가 발생했습니다. (버그 #26588738)

InnoDB: 버퍼 풀 크기 조정 작업이 진행되는 동안 다른 스레드가 버퍼 풀 페이지의 상태를 변경했습니다. (버그 #26588537)

InnoDB: 충돌하는 잠금에 대해 어설션하는 디버그 함수가 커밋되거나 롤백될 트랜잭션 잠금을 고려하지 않았습니다. (버그 #26562371)

InnoDB: 대기 레코드 잠금의 나이를 업데이트하는 Variance-Aware Transaction Scheduling(VATS) 기능이 테이블 잠금을 무시하지 않아 어설션 실패가 발생했습니다. (버그 #26538702)

InnoDB: 테이블 파티션을 생성하거나 수정하는 DDL 작업이 다른 파티션의 행 형식을 의도치 않게 변경하여 행 형식 불일치가 발생했습니다. (버그 #26535746)

InnoDB: ALTER TABLE 작업으로 인해 서버가 중단되었습니다. (버그 #26492721)

InnoDB: 파티션 테이블 이름을 변경할 때 innodb_table_stats 데이터 사전 테이블이 새 파티션 이름으로 업데이트되지 않았습니다. (버그 #26390658, 버그 #86927)

InnoDB: MySQL 8.0.0에서 도입된 회귀로 인해 innodb_change_buffering 구성 옵션을 동적으로 설정할 수 없었습니다. (버그 #26389442)

InnoDB: 온라인 DDL 작업 중 동시에 발생하는 UPDATE 문을 롤백하는 동안 해제된 인덱스의 온라인 로그가 액세스되었습니다. (버그 #26334475)

InnoDB: 가상 열의 접두사에 보조 인덱스가 있는 테이블에서 REPLACE 작업을 수행할 때 어설션이 발생했습니다. (버그 #26330279)

InnoDB: 드라이브의 루트에 tmpdir를 설정하면 “Invalid (old?) table or database name” 오류 메시지가 오류 로그에 기록되었습니다. (버그 #26299984, 버그 #86737)

InnoDB: 트랜잭션 상태를 확인하려고 할 때 트랜잭션 뮤텍스를 획득하지 않아 INFORMATION_SCHEMA 쿼리 중 경합 상태가 발생했습니다. (버그 #26299705)

InnoDB: FLUSH TABLES 작업이 중단된 인덱스를 삭제하지 못했습니다. 캐시에서 테이블을 제거하는 동안 중단된 인덱스를 확인하기 전에 클러스터형 인덱스가 삭제되었습니다. (버그 #26256456, 버그 #86607)

InnoDB: InnoDB 테이블에서 CREATE TABLE ... LIKEinnodb_file_per_table 시스템 변수 설정을 준수하지 않았으며, 테이블 생성 시 사용자가 명시적으로 테이블스페이스를 지정하지 않았음에도 SHOW CREATE TABLETABLESPACE 절을 표시했습니다. (버그 #26199233, 버그 #86589)

InnoDB: 외래 키 연쇄 작업을 처리하는 반복 접근 방식이 과도한 메모리 사용을 초래했습니다. (버그 #26191879, 버그 #86573)
참고: 이 문제는 버그 #16244691의 회귀입니다.

InnoDB: 압축된 페이지를 해제하는 버퍼 풀 강제 회수 작업에서 잘못된 잠금 획득 순서가 발생했습니다. (버그 #25972975)

InnoDB: 데이터 사전 객체가 사용 중인 동안 메타데이터 잠금이 해제되었습니다. (버그 #25928984)

InnoDB: innochecksum이 1K 압축 페이지 크기를 가진 InnoDB 파일에서 실행될 때 Valgrind 오류를 반환했습니다. (버그 #25922124, 버그 #85993)

InnoDB: 한 스레드가 다른 스레드가 TRUNCATE TABLE 작업을 실행 중일 때 소켓을 닫지 못하여 어설션이 발생했습니다. (버그 #25887335, 버그 #85925)

InnoDB: 공간 인덱스가 있는 테이블에 대한 INSERT 작업에서 잠금 충돌 검사 중에 실패하여 어설션이 발생했습니다. (버그 #25729649)

InnoDB: 데이터 사전 테이블에 대해 활성화된 디버그 동기화 포인트가 사용자 테이블에 대해 실행되었습니다. (버그 #25508568)

InnoDB: 생성 저장 열의 기본 열에 외래 키 제약을 추가하지 못하도록 서버 측 검사가 추가되었습니다. (버그 #25339192)

InnoDB: MySQL 디버그 빌드에서만 나타나야 할 경고가 기록 내역의 길이가 2,000,000을 초과할 때 오류 로그에 기록되었습니다. (버그 #24296076, 버그 #82213)

InnoDB: 버퍼 풀 크기를 버퍼 풀 청크 크기보다 작게 줄이려는 시도가 경고를 보고하지 않았습니다. (버그 #23590280)

InnoDB: 지원되지 않는 인덱스 생성 시나리오를 해결하기 위해 “wrong key column” 오류가 추가되었습니다. (버그 #22486025)

InnoDB: 바이너리 정렬을 사용하는 인덱스가 지정된 열에서 대소문자를 구분하는 일치 항목을 반환하지 못했습니다. (버그 #21625016, 버그 #78048)

패키징: MySQL Yum 저장소를 사용하여 Fedora 27에 MySQL 서버를 설치하려고 할 때, 기본 mariadb-connector-c-devel 패키지와의 충돌로 인해 설치가 실패했습니다. 이 수정으로 해당 패키지와 다른 기본 패키지에 대한 적절한 “obsoletes” 항목이 추가되었습니다. (버그 #26963839)

파티셔닝: 암시적 테이블스페이스를 사용하여 파티션 테이블을 생성할 경우, 각 파티션이 개별 테이블스페이스에 배치되고 테이블 전체에 대해 지정된 테이블스페이스가 없습니다. 주어진 테이블에 사용된 모든 테이블스페이스에 직렬화된 사전 정보(SDI)가 저장되었기 때문에 여러 테이블스페이스를 가진 테이블에서 저장 비용이 매우 높아졌습니다. 이 문제는 SDI를 저장하는 데 사용된 테이블스페이스 집합에서 첫 번째 파티션의 테이블스페이스만 포함하도록 함으로써 해결되었습니다. (버그 #26762973)
참고: 버그 #26765252도 참조하십시오.

파티셔닝: 서버가 기본 테이블의 파티션을 축소하려 할 때, 파티션 테이블에서 CREATE VIEW 작업에서 어설션이 발생할 수 있었습니다. (버그 #26659699)

파티셔닝: 파티션 테이블의 이름을 변경할 때 새 파티션 이름으로 테이블 통계가 업데이트되지 않았습니다. (버그 #86074, 버그 #25953183)

복제; JSON: 행 기반 복제의 경우, JSON 문서에 대한 부분 업데이트가 복제 슬레이브에서 서버 변수 binlog_row_value_options=PARTIAL_JSON이 지정되지 않으면 적용되지 않았습니다. 이제 복제 슬레이브는 슬레이브 자체 설정에 binlog_row_value_options=PARTIAL_JSON이 포함되어 있든 없든 상관없이 마스터로부터 부분 업데이트를 수신할 때 이를 적용합니다. (버그 #26762675)

복제: Binlog_sender 클래스의 함수 set_unknow_error()set_unknown_error()로 이름이 변경되었습니다. 이 수정과 버그 #88149의 오타 수정에 대해 Simon Mudd에게 감사드립니다. (버그 #27149075, 버그 #88559)
참고: 버그 #26996065, 버그 #88149도 참조하십시오.

복제: 데이터 디렉터리를 초기화하기 위해 mysqld--initialize 또는 --initialize-insecure 옵션으로 호출할 때, 해당 단계에서는 mysql.gtid_executed 테이블이 존재하지 않아야 하므로 해당 테이블의 가용성에 대한 경고 메시지가 더 이상 표시되지 않습니다. 또한, 새 UUID 생성을 경고로 표시하던 메시지가 이제 일반적인 상황에서의 동작이므로 참고 메시지로 발행됩니다. (버그 #27115183)

복제: MySQL 8.0.3에서 바이너리 로그 파일과 인덱스 파일의 기본 이름은 호스트 머신의 이름을 사용하여 host_name-bin로 설정되었습니다. MySQL 8.0.4부터는 --log-bin 옵션을 제공하지 않으면, 바이너리 로그 파일과 인덱스 파일의 기본 이름으로 binlog가 사용됩니다. MySQL 8.0.3 이전 릴리스와의 호환성을 위해 --log-bin 옵션에 빈 문자열을 지정하면, 기본 이름이 호스트 머신의 이름을 사용한 host_name-bin으로 설정됩니다.
이전에는 --log-bin 옵션을 사용하여 바이너리 로그 파일 이름을 지정하지 않았을 때 (ER_LOG_BIN_BETTER_WITH_NAME)와 server_id 시스템 변수를 설정하지 않았을 때 (ER_WARN_NO_SERVERID_SPECIFIED) 경고 메시지가 표시되었으나, 이제는 정보 메시지로 변경되었습니다. (버그 #27082922)

복제: 모든 GTID 트랜잭션 앞의 바이너리 로그 파일에 있는 Gtid_log_event에서, transaction_length 필드는 16777216 바이트 이상의 트랜잭션에 대해 최대 9바이트로 허용되어야 함에도 불구하고 8바이트만 사용했습니다. (버그 #26993433)

복제: 버그 #22671846에 대한 수정이 MySQL 8.0.3 버전에서 누락되었습니다. (버그 #26985976)

복제: 버그 #26117735 (MySQL 버그 #86288)에 대한 수정으로 인해 데이터베이스 이름이 지정된 재작성 규칙에 따라 mysqlbinlog--read-from-remote-server 옵션과 --rewrite-db 옵션과 함께 실행할 때 디버그 어설션이 발생할 수 있었습니다. 이 문제는 이제 수정되었습니다. (버그 #26878022)

복제: MySQL이 yaSSL을 사용하여 컴파일되고 반동기 복제가 사용 중인 경우, 확인 패킷 처리 오류로 인해 데드락이 발생할 수 있었습니다. yaSSL은 여러 확인 패킷을 함께 읽을 수 있지만 반동기 복제를 위한 수신 스레드는 폴링 후 첫 번째 확인 패킷만 처리했습니다. 이제 수신 스레드는 버퍼에 있는 모든 확인 패킷을 처리합니다. (버그 #26865538)

복제: 반동기 복제를 사용하는 경우, 활성 트랜잭션이 슬레이브의 확인을 기다리는 동안 RESET MASTER가 실행되면, Rpl_semi_sync_master_wait_sessions 서버 상태 변수의 대기 세션 수가 잘못되었습니다. (버그 #26748533)

복제: --log-slave-updates--slave-preserve-commit-order 옵션은 바이너리 로깅이 필요합니다. 이러한 옵션을 지정하고 동시에 --skip-log-bin 또는 --disable-log-bin 옵션을 사용하여 바이너리 로깅을 비활성화하면 경고 또는 오류 메시지가 표시됩니다. 이제 --skip-log-bin--disable-log-bin 옵션은 기본적으로 --log-slave-updates--slave-preserve-commit-order 옵션을 비활성화하므로, 이러한 옵션이 지정되지 않은 경우 경고 또는 오류 메시지가 표시되지 않습니다. (버그 #26666259)

복제: 잘못된 트랜잭션 ID로 인해 실패한 XA ROLLBACK 문이 올바른 트랜잭션 ID로 바이너리 로그에 기록되어 복제 슬레이브에서 동작할 수 있었습니다. 바이너리 로깅 전에 오류 상황을 확인하여 실패한 XA ROLLBACK 문이 로그에 기록되지 않도록 했습니다. (버그 #26618925, 버그 #87393)

복제: NDB 스토리지 엔진을 사용할 때, 슬레이브가 행 검색을 위해 해시를 사용할 경우(MySQL 8.0.2부터 slave_rows_search_algorithms 시스템 변수의 기본 설정에 포함됨), 슬레이브에서 레코드를 제거한 후 행 해시를 저장하는 테이블이 올바르게 정리되지 않았습니다. NDB 스토리지 엔진에서 반환되는 변형 오류 값이 문제의 원인이었으며, 이제 예상 값으로 수정되었습니다. (버그 #26434966)

복제: mysqlrplsync 유틸리티를 사용하여 복제 동기화 확인 중에 예를 들어 복제 전용 저장소 테이블을 업데이트하는 MySQL 내부 관리 명령이 이제 읽기 잠금을 우회할 수 있습니다. 이를 통해 해당 명령은 read_onlysuper_read_only 시스템 변수 및 autocommit 모드 설정과 상관없이 실행될 수 있습니다. (버그 #26414532, 버그 #86224)

복제: 바이너리 로그 함수 MYSQL_BIN_LOG::new_file_impl이 “파일을 열 수 없음”(ER_CANT_OPEN_FILE) 오류를 반환해야 하는 상황에서 “파일 쓰기 오류”(ER_ERROR_ON_WRITE) 오류를 반환했습니다. (버그 #26370868, 버그 #86870)

복제: 복제 슬레이브가 병렬화를 위해 쓰기 세트를 사용하는 경우 (binlog_transaction_dependency_tracking 시스템 변수로 지정됨), 데이터베이스의 대소문자 및 악센트 구분이 이제 쓰기 세트 정보를 생성할 때 고려됩니다. 쓰기 세트 정보는 transaction_write_set_extraction 시스템 변수가 활성화된 경우에 생성됩니다. 이전에는 중복 키가 잘못 식별되어 트랜잭션 간의 종속성이 잘못 설정되어 실행 순서가 잘못될 수 있었습니다. (버그 #26277771, 버그 #86078)

복제: 반동기 복제를 위한 수신 스레드가 마스터/슬레이브 프로토콜 압축을 사용하는 슬레이브의 확인 메시지를 수신할 수 없었습니다 (slave_compressed_protocol=ON). 이제 수신 스레드가 압축된 확인 메시지를 올바르게 처리합니다. (버그 #26027024, 버그 #86230)

복제: 이제 mysql_reset_connection() 함수가 쓰기 세트 세션 기록을 지웁니다. (버그 #25950554, 버그 #86063)

복제: 복제 슬레이브의 Performance Schema 테이블 events_transactions_current에서 XA_STATE 필드의 XA 트랜잭션 상태가 COMMITTED 대신 PREPARED로 잘못 보고되었습니다. (버그 #25940184)

복제: 멀티소스 복제 토폴로지에서, 슬레이브가 다른 채널에서 이미 적용된 문을 건너뛰는 경우 메모리 누수가 발생할 수 있었습니다. 이 상황에서 슬레이브에 저장된 Rows_query 로그 이벤트 인스턴스가 삭제되지 않았습니다. 이제 로그 이벤트 인스턴스가 정리되고 메모리가 해제됩니다. 이 패치에 기여해주신 Vlad Lesin에게 감사드립니다. (버그 #25695434, 버그 #85371, 버그 #85034)

복제: 복제 슬레이브에서 구성된 전역 및 채널별 복제 필터를 표시하는 Performance Schema 테이블 replication_applier_global_filtersreplication_applier_filters에 대한 쿼리가 최적화되었습니다. 이제 필터가 변경될 때만 뷰가 생성됩니다. 이전에는 생성된 각 행에 대해 뷰가 생성되었습니다. (버그 #25694140)

복제: GTID 기반 복제에서 메모리 누수가 수정되었습니다. 건너뛰거나 무시된 이벤트에 대해 리포지토리 테이블이 업데이트된 후 메모리가 해제되지 않았습니다. (버그 #25656123, 버그 #85251)

복제: 다중 스레드 슬레이브에서 워커 스레드가 이후 트랜잭션에 종속된 트랜잭션을 적용하지 못할 경우, 코디네이터 스레드가 문제가 발생했음을 알리기 전에 종속 트랜잭션을 예약할 수 있었습니다. 이 상황에서 STOP SLAVE 요청이 발생하면 디버그 빌드에서 어설션이 발생할 수 있었습니다. (버그 #25585436)

복제: XA 트랜잭션 내에서 XA COMMIT ONE PHASE로 끝나는 UPDATE 또는 DELETE 문이 행에 영향을 주지 않을 경우, 복제 오류가 발생했습니다. 이제 트랜잭션이 영향을 주지 않았더라도 필요한 XA END 문이 바이너리 로그에 기록됩니다. (버그 #24812958, 버그 #83295)

복제: 복제 클라이언트는 더 이상 LOAD DATA 문에 대해 LOCAL 기능을 활성화하지 않습니다. 복제 클라이언트는 LOAD DATA LOCAL 문을 사용하지 않기 때문입니다. (버그 #24763131)

복제: 혼합 형식 복제(binlog_format=MIXED)의 동작이 임시 테이블과 관련하여 변경되었습니다. 이전에는 혼합 형식 바이너리 로깅이 사용 중일 때, 행 기반으로 기록된 문장이 임시 테이블을 포함한 세션에서 실행되면, 이후 모든 문장이 안전하지 않은 것으로 간주되어 행 기반 형식으로 기록되었고, 해당 세션에서 사용 중인 모든 임시 테이블이 삭제될 때까지 유지되었습니다. 또한 log_slave_updates가 활성화된 복제본에서 버그 보고된 내용처럼 연결이 유지되는 동안 잘못된 행 기반 로깅이 모든 후속 세션에 적용되었습니다.
이제 혼합 바이너리 로깅 형식이 사용 중일 때, 임시 테이블만 사용하는 문장은 기록되지 않습니다. 임시 테이블과 비임시 테이블을 혼합하여 사용하는 문장은 마스터에서 비임시 테이블에 대한 작업만 기록되며, 임시 테이블에 대한 작업은 기록되지 않습니다. 예외적으로 임시 테이블 생성을 문장 기반 형식으로 바이너리 로그에 기록한 경우, 해당 임시 테이블이 삭제될 때 DROP TEMPORARY TABLE IF EXISTS 문이 마스터에서 기록됩니다.
이 동작 변경으로 인해, 임시 테이블과 관련되지 않은 세션의 나머지 문장은 더 이상 안전하지 않은 것으로 간주될 필요가 없습니다. 안전한 문장은 이제 문장 기반 형식으로 기록되며, 안전하지 않은 문장은 세션 내 임시 테이블 유무와 관계없이 혼합 형식 복제의 일반 동작에 따라 행 기반 형식으로 기록됩니다. 또한 버그에 보고된 문제가 수정되어 이후 연결된 세션이 이전 세션에서 사용한 형식에 관계없이 세션에 적절한 로깅 형식을 사용합니다.
binlog_formatROW 또는 STATEMENT일 때의 동작은 이전과 동일합니다. 행 기반 바이너리 로깅 형식에서는 DROP TEMPORARY TABLE IF EXISTS 문을 제외하고는 임시 테이블에 대한 작업이 기록되지 않으며, 문장 기반 바이너리 로깅 형식에서는 임시 테이블과 관련된 작업이 마스터에 기록되고 복제본에 복제됩니다. 이제 binlog_format=STATEMENT는 임시 테이블이 복제본에 복제되는 유일한 로깅 모드입니다.
실행 중에는 이제 ROW 또는 MIXED에서 STATEMENTbinlog_format 설정을 변경할 수 없습니다. 이는 이전 모드에서 CREATE TEMPORARY TABLE 문이 바이너리 로그에서 생략되었기 때문입니다. 임시 테이블이 생성된 경우에도 STATEMENT에서 ROW 또는 MIXED 형식으로 전환할 수 있습니다.
George Lorch와 Percona의 Laurynas Biveinis에게 패치에 감사드립니다. (버그 #18843730, 버그 #72475)

복제: 그룹에 참여하는 과정에서 분산 복구 중, 적용기가 모든 트랜잭션을 적용했다고 신호를 보낼 때, 적용기는 부분 트랜잭션을 맹목적으로 검색했습니다. 이는 이 시점에서 적용기가 멈출 경우 발생할 수 있는 향후 적용기 오류를 방지하기 위함이었습니다. 그러나 이 검색 및 제거는 적용기 중지 사례에서만 의미가 있었으며, 실행이 완료된 후에는 수행되어서는 안 되며, 그렇지 않으면 적용기 릴레이 로그가 손상되거나 삭제되어 데이터 손실이 발생할 수 있습니다. 이를 해결하기 위해, 이제 적용기가 실행 완료를 기다릴 때 더 이상 부분 트랜잭션을 검색하거나 제거하지 않습니다. (버그 #88304, 버그 #27049034)

복제: 높은 부하가 걸린 그룹에서, 참여하는 멤버가 그룹과 동기화하기 위해 많은 데이터를 가져와야 할 수 있습니다. 가져온 데이터 양이 View_change 패킷 크기 4MB를 초과하면 멤버가 그룹에 참여할 수 없으며 Error 상태로 전환됩니다. 이제 패킷 크기는 기본값이 1GB인 slave_max_allowed_packet에서 가져옵니다. 그룹이 처리하는 부하에 따라 slave_max_allowed_packet을 구성하여 패킷 크기를 더 늘릴 수 있습니다. (버그 #87701, 버그 #26770576)

복제: 그룹에서 조인 멤버가 지속적으로 트랜잭션을 수신할 때 온라인 상태로 전환하지 못하는 경우가 발생할 수 있었습니다. 이는 메시지 대기열의 테스트 방식에 기인한 것이었습니다. (버그 #87631, 버그 #26731317)

그룹 복제; Microsoft Windows: Windows에서 그룹 복제에서 생성된 오류가 이제 오류 번호 대신 상세한 오류 메시지를 포함합니다. (버그 #24918678)

그룹 복제: 그룹 복제 플러그인이 시작된 스레드가 제대로 종료되지 않아 이 스레드를 종료한 후 플러그인을 시작하거나 중지할 수 없었습니다. (버그 #26435775)

그룹 복제: transaction_write_set_extraction이 활성화된 경우, 동시에 DDL이 실행될 때 외래 키를 수집하는 과정에서 불필요한 직렬화가 발생할 위험이 있었습니다. 이제 그룹 복제는 새로운 데이터 딕셔너리를 활용하여 테이블 정의 및 외래 키와 상호작용하므로 이러한 잠재적인 직렬화 문제가 해결되었습니다. (버그 #26187850)

그룹 복제: group_replication_enforce_update_everywhere_checksON일 때, 그룹 복제 플러그인은 외래 키 연쇄가 있는지 여부를 확인하고 해당 테이블에 대한 업데이트를 허용하지 않습니다.
이 과정에서 SET NULL 작업은 확인되지 않았으며, 이는 데이터 불일치로 이어질 수 있었습니다. 이제 이 값이 ON으로 설정된 경우, 테이블에 SET NULL 옵션이 구성된 경우 자식 테이블에 대한 작업이 차단됩니다. (버그 #25404162)

그룹 복제: 그룹에 속한 모든 서버는 server_uuid에 의해 고유한 UUID가 설정되어야 하지만, 그룹 복제에서 이를 강제하지 않아 중복 UUID를 가진 멤버를 추가할 수 있었습니다. (버그 #88452, 버그 #27105803)

그룹 복제: 그룹 복제 플러그인이 시작되거나 중지될 때, 읽기 전용 모드 활성화 또는 비활성화와 같은 내부 작업을 서버에서 내부 세션을 통해 실행합니다. 이 세션이 열릴 때 허용된 최대 연결 수가 max_connections를 초과하면 예상대로 작업이 실패하지만 이후에 문제가 발생하는 스레드가 남았습니다. (버그 #88182, 버그 #27008102, 버그 #27016552)

그룹 복제: 서버가 --initialize 또는 --initialize-insecure 옵션으로 초기화될 때 서버 부팅 시 그룹 복제를 시작하도록 구성하면 복제 애플라이어 인프라가 초기화되지 않아 어설션이 발생했습니다. 이제 서버 초기화 중에는 그룹 복제가 시작되지 않습니다. (버그 #87759, 버그 #26802395)

그룹 복제: 플러그인이 시작 또는 중지될 때 그룹 복제 변수 변경이 올바르게 검증되지 않았습니다. 이제 플러그인이 상태를 변경 중이지 않을 때만 변수를 변경할 수 있습니다. (버그 #86874, 버그 #26372117)

그룹 복제: 가상 IP가 여러 개 설정된 경우에도 그룹 복제가 첫 번째 12개 주소에만 액세스할 수 있었습니다. (버그 #86772, 버그 #26324852)

그룹 복제: 서버 시작을 위한 지연 초기화 메커니즘이 개선되었습니다. 이제 서버가 읽기 모드에 있을 때만 연결이 차단됩니다. (버그 #86271, 버그 #26037344)
참조: 관련 버그 #84731, 버그 #25475132도 참조하세요.

그룹 복제: 단일-프라이머리 그룹의 프라이머리 멤버나 비동기 복제 채널이 데이터 피드를 제공하는 멀티-프라이머리 그룹에서 프라이머리 멤버가 중지될 때, 비동기 채널은 계속해서 변경 사항을 적용했습니다. STOP GROUP_REPLICATION이 발행될 때 super_read_only가 설정되었지만, 이미 실행 중인 비동기 복제 채널이 중지되지 않았습니다. 이로 인해 멤버에 로컬로 변경 사항이 적용될 수 있었으며, 비동기 복제 채널을 수동으로 중지해야 했습니다. 이제 그룹 복제가 오류로 중지되거나 STOP GROUP_REPLICATION이 발행될 때 모든 비동기 복제 채널이 중지됩니다. (버그 #86222, 버그 #26024253)

그룹 복제: 그룹 복제 로깅이 개선되어 멤버가 참여하거나 떠날 때, 뷰가 변경될 때 등의 정보를 포함합니다. (버그 #84798, 버그 #25495393)
참조: 관련 버그 #26422857도 참조하세요.

Linux: Alpine Linux에서 표준 출력이 기록되지 않으면 mysql이 서버와의 연결을 잃을 수 있었습니다. 또한 mysqlmysqldump의 경우 stdoutstderr의 결과 플러싱 순서가 결정적으로 변경되었습니다. (버그 #27169809)
참조: 관련 버그 #17583도 참조하세요.

Microsoft Windows: Windows에서 myisam_use_mmapflush 시스템 변수가 활성화된 경우 MyISAM이 테이블 파일을 항상 올바르게 플러시하지 않았습니다. (버그 #26880757)

JSON: LAG() 함수의 인수로 사용된 JSON 표현식이 항상 올바르게 평가되지 않았습니다. (버그 #26740557)

JSON: JSON_ARRAY()를 사용하는 준비된 문을 반복 실행할 때 제대로 처리되지 않았습니다. (버그 #26704312)
참조: 이 문제는 버그 #25867454의 회귀입니다.

JSON: JSON_INSERT() 함수를 실행할 때, 주어진 삽입이 루트 요소에 이루어지는지 여부를 확인하는 과정에서 경로의 길이가 1인지(즉, 경로가 삽입 요소가 루트 요소 내의 어느 위치에 놓일지를 결정하는 단일 다리로 구성되었는지) 테스트했습니다. 경로 시작 부분에 자동으로 래핑되는 경로 다리가 있을 때 문제가 발생했는데, 이 경우 경로 길이가 1보다 큰 경우에도 루트 내의 요소를 참조할 수 있어 경로 길이 확인만으로는 삽입 대상 요소가 루트인지 다른 요소인지 확실히 알 수 없었습니다.
이를 수정하기 위해, 루트 요소 탐지를 위한 경로 길이 확인을 일치하는 요소에 부모가 있는지 여부를 확인하는 방식으로 대체했습니다. 부모가 없으면 해당 요소는 루트 요소임이 확실합니다. (버그 #26649978)
참조: 이 문제는 다음의 리그레션과 관련이 있습니다: 버그 #86213, 버그 #26022576.

JSON: JSON 값을 이진 표현으로 직렬화할 때, 대상 버퍼가 필요한 크기의 정수 또는 실수 값을 담을 만큼 충분한 공간을 가지고 있는지 확인할 필요가 있습니다. 이전에는 이 버퍼의 할당이 필요한 최소 메모리만 확보하도록 되어 있어 직렬화 후 얼마 지나지 않아 재할당이 필요할 가능성이 높았습니다. 이는 특히 많은 숫자 값을 포함한 배열을 직렬화할 때 성능에 부정적인 영향을 미칠 수 있었습니다. 이제 직렬화는 대상 버퍼 크기가 지수적으로 증가하도록 할당이 이루어져, 큰 배열을 처리할 때 이 작업에 소요되는 시간을 줄일 수 있습니다. (버그 #88656, 버그 #27171283)

JSON: JSON 문서가 문자열 표현으로 변환될 때, 소수 부분이 없는 부동 소수점 값이 정수와 구분되지 않게 표현될 수 있었습니다. 이와 같은 JSON 문서의 문자열 표현이 JSON 파서를 다시 거치면, 해당 숫자 값이 원래 부동 소수점으로 지정된 값이라는 정보가 사라질 수 있었습니다.
이 문제를 해결하기 위해, 이제 소수 부분이 없고 과학적 표기법으로 표현되지 않은 부동 소수점 값에는 JSON 문서 내 문자열 표현에 소수 부분을 추가합니다. 이렇게 하면 문자열 표현을 다시 파싱하더라도 해당 값이 여전히 부동 소수점 값으로 취급되어 정수와 구분됩니다.
이 수정 사항은 또한 ST_GeomFromGeoJSON()이 다른 JSON 함수들과 동일한 JSON 파서를 사용하도록 합니다. MySQL 5.7.8 이후에는 자체 커스텀 파서를 사용해왔는데, 이는 ST_AsGeoJSON()이 음의 영수의 소수 부분을 제거하여(-0 대신 -0.0), JSON 파서가 -0을 정수 0으로 해석하게 되어 양의 영과 음의 영을 구분하지 못하게 했기 때문입니다. 이제 ST_AsGeoJSON()이 표준 JSON 파서를 사용하여 음의 영을 정확하게 -0.0으로 나타내므로, ST_GeomFromGeoJSON()ST_AsGeoJSON()의 출력을 파싱할 때 음의 영을 별도로 유지할 필요가 없습니다. (버그 #88230, 버그 #27028889)
참조: 관련 버그 #19504183.

JSON: GROUP BY 쿼리 결과에서 생성된 JSON 값을 삽입할 때, 삽입된 값이 이전에 해당 열에 삽입된 모든 값의 연결을 포함할 수 있었습니다. (버그 #87854, 버그 #26867509)

JSON: JSON 문서에서 추출된 문자열을 인수로 호출할 때 LEAD()LAG() 함수가 모든 행에 대해 동일한 값을 반환했습니다. (버그 #87839, 버그 #26848089)

JSON: INFORMATION_SCHEMA.COLUMN_STATISTICS 테이블의 각 히스토그램에서 마지막 업데이트된 필드의 마이크로초 부분이 JSON으로 직렬화될 때 누락되어 저장되지 않았습니다. (버그 #87833, 버그 #26846289)

JSON: JSON_SET() 문이 부분 업데이트(즉, NOOP인 경우)를 통해 동일한 JSON 값을 업데이트할 때, 바이너리 차이가 생성되지 않아도 논리적 차이가 생성될 수 있었습니다. 이제 이러한 경우 논리적 업데이트와 바이너리 차이가 생성되지 않습니다. (버그 #87113, 버그 #26483625)

JSON: JSON 부분 업데이트 구현 후 동일한 JSON 문서가 마스터와 슬레이브에서 다른 바이너리 표현을 가질 수 있었습니다. 이로 인해 행 기반 복제에서 바이너리 일치가 필요할 때 문제가 발생할 수 있었습니다. 이제 비교를 위해 JSON 문서의 문자열 표현을 사용합니다.
또한 이 수정 결과, 바이너리 표현이 변경되었지만 문서 내용은 동일한 경우 업데이트가 더 많은 상황에서 생략될 수 있습니다. (버그 #86532, 버그 #26177130)

Ubuntu 14.04 및 Debian 8에 대한 지원이 중단되었습니다. (버그 #27422291)

Undefined Behavior Sanitizer가 활성화된 32비트 플랫폼 빌드에서 스택 오버런 검사가 서버 종료를 초래할 수 있었습니다. (버그 #27224961)

한 세션이 공간 참조 시스템(SRS)을 사용하고 있는 동안 다른 세션에서 SRS 생성이 진행될 경우 서버가 중단될 수 있었습니다. (버그 #27220467)

권한 확인 작업 중 테이블 권한과 관련이 없는 경우에도 권한 캐시에 대한 잠금이 불필요하게 획득되었습니다. (버그 #27197483)

읽기 전용 gtid_owned 또는 gtid_executed 시스템 변수를 지속시키면 서버 시작 시 어설션 실패가 발생했습니다. 이제 이러한 변수는 더 이상 지속될 수 없습니다. (버그 #27193853)

플러그인 로드 및 언로드 처리의 오류로 인해 서버가 종료될 수 있었습니다. (버그 #27151550, 버그 #88589, 버그 #27116827, 버그 #88483)

일부 윈도잉 함수의 오류 전파가 항상 올바르게 수행되지 않았습니다. (버그 #27135084, 버그 #27136492)

일부 매우 큰 값을 부정할 때 내부 함수에서 제대로 처리되지 않았습니다. (버그 #27134168)

날짜 간격을 더할 때 더 엄격한 검사가 도입되었습니다. (버그 #27134148)

새로 도입된 SRID 및 COLUMN_STATISTICS 메타데이터 잠금이 퍼포먼스 스키마에 의해 계측되지 않았습니다. (버그 #27124506)

파생 테이블의 이름이 해당 테이블이 물리화되고 임시 테이블 이름이 지정되기 전에 저장되지 않아 서버가 원래 이름을 참조할 수 없어 실패했습니다. (버그 #27121663)

OBJECT_TYPE 열의 인덱스를 사용한 퍼포먼스 스키마 쿼리가 잘못된 결과를 반환할 수 있었습니다. (버그 #27121500)

-DWITH_ASAN=1-DWITH_ASAN_SCOPE=1로 컴파일할 때 스택 사용 범위 초과 메모리 오류가 감지되었습니다. (버그 #27108794, 버그 #88460)

준비된 SELECT ... INTO OUTFILE 문에 대한 FILE 권한 확인이 잘못되었습니다. (버그 #27094955)

정보 우선 메시지 중 일부가 log_error_verbosity가 3 미만일 때 오류 로그에 기록되었습니다. (버그 #27082862)

ha_create_table_from_engine 함수가 ha_create 루틴에 테이블 객체를 전달하지 못했습니다. (버그 #27066335)

사용되지 않는 윈도우 정의의 PARTITION BYORDER BY 요소가 메모리 요구 사항 추정 시 포함되지 않았습니다. 이 문제는 현재 컨텍스트가 CTX_NONE일 때만 CTX_WINDOW 구문 분석 컨텍스트를 할당하여 해결됩니다. 이 수정의 일부로 구문 및 의미 오류가 확인된 후 사용되지 않는 윈도우 정의가 제거됩니다. (버그 #27062031)

ROLLUP을 생성하여 NULL을 생성한 GROUP BY가 제대로 처리되지 않았습니다. (버그 #27060420)

전역 자동 커밋이 비활성화된 이벤트가 만료될 때 이벤트 스케줄러의 이벤트가 어설션을 발생시켰습니다. (버그 #27041552, 버그 #88255)

사용자 정의 변수의 문자열 값에 대한 길이 계산이 콜레이션이 변경되면 잘못될 수 있었습니다. (버그 #27041543, 버그 #88256)

기존 뷰가 참조하는 테이블을 생성하려는 CREATE TABLE ... SELECT 문이 비-InnoDB 테이블을 생성하려고 하면 어설션이 발생했습니다. (버그 #27041536, 버그 #88258)

IF() 함수의 인수로 사용될 때, TIMESTAMP 열의 값이 서로 다른 정렬 방식에 따라 다르게 처리될 수 있었습니다. (버그 #27041526, 버그 #88259)

명령문 기반 바이너리 로깅을 사용하는 경우, CREATE TABLE ... SELECT 구문으로 BLACKHOLE 테이블을 생성하면 어설션이 발생했습니다. (버그 #27041516, 버그 #88260)

디버그 빌드에서 explicit_defaults_for_timestamp가 활성화된 상태에서 TIMESTAMP 관련 어설션이 발생할 수 있었습니다. (버그 #27041502, 버그 #88261)

LOCK TABLES 하에서 외래 키가 있는 테이블에 대해 DML 문을 실행하려고 할 때, 외래 키 관계에 있는 테이블들이 잠긴 모드와 호환되지 않는 경우 어설션 실패가 발생했습니다. (버그 #27041477, 버그 #88264)

LOCK TABLES 문이 활성화된 상태에서 INFORMATION_SCHEMA.FILES 테이블을 선택하는 쿼리가 메타데이터 잠금을 얻으려고 하면서 어설션이 발생할 수 있었습니다. (버그 #27041452, 버그 #88266)

컴포넌트 설치가 자동 증가(auto-increment) 처리를 올바르게 수행하지 않아 서버가 종료될 수 있었습니다. (버그 #27041374, 버그 #88276)

big_tables=1character_set_connection=ucs2를 설정하고 SHOW TABLE STATUS를 실행할 때 어설션이 발생할 수 있었습니다. (버그 #27041323, 버그 #88279)

백업 잠금이 활성화된 상태에서 바이너리 로그 파일 및 릴레이 로그 파일을 제거하는 것이 잘못 허용되었습니다. (버그 #27030339, 버그 #88238)

커버되지 않는 보조 인덱스를 스캔하는 동안 끝 범위 조건을 평가할 때, 끝 범위 조건이 인덱싱된 가상 열을 참조할 경우, InnoDB가 때때로 인덱스에서 잘못된 열을 읽어 어설션 실패나 잘못된 결과를 초래할 수 있었습니다. (버그 #27010089)

event 항목이 필터 규칙에서 JSON 배열로 지정된 값을 audit_log 플러그인이 올바르게 처리하지 못했습니다. (버그 #27010045)

날짜 값을 더할 때 정수 오버플로가 발생하여 잘못된 결과가 반환될 가능성이 있었습니다. (버그 #27004806)

활성 LOCK TABLES가 있는 상태에서 InnoDB 테이블에 대해 TRUNCATE TABLE를 실행하면 여러 테이블 인스턴스가 잠긴 경우 어설션이 발생했습니다. (버그 #26999526)

NTH_VALUE() 등의 일부 윈도우 함수가 NULL을 반환해야 할 모든 경우에 NULL을 반환하지 않았습니다. (버그 #26975882)

LEAST() 또는 GREATEST() 함수의 인수 중 하나가 DATETIME 형식이었지만, 집계 데이터 유형이 VARCHAR 또는 시간 유형이 아닌 경우, 해당 LEAST() 또는 GREATEST() 항목에 시간 속성이 설정되어 있었으며, 이로 인해 나중에 문 실행 중에 실패하게 되었습니다.
이 문제를 해결하기 위해, LEAST() 또는 GREATEST()의 인수가 시간 유형인 경우 집계 데이터 유형에 관계없이 임시로 시간 유형으로 설정하도록 변경되었습니다. (버그 #26975864)

IFNULL()가 여러 인수를 처리할 때 오류를 항상 올바르게 검사하지 않았습니다. (버그 #26975848, 버그 #27062796, 버그 #27062694)

클라이언트/서버 프로토콜에 대해 압축이 활성화된 상태에서 0xFFFFFF 크기의 배수인 논리 패킷이 연결을 끊을 수 있었습니다. Facebook Inc.의 패치에 감사드립니다. (버그 #26974113, 버그 #88092)

여러 세션에서 플러그인을 여러 번 설치하고 제거하면 서버가 응답하지 않을 수 있었습니다. (버그 #26946491)

MySQL 8.0 서버가 MySQL 5.7 데이터 디렉토리에서 시작될 때 제거된 함수를 포함한 가상 열 정의가 있는 경우 “데이터베이스가 선택되지 않음” 오류와 함께 시작이 실패했습니다. (버그 #26945125, 버그 #88040)

MySQL 5.7에서 MySQL 8.0으로 인플레이스 업그레이드 후 다음 오류가 발생했습니다:

  • --explicit-defaults-for-timestamp=0 설정으로 서버를 시작하면 ‘cached_time’의 기본값이 잘못되었다는 오류가 반환되었습니다.
  • --initialize--explicit-defaults-for-timestamp=0 설정을 사용하여 서버를 시작하면 ‘SET_TIME’의 기본값이 잘못되었다는 오류가 반환되었습니다.
  • 중복된 SET 데이터 유형 값으로 인해, sql_mode 설정에 관계없이 SET 값 중복 오류가 발생했습니다.

(버그 #26944731, 버그 #88039, 버그 #26948678, 버그 #88032)

윈도우 함수를 포함하는 파생 테이블 또는 뷰와 공통 테이블 식을 사용하는 쿼리가 잘못된 결과를 생성했습니다. (버그 #26907753, 버그 #87939)

--symbolic-links--skip-symbolic-links 서버 옵션(및 그에 상응하는 옵션) 사용에 대한 경고 메시지가 명확해졌습니다. 서버가 --help 옵션으로 호출될 때 더 이상 누락된 데이터 디렉토리에 대한 경고 메시지가 표시되지 않습니다. (버그 #26898576, 버그 #87913)

VALUES()가 일부 경우 올바르게 처리되지 않았습니다. (버그 #26881946)
참고: 관련 문제는 버그 #19601973, 버그 #17458914를 참조하세요.

MySQL Cluster에서 테이블 스페이스 검색 메커니즘이 비활성화되어, 스토리지 엔진 사전에 테이블이 존재하지만 MySQL 데이터 사전에 존재하지 않는 경우 직렬화된 사전 정보가 데이터 사전에 가져와지지 않았습니다. (버그 #26867488)

디버그 빌드에서 UPDATE 문에 대해 관련 생성 열에 대한 유효성 검사가 누락되어 서버가 종료될 수 있었습니다. (버그 #26838771)

윈도우 함수에서 정의되지 않은 윈도우가 정의되었을 때 정의되지 않았다는 오류가 발생할 수 있었습니다. (버그 #26813454, 버그 #87780)

불필요한 파생 테이블로 결정된 경우, 해당 개체를 삭제하는 루틴이 개체를 일관성 없는 상태로 남겨두었습니다. 이제 이러한 경우에 파생 테이블의 TABLE_LIST 개체가 삭제된 후 일관된 상태로 유지되도록 테이블 포인터를 NULL로 설정합니다. (버그 #26798989)

MAX() 함수와 HAVING 절이 포함된 뷰 내부 쿼리에서 잘못된 결과가 반환되었습니다. (버그 #26781725)

뷰에 있는 테이블에 대한 정의 변경 시 메타데이터 잠금이 다른 문과 일관되지 않을 수 있었습니다. (버그 #26770836)

MySQL 8.0에서는 뷰 열 이름이 64자로 제한됩니다. MySQL 5.7 뷰에서 64자를 초과하는 열 이름이 있는 경우 8.0으로 업그레이드하는 동안 유효하지 않은 것으로 표시됩니다. 이제 이러한 뷰는 업그레이드 중에 오류를 생성하며, 업그레이드를 성공적으로 완료하려면 허용 가능한 열 이름으로 수정해야 합니다. (버그 #26743291, 버그 #87650)

GET_LOCK()을 동시에 호출할 때 대기 시간이 0인 경우에도 교착 상태가 발생할 수 있었습니다. (버그 #26739438, 버그 #87620)

FROM_UNIXTIME()LAG()와 항상 올바르게 작동하지 않았습니다. (버그 #26739028)

ON DUPLICATE KEY UPDATE 절에 BLOB 값을 포함하는 INSERT 문이 제약 조건 위반으로 실패한 후, 오류 없이 실행될 수 있는 유사한 문이 서버 종료를 유발할 수 있었습니다. (버그 #26734162)

이제 Performance Schema는 가능할 때 SQL 문 텍스트를 원본이 아닌 다시 작성된 상태로 저장합니다. (버그 #26732229)

윈도우 함수를 사용하는 준비된 문을 다시 실행할 때 서버가 종료될 수 있었습니다. (버그 #26730020)

MySQL 8.0으로의 인플레이스 업그레이드 시 테이블에 5.0 이전의 DECIMAL 데이터 유형의 열이 포함된 경우 서버가 종료되었습니다. 이 데이터 유형은 지원되지 않으므로, 이제 업그레이드 시 이러한 열을 감지하고 인플레이스 업그레이드를 할 수 없음을 경고합니다. 해당 테이블은 덤프 및 복원하여 업그레이드해야 합니다. (버그 #26727481)

데이터 사전 캐시 해시 맵에서 키를 정렬하는 비교 연산자가 서로 다른 스토리지 엔진에서 사용하는 두 스토리지 엔진의 개인 ID가 동일하다고 잘못 판단했습니다. (버그 #26723442)

Performance Schema events_transactions_current 테이블의 XID_GTRID 열의 값이 XA 트랜잭션에 대해 잘못 표시되었습니다. (버그 #26710081, 버그 #87559)

일부 문자 세트에서 사용자 정의 변수를 인수로 전달할 때 SHA2()가 잘못된 결과를 반환하거나 서버가 종료될 수 있었습니다. (버그 #26704451)

LAG()LEAD()의 잘못된 NULL 처리로 인해 서버가 종료될 수 있었습니다. (버그 #26703246, 버그 #26703156)

세미조인에서 중복 제거를 위한 임시 테이블을 설정하는 동안 오류가 발생할 경우(예: 디스크가 가득 찬 경우), 서버가 적절한 오류 메시지 없이 정상적으로 종료되지 않았습니다.
이제 임시 테이블이 성공적으로 생성되지 않을 경우 쿼리가 중단됩니다. (버그 #26679983)

해시 세미조인을 사용하여 IN 하위 쿼리를 실행한 후 서버가 항상 올바르게 정리되지 않았습니다. (버그 #26679495)

-DWITHOUT_SERVER=ON CMake 옵션을 사용하여 빌드할 때 authentication_ldap_sasl_client 클라이언트 측 플러그인을 임베디드 서버 라이브러리에 링크하려고 시도하여 빌드가 실패했습니다. (버그 #26665217)

데이터 디렉토리 생성 또는 MySQL 5.7에서 8.0으로 업그레이드하는 동안 서버가 read_only 모드에서 시작되면 Performance Schema 초기화 실패로 인해 서버 시작이 실패했습니다. 또한 Information Schema 메타데이터가 시작 시 업데이트되지 않았으며, Performance Schema와 Information Schema 버전 정보가 스키마 테이블 생성 여부를 확인하지 않고 저장되었습니다.
이제 데이터 사전 및 Information Schema 시스템 뷰에 사용되는 버전 관리 체계가 Performance Schema 버전 관리 체계와 일관성을 유지합니다. (버그 #26636238, 버그 #87436)

INFORMATION_SCHEMA.TABLES 테이블의 CREATE_OPTIONS 열이 올바른 정보를 표시하지 않았습니다. (버그 #26634507)

외부 조인을 사용하고 파생 테이블이 외부 조인의 내부 테이블에서 const 값을 참조하는 경우 쿼리에 대해 잘못된 결과가 반환될 수 있었습니다. (버그 #26627181)

업데이트된 값과 새로운 값이 동일할 때 AFTER UPDATE 트리거가 INSERT ... ON DUPLICATE KEY UPDATE에 대해 호출되지 않았습니다. (버그 #26626277, 버그 #87371)

익명 역할이 mandatory_roles 시스템 변수에 할당될 수 있었습니다. 이제 mandatory_roles에 값을 할당하려면 전역 시스템 변수를 설정하는 데 필요한 SYSTEM_VARIABLES_ADMIN 또는 SUPER 권한 외에도 ROLE_ADMIN 권한이 필요합니다. (버그 #26576989)

서버가 시작될 때 lc_messages_dir 값이 유효하지 않으면 내장된 오류 메시지를 사용하지만, lc_messages 또는 lc_time_names가 유효하지 않은 경우에는 그렇지 않았습니다. 이제 서버는 이러한 변수들 중 하나가 시작 시 유효하지 않은 경우에도 내장 메시지를 사용합니다. (버그 #26576922)

SET DEFAULT ROLE ALL 명령에 mandatory_roles 시스템 변수에 명시된 역할이 포함되지 않았습니다. (버그 #26571995)

Windows에서 CMake가 일부 Visual Studio 버전에 대해 x64 툴체인 지원을 자동으로 추가하지 않았습니다. (버그 #26566360)

파생 테이블이 ORDER BY 절과 함께 병합되고 외부 쿼리에서 ORDER BY 열이 참조되지 않은 경우 문제가 발생할 수 있었습니다. (버그 #26542829)

SDI B-tree에 스키마 SDI의 병렬 삽입이 동일한 스키마에서 테이블을 병렬로 생성할 때 어설션을 발생시킬 수 있었습니다. (버그 #26539665, 버그 #87225)

UMASKUMASK_DIR 환경 변수를 기본값에서 변경해도 데이터베이스 디렉토리 및 테이블 파일 접근에 영향을 주지 않았습니다. (버그 #26529942)

디버그 빌드에서 파생 테이블 열 참조의 잘못된 null 가능성 평가로 인해 CONCAT() 함수가 어설션을 발생시킬 수 있었습니다. (버그 #26524721)

여러 스레드가 Performance Schema 메타데이터 객체를 동시에 등록 및 등록 해제하거나 메타데이터 잠금을 획득 및 해제하려고 할 때 서버가 종료될 수 있었습니다. (버그 #26502135)

Windows용 MSI 패키지가 Microsoft Visual C++ 2010 재배포 패키지가 설치되었을 때 이를 감지하지 못했습니다. (버그 #26501092, 버그 #87139)

BLOB 열을 포함하는 테이블의 윈도우 함수를 사용한 쿼리가 서버 종료를 유발할 수 있었습니다. (버그 #26496880)

플러그인에 속한 영구 변수들이 항상 서버 시작 시 적절하게 처리되지 않았습니다. (버그 #26495619)

DISINCTORDER BY ... LIMIT를 사용하여 범위 접근 및 ORDER BY를 위한 임시 테이블로 실행되는 쿼리가 서버 종료를 유발할 수 있었습니다. (버그 #26483909)

LDAP 인증 플러그인이 관련 시스템 변수가 잘못된 값으로 설정된 경우 작동하지 않을 수 있었습니다. (버그 #26474964)

RHEL6 이상 버전의 Linux RPM 사양 파일이 RPM 패키지 재구성을 더 쉽게 하기 위해 redhat-rpm-config 패키지 설치를 권장하는 주석으로 업데이트되었습니다. Simon Mudd에게 패치에 감사드립니다. (버그 #26474153, 버그 #87098)

오류 로그가 잘못 구성되고 서버를 시작할 수 없는 경우 문제에 대한 설명이 출력되지 않았습니다. (버그 #26447825, 버그 #87087)

한 테이블이 세미조인 작업으로 여러 번 평가될 때, 해당 테이블이 const 테이블(JT_CONST 조인 유형)을 포함하면 두 번째 평가 시 잘못된 데이터가 액세스되었습니다. (버그 #26436185)

외부 인증 방법을 사용하는 인증 플러그인에 대해 비밀번호 만료 옵션이 올바르게 작동하지 않았습니다. (버그 #26435766)

외부 조인 및 서브쿼리를 포함한 쿼리에 ORDER BY를 추가하면 서브쿼리에서 정의된 열의 상수 값이 서브쿼리가 0개의 행을 반환하는 경우 상수 값으로 잘못 승격될 수 있었습니다. (버그 #26432173)

autocommit 시스템 변수의 경우, Performance Schema의 variables_info 테이블이 VARIABLE_SOURCE 열을 항상 COMPILED로 보고했습니다. (버그 #26428017)

디버그 빌드에서 NULLGEOMETRY NOT NULL 열에 삽입하려고 시도하는 INSERT IGNORE 문이 어설션을 발생시켰습니다. 이제 이는 무시할 수 없는 ER_BAD_NULL_ERROR_NOT_IGNORED 오류로 처리됩니다. (버그 #26412713)

SET PERSIST_ONLY가 Performance Schema의 variables_info 테이블의 VARIABLE_SOURCE 열을 변경하지 않아야 하는 상황에서 변경했습니다. (버그 #26395134)

서버가 파티션 이름의 최대 경로 길이를 확인하지 못했습니다. (버그 #26390632)

고유 인덱스에서 동일 조인 다음에 버퍼링이 있는 윈도우가 있을 때 문제가 발생했는데, 이는 윈도우가 다음에 조인으로 제어가 돌아올 때 새 레코드가 입력 레코드에 읽혀졌다고 가정하고 입력 레코드를 수정했기 때문입니다. 이제 이러한 경우 입력 레코드를 복원하여 이 문제를 해결합니다.

참고
이 수정은 MySQL 8.0.27에서 되돌려졌습니다.

(버그 #26389508)
참고: 관련 항목: 버그 #32820802.

역슬래시와 백틱이 혼합된 식별자가 잘못 구문 분석될 수 있었습니다. (버그 #26372491)

audit_log 플러그인의 THD 객체가 잘못된 스레드 ID 정보로 생성되어 어설션 실패가 발생할 수 있었습니다. (버그 #26362452)

데이터 사전 테이블 column_statisticsHISTOGRAM 열에서 collation 번호를 나타내기 위해 charset-id라는 키를 사용했습니다. 이 키의 이름이 collation-id로 변경되었습니다. (버그 #26330090, 버그 #86794)

skip_name_resolve 시스템 변수를 활성화한 상태에서 서버를 시작하면 계정 항목의 localhostlocalhost가 아닌 호스트와 일치할 수 있었습니다. (버그 #26328274, 버그 #26202411, 버그 #86546)

설정된 오류 로그 서비스가 존재하지만 초기화할 수 없을 경우 로그 정보가 손실될 수 있었습니다. 이제 시작 시 로그 서비스가 구성되었으나 초기화할 수 없는 경우 문제에 대한 진단 정보가 기본 로그 서비스(또는 기본 로그 서비스가 실패할 경우 직접 오류 스트림)에 전송되고, 서버는 종료됩니다. 런타임에 로그 서비스를 구성했으나 초기화할 수 없는 경우 진단 정보가 클라이언트에 전송됩니다. (버그 #26286871, 버그 #86728)

Performance Schema 예제 플러그인을 테이블 삭제와 동시에 설치 및 제거할 때 서버가 종료될 수 있었습니다. (버그 #26281359)

slave_rows_search_algorithms 시스템 변수의 값 중 하나로 HASH_SCAN을 지정한 경우(이는 MySQL 8.0.2부터 기본값임) 및 행 기반 복제가 실행 중일 때 가상 생성 필드가 포함된 테이블을 업데이트하면 어설션이 발생할 수 있었습니다. 이 문제는 검색에 사용하기 위해 해시를 생성할 때 가상 생성 필드의 문자열 표현을 생성하는 오류로 인해 발생했습니다. 이제 MySQL은 가상 생성 필드에 대해 해시를 생성하지 않습니다. (버그 #26280724)

서버가 전체 텍스트 검색용으로 생성된 비테이블 파일에 대해 SHOW CREATE TABLE을 허용했습니다. (버그 #26271244)

디버그 빌드에서 64자를 초과하는 열 이름을 가진 기존 뷰에 대해 CREATE OR REPLACE VIEW가 어설션을 발생시켰습니다. 이제 적절한 오류가 보고됩니다. (버그 #26266789)

SET PERSIST가 변수들을 mysqld-auto.cnf에 기록할 때 정렬 때문에 비효과적일 수 있었습니다. 이제 변수들은 저장된 순서대로 기록됩니다. (버그 #26259671)

GTID가 활성화된 서버에서 mysqlpump로 부분 백업을 시도하면 불가능하다는 잘못된 메시지를 표시하며 실패했습니다. (옵션 --set-gtid-purged를 사용하면 가능합니다.) (버그 #26199978)

GRANT GRANT OPTION ON *.* TO user가 정적 권한에 대해서는 GRANT OPTION을 부여했으나 동적 권한에 대해서는 부여하지 않았습니다. REVOKE ALL ... FROM CURRENT_USER()는 정적 권한만 취소하고 동적 권한은 취소하지 않았습니다. (버그 #26191109, 버그 #25658967)

오류 로깅이 해제된 메시지를 기록하려고 시도하여 서버가 종료될 수 있었습니다. (버그 #26188656, 버그 #86562)

GROUP BY 절이 없는 경우 별칭에 대한 HAVING 조건이 집계 열에서 최적화되어 제거되었습니다. (버그 #26188578)

ST_Crosses()가 하나 이상의 매개변수가 지오메트리 컬렉션일 때 및 지오메트리 교차 여부를 확인하기 위해 지오메트리 컬렉션의 여러 요소를 고려해야 하는 경우 잘못된 결과를 반환할 수 있었습니다. (버그 #26188208, 버그 #86559)

두 교차하는 수직선에 대해 MBROverlaps()가 false를 잘못 반환했습니다. (버그 #26188118, 버그 #86558)

ALTER USER user DEFAULT ROLE ALL이 오류를 발생시켰습니다. (버그 #26174169)

mysqldump가 큰 --where 옵션 값을 사용할 때 비정상 종료되었습니다. (버그 #26171967, 버그 #86496, 버그 #27510150)

윈도우 함수가 집계 함수 결과로 NULL로 평가되는 창을 사용하여 파티셔닝 또는 정렬하는 경우 쿼리가 잘못된 결과를 반환했습니다. (버그 #26164633)

Performance Schema가 테이블 복사 알고리즘을 사용하는 ALTER TABLE 작업에서 생성된 파일 인스턴스를 삭제하지 않아 메모리 누수가 발생할 수 있었습니다. (버그 #26152751, 버그 #86482)

REPLACE를 사용하여 임시 테이블을 생성하는 데 실패하면 이후의 명령문에서 어설션이 발생할 수 있었습니다. (버그 #26126789, 버그 #86422)

mysqlpumpSHOW CREATE TABLE 명령문에서 테이블 구조를 확인할 때 반환된 TABLESPACE 절을 제대로 구문 분석하지 못했습니다. (버그 #26116415)

udf_example 로드 가능 함수의 바이너리 파일이 바이너리 배포본에서 누락되었습니다. (버그 #26115002, 버그 #29178542)

SET PERSIST 문이 서버 종료를 유발할 수 있었습니다. (버그 #26100122)

몇 가지 문자열 함수에서 결과 문자열의 최대 길이를 계산할 때 잘못된 공식이 사용되었습니다: QUOTE(), AES_DECRYPT(), WEIGHT_STRING(). 이 문제는 예를 들어, CREATE TABLE ... AS SELECT ... QUOTE()로 생성된 문자 열 길이에 영향을 줄 수 있습니다. (버그 #26049942, 버그 #86305)

스키마 디렉터리를 데이터 디렉터리에서 확인하는 대신 데이터 사전을 확인하여 스키마 생성 및 제거 작업이 실패할 수 있었습니다. (버그 #26043994, 버그 #86282)

SHOW PLUGINS가 종료 중인 플러그인을 처리하지 않아 서버 종료가 발생했습니다. 이제 해당 문은 이러한 플러그인의 상태를 DELETING으로 표시합니다. (버그 #26029765, 버그 #86243)

일부 명령문이 다이제스트 코드에서 버퍼 오버플로를 일으킬 수 있었습니다. 패치에 감사드립니다, Laurynas Biveinis 및 Roel van de Paar. (버그 #26021187)

이전에는 Performance Schema 초기화 실패 시 오류 로그에 init failed 경고가 작성되었으나, 이제는 어떤 메모리 할당이 실패했는지에 대한 구체적인 메시지를 출력합니다. (버그 #25996291)

고유 인덱스를 가진 테이블에서 옵티마이저가 Loose Index Scan을 선택했을 때 인덱스 확장이 없는 고유 인덱스를 사용할 경우 잘못된 결과가 발생할 수 있었습니다. (버그 #25989915, 버그 #86165, 버그 #26532061, 버그 #87207)
참고: 이 문제는 버그 #21749123, 버그 #78244의 회귀 문제입니다.

XA COMMIT의 경우, 프리커밋 처리 중 진단 영역에 오류가 설정되었으나 호출 측에서 이를 제대로 보고하지 않아 어설션이 발생할 수 있었습니다. (버그 #25978684, 버그 #86142)

32비트 빅엔디안 플랫폼에서 Performance Schema variables_info 테이블의 MIN_VALUE 열에 잘못된 값이 표시되었습니다. (버그 #25967079)

옵티마이저가 임시 테이블과 관련된 서브쿼리를 제외할 때 메모리 누수가 발생할 수 있었습니다. (버그 #25951134)

읽기 전용으로 간주된 뷰 또는 파생 테이블이 읽기 전용으로 간주되지 않은 중첩된 참조를 가질 경우 업데이트에 대해 어설션이 발생할 수 있었습니다. (버그 #25832861, 버그 #85796)

서버에 의해 자동 생성된 인증서 및 키 파일의 접근 모드가 잘못될 수 있었습니다. (버그 #25832856)

Index Condition Pushdown을 사용하여 평가되는 경우, INFORMATION_SCHEMATABLESSTATISTICS 테이블에 대한 쿼리가 내부 데이터 사전 함수를 다운푸시할 수 있어 어설션이 발생할 수 있었습니다. (버그 #25820175, 버그 #85765)

ST_AsText()가 해제된 메모리를 읽을 수 있었습니다. (버그 #25818451)

사용자 존재 여부에 따라 CREATE USER IF NOT EXISTS가 바이너리 로그에 기록되지 않아 사용자 불일치가 발생할 수 있었습니다. 유사하게 ALTER USER IF EXISTS에서도 문제가 발생했습니다. 이러한 불일치를 방지하기 위해 이제 이러한 명령문은 항상 바이너리 로그에 기록됩니다. (버그 #25813089, 버그 #85733)

잘못된 utf8 입력 문자열이 힙 버퍼 오버플로 오류를 발생시켰습니다. (버그 #25811623, 버그 #25946444)

여러 세션에서 동시에 변수를 유지하면 서버가 종료될 수 있는 경쟁 조건이 존재했습니다. (버그 #25768813)

플러그인이 INFORMATION_SCHEMA 테이블을 생성 또는 삭제할 수 있지만, 플러그인 언로드 시 INFORMATION_SCHEMA 테이블을 참조하는 뷰가 유효성 검사를 수행하지 않았습니다. (버그 #25761992, 버그 #85579)

mysql.mysql_history 파일에 일부 비밀번호 관련 명령문을 기록했습니다. (버그 #25750609)

내부 메모리 버퍼 처리가 잘못되어 서버 종료가 발생할 수 있었습니다. (버그 #25737271)

GTID가 활성화된 읽기 전용 서버에서 존재하지 않거나 필터링된 테이블에 대해 DROP TEMPORARY TABLE IF EXISTS 명령문이 불필요한 트랜잭션을 바이너리 로그에 작성하고 불필요한 GTID를 생성할 수 있었습니다. 이 경우 누락된 임시 테이블은 트랜잭셔널한 것으로 가정되었으며, 명령문이 분할되었습니다. 이제 MySQL은 임시 테이블이 존재하는지 확인하고 DROP TEMPORARY TABLE 명령문이 바이너리 로그에 기록되었는지 확인합니다. 그렇지 않은 경우 GTID가 생성되지 않습니다. 패치에 감사드립니다, Laurynas Biveinis. (버그 #25656992, 버그 #85258)

MeCab 전문 텍스트 파서 플러그인이 Windows에서 로드되지 않았습니다. (버그 #25633175)

Performance Schema의 variables_info 테이블의 SET_TIME 열이 잘못 초기화되었습니다. (버그 #25608115)

특정 SELECT 문을 포함하는 명령문이 있는 저장 프로시저를 실행할 경우 메모리 누수가 발생할 수 있었습니다. (버그 #25586773)

Performance Schema가 클라이언트 연결에 대해 최대 호스트 길이를 확인하지 않았습니다. (버그 #25510805)

공간 함수의 경우 일부 집합 연산이 서로 다른 SRID에서 전달된 인수에 대해 SRID 0의 결과를 생성했습니다. (버그 #25510403)

--ssl-cipher 값이 클라이언트 프로그램 종료를 유발할 수 있었습니다. (버그 #25483593)

저장 프로시저 호출 준비 중 누락된 인수 개수 확인으로 인해 서버 종료가 발생할 수 있었습니다. (버그 #25398451, 버그 #84512)

열이 많은 재귀 공통 테이블 표현식 처리에 사용되는 임시 테이블이 이제는 MEMORY 엔진을 대신 사용합니다. (버그 #25190109)

MySQL root 사용자 계정 이름이 변경된 경우, INFORMATION_SCHEMA 뷰에 액세스하는 쿼리가 정의자로 지정된 사용자가 존재하지 않는다는 오류를 반환했습니다. 이 오류를 방지하기 위해 이제 새 예약 계정 'mysql.infoschema'@'localhost'INFORMATION_SCHEMA 뷰의 DEFINER로 설정됩니다. (버그 #25185947, 버그 #84027)

InnoDB를 사용하여 1024바이트 이상의 기본 키를 가진 임시 테이블이 필요할 때 서버가 종료될 수 있었습니다. (버그 #25153670)

SET DEFAULT ROLE은 다른 계정 관리 명령문과 같이 트랜잭션이 아니었습니다. (버그 #25122897)

mysqlpumpmysql 시스템 데이터베이스 덤프에 gtid_executed 테이블을 포함시켜, 덤프가 다시 로드된 후 서버 재시작 시 gtid_executed 위치가 손실되는 문제가 발생했습니다. 이제 mysqlpumpgtid_executed 테이블을 덤프하지 않습니다. (버그 #25109007)

기하 계산에서 잘못된 입력 매개변수로 인해 잘못된 결과 버퍼가 생성되거나 어설션이 발생하거나 서버가 종료될 수 있었습니다. (버그 #25062396)

IFNULL(decimal, int)를 사용한 쿼리에서 GROUP BY가 포함되고 임시 테이블을 사용하는 경우, 소수점 이하 자릿수가 손실될 수 있었습니다. (버그 #25051195, 버그 #83699)

UNION과 같은 쿼리에서 GROUP_CONCAT()의 열 너비가 잘못 계산되어 group_concat_max_len의 적용이 잘못될 수 있었습니다. (버그 #25050090, 버그 #83667)

Performance Schema global_variables 테이블에 대한 이벤트의 감사 로그가 SQL 계층에 보고되지 않은 행을 보고하지 않도록 개선되었습니다. (버그 #24970428)

ST_Buffer()가 유효한 출력 기하를 생성해야 하는 일부 입력에 대해 잘못된 결과를 반환하거나 오류를 발생할 수 있었습니다. (버그 #24947868, 버그 #26735293, 버그 #25662426)

AddressSanitizer 또는 Undefined Behavior Sanitizer가 활성화된 빌드에서 Performance Schema 타이머 초기화 중에 0으로 나누기 오류가 발생할 수 있었습니다. (버그 #24785784)

메타데이터 잠금(MDL) 서브시스템에 많이 의존하는 작업이 성능 저하를 유발했습니다. MDL 티켓 목록을 순회하는 데 시간이 오래 걸리는 경우가 있었습니다. (버그 #24734971, 버그 #83143)

binlog_formatROW 또는 MIXED일 때, 임시 테이블에 대한 작업은 로그에 기록되지 않습니다. 이전에는 세션이 종료될 때 연결이 종료되면, 세션에서 열려 있던 임시 테이블에 대해 DROP TEMPORARY TABLE IF EXISTS 문이 기록되었습니다. 이는 행 기반 복제의 경우 불필요한 바이너리 로그 쓰기를 유발하고, GTID가 활성화된 경우 트랜잭션 시퀀스 번호를 추가했습니다.
이제 세션에서 임시 테이블이 생성될 때 바이너리 로깅 형식이 추적됩니다. 임시 테이블이 생성될 때 명령문 기반 형식이 사용된 경우에만 세션 종료 시 DROP TEMPORARY TABLE IF EXISTS 문이 기록됩니다. 테이블이 생성될 때 행 기반 또는 혼합 형식 바이너리 로깅이 사용된 경우 DROP TEMPORARY TABLE IF EXISTS 문은 기록되지 않습니다.
패치에 감사드립니다, Laurynas Biveinis. (버그 #24670909, 버그 #83003, 버그 #28606948)

동시 INSERT, ALTER TABLE, 및 DROP DATABASE 작업으로 인해 교착 상태가 발생할 수 있었습니다. (버그 #24510948, 버그 #82704)

특정 조건에서 audit_log 플러그인이 재귀적으로 뮤텍스를 잠글 수 있어 서버가 응답하지 않는 문제가 발생할 수 있었습니다. (버그 #24437533)

일부 경우에 옵티마이저가 GROUP BY 쿼리에 대해 Loose Index Scan(QUICK_GROUP_MIN_MAX_SELECT)을 선택했으며, WHERE 절의 조건이 여러 개의 분리된 범위 트리를 생성하는 경우에도 범위 스캔이 수행되었습니다. 이제 WHERE 절의 조건이 다중 분리 범위 트리를 생성하는 경우 범위 스캔이 수행되지 않습니다. (버그 #24423143)

옵티마이저가 생성된 열에 있는 인덱스를 선택하여 값을 가져올 때 잘못된 결과가 발생할 수 있었습니다. (버그 #24345509, 버그 #29451999)

이제 모든 apt 플랫폼에 디버그 심볼 패키지가 포함됩니다(이전에는 Debian 9에서만 사용 가능했습니다). (버그 #24008883, 버그 #27990381)

SQL_MODE='' 설정 시 UNIX_TIMESTAMP(COUNT(1))이 예상대로 0이 아닌 NULL을 반환했습니다. (버그 #23529242)

NOT NULL 제약 조건이 있는 인덱싱된 가상 BLOB 열을 가진 테이블에서 행을 삭제할 때, 삭제 중인 행 중 하나에서 생성된 열 표현식이 NULL로 평가되면 NOT NULL에 해당하는 값으로 변환이 제대로 수행되지 않았습니다. (버그 #23321196)
참고: 이 문제는 버그 #23037025, 버그 #21345972와도 관련이 있습니다.

MYSQL_GROUP_SUFFIX 환경 변수가 설정되어도 아무런 효과가 없었습니다. (버그 #23072792)

생성된 열 평가 중 오류 처리를 위한 누락된 확인이 서버 종료로 이어질 수 있었습니다. (버그 #23021693)

테이블이 비어 있는지 확인하기 위해 ALTER TABLE이 테이블 스캔을 수행하여 비효율적이었습니다. (버그 #22688065)

활성 LOCK TABLES가 있는 상태에서 ALTER TABLE의 테이블스페이스 메타데이터 잠금을 확보하지 못해 어설션이 발생할 수 있었습니다. (버그 #22486020, 버그 #79820)

상수 표현식이 교체하려는 열에 대한 참조를 포함하는 경우 상수 전파가 수행되지 않도록 했습니다. (버그 #20964700)

조인 버퍼링이 사용될 때(예: 블록 중첩 루프 알고리즘 사용), 많은 왼쪽 조인을 사용하는 쿼리가 느리게 실행되었습니다. (버그 #18898433, 버그 #72854)

REGEXP가 문자열 표현에서 \0 문자 이후에 발생하는 일치를 찾지 못했습니다. (버그 #17541193, 버그 #70470)

집계 및 WITH ROLLUP을 포함하는 뷰에서 선택할 때 Column col_name cannot be null 오류가 잘못 발생할 수 있었습니다. (버그 #11755860, 버그 #47693)

COALESCE()FLOAT 필드 값을 변경할 수 있었습니다. (버그 #11751705, 버그 #42666)

서버가 샘플링 사용 여부를 결정하기 위해 사용하는 행 추정값이 부정확할 수 있었습니다. 이는 히스토그램 프로세스가 테이블의 행 수에 대한 추정값이 최신인 것으로 가정했지만, INSERTDELETE 같은 명령문에 의해 업데이트되지 않기 때문이었습니다. 이제 히스토그램 프로세스가 업데이트된 행 수를 요청합니다. (버그 #88710, 버그 #27197709)

장시간 실행되는 정규식 일치 작업을 중단할 수 없었습니다. (버그 #88676, 버그 #27183583)

최적화 프로그램 SET_VAR 힌트 (참고: 변수 설정 힌트 문법)가 cte_max_recursion_depth 설정을 무시했습니다. (버그 #88594, 버그 #27153338)

범위 프레임을 처리할 때, 범위 프레임의 첫 번째 행이 발견되면 해당 위치가 저장되지 않았습니다. 이로 인해 나중에 프레임 버퍼에서 해당 행을 가져오는 작업이 실패할 수 있었습니다. (버그 #88568, 버그 #27149369)

--skip-log-bin 옵션이 활성화된 상태에서 LOAD DATA에 의해 활성화된 트리거를 서버가 올바르게 처리하지 않았습니다. (버그 #88516, 버그 #27128534)
참고: 이 문제는 버그 #27041382의 회귀 문제입니다.

뷰에서 동작하는 XA 트랜잭션을 수행하는 저장 프로시저가 올바르게 실행되지 않았습니다. (버그 #88326, 버그 #27058931)

열 길이가 0인 열을 포함하는 테이블의 경우, 최적화 프로그램이 쿼리에서 읽은 열을 저장하기에 너무 작은 레코드 버퍼를 할당할 수 있었습니다. (버그 #88283, 버그 #27041288)

구문이 잘못된 트리거 뒤에 열 목록을 지정하지 않은 INSERT 문이 있는 경우, 새 행 삽입이 시도되었습니다. (버그 #88274, 버그 #27041382)

ORDER BY 표현식이 여러 개인 프레임과 함께 LAST_VALUE()로 실행된 윈도우 함수가 항상 올바른 결과를 생성하지 않았습니다. (버그 #88186, 버그 #27010574)

이전 문제에 대한 수정으로 인해 결과 유형이 문자열이고 열 크기가 255자를 초과할 때(즉, CHAR의 최대 길이), 집계된 데이터 유형이 VARCHAR로 설정되었습니다. 이는 결과 유형이 문자열이지만 255자를 초과하는 필드 값을 지원하는 JSON과 같은 데이터 유형에 문제를 일으켰습니다. 이제 이러한 경우, 집계된 열이 CHAR 또는 BINARY 타입이면서 크기가 CHAR의 최대 길이를 초과할 때 데이터 유형이 명시적으로 VARCHAR로 설정됩니다. (버그 #88073, 버그 #26960106)
참고: 이 문제는 버그 #83895, 버그 #25123839의 회귀 문제입니다.

매개변수를 참조하는 ORDER BY 목록을 포함하는 준비된 문장이 항상 올바르게 처리되지 않았습니다. (버그 #87863, 버그 #26867652)

DENSE_RANK()가 버퍼링이 사용될 때 ORDER BY 캐시 비교자의 초기화가 조기에 발생하여 파티션의 첫 번째 행에서 올바르게 작동하지 않았습니다. (버그 #87760, 버그 #26802696)

최적화 프로그램이 복합 인덱스를 ref 접근 방식으로 선택했으나 키의 첫 번째 부분만 사용할 수 있었습니다. 복합 키가 적합했으나 비용이 더 높은 것으로 간주되었습니다. 이는 동일한 인덱스에서 ref 접근과 range 접근을 선택할 때 records_per_key 값이 매우 낮을 경우 비현실적으로 낮은 비용을 가진 ref 접근을 피하기 위해 특정 기준이 충족되면 range를 선호하기 때문입니다. (버그 #87613, 버그 #26727773)
참고: 이 문제는 버그 #23259872와 관련이 있습니다.

테이블 열 값을 인수로 사용하는 WHERE 술어에서 사용된 저장 함수의 내부 not_null_tables 속성이 비어 있지 않은 값으로 잘못 설정되었습니다. 이 술어가 외부 조인 작업에 적용되고, 인수 중 하나가 외부 조인의 내부 테이블에서 온 경우, 술어가 외부 조인을 내부 조인으로 변환하는 데 잘못 사용되었습니다. SQL 표준에 따르면 RETURNS NULL ON NULL INPUT 속성이 있는 함수만 이 방식으로 작동해야 합니다. 현재 MySQL은 이 속성을 구현하지 않으므로, 저장 함수는 이제 RETURNS NULL ON NULL INPUT 동작을 구현하지 않도록 변경되었습니다. (버그 #86922, 버그 #26389402)

열의 집계를 수행하는 SELECT로 정의되고, HAVING으로 결과를 필터링하는 경우 뷰 또는 파생 테이블에 잘못된 데이터가 포함되었습니다. (버그 #86840, 버그 #26360114)

서버가 트리거와 생성된 열을 올바르게 처리하지 않았습니다. (버그 #86637, 버그 #26251621)

BLOB(또는 JSON과 같은 BLOB 기반의 타입)을 반환하는 하위 쿼리에서 결과를 그룹화하는 쿼리가 그룹 경계를 찾지 못해 잘못된 결과를 반환하는 경우가 있었습니다. (버그 #78787, 버그 #21974696)

Leave a Comment



이 문서 공유

8.0.4 변경 사항 (2018-01-23 RC)

링크 복사

CONTENTS