컴파일 관련 사항
- Linux: Linux 플랫폼의 바이너리 패키지는 이제 GCC 6을 사용하여 빌드됩니다. 최적화 수준이
-O3에서-O2로 변경되었습니다. (WL #10343) - macOS; Microsoft Windows: 소스에서 MySQL을 컴파일할 때,
-DWITH_SSL=systemCMake 옵션이 이제 Windows 및 macOS에서 작동합니다. (Bug #26907731, Bug #87938) - GNU gold 링커가 사용되는 플랫폼에서는 사용되지 않는 함수 제거가 이제 활성화되어, 바이너리 크기가 줄어듭니다. (Bug #26612067, Bug #87372)
- 소스 파일의
#include지시문은 모호하지 않도록 다시 작성되고 재구성되었습니다. (Bug #26597243, Bug #87358, Bug #26897738) - 컴파일 스크립트를 포함하던
BUILD디렉터리는 더 이상 유지 관리되지 않으며 MySQL 소스 트리에서 제거되었습니다. (Bug #26576219, Bug #87323) - 서버 빌드를 위한 Boost 라이브러리의 최소 버전은 이제 1.65.0입니다. (Bug #26574924, Bug #87317)
- MySQL은 이제 Unix 및 Unix 계열 시스템에서 OpenSSL 1.1에 대해 링크될 수 있습니다. (Bug #25094892, Bug #83814)
- 소스 코드 기반을 정리하는 작업이 수행되었으며, 여기에는 다음이 포함됩니다: 불필요한 CMake 검사를 제거하고, 소스 파일에서 사용되지 않는 매크로를 제거하고, 의존성 수를 줄이고 더 모듈화하기 위해 헤더 파일을 재구성하고, 정의가 없는 함수 선언을 제거하고, 로컬로 작성된 함수를 업계 표준 라이브러리의 동등한 함수로 대체했습니다.
컴포넌트 관련 사항
-
validate_password플러그인은 컴포넌트 인프라를 사용하도록 다시 구현되었습니다.validate_password컴포넌트를 설치하고 제거하려면 다음 명령문을 사용하십시오:INSTALL COMPONENT 'file://component_validate_password'; UNINSTALL COMPONENT 'file://component_validate_password';INSTALL PLUGIN및UNINSTALL PLUGIN은 이전과 같이validate_password플러그인을 설치하고 제거하는 데 계속 작동하지만, 경고를 생성합니다.validate_password의 플러그인 형태는 더 이상 사용되지 않으며 향후 MySQL 버전에서 제거될 예정입니다. 해당 플러그인을 사용하는 MySQL 설치는 대신 컴포넌트로 전환해야 합니다. Transitioning to the Password Validation Component를 참조하십시오.validate_password의 컴포넌트 구현과 플러그인 구현 간의 사용상 차이는, 플러그인은validate_password_로 시작하는 이름의 시스템 및 상태 변수를 노출하는 반면, 컴포넌트는 컴포넌트 이름과 마침표로 시작하는 이름의 변수를 노출하는 규칙을 사용한다는 점입니다. 예를 들어, 플러그인은validate_password_policy시스템 변수와validate_password_dictionary_file_words_count상태 변수를 노출하는 반면, 컴포넌트가 노출하는 대응 변수는validate_password.policy및validate_password.dictionary_file_words_count입니다. 플러그인 변수는 플러그인 자체와 마찬가지로 더 이상 사용되지 않으며 향후 MySQL 버전에서 제거될 예정입니다. (WL #6667)
설정 관련 사항
-
Replication: 바이너리 로그 만료 기간을 계산할 때,
binlog_expire_logs_seconds가 설정되어 있으면 더 이상 더 이상 사용되지 않는expire_logs_days시스템 변수에 지정한 값은 무시되며,binlog_expire_logs_seconds의 값만 사용됩니다. 이전에는binlog_expire_logs_seconds와expire_logs_days의 효과가 누적되었습니다.시작 시 두 시스템 변수 모두에 값을 설정하면,
expire_logs_days의 값이 무시된다는 경고 메시지가 발생합니다. 한 옵션이 설정되어 있는 동안 다른 옵션의 값을 동적으로 설정하거나 변경할 수 없으며, 이 상황에서는 오류 메시지가 발생합니다.시작 시
binlog_expire_logs_seconds와expire_logs_days중 어느 쪽에도 값이 설정되어 있지 않으면 기본 바이너리 로그 만료 기간인 30일(MySQL 8.0.2에서 변경됨)이 적용됩니다. 시작 시binlog_expire_logs_seconds또는expire_logs_days중 하나에 값이 설정되어 있으면, 이 값이 기본 바이너리 로그 만료 기간을 재정의합니다. 바이너리 로그의 자동 제거를 비활성화하려면, 시작 시binlog_expire_logs_seconds와expire_logs_days를 모두 명시적으로 0으로 설정해야 합니다. (Bug #26274274, Bug #86698) -
RHEL, SLES, Fedora RPM의 경우 디버그 빌드에 대한 기본 플러그인 디렉터리가
/usr/lib64/mysql/plugin에서/usr/lib64/mysql/plugin/debug로 변경되었습니다. (Bug #27072155, Bug #88363) -
새로운
WITH_LZMA및WITH_RE2CMake 옵션은 번들 LZMA 및 RE2 라이브러리 또는 시스템 LZMA 및 RE2 라이브러리로 컴파일할지 여부를 제어합니다. -
table_open_cache시스템 변수의 기본 변수 값이 2000에서 4000으로 증가되었습니다. 이에 따라 자동 크기 조정되는table_definition_cache시스템 변수의 기본값도 1400에서 2000으로 변경됩니다. (WL #9703) -
optimizer_trace_max_mem_size시스템 변수의 기본값이 16KB에서 1MB로 변경되어 Optimizer 추적이 잘릴 가능성을 줄였습니다. (WL #11345) -
log_error_verbosity시스템 변수의 기본값이 3(오류, 경고, 정보 메시지)에서 2(오류 및 경고 메시지)로 변경되어 기본적으로 mysqld 오류 로깅이 덜 상세해졌습니다. (WL #11143)
사용 중단 및 제거 관련 사항
-
InnoDB:
innodb_undo_tablespaces설정 옵션은 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. (WL #10473) -
Replication:
group_replication_primary_member상태 변수는 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. (WL #10958) -
Replication:
group_replication_allow_local_disjoint_gtids_join시스템 변수는 제거되었습니다. (WL #11139) -
MySQL 8.0.1에서
libmysqld임베디드 서버 라이브러리가 제거되었을 때,libmysqld에만 사용되던 다음 mysql_options() 옵션은 제거되지 않았습니다. 이제 해당 옵션이 제거되었습니다.MYSQL_OPT_GUESS_CONNECTION MYSQL_OPT_USE_EMBEDDED_CONNECTION MYSQL_OPT_USE_REMOTE_CONNECTION MYSQL_SET_CLIENT_IP(Bug #26712418)
-
mysqlpump는 더 이상 구문에
SQL_NO_CACHEmodifier를 포함하지 않습니다. 해당 modifier는 이제 사용 중단되었으며 사용 중단 경고가 발생하기 때문입니다. (Bug #26694675) -
생성 컬럼은 더 이상 생성 표현식에서 사용 중단된 함수를 허용하지 않습니다. 이는 MySQL이 사용 중단된 함수가 제거된 버전으로 업그레이드될 때 발생하는 문제를 방지하기 위한 것입니다. (Bug #26279884, Bug #86712)
-
Performance Schema
setup_timers테이블이 제거되었으며,performance_timers테이블의TICK로우도 제거되었습니다. (Bug #18296337, WL #10985, WL #10986)
SQL 함수 및 연산자 관련 사항
-
호환되지 않는 변경: 이전에는 MySQL이 정규 표현식 연산자(
REGEXP,RLIKE)를 지원하기 위해 Henry Spencer 정규 표현식 라이브러리를 사용했습니다. 정규 표현식 지원은 International Components for Unicode (ICU)를 사용하여 다시 구현되었으며, 이는 완전한 유니코드 지원을 제공하고 멀티바이트 안전성을 갖습니다.REGEXP_LIKE()함수는REGEXP및RLIKE연산자 방식으로 정규 표현식 매칭을 수행하며, 이 연산자들은 이제 해당 함수의 동의어입니다. 또한REGEXP_INSTR(),REGEXP_REPLACE(),REGEXP_SUBSTR()함수를 사용하여 각각 매칭 위치를 찾고 서브스트링 치환 및 추출을 수행할 수 있습니다.regexp_stack_limit및regexp_time_limit시스템 변수는 매칭 엔진의 리소스 소비를 제어합니다.MySQL 소스 배포판은 ICU 라이브러리를 번들로 포함하며,
WITH_ICUCMake옵션은 번들 ICU 라이브러리 또는 시스템 ICU 라이브러리로 컴파일할지 여부를 제어합니다.ICU_VERSION()함수는 ICU 라이브러리 버전을 반환합니다.자세한 내용은 정규 표현식을 참조하십시오. 정규 표현식을 사용하는 애플리케이션이 구현 변경으로 영향을 받을 수 있는 방식에 대한 정보는 정규 표현식 호환성 고려 사항을 참조하십시오. (WL #8987)
-
SQL 문에 대한 다이제스트 정보를 제공하기 위해 두 개의 새로운 SQL 함수를 사용할 수 있습니다. SQL 문이 문자열로 지정되면,
STATEMENT_DIGEST()는 문 다이제스트 해시 값을 반환하고,STATEMENT_DIGEST_TEXT()는 정규화된 문 다이제스트를 반환합니다. Encryption and Compression Functions을 참조하십시오. (WL #9637)
InnoDB 관련 사항
-
MySQL 8.0.3에서 부모 외래 키의 컬럼 이름 변경에 대해 시행된 제한이 해제되었습니다. (Bug #26659110, Bug #87490, Bug #25722221)
참조: 함께 참조하십시오: Bug #26334071.
설치 관련 사항
-
systemd를 사용하는 플랫폼(Managing MySQL Server with systemd 참조)의 경우, 서버 시작 시 데이터 디렉터리가 비어 있으면 초기화됩니다. 데이터 디렉터리가 일시적으로 사라진 원격 마운트인 경우 이는 문제가 될 수 있습니다: 마운트 지점이 빈 데이터 디렉터리처럼 보이고, 그런 다음 새 데이터 디렉터리로 초기화됩니다. 이제 이 자동 초기화 동작을 억제할 수 있습니다.
/etc/sysconfig/mysql파일에 다음 라인을 지정하십시오(파일이 없으면 생성하십시오):NO_INIT=true(Bug #26595288, Bug #87287)
Keyring 관련 사항
- MySQL은 이제 기본 keyring 키 저장소 간 키 마이그레이션을 지원하므로, DBA가 MySQL 설치를 한 keyring 플러그인에서 다른 keyring 플러그인으로 전환할 수 있습니다. Migrating Keys Between Keyring Keystores를 참조하십시오. (WL #9769)
로깅 관련 사항
-
새로운 오류 로그 필터 컴포넌트인
log_filter_dragnet은dragnet.log_error_filter_rules시스템 변수의 값으로 지정된 사용자 정의 규칙을 기반으로, 오류 로그에 기록되는 이벤트에 대한 제어를 가능하게 합니다. 이 새로운 필터링 기능은 내장log_filter_internal필터 컴포넌트와log_error_verbosity시스템 변수를 사용하여 달성할 수 있는 것보다 더 유연합니다. 자세한 내용은 Types of Error Log Filtering을 참조하십시오. (WL #9651) -
log_sink_internal로그 싱크 컴포넌트가 오류 로그에 기록하는 메시지에는 이제 오류-ID 표시자가 포함됩니다. 이 ID의 형식은[error_id]입니다. 이 ID는 심각도 표시자 뒤에 오고 메시지 텍스트 앞에 옵니다. 자세한 내용은 Error Log Output Format을 참조하십시오. (WL #11009) -
오류 로깅을 위한
log_error_verbosity시스템 변수가 경고 및 정보 메시지를 필터링하도록 설정된 경우, 오류가 아닌 상황에 대한 선택된 중요한 메시지가 이제 시스템 메시지로 오류 로그에 출력됩니다. 이전에는 이러한 메시지가log_error_verbosity=1이 설정되었을 때 로그에 기록되도록 오류로 처리되고 레이블이 지정되었습니다. 이제 이러한 메시지에 대해 레이블 지정 함수가 처리 함수와 분리되어, 메시지에 적절한 레이블을 지정할 수 있습니다.시스템 메시지는 이제 MySQL 오류 로그에서 “System” 레이블을 가집니다. 사용자 정의 레이블을 지원하는 다른 로그 싱크도 이 규약을 사용할 수 있습니다. 사용자 정의 레이블을 지원하지 않는 로그에서는 시스템 메시지가 정보 수준의 심각도에 사용되는 레이블로 출력됩니다. 그러나
log_error_verbosity설정이 일반적으로 이 수준의 메시지를 제외하더라도 시스템 메시지는 포함됩니다.시스템에 정보 수준으로 레이블 지정된 메시지를 버리거나, 오류로 레이블 지정된 메시지와 다른 대상으로 리디렉션하는 추가 설정이 있는 경우, 시스템 메시지는 이 동작을 재정의하지 않습니다. 관련된 로그 싱크가 “System” 레이블을 사용하지 않는 경우, 시스템 메시지는 이제 정보 수준으로 레이블 지정된 다른 메시지와 함께 버려지거나 리디렉션됩니다.
지원되는 경우 이제 “System” 레이블로 출력되는 메시지에는 시작 및 종료 메시지와 설정에 대한 일부 중요한 변경 사항이 다음과 같이 포함됩니다:
ER_STARTING_ASER_STARTUPER_XA_STARTING_RECOVERYER_XA_RECOVERY_DONEER_NORMAL_SHUTDOWNER_SHUTDOWN_COMPLETEER_RPL_SLAVE_CONNECTED_TO_MASTER_REPLICATION_STARTEDER_RPL_SLAVE_CONNECTED_TO_MASTER_REPLICATION_RESUMEDER_SLAVE_CHANGE_MASTER_TO_EXECUTEDER_GTID_PURGED_WAS_CHANGEDER_GTID_EXECUTED_WAS_CHANGEDER_CHANGED_GTID_MODEER_RPL_SLAVE_DUMP_THREAD_KILLED_BY_MASTER
(WL #10942)
패키징 관련 사항
-
모든 MySQL 바이너리 배포판은 이제 이전에 yaSSL에 링크되었던 Community 배포판을 포함하여 OpenSSL에 링크됩니다. 또한 OpenSSL은 정적으로 링크되지 않고 동적으로 링크되므로, 원하는 경우 MySQL과 함께 사용할 대체 SSL 라이브러리로 교체할 수 있습니다. 일부 플랫폼의 경우 바이너리 배포판은 라이브러리 가용성을 보장하기 위해 OpenSSL 라이브러리를 번들로 제공합니다:
- Windows: 배포판은
libeay32.dll및ssleay32.dll을 번들로 제공하며, 이 파일은 MySQL 바이너리와 같은 디렉터리에 설치됩니다. 다른 라이브러리는 해당 라이브러리 파일을 대체 파일로 교체하거나, Windows에서 지원하는 다른 라이브러리 선택 방법을 사용하여 사용할 수 있습니다. (https://msdn.microsoft.com/en-us/library/7d83bc18.aspx를 참조하십시오.) - macOS: 배포판은
libssl.dylib및libcrypto.dylib을 번들로 제공합니다. MySQL 바이너리는 같은 디렉터리에 있는 라이브러리를 예상하도록 링크되며, 그 위치의 심볼릭 링크는 실제 라이브러리 위치를 가리킵니다. - Linux(일반 압축 tar 파일 배포판에만 해당): 배포판은
libssl.so및libcrypt.so를 번들로 제공하며, 이 파일은libmysqlclient.so클라이언트 라이브러리와 같은 디렉터리에 설치됩니다.
(Bug #26272084, Bug #26134893, Bug #26927607, Bug #87996, WL #10524)
- Windows: 배포판은
Performance Schema 관련 사항
- Performance Schema는 이제 명령문 다이제스트에 MD5 해시가 아니라 SHA-256 해시를 사용합니다. SHA-256 값에 필요한 증가된 스토리지를 수용하기 위해 Performance Schema 테이블의
DIGEST컬럼은VARCHAR(32)에서VARCHAR(64)로 확장되었습니다. (Bug #26727443)
보안 관련 사항
-
호환되지 않는 변경: 이제
caching_sha2_password및sha256_password인증 플러그인과old_passwords=2인 경우의PASSWORD()함수에 대해 비밀번호가 최대 256자로 제한됩니다. 또한 사용되는 CPU 시간을 제한하기 위해 비밀번호 해싱 라운드 수가 상한으로 제한됩니다. (Bug #27099029, Bug #27194270) -
호환되지 않는 변경:
caching_sha2_password및sha256_password인증 플러그인은mysql_native_password플러그인보다 더 안전한 비밀번호 암호화를 제공하며,caching_sha2_password는sha256_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로 인증하는 계정을 사용하는 클라이언트는 보안 연결(TLS/SSL 자격 증명을 사용한 TCP, Unix 소켓 파일 또는 공유 메모리를 사용하여 만들어진 연결)이나 RSA 키 쌍을 사용한 비밀번호 교환을 지원하는 암호화되지 않은 연결 중 하나를 사용해야 합니다. 이 보안 요구 사항은mysql_native_passsword에는 적용되지 않으므로,caching_sha2_password로의 전환에는 추가 설정이 필요할 수 있습니다(Caching SHA-2 Pluggable Authentication 참조). 그러나 MySQL 8.0의 클라이언트 연결은 기본적으로 TLS/SSL 사용을 선호하므로, 이미 해당 선호 사항을 따르는 클라이언트에는 추가 설정이 필요하지 않을 수 있습니다. -
caching_sha2_password가 이제libmysqlclient클라이언트 라이브러리에서도 기본 인증 플러그인이므로, 클라이언트 프로그램이--default-auth=mysql_native_password옵션으로 호출되지 않는 한, MySQL 8.0 클라이언트에서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의 더 두드러진 역할에 대한 자세한 정보(잠재적인 호환성 문제 및 해결 방법에 대한 논의 포함)는 기본 인증 플러그인으로서의 caching_sha2_password를 참조하십시오.
또한 이제 복제 슬레이브는 RSA 키 쌍 기반 비밀번호 교환을 사용하여 마스터에 연결할 수 있습니다. 이 RSA 기능은
caching_sha2_password또는sha256_password인증 플러그인으로 인증하는 계정에 적용됩니다. (이전에는 슬레이브가 이러한 플러그인으로 인증할 수 있었지만 보안 연결이 필요했으며 RSA 비밀번호 교환을 사용할 수 없었습니다.) 다음 변경 사항은 이 새로운 슬레이브 RSA 기능의 사용을 가능하게 합니다:CHANGE MASTER TO문에는 RSA 공개 키 정보를 지정하기 위한 절이 있습니다.- Group Replication의 경우
group_replication_recovery_public_key_path및group_replication_recovery_get_public_key시스템 변수가 동일한 목적을 수행합니다. SHOW SLAVE STATUS문과 Performance Schemareplication_connection_configuration테이블은 복제 슬레이브 RSA 공개 키 정보를 표시합니다.
이제 더 많은 프로그램이
caching_sha2_password또는sha256_password인증 플러그인으로 인증하는 계정에 대해 RSA 키 쌍 기반 비밀번호 교환을 위한 공개 키를 포함하는 클라이언트 측 파일을 지정할 수 있도록--server-public-key-path옵션을 지원합니다: mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlshow, mysqlslap, mysql_upgrade. 이전에는 mysql 및 mysqltest만--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 개인/공개 키 쌍 파일의 자동 생성을 활성화합니다. Automatic SSL and RSA File Generation을 참조하십시오.새로운
Caching_sha2_password_rsa_public_key상태 변수는 RSA 키 쌍 기반 암호 교환에 대해caching_sha2_password인증 플러그인이 사용하는 공개 키를 노출합니다. (Bug #26751594, WL #11057) - 서버의 경우
-
MySQL Server에 링크된 OpenSSL 라이브러리가 버전 1.0.2n으로 업데이트되었습니다. 새 OpenSSL 버전에서 수정된 문제는 http://www.openssl.org/news/vulnerabilities.html에 설명되어 있습니다. (Bug #27212666, Bug #27236394)
-
mysqld 및 mysql_ssl_rsa_setup에서 자동으로 생성되는 인증서는 이제 v1이 아니라 X509 v3을 사용합니다. (Bug #26521654)
서버 관리
- 클라이언트 세션 내에서 MySQL 서버 인스턴스를 재시작할 수 있게 하는 새로운
RESTARTSQL 문을 사용할 수 있습니다. 이 기능은 재시작 목적으로 수행된 서버 종료를 모니터링 프로세스가 감지할 수 있는 플랫폼에서 사용할 수 있습니다: Windows(Windows 서비스 또는 독립 실행형으로 시작된 mysqld) 및 systemd 또는 mysqld_safe를 사용하여 mysqld를 관리하는 Unix 및 Unix 계열 시스템입니다. RESTART Statement를 참조하십시오. (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 버전과 비교하여 다른 결과를 반환합니다.
(Bug #26941370, Bug #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를 가진 geometry 인수를 허용했습니다. 이제 정의되지 않은 SRS를 가진 geometry 인수로 호출되면 오류를 생성합니다:
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)
-
Optimizer가 절대 사용하지 않을
SPATIAL인덱스가 생성되면 이제 서버가 경고를 출력합니다. (Bug #27015964) -
공간 계산을 위한 공간 참조 시스템 데이터를 포함하는 EPSG Dataset이 버전 9.0에서 9.2로 업그레이드되었습니다. (Bug #26711258, Bug #87564, Bug #26990896)
-
이제 MySQL은 데이터 딕셔너리에서 공간 참조 시스템(SRS) 정의를 생성하고 제거하기 위한
CREATE SPATIAL REFERENCE SYSTEM및DROP SPATIAL REFERENCE SYSTEM문을 지원합니다. CREATE SPATIAL REFERENCE SYSTEM Statement 및 DROP SPATIAL REFERENCE SYSTEM Statement를 참조하십시오. 이러한 문이 구현됨에 따라SELECT,INSERT,UPDATE와 같은 문을 사용하여mysql.st_spatial_reference_systems데이터 딕셔너리 테이블에 직접 접근할 필요가 없으며, 더 이상 허용되지 않습니다. SRS 정의에 대한 읽기 접근은 이전과 같이INFORMATION_SCHEMAST_SPATIAL_REFERENCE_SYSTEMS테이블을 통해 계속 사용할 수 있습니다. (WL #9059)
테스트 스위트 관련 사항
-
MySQL Test Suite 문서는 이제 Doxygen을 사용하여 MySQL 소스 트리에서 유지 관리됩니다(MySQL Server Doxygen 문서는 https://dev.mysql.com/doc/index-other.html에서 확인할 수 있습니다.) 이전에 오래된 테스트 스위트 매뉴얼에서 생성되던 관련 Unix man 페이지는 더 이상 업데이트되지 않으며 오래되었습니다. 따라서 해당 페이지는 더 이상 MySQL 배포판에 포함되지 않습니다. (Bug #27021754)
-
MySQL 테스트 스위트에는 이제
CRC32()테스트가 포함됩니다. 패치를 제공한 Daniel Black에게 감사드립니다. (Bug #26495791, Bug #87136) -
mysqltest는 이제 다음 명령에 대해 선택적
retry인수를 허용합니다:copy_filecopy_files_wildcard,file_exists,move_file,remove_file, 및remove_files_wildcard. 사용법은 다음과 같습니다:--file_operation file_name ... [retry]retry인수가 지정되면, 명령은 실패한 작업을 지정된 횟수만큼 1초 간격으로 재시도합니다. (Bug #24671890)
X 플러그인 관련 사항
-
X Plugin은 JSON 문자열을 예상하는 함수에 전달된 매개변수에서 따옴표를 잘못 제거하여 오류를 발생시킬 수 있었습니다. (Bug #26906519)
-
컬렉션에 인덱스가 생성된 후, X Plugin은 해당 컬렉션을 관계형 테이블로 나열하고 더 이상 컬렉션으로 나열하지 않았습니다. (Bug #26906487)
-
X Protocol은
DATE타입을DATETIME타입과 동일한 방식으로 표시했습니다. 이제 두 데이터 타입은 다르게 처리됩니다. (Bug #26647488) -
mysqlxtest는
DATETIME값의 소수 초를 올바르게 표시하지 않았습니다. (Bug #26638422) -
X Plugin은 JSON 컬럼에 대해 소수 자릿수를 표시하는 컬럼 메타데이터 필드를 반환했지만, 해당 정보는 JSON 컬럼과 관련이 없었습니다. 이 필드는 더 이상 반환되지 않습니다. (Bug #26258481)
-
IP 주소가 빈 호스트 이름으로 해석되는 경우 X Plugin은 사용자 계정 조회를 잘못 처리했습니다. (Bug #26042786)
-
이제 X Plugin은 유휴 상태로 간주되는 인증된 연결을 중단하도록 설정할 수 있습니다. 다음 시스템 변수가 추가되었습니다:
(WL #9267)
-
X Plugin은 이제 Caching SHA-2 Pluggable Authentication을 지원합니다. 이 지원을 활성화하려면 다음을 실행하십시오:
INSTALL PLUGIN mysqlx_cache_cleaner SONAME 'mysqlx.so';이 플러그인은 캐시를 유지 관리하고 수정된 계정에 대한 모든 항목을 제거합니다. (WL #10992)
참조: 다음도 참조하십시오: Bug #27213213, Bug #27042109.
추가되거나 변경된 기능
-
InnoDB: MySQL 8.0.3 이상으로 업그레이드한 후 더 이상 필요하지 않은 폐기된
InnoDB시스템 테이블은 이제 성공적으로 업그레이드한 후 삭제됩니다. (Bug #26757171) -
InnoDB: MySQL 바이너리를 새 버전으로 업그레이드한 후 MySQL 서버를 시작할 때 데이터 딕셔너리 테이블 정의를 자동으로 업그레이드하는 지원이 추가되었습니다. 시작 시 서버의 데이터 딕셔너리 버전이 데이터 딕셔너리에 저장된 버전 정보와 비교되어 데이터 딕셔너리 테이블을 업그레이드해야 하는지 여부를 결정합니다. 업그레이드가 필요하고 지원되는 경우, 서버는 업데이트된 정의로 데이터 딕셔너리 테이블을 생성하고, 영구 저장된 메타데이터를 새 테이블로 복사하고, 이전 테이블을 새 테이블로 원자적으로 교체한 다음, 데이터 딕셔너리를 다시 초기화합니다. 업그레이드가 필요하지 않은 경우, 데이터 딕셔너리 테이블을 업데이트하지 않고 시작이 계속됩니다.
mysqld
--no-dd-upgrade옵션을 사용하여 시작 시 데이터 딕셔너리 테이블의 자동 업그레이드를 방지할 수 있습니다. (WL #9553) -
InnoDB: 서버가 오프라인 상태일 때 테이블스페이스 파일을 새 위치로 이동하거나 복원하는 기능은 새
--innodb-directories옵션에서 지원되며, 이 옵션은 시작 시 테이블스페이스 파일을 스캔할 디렉터리를 정의합니다. 자세한 내용은 서버가 오프라인 상태일 때 테이블스페이스 파일 이동을 참조하십시오.--innodb-directories기능이 도입됨에 따라, 절대 경로로 생성되었거나 데이터 디렉터리 외부 위치에 생성된 file-per-table 및 general 테이블스페이스 파일의 위치를innodb_directories인수 값에 추가해야 합니다. 그렇지 않으면InnoDB가 복구 중에 이러한 파일을 찾을 수 없습니다. 테이블스페이스 파일 위치를 보려면INFORMATION_SCHEMA.FILES테이블을 쿼리하십시오:mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES \GCREATE TABLESPACE... ADD DATAFILE문은 이제 지정된 디렉터리가InnoDB에 알려져 있어야 합니다. 알려진 디렉터리에는innodb_directories옵션으로 암시적 및 명시적으로 정의된 디렉터리가 포함됩니다.innodb_directories는 제거된innodb_scan_directories를 대체합니다. (WL #8619) -
InnoDB:
InnoDB는 이제 클러스터형 인덱스 페이지 외부의 외부 필드에 저장된 대형 객체(LOB) 데이터의 부분 업데이트를 지원하며, 여기에는JSON_SET()및JSON_REPLACE()를 사용하여 업데이트된JSON문서가 포함됩니다. 이전에는 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데이터 딕셔너리 테이블의 스토리지 엔진 private 필드와InnoDB테이블스페이스 파일의 page 0은 MySQL 서버 버전 및 테이블스페이스 버전 정보를 저장합니다. MySQL 서버 버전은 해당 테이블스페이스를 생성한 버전, 해당 테이블스페이스가 임포트된 버전, 또는 마지막 주요 MySQL 업그레이드의 버전입니다. 테이블스페이스 버전은 테이블스페이스 형식 변경 사항을 추적합니다. 이 데이터에 대한 접근을 제공하기 위해SERVER_VERSION및SPACE_VERSION필드가INFORMATION_SCHEMA.INNODB_TABLESPACES테이블에 추가되었습니다. (WL #5989, WL #11063) -
Group Replication: 이제
group_replication_ip_whitelist시스템 변수를 사용하여, 그룹 복제 연결을 위한 화이트리스트의 일부로 호스트 이름을 지정할 수 있습니다. 호스트 이름은 CIDR 표기법을 지원합니다. IPv6 주소로 해석되는 호스트 이름은 지원되지 않습니다.호스트 이름의 경우, 이름 해석은 다른 서버가 연결 요청을 할 때만 수행됩니다. 해석할 수 없는 호스트 이름은 화이트리스트 검증 대상으로 간주되지 않으며, 경고 메시지가 에러 로그에 기록됩니다. 해석된 호스트 이름에 대해 Forward-confirmed reverse 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 ERROR및ON EMPTY옵션은 각각 잘못된 값(예: 비스칼라)과 빈 값을 처리하기 위해 지원됩니다.EXISTS PATH: 지정된 JSON 경로에 대한 일치 항목이 있으면 컬럼 값은 1이고, 그렇지 않으면 0입니다.NESTED PATH: 주어진 JSON 경로에서 찾은 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 Table Functions를 참조하십시오. (WL #8867) -
-DWITH_ASAN_SCOPECMake 옵션은 use-after-scope 감지를 위해 AddressSanitizer-fsanitize-address-use-after-scopeClang 플래그를 활성화합니다. 기본값은 off입니다. 이 옵션을 사용하려면-DWITH_ASAN도 활성화되어야 합니다. (Bug #27095089) -
빈
JSON문서의 처리가 더 견고해졌습니다. (Bug #26787468, Bug #87734) -
MySQL 8.0.3에서는
LOCK TABLES가 활성 상태인 경우 외래 키 관계에 있는 테이블에 대해ALTER TABLE RENAME을 제한했습니다. 이 제한 사항은 해제되었습니다. (Bug #26647340, Bug #87467) -
서버 PID 파일이 전역 쓰기 가능한 위치에 생성되도록 설정된 경우, 이제 서버는 더 안전한 위치 사용을 제안하는 경고를 발생시킵니다. (Bug #26585560)
-
_charset캐릭터셋 introducer를 사용하는 구성(예:_utf8mb4 'abc')의 경우, introducer를 적절한 캐릭터셋에 매핑하기 위한 조회 성능이 개선되었습니다. (Bug #25680866, Bug #85331)
수정된 버그
-
중요한 변경:
PERIOD_ADD()및PERIOD_DIFF()함수에 다음 변경 사항이 적용됩니다:- 이러한 함수 중 하나와 함께 사용되는 기간 값은 음수일 수 없습니다.
- 기간 값의 월 부분은 0과 같을 수 없습니다.
이러한 함수 중 하나와 함께 사용되는 기간 값에 대해 이러한 조건 중 하나 이상이 참이면, 이제 해당 함수가 오류와 함께 실패합니다. (Bug #27004699, Bug #27004729)
-
중요한 변경:
LEAST()및GREATEST()함수는 더 이상 자신이 사용되는 표현식으로부터 인수의 컨텍스트를 추론하려고 시도하지 않습니다. 예를 들어,LEAST('11', '45', '2')는'11'을 반환하지만,LEAST('11', '45', '2') + 0은 함수 인수를 문자열이 아니라 정수로 처리하여2를 반환했습니다. 이제 이러한 함수는 항상 타입에 따라 엄격하게 인수를 평가하며, 표현식에 포함됨으로 인해 발생하는 모든 데이터 타입 강제 변환은 함수가 반환한 결과에 대해서만 수행됩니다. 이는 표현식LEAST('11', '45', '2') + 0이 이제'11' + 0으로 평가되고, 따라서 정수 값11로 평가됨을 의미합니다.이 변경은 다음 고려 사항으로 인해 이루어졌습니다:
- 컨텍스트를 도출하기 위한 규칙이 항상 명확하거나 일관적이지 않았습니다.
-
이 함수들이 표현식에서 사용될 때의 결과가
COALESCE()의 결과 또는UNION쿼리의 결과와 일치하지 않았습니다.표현식 내에서 이 함수들을 사용하는 애플리케이션은 이전 동작에 의존하지 않는지 확인해야 하며, 의존하는 경우 업데이트해야 합니다. (Bug #83895, Bug #25123839)
-
InnoDB: 마스터에서 XA prepare 단계까지 성공적으로 실행된 동시 XA 트랜잭션이 슬레이브에서 재실행될 때 충돌하여 applier 스레드에서 lock wait timeout이 발생했습니다. 이 충돌은 트랜잭션이 슬레이브에서 직렬로 재실행될 때 달라지는 GAP lock 범위 때문에 발생했습니다. 이러한 유형의 충돌을 방지하기 위해,
READ COMMITTED격리 수준의 XA 트랜잭션이 획득한 GAP lock은 이제 XA 트랜잭션이 prepare 단계에 도달하면 해제되며 더 이상 상속되지 않습니다. (Bug #27189701, Bug #25866046) -
InnoDB: 생성된 가상 컬럼이 있는 테이블을 참조하는 외래 키 제약 조건을 추가한
ALTER TABLE작업에서 어설션이 발생했습니다. (Bug #27189701) -
InnoDB: general tablespace 데이터 파일 누락으로 인해
DROP DATABASE작업에서 어설션이 발생했습니다. (Bug #27151163) -
InnoDB: Windows에서 테이블 파티션을 변경한 작업에서 어설션이 발생했습니다. 테이블 이름이 올바르게 파싱되지 않았습니다. (Bug #27075816)
-
InnoDB: 임시 테이블에 대한
TRUNCATE TABLE작업에서 어설션이 발생했습니다. (Bug #27073280) -
InnoDB: DDL 작업의 post-DDL 단계 중 복구 관련 함수 호출에서 어설션이 발생했습니다. (Bug #27041487, Bug #88263)
-
InnoDB: SRID 속성이 있는 컬럼을 참조하는 공간 인덱스를 추가하면 오류가 반환되었습니다. (Bug #27021029)
-
InnoDB: 64자 외래 키 이름이 있는 테이블로 인해 업그레이드 실패가 발생했습니다. 길이가 최대 64자인 외래 키 이름은 허용되어야 합니다. (Bug #27014308, Bug #88196)
-
InnoDB: MySQL 5.7에서 MySQL 8.0으로 업그레이드된 압축 테이블에 대해
InnoDB복구 프로세스가 테이블스페이스 크기 오류와 함께 실패했습니다.이제 압축 테이블의 테이블스페이스 파일은
InnoDB페이지 크기 대신 물리적 페이지 크기를 사용하여 생성되며, 이로 인해 비어 있는 압축 테이블의 테이블스페이스 파일 초기 크기가 이전 MySQL 릴리스보다 작아집니다. (Bug #27014083, Bug #88195) -
InnoDB: 불필요한 테이블스페이스 가져오기 및 캐시 업데이트 작업으로 인해 서버 시작 지연이 발생했습니다. (Bug #26995951)
참조: 이 문제는 Bug #26832347의 회귀입니다.
-
InnoDB: 고아
.frm파일로 인해 업그레이드 실패가 발생했으며, 첫 번째 업그레이드 시도 중에 이름이 변경된 전체 텍스트 검색 보조 테이블로 인해 이후 업그레이드 시도도 성공하지 못했습니다. (Bug #26995951) -
InnoDB: 동시
CREATE TABLE작업 중 충돌하는 serialized dictionary information (SDI) 삽입을 처리하기 위해 도입되었던 우회 방법이 제거되었습니다. (Bug #26995534)References: See also: Bug #26539665.
-
InnoDB: “no space left on device” 오류가 잘못된 오류 메시지를 보고했습니다. (Bug #26960345)
-
InnoDB: 빠른 종료 중에 파일이 닫힌 후
InnoDB가 동적 메타데이터를 데이터 딕셔너리에 쓰려고 시도했으며, 이로 인해 데이터 딕셔너리 테이블스페이스에서 보류 중인 I/O로 인해 초기화 실패가 발생했습니다. (Bug #26950659) -
InnoDB: MySQL 8.0.4로 업그레이드한 후 제거된
InnoDB시스템 테이블을 반복해서 로드하려는 시도로 인해 시작 시 스택 오버플로 오류가 발생했습니다. (Bug #26945437, Bug #88042) -
InnoDB: 압축된 테이블을 가져올 때 어설션이 발생했습니다. 이 작업은 SDI 페이지를 변환하기 위해 serialized dictionary information (SDI) 인덱스 대신 테이블의 클러스터형 인덱스를 사용했습니다. (Bug #26938297)
-
InnoDB: 디버그 빌드에서
REPLACE작업 중 임시 테이블 생성 실패가 잘못된 assertion을 발생시켰습니다. (Bug #26919378, Bug #26958868) -
InnoDB: 데이터베이스 테이블이 일반 테이블스페이스에 생성된 경우
DROP DATABASE가 실패했습니다. 일반 테이블스페이스 플래그가 잘못 등록되어 직렬화된 딕셔너리 정보(SDI) 작업이 실패했습니다. (Bug #26834496) -
InnoDB: 바이너리 로깅이 활성화된 상태에서
ALTER TABLESPACE... RENAME작업이 “cannot find space” 오류와 함께 실패했습니다. (Bug #26832347) -
InnoDB: 인덱스 추가에 실패한 작업이 잘못된 적응형 해시 인덱스 assertion을 발생시켰습니다. (Bug #26788968)
-
InnoDB: 데이터 딕셔너리에서 읽은 유효한 테이블 로우 타입 값이 잘못된 assertion을 발생시켰습니다. (Bug #26773152)
-
InnoDB:
innodb_force_recovery=5를 사용하여 업그레이드를 시작하면InnoDB백그라운드 스레드가 초기화되었지만, 오류가 발생했을 때 스레드를 정상적으로 종료하지 않았습니다. 0이 아닌innodb_force_recovery설정을 사용한 업그레이드는 더 이상 허용되지 않습니다. (Bug #26766632) -
InnoDB: 실패한
CREATE TEMPORARY TABLE문이INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO에 항목을 남겼습니다. 메모리 내 테이블 객체가 해제되지 않았습니다. (Bug #26765438) -
InnoDB:
InnoDB가 외래 키에 적합한 인덱스를 찾으려고 할 때 잘못된dict_table_t배열에서 가상 컬럼의 이름을 조회했습니다. (Bug #26764604) -
InnoDB:
table_stats및index_stats데이터 딕셔너리 테이블을 업데이트하는 연결 가능한 읽기-쓰기 트랜잭션이 동일한 로우를 업데이트하려고 시도하여 데드락이 발생했습니다. (Bug #26762517) -
InnoDB: 복구 중에 메모리 내 테이블스페이스 객체의 테이블스페이스 이름이 테이블 이름 캐릭터셋 대신 파일 이름 캐릭터셋을 사용하여 정의되어 “missing tablespace” 오류가 발생했습니다. (Bug #26761960)
-
InnoDB: 부트스트랩 코드가 데이터 딕셔너리 테이블을 위해 처음 1024개 테이블 ID를 예약하지 않았습니다. (Bug #26757227)
-
InnoDB: 파티셔닝된 테이블에서 서로 다른 클라이언트의 여러 업데이트가 잘못 설정된 잠금 타입으로 인해 예기치 않은 잠금 대기 시간 초과를 발생시켰습니다. (Bug #26731025, Bug #87619)
-
InnoDB: 메타데이터 잠금을 획득하려고 시도한 비동기 롤백 스레드가 중단되었지만, 그 결과 오류가 서버에 반환되지 않았습니다. 이 문제는 비동기 롤백에 필요하지 않았던 메타데이터 잠금 획득을 제거하여 해결되었습니다.
undo 처리를 위해 테이블을 열 때 메모리 내 테이블만 확인했습니다. 이제 테이블이 메모리에 없는 경우에 대비하여 데이터 딕셔너리도 함께 확인합니다. (Bug #26678883)
-
InnoDB: 예상보다 긴 이름의 전체 텍스트 보조 테이블을 열려고 할 때 어설션이 발생했습니다. (Bug #26649020)
-
InnoDB: 데이터 딕셔너리 테이블 열기 함수가 테이블 및 스키마 이름 캐릭터셋 변환을 제대로 처리하지 않아 복구 중 오류가 발생했습니다. (Bug #26640776)
-
InnoDB: 일부
ALTER TABLE... PARTITION시나리오에서 트랜잭션end_stmt()함수가 호출되지 않아 timeout이 발생했습니다. (Bug #26629790, Bug #25886814) -
InnoDB: DDL 작업의 커밋 단계 중 serialized diction information (SDI) 테이블에 대한 메타데이터 락 획득이 lock wait timeout 또는 쿼리 중단으로 인해 실패했습니다. (Bug #26628126)
-
InnoDB: 동적 메타데이터 업데이트에 대한 redo 로그가 redo 로그 margin을 확인할 때 고려되지 않았습니다. 또한 읽기 전용 모드에서 redo 로그의 메타데이터 쓰기를 위해
innodb_dynamic_metadata데이터 딕셔너리 테이블이 불필요하게 열렸습니다. (Bug #26589535) -
InnoDB:
memcached플러그인 설치 시도가 실패한 후 예기치 않은 오류가 발생했습니다. (Bug #26588738) -
InnoDB: 버퍼 풀 크기 조정 작업이 진행 중인 동안 버퍼 풀 페이지의 상태가 다른 스레드에 의해 변경되었습니다. (Bug #26588537)
-
InnoDB: 충돌하는 잠금에 대해 어설션하는 디버그 함수가 커밋되거나 롤백될 트랜잭션 잠금을 고려하지 않았습니다. (Bug #26562371)
-
InnoDB: 대기 중인 레코드 잠금의 age를 업데이트하는 Variance-Aware Transaction Scheduling (VATS) 기능이 테이블 잠금을 무시하지 못해 어설션 실패가 발생했습니다. (Bug #26538702)
-
InnoDB: 테이블 파티션을 생성하거나 수정하는 DDL 작업이 다른 파티션의 로우 형식을 의도치 않게 변경하여 로우 형식 불일치가 발생했습니다. (Bug #26535746)
-
InnoDB:
ALTER TABLE작업으로 인해 서버가 중단되었습니다. (Bug #26492721) -
InnoDB: 파티셔닝된 테이블의 이름을 변경할 때
innodb_table_stats데이터 딕셔너리 테이블이 새 파티션 이름으로 업데이트되지 않았습니다. (Bug #26390658, Bug #86927) -
InnoDB: MySQL 8.0.0에서 도입된 회귀로 인해
innodb_change_buffering설정 옵션을 동적으로 설정할 수 없었습니다. (Bug #26389442) -
InnoDB: 온라인 DDL 작업 중 동시
UPDATE문을 롤백하는 동안 해제된 인덱스의 온라인 로그에 접근했습니다. (Bug #26334475) -
InnoDB: 가상 컬럼의 프리픽스에 보조 인덱스가 있는 테이블에서
REPLACE작업을 수행하면 어설션이 발생했습니다. (Bug #26330279) -
InnoDB:
tmpdir을 드라이브의 루트로 설정하면 “Invalid (old?) table or database name” 오류 메시지가 오류 로그에 출력되었습니다. (Bug #26299984, Bug #86737) -
InnoDB: 트랜잭션 뮤텍스를 획득하지 않고 트랜잭션 상태를 확인하려고 할 때
INFORMATION_SCHEMA쿼리 중 경쟁 조건이 발생했습니다. (Bug #26299705) -
InnoDB:
FLUSH TABLES작업이 중단된 인덱스를 삭제하지 못했습니다. 캐시에서 테이블을 제거하는 동안, 중단된 인덱스를 확인하기 전에 클러스터형 인덱스가 삭제되었습니다. (Bug #26256456, Bug #86607) -
InnoDB:
InnoDB테이블의 경우CREATE TABLE... LIKE가innodb_file_per_table시스템 변수 설정을 따르지 않았으며, 사용자가 테이블 생성 중에 명시적 테이블스페이스를 지정하지 않았음에도SHOW CREATE TABLE이TABLESPACE절을 표시했습니다. (Bug #26199233, Bug #86589) -
InnoDB: 외래 키 cascade 작업을 처리하는 반복적 접근 방식으로 인해 과도한 메모리 사용이 발생했습니다. (Bug #26191879, Bug #86573)
참조: 이 문제는 다음 버그의 회귀입니다: Bug #16244691.
-
InnoDB: 압축된 페이지를 제거하는 버퍼 풀 eviction 작업의 잠금 획득 순서가 올바르지 않았습니다. (Bug #25972975)
-
InnoDB: 데이터 딕셔너리 객체가 아직 사용 중인 동안 메타데이터 잠금이 해제되었습니다. (Bug #25928984)
-
InnoDB: innochecksum은 1K 압축 페이지 크기의
InnoDB파일에서 실행될 때 Valgrind 오류를 반환했습니다. (Bug #25922124, Bug #85993) -
InnoDB: kill 스레드가
TRUNCATE TABLE작업을 실행 중이던 다른 스레드의 소켓을 닫지 못해 어설션이 발생했습니다. (Bug #25887335, Bug #85925) -
InnoDB: 공간 인덱스가 있는 테이블에 대한
INSERT작업은 잠금 충돌 검사 중 발생한 실패로 인해 어설션을 발생시켰습니다. (Bug #25729649) -
InnoDB: 사용자 테이블을 대상으로 한 debug sync point가 데이터 딕셔너리 테이블에 대해 활성화되었습니다. (Bug #25508568)
-
InnoDB: 생성된 저장 컬럼의 베이스 컬럼에 외래 키 제약 조건이 배치되는 것을 방지하기 위해 서버 측 검사가 추가되었습니다. (Bug #25339192)
-
InnoDB: 히스토리 목록의 길이가 2000000을 초과할 때 MySQL의 디버그 빌드에서만 표시되어야 하는 경고가 오류 로그에 출력되었습니다. (Bug #24296076, Bug #82213)
-
InnoDB: 버퍼 풀 크기를 버퍼 풀 청크 크기보다 작게 줄이려고 시도해도 경고가 보고되지 않았습니다. (Bug #23590280)
-
InnoDB: 지원되지 않는 인덱스 생성 시나리오를 처리하기 위해 “wrong key column” 오류가 추가되었습니다. (Bug #22486025)
-
InnoDB: 바이너리 콜레이션을 사용하는 인덱싱된 컬럼에 대한 전체 텍스트 검색이 대소문자를 구분하는 일치 항목을 반환하지 않았습니다. (Bug #21625016, Bug #78048)
-
Packaging: MySQL Yum 저장소를 사용하여 Fedora 27에 MySQL Server를 설치하려고 할 때, 네이티브
mariadb-connector-c-devel패키지와의 충돌로 인해 설치가 실패했습니다. 이 수정으로 해당 네이티브 패키지 및 다른 네이티브 패키지에 대해 적절한 “obsoletes”가 추가되었습니다. (Bug #26963839) -
Partitioning: 암시적 테이블스페이스를 사용하여 파티셔닝된 테이블을 생성할 때 그 효과는 각 파티션을 자체 테이블스페이스에 배치하며, 테이블 전체에 대해 지정된 테이블스페이스는 없도록 하는 것입니다. 직렬화된 딕셔너리 정보(SDI)는 주어진 테이블이 사용하는 모든 테이블스페이스에 저장되었으므로, 많은 테이블스페이스가 있는 테이블에 이를 저장하는 비용이 과도해졌습니다. 이 문제는 SDI를 저장하는 데 사용되는 테이블스페이스 집합에 첫 번째 파티션의 테이블스페이스만 포함하여 해결되었습니다. (Bug #26762973)
참조: 다음도 참조하십시오: Bug #26765252.
-
Partitioning: 서버가 기본 테이블의 파티션을 프루닝하려고 할 때 파티셔닝된 테이블에 대한
CREATE VIEW에서 assertion이 발생할 수 있었습니다. (Bug #26659699) -
Partitioning: 파티셔닝된 테이블의 이름을 변경할 때 테이블 통계가 새 파티션 이름으로 업데이트되지 않았습니다. (Bug #86074, Bug #25953183)
-
Replication; JSON: 로우 기반 복제의 경우, MySQL 8.0.3에서 도입된 서버 변수
binlog_row_value_options=PARTIAL_JSON가 마스터뿐만 아니라 복제 슬레이브에도 지정되지 않은 경우 JSON 문서에 대한 부분 업데이트가 적용되지 않았습니다. 이제 복제 슬레이브는 자체 설정에binlog_row_value_options=PARTIAL_JSON가 있는지 여부와 관계없이, 마스터로부터 JSON 문서에 대한 부분 업데이트를 수신할 때마다 이를 적용합니다. (Bug #26762675) -
Replication:
Binlog_sender클래스의 함수set_unknow_error()가set_unknown_error()로 이름이 변경되었습니다. 수정해 준 Simon Mudd에게 감사드립니다(또한 Bug 88149의 오타 수정에 대해서도 감사드립니다). (Bug #27149075, Bug #88559)참조: 다음도 참조하십시오: Bug #26996065, Bug #88149.
-
Replication: 데이터 디렉터리를 초기화하기 위해
--initialize또는--initialize-insecure옵션으로 mysqld를 호출할 때, 해당 단계에서는 사용할 수 없어야 하는mysql.gtid_executed테이블의 가용성과 관련된 경고 메시지가 더 이상 발생하지 않습니다. 또한, 새 UUID 생성과 관련하여 이전에 경고로 발생하던 메시지는 이제 관련 사항으로 발생합니다. 이는 해당 상황에서 새 UUID 생성이 정상적이기 때문입니다. (Bug #27115183) -
Replication: MySQL 8.0.3에서 바이너리 로그 파일 및 인덱스 파일의 기본 베이스 이름은 호스트 머신의 이름을 사용하는
host_name-bin이었습니다. 이 기본 이름은--log-bin옵션이 제공되지 않은 경우와,--log-bin옵션이 문자열 없이 제공되거나 빈 문자열과 함께 제공된 경우에도 사용되었습니다. MySQL 8.0.4부터는--log-bin옵션을 제공하지 않으면 MySQL은 이제 바이너리 로그 파일 및 인덱스 파일의 기본 베이스 이름으로binlog를 사용합니다. MySQL 8.0.3 이전 릴리스에서는 해당 설정에서 바이너리 로그가 없었으므로, 업그레이드 시 기존 바이너리 로그와의 비호환성은 없습니다. 그러나 MySQL 8.0.3 이전 릴리스의 기존 바이너리 로그와의 호환성을 위해,--log-bin옵션을 문자열 없이 제공하거나 빈 문자열과 함께 제공하면 베이스 이름은 호스트 머신의 이름을 사용하는host_name-bin으로 기본 설정됩니다.이전에
--log-bin옵션을 사용하여 바이너리 로그 파일 이름을 지정하지 않은 경우(ER_LOG_BIN_BETTER_WITH_NAME)와server_id시스템 변수를 설정하여 서버 ID를 지정하지 않은 경우(ER_WARN_NO_SERVERID_SPECIFIED) 시작 시 발생하던 경고 메시지는 이제 정보 메시지로 발생합니다. 고유하지 않은 서버 ID로 복제가 시도되는 경우에는 여전히 경고 메시지가 발생합니다. (Bug #27082922) -
Replication: 바이너리 로그 파일에서 모든 GTID 트랜잭션 앞에 오는
Gtid_log_event에서, 16777216바이트 이상의 트랜잭션에 대해transaction_length필드는 허용되는 최대 9바이트를 사용해야 했지만 8바이트를 사용했습니다. (Bug #26993433) -
복제: Bug #22671846에 대한 수정 사항이 MySQL 버전 8.0.3에서 누락되었습니다. (Bug #26985976)
-
복제: Bug #26117735(MySQL Bug #86288)에 대한 수정 사항은 재작성 규칙에 지정된 데이터베이스 이름에 따라
--read-from-remote-server옵션 및--rewrite-db옵션과 함께 mysqlbinlog를 실행할 때 디버그 어설션을 발생시킬 수 있었습니다. 이제 이 문제가 수정되었습니다. (Bug #26878022) -
복제: yaSSL을 사용하여 컴파일된 MySQL에서 반동기 복제가 사용 중일 때, 확인 응답 패킷의 잘못된 처리로 인해 데드락이 발생할 수 있었습니다. 여러 확인 응답 패킷이 yaSSL에 의해 함께 읽힐 수 있지만, 반동기 복제의 수신자 스레드는 폴링 후 확인된 첫 번째 확인 응답 패킷만 처리했습니다. 이제 수신자 스레드는 버퍼에 있는 모든 확인 응답 패킷을 처리합니다. (Bug #26865538)
-
Replication: semisynchronous 복제를 사용하는 경우, 활성 트랜잭션이 슬레이브의 확인 응답을 기다리는 동안
RESET MASTER가 실행되면, 대기가 완료된 후Rpl_semi_sync_master_wait_sessions서버 상태 변수의 대기 중인 세션 수가 올바르지 않았습니다. (Bug #26748533) -
Replication:
--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옵션을 비활성화하므로, 해당 옵션을 지정하지 않은 경우에는 경고 또는 오류 메시지가 발생하지 않습니다. (Bug #26666259) -
Replication: 잘못된 트랜잭션 ID가 제공되어 실패한
XA ROLLBACK문이 올바른 트랜잭션 ID와 함께 바이너리 로그에 기록될 수 있었고, 따라서 복제 슬레이브에서 실행될 수 있었습니다. 이제 바이너리 로깅이 수행되기 전에 오류 상황에 대한 검사가 이루어지며, 실패한XA ROLLBACK문은 로깅되지 않습니다. (Bug #26618925, Bug #87393) -
Replication: NDB 스토리지 엔진의 경우, 슬레이브가 로우 검색에 해싱을 사용했을 때(MySQL 8.0.2부터
slave_rows_search_algorithms시스템 변수 설정에 기본적으로 포함됨), 로우 해시를 저장하는 데 사용된 테이블이 슬레이브에서 레코드가 제거된 후 올바르게 정리되지 않았습니다. 이 문제는 NDB 스토리지 엔진이 반환한 변형된 오류 값으로 인해 발생했으며, 이제 예상 값으로 수정되었습니다. (Bug #26434966) -
Replication: 예를 들어 mysqlrplsync 유틸리티를 사용하는 복제 동기화 검사 중에 복제별 저장소 테이블을 업데이트하는 MySQL 내부 관리 명령이 이제 읽기 잠금을 우회할 수 있습니다. 이를 통해 이러한 명령은
read_only및super_read_only시스템 변수와autocommit모드의 설정과 관계없이 실행될 수 있습니다. (Bug #26414532, Bug #86224) -
Replication: 바이너리 로그 함수
MYSQL_BIN_LOG::new_file_impl은 “Error writing file”(ER_ERROR_ON_WRITE)을 반환해야 했을 때 “Can't open file”(ER_CANT_OPEN_FILE) 오류를 반환했습니다. (Bug #26370868, Bug #86870) -
Replication: 쓰기 집합이 복제 슬레이브에서 병렬화에 사용되는 경우(
binlog_transaction_dependency_tracking시스템 변수로 지정됨), 이제 쓰기 집합 정보를 생성할 때 데이터베이스의 대소문자 및 액센트 민감도가 고려됩니다. 쓰기 집합 정보는transaction_write_set_extraction시스템 변수가 활성화된 경우 생성됩니다. 이전에는 중복 키가 서로 다른 것으로 잘못 식별되어, 트랜잭션에 잘못된 종속성이 생기고 따라서 잠재적으로 잘못된 순서로 실행될 수 있었습니다. (Bug #26277771, Bug #86078) -
Replication: 반동기 복제의 수신자 스레드가 마스터/슬레이브 프로토콜 압축을 사용하는 슬레이브(
slave_compressed_protocol=ON)로부터 승인을 수신할 수 없었습니다. 이제 수신자 스레드는 압축된 승인을 올바르게 처리합니다. (Bug #26027024, Bug #86230) -
Replication: 이제
mysql_reset_connection()함수는 쓰기 세트 세션 기록을 지웁니다. (Bug #25950554, Bug #86063) -
Replication: 복제 슬레이브에서 Performance Schema 테이블
events_transactions_current의XA_STATE필드에서, 슬레이브에XA PREPARE문이 적용된 후 XA 트랜잭션의 상태가PREPARED가 아니라COMMITTED로 잘못 보고되었습니다. (Bug #25940184) -
Replication: 멀티 소스 복제 토폴로지에서, 마스터에서
binlog_rows_query_log_events가 활성화되어 있고 다른 채널에서 이미 적용된 문장이 슬레이브에서 건너뛰어진 경우 슬레이브에서 메모리 누수가 발생할 수 있었습니다. 이 상황에서 슬레이브에 저장된Rows_query로그 이벤트의 인스턴스가 삭제되지 않았습니다. 이제 로그 이벤트 인스턴스가 정리되고 메모리가 해제됩니다. 패치에 기여해 주신 Vlad Lesin에게 감사드립니다. (Bug #25695434, Bug #85371, Bug #85034) -
Replication: 복제 슬레이브에 설정된 전역 및 채널별 복제 필터를 표시하는 Performance Schema
replication_applier_global_filters및replication_applier_filters테이블에 대한 쿼리는 필터가 변경될 때만 뷰가 생성되도록 최적화되었습니다. 이전에는 생성된 모든 로우에 대해 뷰가 생성되었습니다. (Bug #25694140) -
Replication: GTID 기반 복제에서 메모리 누수가 수정되었습니다. 건너뛰거나 무시된 이벤트에 대해 repository 테이블이 업데이트된 후 메모리가 해제되지 않았습니다. (Bug #25656123, Bug #85251)
-
Replication: 다중 스레드 슬레이브의 워커 스레드가 이후 트랜잭션이 의존하는 트랜잭션을 적용하지 못했을 때, 코디네이터 스레드는 해당 문제에 대한 알림을 받기 전에 의존 트랜잭션의 스케줄링을 시작할 수 있었습니다. 이 상황에서
STOP SLAVE요청이 수행되면 디버그 빌드에서 어설션이 발생했습니다. (Bug #25585436) -
Replication: 문 기반 복제가 사용 중일 때,
XA COMMIT ONE PHASE로 끝나는 XA 트랜잭션 내부에서UPDATE또는DELETE문이 사용되고 해당 문이 어떤 로우에도 영향을 주지 않은 경우, 복제 오류가 발생했습니다.XA END문이 바이너리 로그에 기록되지 않았으므로, 슬레이브 서버는 커밋 요청 시점에 XA 트랜잭션이 여전히 활성 상태인 것으로 식별했습니다. 이제 필요한XA END문은 트랜잭션이 어떤 로우에도 영향을 주지 않았더라도 기록됩니다. (Bug #24812958, Bug #83295) -
Replication: 복제 클라이언트는
LOAD DATA문에 대해 더 이상LOCAL기능을 활성화하지 않습니다. 이는 복제 클라이언트가LOAD DATA LOCAL문을 사용하지 않기 때문입니다. (Bug #24763131) -
Replication: 혼합 형식 복제(
binlog_format=MIXED)의 동작이 임시 테이블과 관련하여 변경되었습니다. 이전에는 혼합 형식 바이너리 로깅이 사용 중일 때, 문이 로우 단위로 기록되고 해당 문을 실행한 세션에 임시 테이블이 하나라도 있으면, 그 세션에서 사용 중인 모든 임시 테이블이 삭제될 때까지 이후의 모든 문이 안전하지 않은 것으로 처리되어 로우 기반 형식으로 기록되었습니다. 또한 버그에서 보고된 것처럼,log_slave_updates가 활성화된 복제 슬레이브에서는 로우 기반 로깅이 해당 연결 기간 동안 이후의 모든 세션에 걸쳐 잘못 계속되었습니다.이제 혼합 바이너리 로깅 형식이 사용 중일 때, 임시 테이블만 사용하는 문은 기록되지 않습니다. 임시 테이블과 비임시 테이블이 혼합된 문은 마스터에서 비임시 테이블에 대한 작업에 대해서만 기록되며, 임시 테이블에 대한 작업은 기록되지 않습니다. 예외는 임시 테이블 생성이 문 기반 형식을 사용하여 바이너리 로그에 기록된 경우입니다. 이 경우 임시 테이블이 삭제될 때 마스터에서
DROP TEMPORARY TABLE IF EXISTS문이 기록됩니다.이 동작 변경으로 인해, 세션에서 임시 테이블과 관련되지 않는 나머지 문은 더 이상 안전하지 않은 것으로 처리할 필요가 없습니다. 안전한 문은 이제 statement-based 형식으로 기록되고, 안전하지 않은 문은 row-based 형식으로 기록되며, 이는 세션에 임시 테이블이 있는지 여부와 관계없이 mixed 형식 복제의 일반 동작을 따릅니다. 또한 버그에서 보고된 문제가 수정되어, 이제 연결을 사용하는 후속 세션은 이전 세션에서 사용한 형식과 관계없이 해당 세션에 적절한 로깅 형식을 사용합니다.
binlog_format이ROW또는STATEMENT인 경우 동작은 이전과 동일하게 유지됩니다. row-based 바이너리 로깅 형식의 경우, mixed 형식에서와 같은DROP TEMPORARY TABLE IF EXISTS문을 제외하고 임시 테이블에 대한 작업은 기록되지 않습니다. statement-based 바이너리 로깅 형식의 경우, 임시 테이블과 관련된 문을 statement-based 형식으로 안전하게 기록할 수 있다면 임시 테이블에 대한 작업은 마스터에 기록되고 슬레이브에 복제됩니다. 이제binlog_format=STATEMENT는 임시 테이블이 슬레이브에 복제되는 유일한 로깅 모드입니다.이제 런타임에
binlog_format설정을ROW또는MIXED에서STATEMENT로 변경할 수 없습니다. 이전 모드에서는 모든CREATE TEMPORARY TABLE문이 바이너리 로그에서 생략되었기 때문입니다. 임시 테이블이 생성된 경우에도STATEMENT에서ROW또는MIXED형식으로 전환하는 것은 여전히 가능합니다.패치를 제공해 주신 Percona의 George Lorch 및 Laurynas Biveinis에게 감사드립니다. (Bug #18843730, Bug #72475)
-
Replication: 그룹에 참여하는 과정의 일부인 분산 복구 중에, applier가 모든 트랜잭션을 적용했다고 신호를 보낼 때 partial transaction도 무조건 검색했습니다. 이는 applier가 이 시점에서 중지될 경우 발생할 향후 applier 오류를 방지하기 위한 것이었습니다. 그러나 이 검색 및 제거는 applier 중지 사례에 대해서만 의미가 있었습니다. 실행 완료 시에는 이를 수행해서는 안 되며, 그렇지 않으면 applier relay log가 손상되거나 purge되어 데이터 손실로 이어질 수 있습니다. 이 문제를 해결하기 위해, applier가 실행 완료를 기다리는 경우 더 이상 partial transaction을 검색하고 제거하지 않습니다. (Bug #88304, Bug #27049034)
-
Replication: 부하가 큰 그룹에서 조인하는 멤버가 그룹과 동기화되기 위해 많은 양의 데이터를 가져와야 할 수 있었습니다. 가져온 데이터 양이 4Mb인
View_change패킷 크기를 초과하면 멤버가 그룹에 조인하지 못하고Error상태로 들어갔습니다. 이제 패킷 크기는 기본값이 1GB인slave_max_allowed_packet에서 가져옵니다. 그룹이 처리하는 부하에 따라slave_max_allowed_packet을 설정하여 패킷 크기를 더 늘리고자 할 수 있습니다. (Bug #87701, Bug #26770576) -
Replication: 조인하는 멤버가 트랜잭션을 지속적으로 수신하는 그룹에서, 조인하는 멤버가 때때로 온라인 상태로 들어가지 못할 수 있었습니다. 이는 수신 메시지 큐가 테스트되는 방식 때문이었습니다. (Bug #87631, Bug #26731317)
-
Group Replication; Microsoft Windows: Windows에서 Group Replication이 생성하는 오류는 이제 오류 번호만 포함하는 대신 자세한 오류 메시지를 포함합니다. (Bug #24918678)
-
Group Replication: Group Replication 플러그인이 시작된 스레드가 올바르게 종료되지 않아, 이 스레드를 종료한 후 플러그인을 중지하거나 시작할 수 없었습니다. (Bug #26435775)
-
Group Replication:
transaction_write_set_extraction이 활성화된 경우, 동시 DDL이 발생하면 외래 키가 수집되는 동안 불필요한 직렬화가 발생할 위험이 있었습니다. Group Replication은 이제 새로운 데이터 딕셔너리를 활용하여 테이블 정의 및 외래 키와 상호 작용하며, 이 잠재적 직렬화 문제가 해결되었습니다. (Bug #26187850) -
Group Replication:
group_replication_enforce_update_everywhere_checks가ON인 경우, Group Replication 플러그인은 외래 키 cascade가 있는지 확인하고 그 영향을 받는 테이블에 대한 업데이트를 허용하지 않습니다.이 프로세스의 일부로
SET NULL작업은 확인되지 않았으며, 이로 인해 데이터 불일치가 발생할 수 있었습니다. 이제 이 값이ON인 경우, 테이블에SET NULL옵션이 설정되어 있으면 자식 테이블에 대한 작업이 차단됩니다. (Bug #25404162) -
Group Replication: 그룹에 속한 모든 서버에는
server_uuid로 설정된 고유한 UUID가 있어야 하지만, Group Replication에서 이를 강제하지 않았기 때문에 중복 UUID를 가진 멤버를 추가할 수 있었습니다. (Bug #88452, Bug #27105803) -
Group Replication: 시작 또는 중지 시 Group Replication 플러그인은 내부 세션을 사용하여 읽기 전용 모드를 활성화하거나 비활성화하는 것과 같은 서버의 내부 작업을 실행합니다. 이 내부 세션이 열렸을 때 전체 세션 수가
max_connections로 설정된 허용된 열린 세션 수를 초과하면, 작업은 예상대로 실패했지만 스레드가 남아 있었으며, 이는 나중에 문제를 일으켰습니다. (Bug #88182, Bug #27008102, Bug #27016552) -
Group Replication: 서버가
--initialize또는--initialize-insecure를 사용하여 초기화되는 중에 서버 부팅 시 Group Replication이 시작되도록 설정된 경우, 복제 applier 인프라가 초기화되지 않았기 때문에 assertion이 발생했습니다. 이제 서버가 초기화되는 중에는 Group Replication이 시작되지 않습니다. (Bug #87759, Bug #26802395) -
Group Replication: 플러그인을 시작하거나 중지하는 동안 Group Replication 변수를 변경하는 경우 올바르게 검증되지 않았습니다. 이제 플러그인의 상태가 변경 중이 아닐 때만 변수를 변경할 수 있습니다. (Bug #86874, Bug #26372117)
-
Group Replication: 머신에 구성된 가상 IP 수와 관계없이, Group Replication은 처음 12개 주소에만 액세스할 수 있었습니다. (Bug #86772, Bug #26324852)
-
Group Replication: 서버 시작에 사용되는 지연 초기화 메커니즘이 개선되었습니다. 이제 서버가 읽기 모드가 될 때까지만 연결을 차단합니다. (Bug #86271, Bug #26037344)
참조: 함께 참조하십시오: Bug #84731, Bug #25475132.
-
Group Replication: 단일-primary 그룹의 primary 또는 데이터를 공급하는 비동기 복제 채널도 있는 multi-primary 그룹의 primary와 같은 primary 멤버가 중지되었을 때, 비동기 채널은 변경 사항 적용을 계속했습니다.
STOP GROUP_REPLICATION이 실행될 때super_read_only가 설정되었지만, 이미 실행 중인 비동기 복제 채널은 중지되지 않았습니다. 이는 멤버에서 로컬로 변경 사항이 만들어질 수 있었고, 비동기 복제 채널을 수동으로 중지해야 했음을 의미했습니다. 이제 Group Replication이 오류로 인해 중지되거나STOP GROUP_REPLICATION이 실행되어 중지될 때, 모든 비동기 복제 채널이 중지됩니다. (Bug #86222, Bug #26024253) -
Group Replication: Group Replication 로깅이 개선되었으며, 이제 멤버가 조인하거나 떠나는 시점, 뷰가 변경되는 시점 등에 대한 내용을 포함합니다. (Bug #84798, Bug #25495393)
References: 다음도 참조하십시오: Bug #26422857.
-
Linux: Alpine Linux에서 mysql은 표준 출력에 쓸 수 없는 경우 서버에 대한 연결을 잃었습니다. 또한 mysql 및 mysqldump의 경우
stdout및stderr에 대한 결과 플러시 순서가 이제 결정적입니다. (Bug #27169809)References: 다음도 참조하십시오: Bug #17583.
-
Microsoft Windows: Windows에서
myisam_use_mmap및flush시스템 변수가 활성화된 경우MyISAM이 테이블 파일을 항상 올바르게 플러시하지는 않았습니다. (Bug #26880757) -
JSON:
LAG()함수와 함께 인수로 사용된 JSON 표현식이 항상 올바르게 평가되지는 않았습니다. (Bug #26740557) -
JSON:
JSON_ARRAY()를 사용한 prepared statement의 반복 실행이 올바르게 처리되지 않았습니다. (Bug #26704312)References: 이 문제는 다음의 회귀입니다: Bug #25867454.
-
JSON:
JSON_INSERT()함수를 실행할 때, 지정된 삽입이 루트 요소에 대해 수행되는지 여부를 확인하기 위해 수행되는 검사는 경로의 길이가 1인지, 즉 삽입된 요소가 루트 요소 안에서 어느 위치를 가지는지를 결정하는 단일 레그로 경로가 구성되었는지를 검사했습니다. 경로의 시작 부분에 auto-wrapping 경로 레그가 있는 경우 문제가 발생했으며, 이 경우 길이가 1보다 큰 경로도 루트의 요소를 참조할 수 있으므로, 경로 길이를 검사하는 것으로는 삽입의 대상 요소가 루트인지 다른 요소인지 신뢰할 수 있게 알 수 없었습니다.이를 수정하기 위해, 루트 요소 감지를 위한 경로 길이 검사는 일치한 요소에 부모가 있는지 여부를 확인하는 검사로 대체되었습니다. 부모가 없으면 해당 요소는 루트 요소여야 합니다. (Bug #26649978)
참조: 이 문제는 다음의 회귀입니다: Bug #86213, Bug #26022576.
-
JSON: JSON 값을 해당 바이너리 표현으로 직렬화할 때, 대상 버퍼에 필요한 크기의 정수 또는 double 값을 보관하기에 충분한 공간이 있는지 확인해야 합니다. 이전에는 이 버퍼 할당이 필요한 최소 메모리 양만 예약했으므로, 그 직후 재할당이 필요할 가능성이 매우 높았습니다. 이는 특히 숫자 값이 많은 배열을 직렬화할 때 성능에 부정적인 영향을 줄 수 있었습니다. 이제 직렬화는 대상 버퍼 크기의 할당이 지수적으로 증가하도록 수행되며, 이로 인해 큰 배열을 처리할 때 이 작업을 수행하는 데 소요되는 시간이 줄어듭니다. (Bug #88656, Bug #27171283)
-
JSON: JSON 문서가 문자열 표현으로 변환될 때, 소수 부분이 없는 부동 소수점 값은 정수와 구별할 수 없게 되는 방식으로 표현될 수 있었습니다. 이러한 JSON 문서의 문자열 표현이 JSON 파서를 다시 통과하면, 해당 숫자 값이 원래 부동 소수점 값으로 지정되었다는 정보가 손실되었습니다.
이 문제를 해결하기 위해, 이제 JSON 문서의 부동 소수점 값에 소수 부분이 없고 과학적 표기법을 사용하여 표현되지 않는 경우, 해당 부동 소수점 값의 문자열 표현에 소수 부분이 추가됩니다. 이렇게 하면 부동 소수점 값의 문자열 표현을 정수의 문자열 표현과 구별할 수 있으므로, 문자열이 다시 파싱되더라도 계속 부동 소수점 숫자로 처리됩니다.
이 수정으로 인해
ST_GeomFromGeoJSON()는 MySQL 5.7.8 이후의 경우처럼 자체 커스텀 파서를 사용하는 대신, 다른 JSON 함수와 동일한 JSON 파서를 사용하게 됩니다. 이러한 특별 처리는ST_AsGeoJSON()가 음의 0의 소수부를 버렸기(-0.0 대신 -0) 때문에 발생했으며, 이로 인해 JSON 파서가 -0을 정수 0으로 해석하여 양의 0과 음의 0 사이의 구분을 잃었습니다. 이제ST_AsGeoJSON()이 표준 JSON 파서를 사용하므로, 음의 0을 -0.0으로 올바르게 표현하며, 따라서ST_GeomFromGeoJSON()이ST_AsGeoJSON()의 출력을 파싱할 때 음의 0을 자체적으로 명시적으로 보존해야 할 필요가 없어집니다. (Bug #88230, Bug #27028889)참조: 다음도 참조하십시오: Bug #19504183.
-
JSON:
GROUP BY쿼리의 결과에서 생성된JSON값을 삽입할 때, 삽입된 값에 이전에 해당 컬럼에 삽입된 모든 값의 연결이 때때로 포함될 수 있었습니다. (Bug #87854, Bug #26867509) -
JSON: JSON 문서에서 추출된 문자열을 인수로 사용하여 호출된 경우,
LEAD()및LAG()함수가 모든 로우에 대해 동일한 값을 반환했습니다. (Bug #87839, Bug #26848089) -
JSON:
INFORMATION_SCHEMA.COLUMN_STATISTICS테이블의 각 히스토그램에 있는 last-updated 필드의 마이크로초 부분(히스토그램이 마지막으로 업데이트된 시점을 표시함)이 히스토그램을 JSON으로 직렬화할 때 삭제되어 저장되지 않았습니다. (Bug #87833, Bug #26846289) -
JSON:
JSON_SET()문이 부분 업데이트를 사용하여JSON값을 동일한 값으로 업데이트한 경우(다시 말해, 부분 업데이트가 본질적으로NOOP였던 경우), 바이너리 diff가 생성되지 않았더라도 이 작업에 대한 논리적 diff가 생성될 수 있었습니다. 이제 이러한 경우에는 논리적 업데이트와 바이너리 diff가 모두 생성되지 않습니다. (Bug #87113, Bug #26483625) -
JSON: JSON 부분 업데이트 구현 이후, 동일한 JSON 문서가 마스터와 슬레이브에서 서로 다른 바이너리 표현을 가질 수 있었습니다. 이 문제가 발생하면, 바이너리 동일성을 사용하여 슬레이브에서 일치하는 로우를 찾는 로우 기반 복제가 실패할 수 있었습니다. 이제 비교에는 JSON 문서의 문자열 표현이 대신 사용됩니다.
또한 이 수정의 결과로, 이전보다 더 많은 경우에 업데이트를 건너뛸 수 있습니다. 이는 바이너리 표현은 변경되었지만 문서의 내용은 변경되지 않은 경우에 해당합니다. (Bug #86532, Bug #26177130)
-
Ubuntu 14.04 및 Debian 8은 더 이상 지원되지 않습니다. (Bug #27422291)
-
Undefined Behavior Sanitizer가 활성화된 32비트 플랫폼의 빌드에서, 스택 오버런 검사가 서버 종료를 일으킬 수 있었습니다. (Bug #27224961)
-
다른 세션이 공간 참조 시스템(SRS)을 사용하는 동안 서버가 해당 SRS 생성 중에 중단될 수 있었습니다. (Bug #27220467)
-
테이블 권한과 관련이 없는 권한 검사 작업 중에 권한 캐시에 대한 잠금이 불필요하게 획득되었습니다. (Bug #27197483)
-
읽기 전용
gtid_owned또는gtid_executed시스템 변수를 영속화하면 서버 시작 시 어설션 실패가 발생했습니다. 이제 이러한 변수는 더 이상 영속화할 수 없습니다. (Bug #27193853) -
플러그인 로드 및 언로드의 부적절한 처리로 인해 서버 종료가 발생할 수 있었습니다. (Bug #27151550, Bug #88589, Bug #27116827, Bug #88483)
-
일부 윈도우 함수의 오류 전파가 항상 올바르게 수행되지는 않았습니다. (Bug #27135084, Bug #27136492)
-
일부 매우 큰 값의 부정이 내부 함수에서 올바르게 처리되지 않았습니다. (Bug #27134168)
-
날짜 간격과 관련된 덧셈을 수행할 때 더 엄격한 검사를 도입했습니다. (Bug #27134148)
-
최근 도입된 SRID 및 COLUMN_STATISTICS 메타데이터 잠금이 Performance Schema에 의해 계측되지 않았습니다. (Bug #27124506)
-
파생 테이블의 이름이 테이블이 구체화되고 임시 테이블의 이름이 할당되기 전에 저장되지 않았습니다. 나중에 테이블 이름을 재설정하려고 할 때, 이로 인해 이름의 원래 값에 대한 참조가 없어 서버가 실패했습니다. (Bug #27121663)
-
OBJECT_TYPE컬럼의 인덱스를 사용한 Performance Schema 쿼리가 잘못된 결과를 반환할 수 있었습니다. (Bug #27121500) -
-DWITH_ASAN=1및-DWITH_ASAN_SCOPE=1로 컴파일하면 stack-use-after-scope 메모리 오류가 감지되었습니다. (Bug #27108794, Bug #88460) -
prepared
SELECT... INTO OUTFILE문에 대한FILE권한 검사가 올바르지 않았습니다. (Bug #27094955) -
log_error_verbosity가 3보다 작을 때 information 우선순위의 일부 메시지가 오류 로그에 기록되었습니다. (Bug #27082862) -
ha_create_table_from_engine함수가 테이블 객체를ha_create루틴에 전달하지 못했습니다. (Bug #27066335) -
사용되지 않은 윈도우 정의의 partition by 및 order by 요소가 메모리 요구 사항을 추정할 때 포함되지 않았습니다. 이는 파싱 컨텍스트(
CTX_WINDOW)를 할당하여 해결되지만, 현재 컨텍스트가CTX_NONE인 경우에만 적용됩니다. 이 수정의 일부로, 사용되지 않은 윈도우 정의는 이제 문법 및 의미 오류 검사를 받은 후 제거됩니다. (Bug #27062031) -
NULL을 생성하는ROLLUP이 있는GROUP BY가 올바르게 처리되지 않았습니다. (Bug #27060420) -
이벤트 만료 시점에 전역 autocommit이 비활성화된 Event Scheduler 이벤트로 인해 assertion이 발생했습니다. (Bug #27041552, Bug #88255)
-
문자열 값을 갖는 사용자 정의 변수의 길이 계산은 콜레이션이 변경된 경우 올바르지 않을 수 있었습니다. (Bug #27041543, Bug #88256)
-
생성할 테이블을 기존 뷰가 참조하는 경우, 비-
InnoDB테이블을 생성하려고 시도한CREATE TABLE... SELECT문에서 어설션이 발생했습니다. (Bug #27041536, Bug #88258) -
IF()함수의 인수로 사용될 때,TIMESTAMP컬럼의 값이 서로 다른 콜레이션에 대해 다르게 처리될 수 있었습니다. (Bug #27041526, Bug #88259) -
문 기반 바이너리 로깅에서
CREATE TABLE... SELECT를 사용하여BLACKHOLE테이블을 생성하면 어설션이 발생했습니다. (Bug #27041516, Bug #88260) -
디버그 빌드의 경우,
explicit_defaults_for_timestamp가 활성화된 상태에서TIMESTAMP관련 어설션이 발생할 수 있었습니다. (Bug #27041502, Bug #88261) -
LOCK TABLES하에서, foreign key가 있는 테이블에 대해 DML 문을 실행하려고 하면, 해당 문이 foreign key 관계에 있는 테이블이 잠긴 모드와 호환되지 않는 경우 assertion failure가 발생했습니다. (Bug #27041477, Bug #88264) -
LOCK TABLES문이 활성 상태인 경우,INFORMATION_SCHEMA.FILES테이블에서 선택하는 쿼리는 메타데이터 lock을 얻으려고 시도하는 중 assertion을 발생시킬 수 있었습니다. (Bug #27041452, Bug #88266) -
컴포넌트 설치가 auto-increment 처리를 올바르게 수행하지 않아, 서버 종료가 발생할 수 있었습니다. (Bug #27041374, Bug #88276)
-
big_tables=1및character_set_connection=ucs2가 설정된 경우,SHOW TABLE STATUS가 assertion을 발생시킬 수 있었습니다. (Bug #27041323, Bug #88279) -
백업 잠금이 활성화된 상태에서 바이너리 로그 파일과 릴레이 로그 파일의 제거가 잘못 허용되었습니다. (Bug #27030339, Bug #88238)
-
non-covering 보조 인덱스의 스캔에서 end-range 조건을 평가할 때, end-range 조건이 인덱싱된 가상 컬럼을 참조하는 경우
InnoDB가 때때로 인덱스에서 잘못된 컬럼을 읽었으며, 이로 인해 assertion 실패 또는 잘못된 결과가 발생할 수 있었습니다. (Bug #27010089) -
필터 규칙의
event항목에서audit_log플러그인이JSON배열로 지정된 값을 올바르게 처리하지 않았습니다. (Bug #27010045) -
날짜 값을 더할 때 integer overflow가 때때로 가능했으며, 잘못된 결과를 반환할 가능성이 있었습니다. (Bug #27004806)
-
활성
LOCK TABLES가 있는InnoDB테이블에서TRUNCATE TABLE을 실행할 때 둘 이상의 테이블 인스턴스가 잠겨 있으면 assertion이 발생했습니다. (Bug #26999526) -
NTH_VALUE()를 포함한 일부 윈도잉 함수가NULL을 반환해야 하는 모든 경우에NULL을 반환하지 않았습니다. (Bug #26975882) -
LEAST()또는GREATEST()에 전달된 시간 인수 중 하나가DATETIME타입이지만, 집계된 데이터 타입이VARCHAR또는 시간 타입이 아닌 경우,LEAST()또는GREATEST()항목은 시간 데이터 타입이 아님에도 시간 속성이 설정되었습니다. 따라서 소수 초 정밀도를 포함한LEAST()또는GREATEST()항목의 시간 속성이 올바르게 계산되지 않았고, 이로 인해 명령문 실행의 이후 시점에 실패가 발생했습니다.이 문제를 해결하기 위해, 이제
LEAST()또는GREATEST()의 인수 중 하나 이상이지만 전부는 아닌 인수가 시간 타입인 경우, 집계된 데이터 타입과 관계없이LEAST()또는GREATEST()의 데이터 타입이 임시로 시간 타입으로 설정됩니다. (Bug #26975864) -
IFNULL()는 여러 인수를 처리할 때 오류를 항상 올바르게 검사하지 않았습니다. (Bug #26975848, Bug #27062796, Bug #27062694) -
클라이언트/서버 프로토콜에 압축이 활성화된 경우, 크기가
0xFFFFFF의 배수인 논리 패킷으로 인해 연결이 끊어질 수 있었습니다. 패치를 제공해 주신 Facebook Inc.에 감사드립니다. (Bug #26974113, Bug #88092) -
여러 세션에서 플러그인을 여러 번 설치하고 제거하면 서버가 응답하지 않게 될 수 있었습니다. (Bug #26946491)
-
MySQL 8.0에서 제거된 함수를 포함하는 가상 컬럼 정의가 있는 경우, MySQL 5.7 데이터 디렉터리에서 MySQL 8.0 서버를 시작할 때 “No database selected” 오류와 함께 시작이 실패했습니다. (Bug #26945125, Bug #88040)
-
MySQL 5.7에서 8.0으로 인플레이스 업그레이드한 후 다음 오류가 발생했습니다:
--explicit-defaults-for-timestamp=0설정으로 서버를 시작하면 Invalid default value for 'cached_time' 오류가 반환되었습니다.
-
--initialize및--explicit-defaults-for-timestamp=0설정으로 서버를 시작하면 Invalid default value for 'SET_TIME' 오류가 반환되었습니다.(Bug #26944731, Bug #88039, Bug #26948678, Bug #88032)
-
공통 테이블 표현식과 윈도우 함수를 포함한 파생 테이블 또는 뷰가 있는 쿼리가 잘못된 결과를 생성했습니다. (Bug #26907753, Bug #87939)
-
--symbolic-links및--skip-symbolic-links서버 옵션(및 그와 동등한 옵션)의 사용과 관련한 사용 중단 경고가 명확해졌습니다. 서버는 더 이상--help옵션으로 호출될 때 누락된 데이터 디렉터리에 대해 경고하지 않습니다. (Bug #26898576, Bug #87913) -
VALUES()는 일부 경우에 올바르게 처리되지 않았습니다. (Bug #26881946)참조: 다음도 참조하십시오: Bug #19601973, Bug #17458914.
-
MySQL Cluster의 테이블스페이스 검색 메커니즘이 비활성화되었으며, 이로 인해 테이블이 스토리지 엔진 딕셔너리에는 존재하지만 MySQL 데이터 딕셔너리에는 존재하지 않는 경우 직렬화된 딕셔너리 정보가 데이터 딕셔너리로 가져와지지 않았습니다. (Bug #26867488)
-
디버그 빌드의 경우, 관련 생성 컬럼에 대한 검증 검사가
UPDATE문에서 누락되어 서버 종료로 이어질 수 있었습니다. (Bug #26838771) -
윈도우 함수의 경우, 윈도우가 정의되어 있었음에도 윈도우가 정의되지 않았다는 오류가 발생할 수 있었습니다. (Bug #26813454, Bug #87780)
-
구체화된 파생 테이블이 불필요한 것으로 확인되었을 때, 해당 객체를 삭제하는 루틴이 이를 일관성 없는 상태로 남겨 두었습니다. 이제 이러한 경우에는 구체화된 객체가 삭제된 후 테이블 포인터를
NULL로 설정하여 파생 테이블의TABLE_LIST객체가 일관된 상태로 남습니다. (Bug #26798989) -
뷰 내부에서 사용된
MAX()및HAVING절이 있는 쿼리에 대해 잘못된 결과가 얻어졌습니다. (Bug #26781725) -
뷰의 기반이 되는 테이블에 대한 정의 변경의 메타데이터 잠금이 해당 테이블에 대한 다른 문의 메타데이터 잠금과 일관되지 않을 수 있었습니다. (Bug #26770836)
-
MySQL 8.0에서 뷰 컬럼 이름은 64자로 제한됩니다. 더 긴 컬럼 이름을 가진 MySQL 5.7 뷰는 8.0으로 업그레이드하는 동안 유효하지 않은 것으로 표시되었습니다. 이제 그러한 뷰는 업그레이드 중 오류를 생성하며, 업그레이드가 성공하려면 먼저 적법한 컬럼 이름을 갖도록 변경되어야 합니다. (Bug #26743291, Bug #87650)
-
GET_LOCK()에 대한 동시 호출은 대기 시간이 0인 경우에도 데드락을 일으킬 수 있었습니다. (Bug #26739438, Bug #87620) -
FROM_UNIXTIME()은LAG()와 함께 사용할 때 항상 올바르게 동작하지는 않았습니다. (Bug #26739028) -
ON DUPLICATE KEY UPDATE절에BLOB값이 있는INSERT문이 제약 조건 위반으로 실패한 후, 오류를 반환할 이유가 없는 유사한 문이 서버 종료를 일으킬 수 있었습니다. (Bug #26734162) -
Performance Schema는 이제 사용 가능한 경우 원시 SQL 문 텍스트가 아니라 다시 작성된 SQL 문 텍스트를 저장합니다. (Bug #26732229)
-
window 함수를 사용한 prepared statement를 다시 실행하면 서버 종료가 발생할 수 있었습니다. (Bug #26730020)
-
테이블에 5.0 이전
DECIMAL데이터 타입을 사용하는 컬럼이 포함된 경우 MySQL 8.0으로 in-place 업그레이드하면 서버 종료가 발생했습니다. 이 데이터 타입은 지원되지 않으므로, 이제 업그레이드는 이러한 컬럼을 감지하고 in-place 업그레이드를 수행할 수 없다고 경고합니다. 영향을 받는 테이블은 덤프한 후 복원하여 업그레이드해야 합니다. (Bug #26727481) -
데이터 딕셔너리 캐시 해시 맵에서 키를 정렬하는 데 사용되는 비교 연산자가, 서로 다른 스토리지 엔진에서 사용하는 두 스토리지 엔진 전용 ID가 같다고 잘못 판단했습니다. (Bug #26723442)
-
XA 트랜잭션에 대해 Performance Schema
events_transactions_current테이블의XID_GTRID컬럼 값이 잘못 표시되었습니다. (Bug #26710081, Bug #87559) -
일부 캐릭터셋에서 사용자 정의 변수가
SHA2()에 전달되면 잘못된 결과 또는 서버 종료가 발생할 수 있었습니다. (Bug #26704451) -
LAG()및LEAD()의 잘못된NULL처리로 인해 서버 종료가 발생할 수 있었습니다. (Bug #26703246, Bug #26703156) -
세미조인에서 중복 제거를 위한 임시 테이블을 설정하는 동안 오류가 발생한 경우(예를 들어, 디스크가 가득 찼기 때문에), 서버가 적절한 오류 메시지와 함께 정상적으로 종료되지 않았습니다.
이제 임시 테이블이 성공적으로 생성되지 않는 경우 쿼리가 중단됩니다. (Bug #26679983)
-
서버가 해시 세미조인을 사용한
IN서브쿼리를 실행한 후 항상 올바르게 정리하지는 않았습니다. (Bug #26679495) -
-DWITHOUT_SERVER=ONCMake 옵션으로 빌드하면authentication_ldap_sasl_client클라이언트 측 플러그인을 임베디드 서버 라이브러리에 링크하려고 시도하여 실패했습니다. (Bug #26665217) -
MySQL 5.7에서 8.0으로 데이터 디렉터리를 생성하거나 업그레이드하는 동안, 서버가
read_only모드로 시작된 경우 Performance Schema 초기화 실패로 인해 서버 시작이 실패했습니다. 또한 Information Schema 메타데이터가 시작 시 업데이트되지 않았으며, Performance Schema 및 Information Schema 버전 정보가 스키마 테이블이 생성되었는지 확인하지 않고 저장되었습니다.데이터 딕셔너리 및 Information Schema 시스템 뷰에 사용되는 버전 관리 방식은 이제 Performance Schema 버전 관리 방식과 일관됩니다. (Bug #26636238, Bug #87436)
-
INFORMATION_SCHEMA.TABLES테이블의CREATE_OPTIONS컬럼이 올바른 정보를 표시하지 않았습니다. (Bug #26634507) -
외부 조인을 사용하고 파생 테이블이 외부 조인의 내부 테이블에서
const값을 참조하는 쿼리에 대해 잘못된 결과가 반환될 수 있었습니다. (Bug #26627181) -
업데이트할 값과 새 값이 동일한 경우
INSERT... ON DUPLICATE KEY UPDATE에 대해AFTER UPDATE트리거가 호출되지 않았습니다. (Bug #26626277, Bug #87371) -
익명 역할을
mandatory_roles시스템 변수에 할당하는 것이 잘못 허용되었습니다. 또한 이제mandatory_roles에 값을 할당하려면 전역 시스템 변수를 설정하는 데 일반적으로 필요한SYSTEM_VARIABLES_ADMIN또는SUPER권한에 더해ROLE_ADMIN권한이 필요합니다. (Bug #26576989) -
서버 시작 시
lc_messages_dir값이 유효하지 않으면 서버는 내장 오류 메시지를 사용하는 방식으로 되돌아갔지만,lc_messages또는lc_time_names가 유효하지 않은 경우에는 그렇게 하지 않았습니다. 이제 서버는 시작 시 이러한 변수 중 하나라도 유효하지 않으면 내장 메시지를 사용합니다. (Bug #26576922) -
SET DEFAULT ROLE ALL은mandatory_roles시스템 변수에 지정된 역할을 포함하지 않았습니다. (Bug #26571995) -
Windows에서 CMake는 일부 Visual Studio 버전에 대해 x64 툴체인 지원을 자동으로 추가하지 않았습니다. (Bug #26566360)
-
ORDER BY절이 있는 파생 테이블이 외부 쿼리로 병합되고,ORDER BY의 컬럼이 외부 쿼리에서도 참조되지 않는 경우 문제가 발생할 수 있었습니다. (Bug #26542829) -
스키마 SDI를 SDI B-tree에 병렬로 삽입할 때 동일한 스키마에서 테이블을 병렬로 생성하면 어설션이 발생할 수 있었습니다. (Bug #26539665, Bug #87225)
-
UMASK및UMASK_DIR환경 변수를 기본값에서 변경해도 데이터베이스 디렉터리 및 테이블 파일 접근에 영향이 없었습니다. (Bug #26529942) -
디버그 빌드의 경우, 파생 테이블 컬럼 참조의 null 허용 여부 평가가 잘못되어
CONCAT()가 어설션을 발생시킬 수 있었습니다. (Bug #26524721) -
여러 스레드가 메타데이터 Performance Schema 객체를 등록 및 등록 해제하거나, 메타데이터 잠금을 획득 및 해제하려고 동시에 시도하면 서버 종료가 발생할 수 있었습니다. (Bug #26502135)
-
Windows용 MSI 패키지가 Microsoft Visual C++ 2010 Redistributable Package가 설치된 경우 이를 감지하지 못했습니다. (Bug #26501092, Bug #87139)
-
BLOB컬럼이 포함된 테이블에 대해 윈도우 함수를 사용한 쿼리가 서버 종료를 발생시킬 수 있었습니다. (Bug #26496880) -
플러그인에 속한 영속 변수는 서버 시작 시 항상 올바르게 처리되지 않았습니다. (Bug #26495619)
-
DISINCT와ORDER BY... LIMIT를 사용하고, 범위 접근 및ORDER BY용 임시 테이블을 사용하여 실행된 쿼리에서 서버 종료가 발생할 수 있었습니다. (Bug #26483909) -
LDAP 인증 플러그인은 연결된 시스템 변수가 잘못된 값으로 설정된 경우 실패할 수 있었습니다. (Bug #26474964)
-
RHEL6 이상용 Linux RPM spec 파일은 RPM 패키지를 더 쉽게 다시 빌드할 수 있게 하는 편의 매크로를 추가하기 위해
redhat-rpm-config패키지를 설치할 것을 권장하는 주석으로 업데이트되었습니다. 패치를 제공한 Simon Mudd에게 감사드립니다. (Bug #26474153, Bug #87098) -
오류 로그가 잘못 설정되어 서버가 시작될 수 없는 경우, 문제를 설명하는 출력이 생성되지 않았습니다. (Bug #26447825, Bug #87087)
-
materialized semijoin 작업이 두 번 이상 평가되었고, 구체화에 포함된 테이블 중 하나가
const테이블(즉, 조인 타입이JT_CONST)인 경우,const테이블을 참조할 때 두 번째 구체화 중에 잘못된 데이터에 접근했습니다. (Bug #26436185) -
외부 인증 방식을 사용하는 인증 플러그인에서 비밀번호 만료 옵션이 올바르게 동작하지 않았습니다. (Bug #26435766)
-
outer join과 서브쿼리를 포함하는 쿼리에
ORDER BY를 추가하면, 서브쿼리가 0개의 로우를 반환하는 경우 서브쿼리의 컬럼에 대해 정의된 상수 값이 잘못해서 상수 값으로 승격되었습니다. (Bug #26432173) -
autocommit시스템 변수에 대해, Performance Schemavariables_info테이블은 항상VARIABLE_SOURCE컬럼을COMPILED로 보고했습니다. (Bug #26428017) -
디버그 빌드의 경우,
GEOMETRY NOT NULL컬럼에NULL을 삽입하려고 시도한INSERT IGNORE문은NULL을 변환할 유효한 값이 없기 때문에 assertion을 발생시켰습니다. 이제 이는 무시할 수 없는ER_BAD_NULL_ERROR_NOT_IGNORED에러로 처리됩니다. (Bug #26412713) -
SET PERSIST_ONLY는 변경하지 않아야 할 때 Performance Schemavariables_info테이블의VARIABLE_SOURCE컬럼을 변경했습니다. (Bug #26395134) -
서버가 파티션 이름의 최대 경로 길이를 확인하지 못했습니다. (Bug #26390632)
-
버퍼링이 있는 윈도우가 고유 인덱스에 대한 동등 조인 뒤에 오는 경우 문제가 발생했습니다. 이는 윈도우가 입력 레코드를 수정하면서, 다음에 제어가 조인으로 다시 전달될 때 새 레코드가 입력 레코드로 읽혔다고 가정했기 때문입니다. 이 문제는 이러한 경우 입력 레코드를 복원하여 해결되었습니다.
이 수정 사항은 MySQL 8.0.27에서 되돌려졌습니다.
(Bug #26389508)
참조: 다음도 참조하십시오: Bug #32820802.
-
백슬래시와 백틱이 혼합되어 포함된 식별자가 잘못 파싱될 수 있었습니다. (Bug #26372491)
-
audit_log플러그인THD객체가 잘못된 스레드 ID 정보로 생성될 수 있었으며, 이로 인해 어설션 실패가 발생했습니다. (Bug #26362452) -
column_statistics데이터 딕셔너리 테이블의HISTOGRAM컬럼은 콜레이션 번호를 나타내기 위해charset-id라는 키를 사용했습니다. 이 키는collation-id로 이름이 변경되었습니다. (Bug #26330090, Bug #86794) -
skip_name_resolve시스템 변수가 활성화된 상태로 서버를 시작하면 계정 항목의localhost가localhost가 아닌 호스트와 일치할 수 있었습니다. (Bug #26328274, Bug #26202411, Bug #86546) -
설정된 error log 서비스가 존재했지만 초기화할 수 없었던 경우, 로그 정보가 손실되었습니다. 이제 시작 시 로그 서비스가 설정되었지만 초기화할 수 없으면, 문제에 대한 진단 정보가 기본 로그 서비스로 전송되고(또는 그것이 실패하면 error stream으로 직접 전송됩니다), 서버가 종료됩니다. 런타임에 로그 서비스가 설정되었지만 초기화할 수 없으면, 진단 정보가 클라이언트로 전송됩니다. (Bug #26286871, Bug #86728)
-
Performance Schema 예제 플러그인의 설치 및 제거를 해당 플러그인과 연결된 테이블의 삭제와 동시에 수행하면 서버 종료가 발생할 수 있었습니다. (Bug #26281359)
-
slave_rows_search_algorithms시스템 변수의 값 중 하나로HASH_SCAN이 지정되었고(MySQL 8.0.2부터 기본값), row-based 복제가 적용 중인 경우, 가상 생성 필드를 포함하는 테이블에 대한 업데이트에서 assertion이 발생할 수 있었습니다. 이 문제는 검색에 사용할 해시를 생성하기 위해 가상 생성 필드의 문자열 표현을 생성할 때 발생한 오류로 인해 발생했습니다. 이 문제를 제거하기 위해 MySQL은 더 이상 가상 생성 필드에 대한 해시를 생성하지 않습니다. (Bug #26280724) -
서버가 full-text 검색을 위해 생성된 테이블이 아닌 파일에 대해
SHOW CREATE TABLE을 허용했습니다. (Bug #26271244) -
디버그 빌드의 경우, 기존 뷰에 대한
CREATE OR REPLACE VIEW가 64자를 초과하는 컬럼 이름에 대해 assertion을 발생시켰습니다. 이제 적절한 오류가 보고됩니다. (Bug #26266789) -
SET PERSIST는mysqld-auto.cnf에 기록되는 변수를 정렬하는 문제로 인해 효과가 없을 수 있었습니다. 이제 변수는 지속된 순서대로 기록됩니다. (Bug #26259671) -
GTID가 활성화된 서버에서 mysqlpump로 부분 백업을 시도하면 실패하고, 이것이 가능하지 않다고 잘못 제시하는 오류 메시지가 생성되었습니다. (이는
--set-gtid-purged옵션을 사용하여 가능합니다.) (Bug #26199978) -
GRANT GRANT OPTION ON *.* TO user는 정적 권한에 대해서는GRANT OPTION을 부여했지만 동적 권한에 대해서는 부여하지 않았습니다.REVOKE ALL... FROM CURRENT_USER()는 정적 권한은 회수했지만 동적 권한은 회수하지 않았습니다. (Bug #26191109, Bug #25658967) -
오류 로깅이 해제된 메시지를 로그에 기록하려고 시도할 수 있었으며, 이로 인해 서버가 종료되었습니다. (Bug #26188656, Bug #86562)
-
GROUP BY절이 없는 경우 집계 컬럼의 별칭에 대한HAVING조건이 최적화 과정에서 제거되었습니다. (Bug #26188578) -
ST_Crosses()는 하나 이상의 매개변수가 지오메트리 컬렉션이고 지오메트리가 교차하는지 여부를 판정하기 위해 지오메트리 컬렉션의 여러 요소를 고려해야 하는 경우 잘못된 결과를 반환할 수 있었습니다. (Bug #26188208, Bug #86559) -
MBROverlaps()가 서로 직각으로 교차하는 두 선에 대해 잘못해서 false를 반환했습니다. (Bug #26188118, Bug #86558) -
ALTER USER user DEFAULT ROLE ALL이 오류를 생성했습니다. (Bug #26174169) -
mysqldump가 큰
--where옵션 값에 대해 비정상적으로 종료되었습니다. (Bug #26171967, Bug #86496, Bug #27510150) -
집계 함수의 결과를 기준으로 파티셔닝하거나 정렬하는 윈도우가 있는 윈도우 함수를 사용하는 쿼리에서, 이 값이
NULL로 평가되는 경우 잘못된 결과가 반환되었습니다. (Bug #26164633) -
Performance Schema는 테이블 복사 알고리즘을 사용한
ALTER TABLE작업에 대해 생성된 파일 인스턴스가 삭제되지 않아 메모리 누수가 발생할 수 있었습니다. (Bug #26152751, Bug #86482) -
REPLACE를 사용한 임시 테이블 생성 실패가 일부 상황에서 이후 명령문에서 어설션을 초래할 수 있었습니다. (Bug #26126789, Bug #86422) -
mysqlpump는 테이블 구조를 확인하기 위해 실행한
SHOW CREATE TABLE문의 결과에서TABLESPACE절을 올바르게 파싱하지 못했습니다. (Bug #26116415) -
udf_example로드 가능 함수의 바이너리 파일이 바이너리 배포판에서 누락되었습니다. (Bug #26115002, Bug #29178542) -
긴
SET PERSIST문으로 인해 서버가 종료될 수 있었습니다. (Bug #26100122) -
몇몇 문자열 함수의 결과 문자열 최대 길이를 계산하는 데 잘못된 공식이 사용되었습니다:
QUOTE(),AES_DECRYPT(),WEIGHT_STRING(). 이는 예를 들어CREATE TABLE... AS SELECT... QUOTE()에 대해 생성되는 문자 컬럼의 길이에 영향을 줄 수 있었습니다. (Bug #26049942, Bug #86305) -
스키마 생성 및 제거 작업은 데이터 딕셔너리를 확인하는 대신 데이터 디렉터리 아래의 스키마 디렉터리를 확인했기 때문에 실패할 수 있었습니다. (Bug #26043994, Bug #86282)
-
SHOW PLUGINS는 종료 중인 플러그인을 처리하지 못하여 서버 종료가 발생했습니다. 이제 이 구문은 이러한 플러그인의 상태를DELETING으로 표시합니다. (Bug #26029765, Bug #86243) -
일부 구문은 다이제스트 코드에서 버퍼 오버플로를 일으킬 수 있었습니다. 패치를 제공해 준 Laurynas Biveinis 및 Roel van de Paar에게 감사드립니다. (Bug #26021187)
-
이전에는 Performance Schema 초기화에 실패하면, 구체적이지 않은 초기화 실패 경고를 오류 로그에 기록했습니다. 이제 어떤 메모리 할당이 실패했는지에 대한 더 구체적인 메시지를 출력합니다. (Bug #25996291)
-
유니크 인덱스에 인덱스 확장이 없었음에도 Optimizer가 Loose Index Scan을 선택한 경우, 유니크 인덱스가 있는 테이블에서 잘못된 결과가 발생할 수 있었습니다. (Bug #25989915, Bug #86165, Bug #26532061, Bug #87207)
참조: 이 문제는 다음의 회귀입니다: Bug #21749123, Bug #78244.
-
XA COMMIT의 경우, precommit 처리가 호출 측에서 올바르게 보고되지 않은 오류를 diagnostics area에 설정할 수 있었으며, 이로 인해 assertion이 발생했습니다. (Bug #25978684, Bug #86142) -
Performance Schema
variables_info테이블의MIN_VALUE컬럼이 32-bit big-endian 플랫폼에서 잘못된 값을 표시했습니다. (Bug #25967079) -
Optimizer가 임시 테이블과 연결된 서브쿼리를 제외할 때 메모리 누수가 발생했습니다. (Bug #25951134)
-
읽기 전용으로 간주된 뷰 또는 파생 테이블에 읽기 전용으로 인식되지 않은 중첩 참조가 있는 경우, 업데이트에 대해 assertion이 발생할 수 있었습니다. (Bug #25832861, Bug #85796)
-
서버가 자동으로 생성한 인증서 및 키 파일에 잘못된 접근 모드가 있을 수 있었습니다. (Bug #25832856)
-
Index Condition Pushdown을 사용하여 평가되는 경우,
INFORMATION_SCHEMATABLES및STATISTICS테이블에 대한 쿼리가 내부 데이터 딕셔너리 함수를 푸시다운할 수 있었으며, 그 결과 assertion이 발생했습니다. (Bug #25820175, Bug #85765) -
ST_AsText()가 해제된 메모리를 읽을 수 있었습니다. (Bug #25818451) -
사용자가 존재하는 경우
CREATE USER IF NOT EXISTS가 바이너리 로그에 기록되지 않았습니다. 이로 인해 슬레이브 서버에 사용자가 존재하지 않는 경우 일관되지 않은 복제 동작이 발생할 수 있었습니다.ALTER USER IF EXISTS에서도 유사한 문제가 발생했습니다. 불일치를 방지하기 위해, 이제 이러한 문은 바이너리 로그에 기록됩니다. (Bug #25813089, Bug #85733) -
잘못된
utf8입력 문자열로 인해 힙 버퍼 오버플로 오류가 발생했습니다. (Bug #25811623, Bug #25946444) -
경합 조건으로 인해 여러 세션에서 동시에 변수를 영속화하여 서버 종료를 유발할 수 있었습니다. (Bug #25768813)
-
플러그인은
INFORMATION_SCHEMA테이블을 생성하거나 삭제할 수 있지만, 플러그인이 언로드되거나 언로드될 때INFORMATION_SCHEMA테이블을 참조하는 뷰가 검증되지 않았습니다. (Bug #25761992, Bug #85579) -
mysql이 일부 비밀번호 관련 명령문을
.mysql_history파일에 기록했습니다. (Bug #25750609) -
내부 메모리 버퍼의 잘못된 처리로 인해 서버 종료가 발생할 수 있었습니다. (Bug #25737271)
-
GTID가 활성화된 읽기 전용 서버에서 존재하지 않거나 필터링된 테이블과 관련된
DROP TEMPORARY TABLE IF EXISTS명령문이 불필요한 트랜잭션을 바이너리 로그에 기록하고 불필요한 GTID를 생성할 수 있었습니다. 이 상황에서는 누락된 임시 테이블이 이전에 트랜잭션 테이블로 간주되어 명령문이 분할되었습니다. 이제 MySQL은 임시 테이블이 존재하는지와 해당DROP TEMPORARY TABLE명령문이 바이너리 로그에 기록되는지를 확인합니다. 그렇지 않은 경우 GTID가 생성되지 않습니다. 패치를 제공해 주신 Laurynas Biveinis에게 감사드립니다. (Bug #25656992, Bug #85258) -
MeCab 전체 텍스트 파서 플러그인이 Windows에서 로드되지 않았습니다. (Bug #25633175)
-
Performance Schema
variables_info테이블의SET_TIME컬럼이 잘못 초기화되었습니다. (Bug #25608115) -
특정
SELECT문의 내용으로 테이블을 생성하는 문을 포함한 저장 프로시저를 실행하면 메모리 누수가 발생할 수 있었습니다. (Bug #25586773) -
Performance Schema가 클라이언트 연결에 대한 최대 호스트 길이를 확인하지 못했습니다. (Bug #25510805)
-
공간 함수의 경우, 일부 집합 연산은 다른 SRID의 인수가 제공되었을 때 SRID 0인 결과를 생성했습니다. (Bug #25510403)
-
큰
--ssl-cipher값으로 인해 클라이언트 프로그램이 종료될 수 있었습니다. (Bug #25483593) -
저장 프로시저 호출을 준비하는 동안 인수 개수 확인이 누락되어 서버가 종료될 수 있었습니다. (Bug #25398451, Bug #84512)
-
재귀 공통 테이블 표현식을
UNION DISTINCT및 매우 많은 컬럼으로 처리하는 데 사용되는 임시 테이블은 이제InnoDB대신MEMORY엔진을 사용합니다. (Bug #25190109) -
MySQL
root사용자 계정의 이름이 변경된 경우,INFORMATION_SCHEMA뷰에 액세스하는 쿼리는 definer로 지정된 사용자가 존재하지 않는다는 오류를 반환했습니다. 이 오류를 방지하기 위해 새로운 예약 계정인'mysql.infoschema'@'localhost'가 이제INFORMATION_SCHEMA뷰의DEFINER입니다. (Bug #25185947, Bug #84027) -
UPDATE에 1024바이트보다 큰 기본 키를 가진 임시 테이블이 필요하고 해당 테이블이InnoDB를 사용하여 생성된 경우, 서버가 종료될 수 있었습니다. (Bug #25153670) -
SET DEFAULT ROLE은 다른 계정 관리 문과 달리 트랜잭션 방식이 아니었습니다. (Bug #25122897) -
mysqlpump가mysql시스템 데이터베이스의 덤프에gtid_executed테이블을 포함했으며, 이로 인해 덤프를 다시 로드한 후 서버를 재시작할 때gtid_executed위치가 손실되었습니다.mysqlpump는 더 이상gtid_executed테이블을 덤프하지 않습니다. (Bug #25109007) -
지오메트리 계산의 경우, 잘못된 입력 파라미터가 잘못된 결과 버퍼로 이어져 assertion이 발생하거나 서버가 종료될 수 있었습니다. (Bug #25062396)
-
IFNULL(decimal, int)은GROUP BY를 포함하고 임시 테이블을 사용해 실행된 쿼리에서 사용될 때 소수점 뒤의 한 자릿수를 잃을 수 있었습니다. (Bug #25051195, Bug #83699) -
UNION이 포함된 쿼리와 같은 일부 쿼리에서GROUP_CONCAT()의 컬럼 너비가 잘못 계산될 수 있었으며, 이로 인해group_concat_max_len이 잘못 적용되었습니다. (Bug #25050090, Bug #83667) -
Performance Schema
global_variables테이블에 대한 이벤트 감사 로깅이 개선되어, 구체화되었지만 SQL 계층에 보고되지 않은 로우에 대한 이벤트를 보고하지 않도록 했습니다. (Bug #24970428) -
ST_Buffer()는 유효한 출력 지오메트리를 생성했어야 하는 일부 입력에 대해 유효하지 않은 결과를 반환하거나 오류를 발생시킬 수 있었습니다. (Bug #24947868, Bug #26735293, Bug #25662426) -
AddressSanitizer 또는 Undefined Behavior Sanitizer가 활성화된 빌드의 경우, Performance Schema 타이머 초기화 중 0으로 나누기가 발생할 수 있었습니다. (Bug #24785784)
-
메타데이터 잠금(MDL) 서브시스템에 크게 의존하는 작업이 성능 저하를 일으켰습니다. MDL ticket 목록 순회는 많은 수의 MDL ticket이 있는 경우 시간이 많이 소요되었습니다. (Bug #24734971, Bug #83143)
-
binlog_format이ROW또는MIXED인 경우, 임시 테이블에 대한 작업은 로그에 기록되지 않습니다. 이전에는 이 규칙의 예외로, 세션 종료 시 연결이 종료될 때 해당 세션에서 열린 모든 임시 테이블에 대해DROP TEMPORARY TABLE IF EXISTS문이 로그에 기록되었습니다. 로우 기반 복제의 경우, 이 동작은 바이너리 로그에 불필요한 쓰기를 발생시켰으며, GTID가 활성화된 경우 GTID에 대한 트랜잭션 시퀀스 번호를 추가했습니다.이제 임시 테이블이 세션에서 생성될 때 바이너리 로깅 형식이 추적됩니다.
DROP TEMPORARY TABLE IF EXISTS문은 임시 테이블이 생성될 때 문 기반 형식이 적용되어CREATE TEMPORARY TABLE문이 로그에 기록된 경우에만 세션 종료 시 로그에 기록됩니다. 테이블이 생성될 때 로우 기반 또는 혼합 형식 바이너리 로깅이 사용 중이었다면,DROP TEMPORARY TABLE IF EXISTS문은 로그에 기록되지 않습니다.패치를 제공해 주신 Laurynas Biveinis에게 감사드립니다. (Bug #24670909, Bug #83003, Bug #28606948)
-
동시
INSERT,ALTER TABLE, 및DROP DATABASE작업이 교착 상태를 초래할 수 있었습니다. (Bug #24510948, Bug #82704) -
일부 조건에서
audit_log플러그인이 mutex를 재귀적으로 잠글 수 있었으며, 이로 인해 서버가 응답하지 않게 되었습니다. (Bug #24437533) -
일부 경우에는 disjunction이 있는 predicate가 있을 때에도 Optimizer가
GROUP BY쿼리에 대해 Loose Index Scan(QUICK_GROUP_MIN_MAX_SELECT)을 선택했습니다. 이는WHERE절의 조건이 둘 이상의 서로 분리된 range tree를 생성하는 경우 range scan을 수행하지 않도록 하여 수정되었습니다. (Bug #24423143) -
Optimizer가 값을 가져오기 위해 생성된 컬럼의 인덱스를 선택할 때 잘못된 결과가 발생할 수 있었습니다. (Bug #24345509, Bug #29451999)
-
이제 모든
apt플랫폼에 대해 debug symbol 패키지가 포함됩니다(이전에는 Debian 9에서만 사용할 수 있었습니다). (Bug #24008883, Bug #27990381) -
SQL_MODE=''인 경우,UNIX_TIMESTAMP(COUNT(1))은 예상된 0 대신NULL을 반환했습니다. (Bug #23529242) -
NOT NULL제약 조건이 있는 인덱스된 가상BLOB컬럼이 있는 테이블에서 로우를 삭제할 때, 삭제 중인 로우 중 하나에서 생성 컬럼 표현식이NULL로 평가되면,NULL을 해당NOT NULL동등 값으로 변환하는 작업이 올바르게 수행되지 않았습니다. (Bug #23321196)참조: 함께 참조하십시오: Bug #23037025, Bug #21345972.
-
MYSQL_GROUP_SUFFIX환경 변수를 설정해도 효과가 없었습니다. (Bug #23072792) -
생성 컬럼 평가 중 오류 처리를 위한 검사가 누락되어 서버 종료가 발생할 수 있었습니다. (Bug #23021693)
-
테이블이 비어 있는지 확인하기 위해
ALTER TABLE은 테이블 스캔을 수행했으며, 이는 비효율적입니다. (Bug #22688065) -
LOCK TABLES가 활성 상태일 때ALTER TABLE에 대한 테이블스페이스 메타데이터 잠금을 획득하지 못하면 assertion이 발생할 수 있었습니다. (Bug #22486020, Bug #79820) -
상수 표현식에 대체하려는 컬럼에 대한 참조가 포함된 경우 더 이상 상수 전파가 수행되지 않습니다. (Bug #20964700)
-
조인 버퍼링이 사용된 경우(예: block nested loop 알고리즘 사용) 왼쪽 조인이 많은 쿼리가 느렸습니다. (Bug #18898433, Bug #72854)
-
REGEXP는 문자열 표현식에서\0문자 뒤에 발생하는 일치를 찾지 못했습니다. (Bug #17541193, Bug #70470) -
집계 및
WITH ROLLUP이 포함된 뷰에서 선택하면 잘못된 Columncol_namecannot be null 오류가 발생할 수 있었습니다. (Bug #11755860, Bug #47693) -
COALESCE()는FLOAT필드의 값을 변경할 수 있었습니다. (Bug #11751705, Bug #42666) -
일부 경우에는 샘플링 사용 여부를 결정하기 위해 서버가 사용하는 로우 추정치가 부정확할 수 있었습니다. 이는 히스토그램 프로세스가 테이블의 로우 수에 대한 추정치가 최신이라고 가정했지만, 해당 추정치가 (예를 들어)
INSERT또는DELETE문에 의해 업데이트되지 않았기 때문입니다. 이제 히스토그램 프로세스는 업데이트된 로우 수를 요청합니다. (Bug #88710, Bug #27197709) -
오래 실행되는 정규식 일치를 종료할 수 없었습니다. (Bug #88676, Bug #27183583)
-
cte_max_recursion_depth를 설정하는 OptimizerSET_VAR힌트(Variable-Setting Hint Syntax 참조)가 무시되었습니다. (Bug #88594, Bug #27153338) -
range frame을 처리할 때 range frame의 첫 번째 로우가 발견되면 그 위치가 저장되지 않았습니다. 이로 인해 나중에 frame buffer에서 로우를 검색하지 못할 수 있었습니다. (Bug #88568, Bug #27149369)
-
--skip-log-bin이 활성화된 경우 서버가LOAD DATA에 의해 활성화된 트리거를 올바르게 처리하지 못했습니다. (Bug #88516, Bug #27128534)참조: 이 문제는 다음 버그의 회귀입니다: Bug #27041382.
-
XA 트랜잭션을 수행하고 뷰에 대해 동작하는 저장 프로시저가 올바르게 실행되지 않았습니다. (Bug #88326, Bug #27058931)
-
테이블에 길이가 0인 컬럼이 포함된 경우 Optimizer가 일부 경우에 쿼리가 읽는 컬럼을 담기에 너무 작은 레코드 버퍼를 할당할 수 있었습니다. (Bug #88283, Bug #27041288)
-
유효하지 않은 문법을 포함하는 트리거 뒤에 컬럼 목록을 지정하지 않은
INSERT가 이어지면, 그럼에도 새 로우를 삽입하려고 시도했습니다. (Bug #88274, Bug #27041382) -
윈도우 함수는
LAST_VALUE()와 여러ORDER BY표현식을 가지는 프레임에서 항상 올바른 결과를 생성하지는 않았습니다. (Bug #88186, Bug #27010574) -
이전 문제에 대한 수정으로 인해 결과 타입이 문자열이고 컬럼 크기가 255자(
CHAR의 최대 길이)보다 클 때마다 집계된 데이터 타입이VARCHAR로 설정되었습니다. 이로 인해 결과 타입은 문자열이지만 255자보다 긴 필드 값을 지원하는JSON같은 데이터 타입에 문제가 발생했습니다. 이제 이러한 경우 집계된 컬럼이CHAR또는BINARY타입(둘 다 내부적으로 문자열로 표현됨)이지만 그 크기가CHAR의 최대값을 초과할 때 데이터 타입이 명시적으로VARCHAR로 설정됩니다. (Bug #88073, Bug #26960106)참조: 이 문제는 다음의 회귀입니다: Bug #83895, Bug #25123839.
-
매개변수를 참조하는
ORDER BY목록이 포함된 prepared statement가 항상 올바르게 처리되지는 않았습니다. (Bug #87863, Bug #26867652) -
DENSE_RANK()은 버퍼링이 사용 중일 때 파티션의 첫 번째 로우에 대해 올바르게 작동하지 않았으며, 이는ORDER BY에 대한 캐시 비교자가 너무 이르게 초기화되었기 때문입니다. (Bug #87760, Bug #26802696) -
Optimizer는 키의 첫 번째 부분만 사용할 수 있는
ref액세스에 대해 복합 인덱스를 선택했습니다. 이 복합 키는 적합했지만 더 높은 비용으로 간주되었습니다. 이는 같은 인덱스에서ref액세스와range액세스 중에서 선택할 때, 특정 기준이 충족되면range를 선호하기 때문이며, 그 기준 중 하나는records_per_key가 매우 낮을 때 발생할 수 있는 것처럼ref액세스가 지나치게 낙관적이거나 비현실적으로 낮은 비용을 가지는 경우ref액세스를 피하도록 선택하는 것입니다. 이는range액세스의 로우 수 추정치가ref액세스의 추정치보다 더 신뢰할 수 있는 경우에도 수행되었습니다. (Bug #87613, Bug #26727773)참조: 다음도 참조하십시오: Bug #23259872.
-
저장 함수가
WHERE조건자에서 테이블 컬럼 값을 인수로 사용되었을 때 내부not_null_tables속성이 비어 있지 않은 값으로 잘못 설정되었습니다. 이 조건자가 외부 조인 작업에 적용되고 인수 중 하나가 외부 조인의 내부 테이블에서 온 경우, 이 조건자가 외부 조인을 내부 조인으로 변환하는 데 (잘못) 사용되는 경우가 있었습니다. SQL 표준에 따르면RETURNS NULL ON NULL INPUT속성을 가진 함수만 그러한 방식으로 동작해야 합니다. MySQL은 현재 이 속성을 구현하지 않으므로, 저장 함수가 더 이상RETURNS NULL ON NULL INPUT동작을 구현하지 않도록 변경되었습니다. (Bug #86922, Bug #26389402) -
컬럼의 집계를 수행하고 그 결과를
HAVING으로 필터링하는SELECT를 사용하여 정의된 뷰 또는 파생 테이블에 잘못된 데이터가 포함되었습니다. (Bug #86840, Bug #26360114) -
서버가 트리거와 생성 컬럼을 잘못 처리했습니다. (Bug #86637, Bug #26251621)
-
BLOB(또는JSON과 같이BLOB에 기반한 타입)을 반환하는 서브쿼리에 대해 결과를 그룹화하는 쿼리가 때때로 그룹 경계를 찾지 못했으며, 따라서 잘못된 결과를 반환했습니다. (Bug #78787, Bug #21974696)