MySQL 8.0 Release Note

8.0.13 변경 사항 (2018-10-22 GA)

Estimated reading: 9 minutes 82 views

공식 문서: Changes in MySQL 8.0.13 (2018-10-22, General Availability)

계정 관리 관련 사항

이제 계정 비밀번호를 변경하려는 시도를 현재 비밀번호를 지정하여 검증하도록 요구할 수 있습니다. 이를 통해 DBA는 사용자가 현재 비밀번호를 알고 있다는 증거 없이 비밀번호를 변경하지 못하도록 할 수 있습니다. 비밀번호 검증 정책은 password_require_current 시스템 변수를 사용하여 전역적으로 설정할 수 있으며, CREATE USERALTER USER 문에서 PASSWORD REQUIRE 옵션을 사용하여 계정별로 설정할 수도 있습니다. 기존의 비밀번호 관리 기능과 함께, 검증을 요구하는 새로운 기능은 DBA에게 비밀번호 관리에 대한 더 완전한 제어권을 제공합니다. 자세한 내용은 비밀번호 관리를 참조하십시오.

중요
비밀번호 검증 기능의 구현은 mysql.user 시스템 테이블 구조의 변경을 포함합니다. 이전 버전에서 이 MySQL 릴리즈로 업그레이드하는 경우, 이 시스템 데이터베이스 변경 사항을 반영하기 위해 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. 이를 수행하지 않으면 비밀번호 변경이 불가능합니다.

(WL #11544)

컴파일 관련 사항

Solaris: 이제 MySQL은 gcc를 사용하여 Solaris에서 컴파일할 수 있습니다. (버그 #27802681)

구성 관련 사항

새로운 WITH_LTO CMake 옵션은 링크 타임 최적화를 활성화할지 여부를 제어합니다. 현재는 GCC 7 및 8만 지원됩니다. (버그 #28184537, 버그 #28211382)

새로운 WITH_RAPIDJSON CMake 옵션은 번들된 RapidJSON 라이브러리 또는 시스템 RapidJSON 라이브러리로 컴파일할지 여부를 제어합니다. (버그 #28024992, 버그 #90867)

CMAKE_BUILD_TYPE CMake 옵션은 이제 RelWithDebInfo 빌드 유형과 유사하지만 디버깅 정보를 생략하여 빌드 크기를 줄이는 Release 빌드 유형을 지원합니다. (버그 #27874068, 버그 #32287863)

새로운 sql_require_primary_key 시스템 변수는 새로운 테이블을 생성하거나 기존 테이블의 구조를 변경하는 문에서 테이블에 기본 키가 있어야 한다는 요구 사항을 적용할 수 있게 합니다. 이 변수를 활성화하면 테이블에 기본 키가 없을 때 발생할 수 있는 행 기반 복제에서의 성능 문제를 방지할 수 있습니다. 예를 들어, 테이블에 기본 키가 없고 여러 행을 수정하는 업데이트 또는 삭제 작업이 있는 경우, 마스터 서버에서는 단일 테이블 스캔을 통해 이 작업을 수행할 수 있지만, 행 기반 복제를 사용할 때는 슬레이브에서 수정할 각 행에 대해 테이블 스캔이 발생합니다. 기본 키가 있으면 이러한 테이블 스캔이 발생하지 않습니다. (버그 #17468242, 버그 #69845, 버그 #17005592, 버그 #69223, WL #11807)

서버가 여러 주소에서 수신 대기할 수 있도록 bind_address 시스템 변수는 이제 단일 주소나 이름뿐만 아니라 쉼표로 구분된 IP 주소나 호스트 이름 목록을 허용합니다. 자세한 내용은 서버 시스템 변수를 참조하십시오. (WL #11652)

데이터 타입 관련 사항

MySQL은 이제 데이터 유형 지정 시 기본값으로 표현식을 사용할 수 있습니다. 여기에는 이전에 전혀 기본값을 할당할 수 없었던 BLOB, TEXT, GEOMETRY, 그리고 JSON 데이터 유형에 대한 기본값으로 표현식을 사용하는 것이 포함됩니다. 자세한 내용은 데이터 유형 기본값을 참조하십시오. (WL #9418)

사용 중단 및 제거 관련 사항

중요한 변경 사항: SET 외의 문에서 사용자 변수를 설정하는 것은 이제 사용이 중단되었습니다. 관련 문제로는 다음이 포함됩니다:

  • 사용자 변수를 포함한 표현식의 평가 순서가 정의되지 않았습니다.
  • 변수의 기본 결과 유형이 문 시작 시의 유형을 기반으로 하여, 문 내에서 하나의 유형을 가진 변수가 동일한 문에서 다른 유형의 새 값으로 할당될 때 의도하지 않은 효과가 발생할 수 있었습니다.
  • HAVING, GROUP BY, ORDER BY 절이 선택 표현식 목록에서 값이 할당된 변수를 참조할 때 예상대로 작동하지 않았습니다. 표현식이 클라이언트에서 평가되어 이전 행의 오래된 열 값이 사용될 수 있었기 때문입니다.

SELECT @var, @var:=@var+1과 같은 구문은 MySQL 8.0에서 하위 호환성을 위해 여전히 허용되지만, 향후 MySQL 버전에서 제거될 수 있습니다. (WL #12131)

InnoDB; 파티셔닝: 공유 테이블스페이스에 테이블 파티션을 배치하는 지원이 제거되었습니다. 공유 테이블스페이스에는 시스템 테이블스페이스와 일반 테이블스페이스가 포함됩니다. 공유 테이블스페이스에서 파티션을 식별하고 파일별 테이블 테이블스페이스로 이동하는 방법에 대한 정보는 업그레이드를 위한 설치 준비를 참조하십시오. (WL #11571, WL #9286)

InnoDB: CREATE TEMPORARY TABLE에서 TABLESPACE = innodb_file_per_tableTABLESPACE = innodb_temporary 구문을 사용하는 지원이 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. (WL #12179)

utf8mb3 캐릭터셋은 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 대신 utf8mb4를 사용하십시오. (WL #11109)

중첩된 주석은 지원된 적이 없으나, 이제는 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. (WL #12099)

사용 중단된 metadata_locks_cache_sizemetadata_locks_hash_instances 시스템 변수가 제거되었습니다. (WL #12212)

PAD_CHAR_TO_FULL_LENGTH SQL 모드는 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. (WL #12129)

에러 처리

이제 MySQL 클라이언트 라이브러리는 OpenSSL 오류에 대해 더 나은 오류 메시지를 반환합니다. 패치에 감사드립니다. (버그 #27855668, 버그 #90418)

이전에는 외래 키 작업에 대한 ER_NO_REFERENCED_ROW_2ER_ROW_IS_REFERENCED_2 오류 메시지가 사용자가 상위 테이블에 대한 접근 권한이 없을 때에도 상위 테이블에 대한 정보를 표시했습니다. 이 상황에 대한 오류 처리가 수정되었습니다:

  • 사용자가 모든 상위 테이블에 대한 테이블 수준 권한을 가지고 있는 경우, ER_NO_REFERENCED_ROW_2ER_ROW_IS_REFERENCED_2 오류가 이전과 동일하게 표시됩니다.
  • 사용자가 모든 상위 테이블에 대한 테이블 수준 권한을 가지고 있지 않은 경우, 보다 일반적인 오류 메시지인 ER_NO_REFERENCED_ROWER_ROW_IS_REFERENCED 메시지가 대신 표시됩니다.

예외적으로, DEFINER 권한으로 실행되도록 정의된 저장 프로그램의 경우, 권한이 평가되는 사용자는 프로그램의 DEFINER 절에 있는 사용자이며, 호출한 사용자가 아닙니다. 그 사용자가 상위 테이블에 대한 테이블 수준 권한을 가지고 있는 경우, 여전히 상위 테이블 정보가 표시됩니다. 이 경우, 저장 프로그램 작성자가 적절한 조건 처리기를 포함하여 정보를 숨길 책임이 있습니다. (버그 #19477611, WL #8910)

INFORMATION_SCHEMA 관련 사항

새로운 INFORMATION_SCHEMA 테이블이 데이터 사전 테이블에 대한 뷰로 사용할 수 있습니다:

  • VIEW_ROUTINE_USAGE는 뷰 정의에서 사용된 저장 함수를 제공합니다.
  • VIEW_TABLE_USAGE는 뷰 정의에서 사용된 테이블 및 뷰에 대한 정보를 제공합니다.

자세한 내용은 INFORMATION_SCHEMA VIEW_ROUTINE_USAGE 테이블INFORMATION_SCHEMA VIEW_TABLE_USAGE 테이블을 참조하십시오. (WL #11864)

로깅 관련 사항

호환성 변경: 이전에 시스템 로그(Windows의 이벤트 로그 및 Unix 및 Unix 계열 시스템의 syslog)로 오류 로깅을 구성하던 시스템 변수가 제거되었습니다. 적절한 경우, 제거된 시스템 변수는 log_sink_syseventlog 오류 로그 컴포넌트에서 관리하는 새로운 시스템 변수로 대체되었습니다. 다음 표는 이전 변수 이름과 새 변수 이름을 보여줍니다.

이전 시스템 변수새 시스템 변수
log_syslog_facilitysyseventlog.facility
log_syslog_include_pidsyseventlog.include_pid
log_syslog_tagsyseventlog.tag
log_syslog없음
중요
이전 시스템 변수 이름을 사용한 설치는 새 변수 이름을 사용하도록 구성을 업데이트해야 합니다. 자세한 내용은 시스템 로그로 오류 로깅을 참조하십시오.

(WL #11828)
참고: 관련 항목: 버그 #27534089 참조.

새로운 시스템 변수 log_error_suppression_listWARNING 또는 INFORMATION 심각도로 발생한 진단 항목 중 오류 로그에 기록되지 않도록 할 항목을 지정합니다. 예를 들어, 특정 유형의 경고가 자주 발생하지만 관심이 없고(따라서 오류 로그에서 원하지 않는 “소음”으로 간주될 수 있는 경우), 이제 이를 억제할 수 있습니다. (WL #11393)

계정 관리 문을 재작성하는 코드를 리팩토링하여 유지 관리 및 확장이 더 쉬워졌습니다. 이 작업으로 인해 감사, 일반, 느린 쿼리 로그에서 몇 가지 사용자에게 보이는 작은 변화가 발생했습니다:

  • 일반 텍스트 비밀번호는 '<string>' 대신 <string>으로 대체됩니다.
  • 기본 절은 사용자가 명시하지 않은 경우 작성되지 않습니다.

(WL #12007)

이전에는 여러 내부 서버 메서드에서 오류 로그에 기록된 메시지가 ER_LOG_PRINTF_MSG 오류 코드로 기록되었습니다. 이제 이러한 메시지 각각은 고유한 오류 코드로 기록됩니다.

옵티마이저 관련 사항

옵티마이저는 이제 Skip Scan 접근 방식을 지원하여, 이전에는 적용할 수 없었던 상황에서 범위 접근을 사용하여 쿼리 성능을 향상시킬 수 있습니다. 자세한 내용은 Skip Scan Range Access Method를 참조하십시오. 이 접근 방식에 기반한 패치에 감사드립니다. (버그 #26976512, 버그 #88103, WL #11322)

MySQL은 이제 컬럼 값 대신 표현식 값을 인덱싱하는 함수적 인덱스 키 파트 생성 지원을 제공합니다. 함수적 키 파트를 사용하면 JSON 값과 같이 인덱싱할 수 없는 값을 인덱싱할 수 있습니다. 자세한 내용은 CREATE INDEX 문을 참조하십시오. (WL #1075)

InnoDB 테이블에 대해 추가 절(예: WHERE 또는 GROUP BY) 없이 단일 스레드 작업에 대한 SELECT COUNT(*) FROM tbl_name 쿼리의 성능이 향상되었습니다. (WL #10398)

패키징 관련 사항

MySQL에 번들된 libevent 라이브러리가 버전 2.1.8로 업그레이드되었습니다. (버그 #28207237, 버그 #29041505, 버그 #29055011)

시스템 curl 라이브러리에 링크하지 않고 curl을 포함하는 바이너리 패키지는 이제 7.45.0 대신 curl 7.60.0을 사용합니다. (버그 #28043702)

yaSSL의 제거를 반영하여 Debian 패키징이 업데이트되었으며, 모든 빌드에서 OpenSSL이 기본 SSL 라이브러리로 사용됩니다. (버그 #28025599)

테스트 플러그인이 서버 패키지에서 테스트 패키지로 이동되었습니다. (버그 #27860172)

MySQL Router가 이제 MySQL 서버 소스 및 단일 바이너리 패키지에 포함됩니다.

Performance Schema 관련 사항

새로운 퍼포먼스 스키마 스테이지 waiting for handler commit이 추가되어 트랜잭션 커밋을 처리하는 스레드를 감지할 수 있습니다. 이 패치에 감사드립니다. (버그 #27855592, 버그 #90417)
참고: 관련 항목: 버그 #28950397 참조.

플러거블 인증

Microsoft Windows: Windows에서 MySQL Enterprise Edition 배포판은 이제 SCRAM-SHA-1 인증 방법을 사용할 수 있도록 libsasl.dllsaslSCRAM.dll Cyrus SASL 라이브러리 파일을 번들로 제공합니다. (WL #11927)

플러그인 관련 사항

이전에는 MySQL 플러그인을 C 또는 C++로 작성할 수 있었으나, 이제 플러그인이 사용하는 MySQL 헤더 파일에 C++ 코드가 포함되므로, 플러그인은 C++로 작성해야 하며 더 이상 C로 작성할 수 없습니다. (버그 #87725, 버그 #26781567)

보안 관련 사항

MySQL Enterprise Edition은 이제 데이터 마스킹 및 비식별화 기능을 제공하며, 이는 플러그인 및 로드 가능한 함수 세트를 포함하는 플러그인 라이브러리로 구현됩니다. 데이터 마스킹은 실제 값을 대체값으로 교체하여 민감한 정보를 숨깁니다. MySQL Enterprise Data Masking 및 비식별화 함수는 난독화(식별 특성 제거), 형식화된 임의 데이터 생성, 데이터 대체 또는 교체와 같은 여러 방법을 사용하여 기존 데이터를 마스킹할 수 있습니다. 예를 들어:

mysql> SET @ssn = gen_rnd_ssn();
mysql> SET @masked_ssn1 = mask_ssn(@ssn);
mysql> SET @masked_ssn2 = mask_outer(mask_inner (@ssn,4,5,'A'), 3,0,'B');
mysql> SELECT @ssn, @masked_ssn1, @masked_ssn2;
+-------------+--------------+--------------+
| @ssn        | @masked_ssn1 | @masked_ssn2 |
+-------------+--------------+--------------+
| 980-31-2838 | XXX-XX-2838  | BBB-AA-2838  |
+-------------+--------------+--------------+

자세한 내용은 MySQL Enterprise Data Masking and De-Identification을 참조하십시오. (WL #7722)

공간 데이터 지원

호환성 변경: 이전에는 ST_Area()가 Cartesian 공간 참조 시스템(SRS)을 가진 기하학적 인수만 지원했으며, 지리적 SRS를 지정한 기하학적 인수로 호출할 경우 오류가 발생했습니다. 이제 ST_Area()는 지리적 SRS를 가진 기하학적 인수를 지원하며, 평방 미터로 측정된 지구 면적을 반환합니다.

참고
공간 데이터에 있는 기하학적 값이 이제 ST_Area()에서 다르게 해석되는 경우, 이 함수를 사용하는 기존 쿼리는 이전 MySQL 버전과 다른 결과를 반환할 수 있습니다.

(WL #10726)

CREATE SPATIAL REFERENCE SYSTEM 문에서 공간 참조 시스템(SRS) 정의의 구문 분석기가 이제 유효하지 않은 구문을 더 엄격하게 거부합니다.
OGC 01-009 WKT 문법은 GEOGCS 공간 참조 시스템 정의에서 AXIS 절을 필수로 요구하지 않지만, AXIS 절이 없으면 MySQL은 정의에 축이 위도-경도 순서인지 경도-위도 순서인지를 판단할 수 없습니다. MySQL은 이제 각 GEOGCS 정의에 두 개의 AXIS 절을 포함해야 한다는 비표준 요구 사항을 적용합니다. 하나는 NORTH 또는 SOUTH, 다른 하나는 EAST 또는 WEST여야 합니다. AXIS 절의 순서는 정의가 위도-경도 순서인지 경도-위도 순서인지 결정합니다. (버그 #28186073, 버그 #28147723)

이전에는 ST_Validate()가 Cartesian 공간 참조 시스템(SRS)을 가진 기하학적 인수만 지원했으며, 지리적 SRS를 지정한 기하학적 인수로 호출할 경우 오류가 발생했습니다. 이제 ST_Validate()는 지리적 SRS를 가진 기하학적 인수를 지원합니다.

참고
공간 데이터에 있는 기하학적 값이 이제 ST_Validate()에서 다르게 해석되는 경우, 이 함수를 사용하는 기존 쿼리는 이전 MySQL 버전과 다른 결과를 반환할 수 있습니다.

(WL #11087)

MySQL은 이제 기하학적 값을 한 공간 참조 시스템(SRS)에서 다른 SRS로 변환하기 위한 ST_Transform() 공간 함수를 구현합니다. 현재는 지리적 SRS 간의 변환을 지원합니다. 자세한 내용은 Spatial Operator Functions을 참조하십시오. (WL #8684)

SQL 구문 관련 사항

호환성 변경: GROUP BY 절에서 사용되었던 ASC 또는 DESC 한정자는 더 이상 사용되지 않습니다. 이전에 GROUP BY 정렬에 의존하던 쿼리는 이전 MySQL 버전과 다른 결과를 반환할 수 있습니다. 특정 정렬 순서를 원할 경우 ORDER BY 절을 제공해야 합니다.
MySQL 8.0.12 이하 버전에서 GROUP BY 절에 ASC 또는 DESC 한정자를 사용하는 쿼리 및 저장 프로그램 정의는 수정해야 합니다. 그렇지 않으면 MySQL 8.0.13 이상 버전으로 업그레이드할 때 실패하거나, MySQL 8.0.13 이상 버전의 슬레이브 서버로 복제할 때 실패할 수 있습니다. (WL #8693)

XA 트랜잭션 관련 사항

이전에는 PREPARED 상태에 있는 XA 트랜잭션에 대한 메타데이터 잠금이 트랜잭션을 수행하는 클라이언트가 연결을 끊거나 서버가 재시작될 때 해제될 수 있었습니다. 이로 인해 한 세션이 진행 중인 다른 세션의 XA 트랜잭션에서 사용 중인 테이블을 삭제할 수 있는 등의 문제가 발생할 수 있었습니다. 이제 PREPARED 상태의 XA 트랜잭션에 대한 메타데이터 잠금은 클라이언트 연결 해제 및 서버 재시작 후에도 유지되며, XA COMMIT 또는 XA ROLLBACK이 실행될 때까지 유지됩니다. (버그 #22710164, 버그 #79940, WL #9335)

X Plugin 관련 사항

중요한 변경 사항: X 프로토콜은 이제 연결 풀링 옵션을 제공하여, 많은 연결을 열어야 하는 작은 웹 페이지나 REST API 엔드포인트 같은 애플리케이션에서 오버헤드를 줄일 수 있습니다. 새로운 mysqlx.getClient(connection, options) 작업을 사용하여 Client 객체를 반환합니다. Client 객체를 사용하면 열린 세션 작업이 풀에서 기존에 사용되지 않은 네트워크 연결을 검색하여 재설정하고 사용합니다. 세션을 닫으면 기본 연결이 사용되지 않은 상태로 표시되고 Client 객체의 연결 풀로 반환됩니다. 연결 풀은 옵션 데이터 사전을 사용하여 구성되므로, 배포된 애플리케이션은 단순히 연결 문자열을 변경하여 연결 풀링을 사용하거나 사용하지 않도록 전환할 수 있습니다. (WL #11824)

많은 세션이 열리고 닫히는 경우 여러 X Plugin 클라이언트 세션 간의 충돌을 방지하기 위해 뮤텍스 잠금이 추가되었습니다. (버그 #28637947)

X Plugin 클라이언트가 MySQL 서버에 존재하지 않는 데이터베이스를 지정하여 연결을 시도했을 때, 오류 메시지가 데이터베이스가 알려지지 않았다는 대신 액세스가 거부되었다고 표시되었습니다. 이제 올바른 오류 메시지가 반환됩니다. (버그 #28110957)

X Plugin의 정수 값을 잘못 복사하여 메모리 정렬 오류가 발생하던 문제가 수정되었습니다. (버그 #28070946, 버그 #90983)

이제 X Plugin이 기본적으로 로드 및 활성화되었으므로, 오류 로그의 기본 메시지 설정에 의해 X Plugin이 MySQL 서버에서 사용할 수 있다는 메시지가 표시되지 않았습니다. 이제 시스템 시작 시 X Plugin이 로드되었음을 확인하는 메시지가 표시됩니다. (버그 #27287340)

X 프로토콜은 이제 요청하지 않고도 관련 클라이언트에게 정보를 방송할 수 있는 기능을 제공합니다. 또한 그룹 복제와 관련된 변경 사항도 방송됩니다. 이 작업은 Mysqlx_notified_by_group_replicationMysqlx_notice_global_sent 상태 변수를 추가합니다. (WL #10655)

기능 추가 및 변경 사항

중요한 변경 사항; NDB Cluster; NDB 클라이언트 프로그램: perror에 사용되던 사용 중단된 --ndb 옵션이 제거되었습니다. 이제 NDB 오류 코드에서 오류 메시지 정보를 얻으려면 ndb_perror를 사용하십시오. (버그 #81705, 버그 #23523957)
참고: 관련 항목: 버그 #81704, 버그 #23523926.

InnoDB: innodb_fsync_threshold 시스템 변수는 운영 체제 캐시에서 디스크로 데이터를 플러시하는 임계값을 바이트 단위로 정의할 수 있게 해줍니다. 기본적으로, InnoDB가 새 데이터 파일(예: 새 로그 파일 또는 테이블스페이스 파일)을 생성할 때, 해당 파일은 디스크로 플러시되기 전에 운영 체제 캐시에 완전히 기록되며, 이로 인해 한 번에 많은 양의 디스크 쓰기 활동이 발생할 수 있습니다.
여러 MySQL 인스턴스가 동일한 스토리지 장치를 사용하는 경우, 임계값을 지정하여 더 작은, 주기적인 플러시를 강제하는 것이 유리할 수 있습니다. 예를 들어, 새 MySQL 인스턴스와 해당 데이터 파일을 생성하면 대량의 디스크 쓰기 활동이 발생하여 동일한 스토리지 장치를 사용하는 다른 MySQL 인스턴스의 성능에 영향을 미칠 수 있습니다. 임계값을 구성하면 이러한 쓰기 활동 급증을 방지할 수 있습니다. (버그 #27724600)

InnoDB: 사용자가 생성한 임시 테이블과 옵티마이저가 생성한 내부 임시 테이블은 이제 세션 임시 테이블스페이스에 저장되며, 이는 세션에 임시 테이블스페이스 풀에서 할당됩니다. 세션이 연결 해제되면 해당 임시 테이블스페이스는 잘려서 풀로 반환됩니다. 이전 릴리즈에서는 임시 테이블이 글로벌 임시 테이블스페이스(ibtmp1)에 생성되었으며, 임시 테이블이 삭제된 후에도 디스크 공간이 운영 체제로 반환되지 않았습니다.
innodb_temp_tablespaces_dir 변수는 세션 임시 테이블스페이스가 생성되는 위치를 정의합니다. 기본 위치는 데이터 디렉토리의 #innodb_temp 디렉토리입니다.
INNODB_SESSION_TEMP_TABLESPACES 테이블은 세션 임시 테이블스페이스에 대한 메타데이터를 제공합니다.
글로벌 임시 테이블스페이스(ibtmp1)는 이제 사용자가 생성한 임시 테이블에 대한 변경 사항을 롤백할 세그먼트를 저장합니다. (WL #11613)

InnoDB: InnoDB의 데이터 저장 암호화 기능은 이제 일반 테이블스페이스를 지원합니다. 이전에는 테이블별 테이블스페이스만 암호화할 수 있었습니다. 일반 테이블스페이스의 암호화를 지원하기 위해 CREATE TABLESPACEALTER TABLESPACE 구문이 ENCRYPTION 절을 포함하도록 확장되었습니다.
INFORMATION_SCHEMA.INNODB_TABLESPACES 테이블에는 테이블스페이스가 암호화되었는지 여부를 나타내는 ENCRYPTION 열이 추가되었습니다.
일반 테이블스페이스 암호화 작업을 모니터링할 수 있도록 stage/innodb/alter tablespace (encryption) 성능 스키마 스테이지 인스트루먼트가 추가되었습니다. (WL #9286)

복제: group_replication_member_expel_timeout 옵션이 추가되어 응답하지 않는 멤버를 그룹에서 제외하기 전에 그룹이 대기할 시간을 정의할 수 있습니다. 이 옵션을 통해 멤버와의 연결이 불안정한 경우 추방 프로세스를 구성할 수 있습니다. (WL #11570)

그룹 복제: 그룹의 최대 합의 인스턴스 수를 실시간으로 확인하고 구성할 수 있습니다. 이 최대치는 그룹의 이벤트 지평선으로 불리며, 시스템이 병렬로 실행할 수 있는 최대 합의 인스턴스 수입니다. 이를 통해 그룹 복제 배포의 성능을 미세 조정할 수 있습니다.
런타임 시 그룹의 이벤트 지평선 값을 확인하려면 다음 문을 실행하십시오:

SELECT group_replication_get_write_concurrency()

최대 쓰기 합의 인스턴스를 설정하려면 다음과 같이 문을 실행하십시오:

SELECT group_replication_set_write_concurrency(instances);

instances는 합의를 위해 사용되는 최대 인스턴스 수입니다.
자세한 내용은 Using Group Replication Group Write Consensus를 참조하십시오. (버그 #27260096, WL #11512)

그룹 복제: 이제 그룹을 실행 중인 상태에서 멤버를 중지하지 않고도 그룹의 구성을 변경할 수 있습니다. 이 기능은 이 버전의 플러그인과 함께 설치되는 로드 가능 함수에 의존하며, 그룹의 모든 멤버가 이러한 함수를 설치해야 합니다. 함수를 사용하려면 온라인 멤버에 연결하고 SELECT function_name; 문을 실행하십시오.
group_replication_set_as_primary() 함수를 사용하여 단일 기본 그룹에서 특정 멤버를 새 기본으로 선출하도록 하여 일반적인 선출 프로세스를 무시할 수 있습니다. 자세한 내용은 Changing the Primary를 참조하십시오.
또한, 그룹이 온라인 상태일 때 단일 기본 모드와 다중 기본 모드 간에 모드를 변경할 수 있습니다. 온라인 그룹의 모드를 변경하려면 다음 옵션 중 하나를 선택하십시오:

자세한 내용은 Changing the Group Mode를 참조하십시오. (WL #10378)

Solaris: Solaris에서 이제 MySQL을 Developer Studio 12.6으로 빌드할 수 있습니다. (버그 #27055190, 버그 #88316, 버그 #28165246, 버그 #91214)

데이터 잘림 테스트가 다시 작성되어 정의되지 않은 동작을 피하도록 수정되었습니다. (버그 #28255956, 버그 #91445)

부동 소수점 값에 대한 범위 초과 확인이 개선되었습니다. (버그 #28225635)

서버가 시작하는 동안 실행하는 업그레이드 확인이 이제 파티션된 InnoDB 테이블이 공유 테이블스페이스를 사용하지 않도록 검증합니다. (버그 #28204431)

이전에는 mysys 라이브러리의 I/O 캐시에서 수행된 파일 I/O가 계측되지 않아, 특히 바이너리 로그 인덱스 파일에 대한 성능 스키마에서 보고된 파일 I/O 통계에 영향을 미쳤습니다. 이제 이 I/O가 계측되어 성능 스키마 통계가 정확하게 보고됩니다. Yura Sorokin의 기여에 감사드립니다. (버그 #27788907, 버그 #90264)

메모리 내 권한 구조에서 사용자 계정 항목을 찾는 성능이 향상되었습니다. Eric Herman의 기여에 감사드립니다. (버그 #27772506, 버그 #90244)

mysqld –initialize가 완료되지 않았지만 사용 불가능한 데이터 디렉토리를 생성하는 경우, 이제 해당 데이터 디렉토리가 사용할 수 없으며 안전하게 제거할 수 있다는 메시지를 표시합니다. (버그 #27675647)

이제 단일 스레드 또는 다중 스레드 슬레이브에서 개별 적용자 스레드의 트랜잭션 재시도에 대한 성능 스키마 계측이 제공됩니다. 이전에는 성능 스키마 테이블 replication_applier_status_by_worker가 적용자 스레드를 중지시킨 오류에 대한 정보만 표시했으며, 트랜잭션이 결국 적용되기 전에 발생한 일시적인 오류에 대해서는 표시하지 않았습니다. 이 정보를 통해 복제 슬레이브 또는 그룹 복제 멤버에서 복제 지연을 유발하는 일시적인 오류를 식별할 수 있습니다.
성능 스키마 replication_applier_status_by_worker 테이블에 다음 8개의 새 열이 추가되었습니다:

  • LAST_APPLIED_TRANSACTION_RETRIES_COUNT – 마지막으로 적용된 트랜잭션이 첫 시도 이후 작업자에 의해 재시도된 횟수입니다. 트랜잭션이 첫 시도에서 성공했다면, 이 수치는 0입니다.
  • LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER – 마지막으로 트랜잭션 재시도를 유발한 일시적인 오류의 오류 번호입니다.
  • LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE – 마지막으로 트랜잭션 재시도를 유발한 일시적인 오류의 메시지 텍스트입니다.
  • LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP – 마지막으로 트랜잭션 재시도를 유발한 일시적인 오류의 타임스탬프로, 'YYYY-MM-DD hh:mm:ss[.fraction]' 형식입니다.
  • APPLYING_TRANSACTION_RETRIES_COUNT – 현재 적용 중인 트랜잭션이 지금까지 재시도된 횟수입니다. 트랜잭션이 첫 시도에서 성공했다면, 이 수치는 0입니다.
  • APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER – 현재 트랜잭션 재시도를 유발한 마지막 일시적인 오류의 오류 번호입니다.
  • APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE – 현재 트랜잭션 재시도를 유발한 마지막 일시적인 오류의 메시지 텍스트입니다.
  • APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP – 현재 트랜잭션 재시도를 유발한 마지막 일시적인 오류의 타임스탬프로, 'YYYY-MM-DD hh:mm:ss[.fraction]' 형식입니다.

기존 열 APPLYING_TRANSACTION_START_APPLY_TIMESTAMP는 더 이상 트랜잭션이 재시도될 때마다 재설정되지 않으며, 이제 작업자가 트랜잭션을 처음 적용하려 시도한 시점의 타임스탬프를 유지합니다. (WL #9131)

이전에는 GTIDs를 사용할 때(enforce_gtid_consistency 시스템 변수가 ON으로 설정된 경우) 트랜잭션, 프로시저, 함수 또는 트리거 내에서 CREATE TEMPORARY TABLEDROP TEMPORARY TABLE 문을 사용할 수 없었습니다. GTIDs가 활성화된 상태에서 이러한 문을 사용할 수 있었지만, 트랜잭션 외부에서만 가능했고 autocommit=1일 때만 사용할 수 있었습니다.
MySQL 8.0.13부터는 binlog_formatROW 또는 MIXED로 설정된 경우 이 제한이 제거되었습니다. 행 기반 로깅이 사용되는 경우, GTIDs가 활성화된 상태에서 트랜잭션, 프로시저, 함수 또는 트리거 내에서 이제 CREATE TEMPORARY TABLEDROP TEMPORARY TABLE 문을 사용할 수 있습니다. binlog_formatSTATEMENT로 설정된 경우 제한이 계속 적용됩니다. 이러한 동작 차이로 인해 이제 런타임에서 binlog_format 설정을 변경할 때 추가적인 제한이 적용됩니다:

  • 세션에 열려 있는 임시 테이블이 있으면 세션에 대해 복제 형식을 변경할 수 없습니다(SET @@SESSION.binlog_format).
  • 복제 채널에 열려 있는 임시 테이블이 있으면 전역적으로 복제 형식을 변경할 수 없습니다(SET @@GLOBAL.binlog_format 또는 SET @@PERSIST.binlog_format).
  • 복제 채널 적용자 스레드가 현재 실행 중이면 전역적으로 복제 형식을 변경할 수 없습니다(SET @@GLOBAL.binlog_format 또는 SET @@PERSIST.binlog_format).

이러한 경우에 복제 형식을 전환하려고 하면(또는 현재 복제 형식을 설정하려고 하면) 오류가 발생합니다. 그러나 PERSIST_ONLY(SET @@PERSIST_ONLY.binlog_format)를 사용하여 복제 형식을 언제든지 변경할 수 있습니다. 이 작업은 런타임 전역 시스템 변수 값을 수정하지 않으며, 서버 재시작 후에만 적용됩니다.
binlog_formatROW 또는 MIXED로 설정된 경우, CREATE TEMPORARY TABLEDROP TEMPORARY TABLE 문이 바이너리 로그에 기록되지 않으며 슬레이브로 복제되지 않습니다. 이러한 문이 포함된 트랜잭션에서 문이 제거되어 트랜잭션이 비어 있는 경우, 해당 트랜잭션은 바이너리 로그에 기록되지 않습니다. 이러한 문이 포함된 트랜잭션이 롤백되는 경우, 임시 테이블의 생성 또는 삭제가 롤백되지 않았다는 경고 메시지가 표시됩니다. (WL #8872)

MySQL 서버의 바이너리 로깅 코드가 리팩터링되어 바이너리 로그 및 릴레이 로그의 이벤트에 액세스하기 위한 새로운 내부 인터페이스가 생성되었습니다. 새로운 인터페이스는 바이너리 로깅의 쓰기 및 읽기 프로세스를 입력 및 출력 스트림으로 분리하고, 바이너리 로그 이벤트를 파일에 쓰는 프로세스와 이벤트 캡처 및 검색 프로세스를 분리합니다. 논리적 바이너리 로그 파일은 스토리지 계층 작업을 래핑하는 데 사용됩니다.
새로운 내부 인터페이스 덕분에 MySQL 서버는 표준 바이너리 로그 또는 릴레이 로그 파일 외에도 바이너리 로그 이벤트를 캐시 또는 메모리 버퍼에 저장하는 등 대체 스토리지 방법을 사용할 수 있습니다. 예를 들어, 그룹 복제는 새로운 인터페이스를 사용하여 이벤트를 메모리 버퍼 및 트랜잭션 메시지로 직접 직렬화하여 그룹 내 트랜잭션을 조정합니다. 또한 mysqlbinlog는 이제 표준 입력에서 바이너리 로그 이벤트를 읽는 데 이 인터페이스를 사용합니다.
다음 기존 오류 메시지는 새로운 내부 인터페이스로 인해 사용되지 않게 되었습니다:

  • ER_BINLOG_CANT_OPEN_LOG
  • ER_BINLOG_CANT_CREATE_CACHE_FOR_LOG
  • ER_BINLOG_ERROR_GETTING_NEXT_LOG_FROM_INDEX
  • ER_RPL_RECOVERY_ERROR_FREEING_IO_CACHE
  • ER_GRP_RPL_REINIT_OF_INTERNAL_CACHE_FOR_READ_FAILED
  • ER_GRP_RPL_APPENDING_DATA_TO_INTERNAL_CACHE_FAILED
  • ER_GRP_RPL_REINIT_OF_INTERNAL_CACHE_FOR_WRITE_FAILED
  • ER_GRP_RPL_FAILED_TO_CREATE_COMMIT_CACHE
  • ER_GRP_RPL_REINIT_OF_COMMIT_CACHE_FOR_WRITE_FAILED

(WL #10956)

TempTable 스토리지 엔진은 이제 바이너리 대용량 객체(BLOB) 유형의 컬럼을 저장할 수 있습니다. 이 향상은 BLOB 데이터를 포함하는 임시 테이블을 사용하는 쿼리의 성능을 향상시킵니다. 이전에는 BLOB 데이터를 포함하는 임시 테이블이 internal_tmp_disk_storage_engine으로 정의된 디스크 기반 스토리지 엔진에 저장되었습니다. (WL #11452)

MySQL 서버의 바이너리 로그 이벤트 역직렬화 코드는 복제 중 또는 mysqlbinlog에서 바이너리 로그 체크섬이 사용되는지 여부에 관계없이 손상되거나 잘못된 이벤트 데이터를 식별하고 복원력 있게 처리할 수 있도록 리팩터링되었습니다. (WL #11567)

이전에는 RENAME TABLE을 실행하려면 LOCK TABLES로 잠긴 테이블이 없어야 했습니다. 이제 WRITE 잠금이 걸린 테이블이나 다중 테이블 이름 변경 작업에서 이전 단계의 WRITE 잠금이 걸린 테이블을 이름 변경할 수 있습니다. (WL #9826)

버그 수정

InnoDB; 파티셔닝: .frm 파일을 참조하던 오래된 InnoDB 핸들러 및 파티셔닝 코드가 제거되었습니다. 이제 더 이상 필요하지 않습니다. (버그 #27995316)

InnoDB: DROP TABLE 작업 중에 어설션이 발생했습니다. Memcached API를 통해 테이블에 액세스하던 스레드가 테이블을 해제하기 전에 메타데이터 잠금을 해제했습니다. (버그 #28531148)

InnoDB: LOB 참조에서 being_modified 비트가 설정되었지만, 해당 비트 수정이 로그되지 않아 어설션 실패가 발생했습니다. (버그 #28443837)

InnoDB: 윈도우 함수가 옵티마이저가 내부 임시 테이블을 위해 InnoDB 스토리지 엔진을 사용할 때 잘못된 결과를 반환했습니다. (버그 #28430650)

InnoDB: 서버 시간을 이전 시간으로 조정하면 주기적인 리두 플러시가 누락되었습니다. (버그 #28430358, 버그 #90670)

InnoDB: 기본 키를 추가하는 ALTER TABLE 작업에서 세그멘테이션 오류가 발생했습니다. (버그 #28395278)
참고: 이 문제는 버그 #27753193의 회귀 문제입니다.

InnoDB: ARM 64비트에서 성능을 최적화하기 위해 ReadView::complete() 함수를 제거하고 작업을 다른 함수로 분할하여 조건부 검사를 제거했습니다. (버그 #28385211, 버그 #91759)

InnoDB: 남아 있던 thread_mutex 코드가 InnoDB 소스 코드 파일에서 제거되었습니다. (버그 #28363673, 버그 #91678)

InnoDB: Microsoft Visual Studio 2017로 InnoDB를 컴파일할 때 발생한 경고를 제거하기 위해 형식 변경이 구현되었습니다. (버그 #28338720)

InnoDB: 공유 인덱스 잠금을 나타내기 위해 사용된 B-트리 플래그가 공유-독점 인덱스 잠금을 나타내는 데 사용될 때 잘못된 어설션이 발생했습니다. (버그 #28317172)

InnoDB: Sharp 체크포인트 메커니즘이 현재 사용 가능한 LSN에 대한 체크포인트 요청 시 더 이상 더티 페이지의 사전 플러싱을 강제하지 않습니다.
이제 로그 체크포인터 스레드는 스레드당 로그의 여유 공간을 나타내는 동시성 여유분을 고려하여 다음 체크포인트 쓰기가 필요한지 여부와 페이지 클리너를 깨워 더티 페이지의 동기 플러시를 강제할지 여부를 결정합니다. 페이지 클리너 스레드는 더티 페이지를 플러시할지 여부와 몇 개의 페이지를 플러시할지 결정할 때 동시성 여유분을 고려합니다. (버그 #28297462)

InnoDB: 잘못된 디버그 충돌 지점이 트랜잭션 타임아웃을 발생시켜 테스트 실패가 일어났습니다. (버그 #28295814)

InnoDB: InnoDB 오류 메시지 형식이 수정되어 중복된 텍스트가 제거되었습니다. (버그 #28289789)

InnoDB: 불필요한 메모리 해제 및 할당 반복이 Windows에서 JSON 성능 저하를 유발했습니다. (버그 #28278737)

InnoDB: InnoDB가 외래 키 제약에 사용된 인덱스를 인플레이스 ALTER TABLE 문을 통해 삭제할 수 있도록 잘못 허용했습니다. 이제 이 작업은 SQL 계층에서 차단됩니다. (버그 #28268875)

InnoDB: 하드웨어 최적화 체크섬을 계산할 때마다 하드웨어 지원을 확인하지 않도록 assert가 디버그 전용 assert로 전환되었습니다. (버그 #28267334, 버그 #91485)

InnoDB: Contention-Aware Transaction Scheduling(CATS)을 읽기 잠금 해제 기능과 결합한 패치가 갭 잠금이 대기 중인 트랜잭션에 잠금을 부여하지 않고 제거되도록 하여 트랜잭션 타임아웃이 발생했습니다. (버그 #28261530)
참고: 이 문제는 버그 #28261530의 회귀 문제입니다.

InnoDB: 리두 양이 적을 때 log_checkpointer 스레드가 새로운 체크포인트를 제때 기록하지 못했습니다. (버그 #28220222)

InnoDB: MySQL 5.7에서 MySQL 8.0으로의 인플레이스 업그레이드 중 외래 키와 관련된 테이블을 캐시에서 제거하려고 시도하여 서버가 종료되었습니다. 업그레이드 프로세스가 끝날 때, FULLTEXT 인덱스를 가진 테이블이 외래 키 관계를 확인하지 않고 제거 대상으로 표시되었습니다. (버그 #28212734, 버그 #91325)

InnoDB: 성능 스키마 및 INFORMATION_SCHEMA 테이블 열의 형식이 수정되었습니다:

이전 형식은 테이블 잠금의 경우 trx_id:table_id, 레코드 잠금의 경우 trx_id:space_id:page_no:heap_no였습니다. 새로운 형식은 테이블 잠금의 경우 trx_immutable_id:table_id:lock_immutable_id, 레코드 잠금의 경우 trx_immutable_id:space_id:page_no:heap_no:lock_immutable_id입니다.
lock_immutable_idtrx_immutable_id는 각각 잠금 또는 트랜잭션의 수명 동안 변경되지 않으며 다른 인스턴스 객체 ID와 고유한 64비트 값입니다. (버그 #28176910)

InnoDB: 성능 스키마 data_locks 테이블의 LOCK_MODE 열에서 사용되는 허용된 잠금 모드 설명자의 목록이 REC_NOT_GAP, INSERT_INTENTION, PREDICATE, PRDT_PAGE를 포함하도록 확장되었습니다. REC_NOT_GAP은 레코드 전용 잠금을 나타냅니다. INSERT_INTENTION은 삽입 의도 잠금을 나타냅니다. PREDICATEPRDT_PAGE 설명자는 공간 인덱스 잠금을 나타냅니다. (버그 #28176805)

InnoDB: macOS에서 lower_case_table_names=2 설정 시 테이블 이름이 소문자로 비교되지 않아 서버를 재시작한 후 불안정성이 발생했습니다. (버그 #28170699, 버그 #91204)

InnoDB: InnoDB 소스 코드에서 상수 값을 정의하는 매크로가 상수 표현식으로 변경되었습니다. (버그 #28152926)

InnoDB: 커밋 중에 트랜잭션이 롤백되지 않도록 하는 플래그가 더 일찍 설정되어, 높은 우선순위의 트랜잭션이 커밋 중인 트랜잭션을 중단할 수 있는 시나리오를 방지했습니다. (버그 #28140462)

InnoDB: 테이블의 기본 키를 스캔하는 쿼리가 예상된 결과를 반환하지 못했습니다. (버그 #28104394, 버그 #91032)

InnoDB: 불필요한 헤더 파일 포함이 InnoDB 소스 코드 파일에서 제거되었습니다. (버그 #28086759)

InnoDB: 리두 로그에서 사용 가능한 공간이 부족해 로그 기록자가 멈춘 것처럼 보이는 현상이 서버 종료를 초래했습니다. (버그 #28072385, 버그 #90993)

InnoDB: 잠금 대기 중 쿼리 중단이 오류를 일으켰습니다. (버그 #28068293)

InnoDB: MySQL 5.7에서 MySQL 8.0으로 업그레이드한 후 잘못된 경고가 undo 테이블스페이스 ID가 undo 테이블스페이스 범위에 포함되지 않았다고 표시되었습니다. MySQL 5.7 설치가 별도의 undo 테이블스페이스를 사용하도록 구성된 경우 경고가 발생했습니다. (버그 #28060337)

InnoDB: 불완전한 클론된 데이터 디렉토리에서 시작 실패 시 오류 메시지가 개선되었습니다. (버그 #28032131)

InnoDB: XA COMMIT 작업 중에 세그멘테이션 오류가 발생했습니다. (버그 #27995891)

InnoDB: TempTable 스토리지 엔진 소스 코드에서 사용되지 않는 코드가 제거되었습니다. (버그 #27978968)

InnoDB: 생성된 열에 정의된 보조 인덱스를 업데이트할 때 인덱스 레코드가 발견되지 않았습니다. (버그 #27968952)

InnoDB: IF 조건에서 잘못된 부정 연산자가 사용되어 Contention-Aware Transaction Scheduling(CATS) 알고리즘이 테이블 잠금에 사용되었습니다. (버그 #27944920)
참고: 이 문제는 버그 #27572937의 회귀 문제입니다.

InnoDB: 온라인 ALTER TABLE 작업의 일부로 적용된 업데이트 로그가 보조 인덱스를 업데이트할 때 이전 행의 생성된 열 값을 고려하지 않았습니다. (버그 #27921932)

InnoDB: 버퍼 풀 메모리 할당이 성능 스키마 memory/innodb/buf_buf_pool 통계에 완전히 반영되지 않았습니다. (버그 #27917595, 버그 #90561)

InnoDB: 외래 키 제약과 관련된 지원되지 않는 DDL 작업이 어설션을 발생시켰습니다. (버그 #27912873)

InnoDB: 검색 조건과 일치하는 잠금이 둘 이상일 때 잘못된 잠금을 해제할 수 있는 잠금 관련 디버그 어설션 오류가 발생했습니다. (버그 #27898384)

InnoDB: 온라인 ALTER TABLE 작업의 준비 단계에서 중단된 인덱스를 제거하는 함수가 변경 사항을 기록하지 않았습니다. (버그 #27879325)

InnoDB: MySQL 5.7에서 테이블이 할당되지 않은 상태로 생성된 일반 테이블스페이스가 MySQL 8.0으로 업그레이드할 때 실패를 초래했습니다. (버그 #27877485)

InnoDB: 동시에 수행된 undo 테이블스페이스 잘림 및 마스터 키 회전 작업이 어설션을 발생시켰습니다. (버그 #27872369)

InnoDB: 트랜잭션이 뮤텍스를 보유하고 있는지 여부를 나타내는 불리언 마커가 올바른 위치에 배치되지 않았습니다. (버그 #27870035)

InnoDB: 삭제된 테이블에 대한 외래 키 검사가 세그멘테이션 오류를 발생시켰습니다. (버그 #27804668)

InnoDB: B-트리 일괄 로드 작업이 페이지를 부분적으로 초기화된 상태로 남길 수 있었습니다. (버그 #27802098)

InnoDB: NUMA가 활성화된 운영 체제에서 Docker 컨테이너 내부에서 서버를 시작할 때 “mbind: Operation not permitted” 오류가 발생했습니다. (버그 #27792853)

InnoDB: 파티션된 테이블의 TABLE_ID 값이 데이터 사전의 스토리지 엔진 전용 데이터 필드에 저장될 때 ALTER TABLE ... PARTITION 작업 후 적절하게 조정되지 않았습니다. (버그 #27784462)

InnoDB: 서버가 “log writer overwriting data after checkpoint – waited too long” 오류로 중단되었습니다. (버그 #27779266)

InnoDB: innodb_flush_log_at_trx_commit=2 설정 시, log_flusher 스레드가 innodb_flush_log_at_timeout 설정 값과 동일한 타임아웃 기간으로 이벤트를 대기하여 초기화 지연이 발생할 수 있었습니다. (버그 #27762596)

InnoDB: OPTIMIZE TABLE 작업 중 어설션이 발생했습니다. (버그 #27753193)

InnoDB: 교착 상태로 인해 트랜잭션이 롤백될 때 디버그 빌드에서 어설션 실패가 발생했습니다. 트랜잭션 롤백 중에 데이터 사전에 액세스하기 위한 부착 가능한 트랜잭션의 시작은 예상되지 않았습니다. (버그 #27729974)

InnoDB: innodb_flush_log_at_trx_commit=0 설정과 바이너리 로그 활성화 시, DDL 작업의 커밋 단계 동안 리두 로그가 예상대로 플러시되지 않았습니다. (버그 #27691035)

InnoDB: REDUNDANT 또는 COMPRESSED 행 형식 및 READ COMMITTED 격리 수준에서 LOB 값의 접두사와 외부 부분만 반환되어 JSON 문서가 손상된 것으로 보일 수 있었습니다. LOB 값 접두사가 없는 경우, 다른 필드에 대한 새 값과 함께 이전 LOB 값이 반환되어 데이터 불일치가 발생할 수 있었습니다. (버그 #27624990)

InnoDB: 주기적 체크포인트 소유권이 마스터 스레드에서 로그 체크포인터 스레드로 이동한 후 주기적 체크포인트를 일시 중지하는 디버그 옵션이 더 이상 사용되지 않게 되었습니다. 이 디버그 옵션은 주기적 체크포인트를 일시 중지하는 다른 방법으로 대체되었습니다. (버그 #27588328)

InnoDB: 공간 참조 식별자(SRID)가 있는 열에 공간 인덱스가 정의된 테이블에 대한 트랜잭션에서 다른 트랜잭션이 업데이트를 선택한 영역에 삽입할 수 있었습니다. (버그 #27577612)

InnoDB: 테이블 이름 바꾸기 작업 중 외래 키 제약 이름이 중복되어 이후 쿼리 실행 중 오류가 발생했습니다. (버그 #27545888)

InnoDB: 직렬화된 사전 정보(SDI) 삭제 실패가 어설션을 발생시켰습니다. (버그 #27493634)

InnoDB: LOB 정리 또는 롤백 중에 대용량 객체(LOB) 인덱스 항목을 해제한 후 서버 종료가 발생했습니다. (버그 #27419474)

InnoDB: 저장 프로시저에서 문 실행 전에 호출되는 함수에서 trx->lock.start_stmt에 대한 읽기 및 쓰기 작업이 뮤텍스로 보호되지 않았습니다. (버그 #27325898)

InnoDB: INFORMATION_SCHEMA.FILESINFORMATION_SCHEMA.INNODB_TABLESPACES 테이블이 MySQL 인스턴스에 있는 실제 undo 테이블스페이스를 표시하지 않았습니다. 기본 undo 테이블스페이스 두 개만 표시되었습니다. (버그 #26820406)

InnoDB: 온라인 로그의 길이를 결정하는 REDUNDANT 행 형식 계산 불일치로 인해 DDL 작업 중에 오류가 발생했습니다. (버그 #26375771)

InnoDB: innodb_undo_log_truncate를 활성화하면 트랜잭션 처리 성능에 부정적인 영향을 미쳤습니다. 이제 undo 테이블스페이스 잘림 작업 중 두 번의 체크포인트를 수행하는 대신 테이블스페이스 파일에 속한 페이지가 디스크에서 플러시됩니다. (버그 #26322656)

InnoDB: 동일한 행의 여러 버전이 있을 때 보조 키에서 읽기와 관련된 성능을 개선하기 위해 도우미 클래스가 도입되었습니다.
기여해주신 Domas Mituzas에게 감사드립니다. (버그 #25540277, 버그 #84958)

InnoDB: 성능 스키마 wait/io/file/innodb/innodb_temp_file 인스트루먼트가 보고한 Innodb Merge Temp 파일의 위치가 잘못되었습니다. (버그 #21339079, 버그 #77519)

파티셔닝: 잘못된 파티션 정의로 인해 CREATE TABLE ... PARTITION BY ... 문이 실패할 경우, 서버는 PARTITION 절에서 오류가 발생하기 전에 생성된 파티션 파일을 제거하지 않았습니다. (버그 #27798708)
참고: 관련 항목: 버그 #88043, 버그 #26945644.

파티셔닝: 테이블스페이스가 삭제된 후 innodb_file_per_table=1로 생성된 파티션 테이블에서 FLUSH TABLES FOR EXPORT을 수행할 수 있었습니다. 이제 이 작업을 시도하면 ER_TABLESPACE_DISCARDED 오류가 발생합니다. (버그 #90545, 버그 #27903881)
참고: 관련 항목: 버그 #80669, 버그 #22899690.

파티셔닝: 파티션된 InnoDB 테이블에 대한 업데이트에서 불필요한 행 잠금이 적용되었습니다. (버그 #87253, 버그 #26553164)

복제: 복제 슬레이브가 START SLAVE 문에 의해 다시 시작될 때, 단일 스레드 모드에서 작동하는 슬레이브에서 성능 스키마 테이블 replication_applier_status_by_workerAPPLYING_TRANSACTION로 시작하는 열이 이제 초기화됩니다. 이러한 열은 다중 스레드 슬레이브에서는 항상 초기화되었는데, 기존 작업자 스레드가 해당 문에 의해 종료되었고 정보를 유지할 수 없었기 때문입니다. 이제 이 동작이 단일 스레드 슬레이브에서도 표준화되었습니다. (버그 #28248026)

복제: 다중 스레드 복제 슬레이브가 중지된 후 slave_parallel_workers 값을 설정하여 단일 스레드 슬레이브로 변경하고 다시 시작한 경우, 성능 스키마 테이블 replication_applier_status_by_worker가 이전 모니터링 정보가 지워지지 않아 무관한 타임스탬프를 표시했습니다. (버그 #28191382)

복제: binlog_group_commit_sync_delay 시스템 변수가 디스크로 트랜잭션을 동기화하는 시간을 지연시키도록 설정되고, binlog_group_commit_sync_no_delay_count 시스템 변수가 트랜잭션 수를 설정한 경우, 지정된 시간이 경과하기 전에 지정된 트랜잭션 수에 도달하면 대기 절차에서 벗어납니다. 서버는 이 과정을 관리하기 위해 지정된 시간의 10분의 1이 경과한 후 트랜잭션 수를 확인하고 남은 대기 시간에서 해당 간격을 뺍니다.
델타 계산 중 반올림으로 인해 대기 시간이 델타의 배수가 아닌 경우, 델타를 남은 대기 시간에서 뺄 때 값이 음수가 되어 최대 대기 시간으로 래핑되어 커밋이 중단되었습니다. 이제 남은 대기 시간에 대한 데이터 유형이 변경되어 이 상황에서 값이 래핑되지 않고, 원래 대기 시간이 경과하면 커밋이 진행됩니다. Yan Huang의 기여에 감사드립니다. (버그 #28091735, 버그 #91055)

복제: 디버그 빌드에서 MySQL에 255개 이상의 정렬이 사용 가능해지면서 어설션이 실패했습니다. (버그 #28015761)

복제: MySQL 서버가 GTID 일관성 위반을 기록했지만 관련 문이 성공적으로 실행되지 못한 경우 기록을 제거하지 않아 디버그 빌드에서 어설션이 발생했습니다. 이제 트랜잭션이 끝날 때 서버가 실패한 문으로 인해 GTID 일관성 위반이 발생했는지 확인하고, 이 경우 이전 GTID 일관성 상태를 복원하도록 상황 처리가 개선되었습니다. (버그 #27903831, 버그 #90551)

복제: 복제에서 GTID를 사용할 때 구문 오류(ER_PARSE_ERROR를 유발하는 문을 포함한 트랜잭션을 같은 GTID를 사용한 빈 트랜잭션이나 대체 트랜잭션을 주입하여 수동으로 건너뛸 수 없었습니다. 이 작업은 슬레이브가 GTID가 이미 사용된 것으로 식별하여 해당 트랜잭션을 건너뛰게 해야 하지만, 구문 오류가 발생한 경우 문이 구문 분석된 후에야 GTID가 건너뛰어야 하는지 확인되었기 때문에 구문 오류로 인해 복제 적용자 스레드가 중단되었습니다.
이 수정으로 복제 적용자 스레드는 이제 GTID가 이미 사용된 경우 건너뛰어야 할 트랜잭션에서 발생한 구문 오류를 무시합니다. 이 동작 변경은 mysqlbinlog에서 생성된 바이너리 로그 출력이 포함된 작업 부하의 경우에는 적용되지 않습니다. 이 경우 구문 오류가 있는 트랜잭션이 건너뛰어진 트랜잭션 바로 뒤에 있으면 오류를 발생시켜야 할 상황에서 해당 트랜잭션이 조용히 건너뛰어질 위험이 있기 때문입니다. (버그 #27638268)

복제: GTID를 사용하는 복제 슬레이브에서 RESET SLAVE 문을 실행할 때, 기존 릴레이 로그 파일은 정리되었지만, 채널에 대한 수신된 GTID 세트가 지워지기 전에 새 릴레이 로그 파일이 생성되었습니다. 이전 GTID 세트가 새 릴레이 로그 파일에 PREVIOUS_GTIDS 이벤트로 기록되어, 슬레이브가 마스터보다 더 많은 GTID를 가지고 있다는 치명적인 오류가 발생했습니다. 이제 RESET SLAVE 문을 실행할 때, 새 릴레이 로그 파일이 생성되기 전에 수신된 GTID 세트가 지워지므로 이 상황이 발생하지 않습니다. (버그 #27636289)

복제: 반동기 복제에서 마스터의 수신 스레드가 슬레이브로부터의 확인 응답을 읽는 동안 뮤텍스를 유지했지만, 반동기 슬레이브를 추가하거나 제거하는 데 동일한 뮤텍스가 필요하여 해당 작업이 지연되었습니다. 이제 뮤텍스를 획득하지 않고 슬레이브로부터 확인 응답을 읽도록 문제를 수정했습니다. (버그 #27610678, 버그 #89370)

복제: 복제 슬레이브 보고 코드에서 드문 오류 상황이 디버그 빌드에서는 어설션을 발생시켰지만, 릴리스 빌드에서는 뮤텍스가 잠긴 상태로 반환되었습니다. 이제 이 상황에서 반환하기 전에 뮤텍스가 해제됩니다. Zsolt Parragi의 패치에 감사드립니다. (버그 #27448019, 버그 #89421)

복제: 복제 슬레이브에서 slave_transaction_retries 시스템 변수가 지정한 대로 트랜잭션의 자동 재시도가 비일시적인 오류가 있는 경우에도 발생했습니다. 이제 오류가 없거나 오류가 일시적인 경우에만 트랜잭션이 자동으로 재시도됩니다. (버그 #27373559, 버그 #89143)

복제: 특정 로그 유형(예: FLUSH SLOW LOGS)에 대한 FLUSH 문이 오류를 발생시켰을 때, 해당 문이 여전히 바이너리 로그에 기록되었습니다. 이는 오류가 마스터에서 발생했지만 슬레이브에서는 발생하지 않아 복제가 중단되었습니다. 이제 MySQL 서버는 이러한 FLUSH 문 실행 결과를 확인하고, 오류가 발생한 경우 해당 문을 바이너리 로그에 기록하지 않습니다. (버그 #24786290, 버그 #83232)

복제: 비밀번호의 해시를 생성하는 PASSWORD() 함수는 MySQL 5.7에서 사용 중단되었으며 MySQL 8.0에서 제거되었습니다. 이 함수를 사용하는 SET PASSWORD 문이 MySQL 5.6 마스터에서 MySQL 5.7 슬레이브로 복제되었을 때, 또는 log_builtin_as_identified_by_password 시스템 변수가 ON으로 설정된 MySQL 5.7 마스터에서 MySQL 5.7 슬레이브로 복제되었을 때, 비밀번호 해시 자체도 해시된 상태로 슬레이브에 저장되었습니다. 이제 복제된 비밀번호 해시는 슬레이브에 원래 전달된 그대로 저장됩니다. (버그 #24687073)

복제: 복제와 관련된 특정 성능 스키마 테이블에서 레코드를 검색할 때 ORDER BY 절을 사용하면 빈 집합이 반환되었습니다. 이제 이 문제가 해결되었습니다. (버그 #22958077, 버그 #80777)

복제: 다중 소스 복제를 위해 슬레이브에서 복제 채널을 사용할 때, START SLAVE 문에서 개별 채널을 지정하지 않으면 모든 채널의 I/O 스레드와 SQL 스레드가 시작되어야 합니다. 그러나 이 경우 RESET SLAVE 문이 실행된 후 START SLAVE 문이 비기본 채널을 시작하지 못했습니다. 이제 초기화 프로세스 오류가 아닌 RESET SLAVE 문으로 인해 비활성화된 복제 채널이 식별되어, 모든 채널에 적용되는 START SLAVE 문으로 다시 시작됩니다. (버그 #22809607)

복제: 복제 슬레이브에서 RESET SLAVE 명령을 실행해도 마스터 호스트, 마스터 포트, 마스터 사용자 또는 마스터 비밀번호와 같은 복제 연결 매개변수는 변경되지 않고 메모리에 그대로 유지됩니다. 그러나 RESET SLAVE ALL 명령을 실행하면 이러한 연결 매개변수가 초기화됩니다. 이전에는 RESET SLAVE 명령을 실행한 직후 서버가 재시작되거나 충돌한 경우, 복제 연결 매개변수가 RESET SLAVE ALL이 실행된 것처럼 초기화되었습니다.
이제 master_info_repository=TABLE가 서버에 설정되어 있는 경우(이는 MySQL 8.0의 기본값임), 복제 연결 매개변수는 RESET SLAVE 작업의 일부로 InnoDB 테이블 mysql.slave_master_info에 크래시 안전하게 저장됩니다. 또한 메모리에도 유지됩니다. RESET SLAVE 실행 후 START SLAVE 명령을 실행하기 전에 서버가 충돌하거나 의도적으로 재시작된 경우, 서버가 재시작되면 테이블에서 복제 연결 매개변수가 복구되어 사용됩니다.
master_info_repository=FILE가 설정된 경우(이는 MySQL 5.7의 기본값임), 복제 연결 매개변수는 메모리에만 유지되므로, 이전과 동일하게 서버 재시작 시 연결 매개변수가 손실됩니다. 이 경우, 서버 재시작 후 연결 매개변수를 다시 설정하려면 CHANGE MASTER TO 명령을 실행한 후 START SLAVE 명령을 실행해야 합니다.
의도적으로 연결 매개변수를 초기화하려면 RESET SLAVE ALL 명령을 사용하여 연결 매개변수를 초기화해야 하며, 이 경우 서버 재시작 후 새로운 연결 매개변수를 설정하기 위해 CHANGE MASTER TO 명령을 실행해야 합니다. (버그 #20280946)

복제: 그룹 멤버가 일정 시간 동안 중단된 후 다시 시작되어 모든 대기 메시지를 처리하지 못하면 ERROR 상태로 전환됩니다. 그러나 나머지 멤버들은 해당 멤버를 UNREACHABLE 상태로 보고 의심이 만료될 때까지 해당 멤버를 그룹에서 퇴출시키지 않습니다. 이제 오류로 인해 중단된 멤버가 그룹에서 제거되기 전에 알려진 피어에 연결하여 퇴출 요청을 시도하도록 동작이 수정되었습니다. (버그 #91433, 버그 #28252687)

복제: xdr_utils에서 사용되지 않는 함수와 관련된 컴파일 경고가 줄어들었습니다. Zsolt Parragi에게 감사드립니다. (버그 #91071, 버그 #28099963)

복제: group_replication_recovery_retry_count 변수가 멤버가 재연결을 시도하는 동안 수정된 경우, 재연결 시도가 무한 루프로 진입할 수 있었습니다. (버그 #91057, 버그 #28092714)

복제: group_replication_exit_state_action 변수는 멤버가 그룹에서 비자발적으로 나갔을 때 수행할 작업을 지정하는 데 사용되지만, group_replication_start_on_boot가 활성화된 서버 시작 시 다음 시나리오에서 이 변수가 무시되었습니다:

  • 그룹 멤버의 유효한 수가 초과된 경우
  • 멤버 시스템 변수 설정이 호환되지 않는 경우
  • 가입 중인 멤버가 그룹보다 더 많은 트랜잭션을 가진 경우
  • 가입 중인 멤버의 버전이 그룹과 호환되지 않는 경우

(버그 #90494, 버그 #27881311)

복제: START GROUP_REPLICATION를 실행한 후 control-C와 같은 방식으로 mysqld 프로세스를 강제로 중단하면 서버가 예상치 않게 중단될 수 있었습니다. (버그 #90457, 버그 #27873419)

그룹 복제: group_replication_appliergroup_replication_recovery 채널의 릴레이 로그 정보 로그 항목이 RESET SLAVE 또는 RESET SLAVE ALL에 의해 지워지지 않았습니다. (버그 #27411175)

그룹 복제: 서버에서 잘못된 group_replication_group_name으로 그룹 복제를 시작할 때 서버가 예기치 않게 중단되었습니다. (버그 #91347, 버그 #28219136)

그룹 복제: group_replication_group_seeds에 로컬 주소로 해석되는 DNS 기반 항목이 포함된 경우, 그룹 복제가 시작되지 않았습니다. (버그 #90483, 버그 #27882096, 버그 #28074929)

Microsoft Windows: 옵션 파일에서 sql_mode 옵션에 NO_AUTO_CREATE_USER 값이 포함되어 MySQL 8.0 서버 시작이 차단될 경우, 이제 서버 로그에 오류가 기록됩니다. (버그 #28061945, 버그 #90967)

Microsoft Windows: MySQL Installer를 통해 MySQL Server MSI 패키지를 제거할 때 잘못된 팝업 창이 나타났습니다. (버그 #27463864)

Microsoft Windows: Windows에서 DBUG_ABORT가 사용자 정의 스택 추적 및 기타 정보를 출력하지 않았습니다. (버그 #21383530)

Microsoft Windows: Windows 서비스로 MySQL을 시작할 때 --install 옵션 뒤에 서비스 이름을 지정하는 명령이 my.ini 또는 my.cnf 옵션 파일의 해당 서비스 그룹에 있는 지시 사항을 무시하고 기본 옵션을 사용했습니다. 기본 서비스 이름(mysqld, mysql_cluster, server, mysqld-8.0)만 옵션 파일에서 다른 매개변수를 로드할 수 있었습니다. (버그 #90383, 버그 #27852209)

JSON: 생성된 열에 JSON_TABLE()을 사용하는 테이블을 생성할 때, 비록 서브쿼리, 매개변수, 변수, 저장 함수 및 로드 가능 함수는 생성된 열의 표현식에서 허용되지 않음에도 불구하고 서버가 이를 거부하지 않았습니다. 이제 서버는 이러한 금지된 구조(예: JSON_TABLE() 포함)가 사용되지 않도록 보다 엄격하게 검사합니다. (버그 #28518485)

JSON: SELECT ... FROM JSON_TABLE() 쿼리가 MySQL root가 아닌 사용자에게 권한 오류로 실패하는 경우가 있었습니다. 이 문제는 해당 쿼리가 뷰의 기반으로 사용되었을 때에도 발생할 수 있었으며, 뷰에서 SELECT를 실행할 때 실패했습니다. (버그 #28255453, 버그 #27923406)
참고: 관련 항목: 버그 #27189940.

JSON: JSON_TABLE() 함수가 231 이상의 정수 값을 래핑 처리했습니다. 예를 들어, SELECT id FROM JSON_TABLE('[{"id":"2147483648"}]', '$[*]' COLUMNS (id BIGINT UNSIGNED PATH '$.id')) AS json 쿼리는 -2147483648을 반환했습니다. (버그 #27856835)

JSON: 일부 컨텍스트에서 NULLIF() 함수가 실제 유형이 아닌 부울 값으로 첫 번째 인수를 반환했습니다. 이 문제는 이 함수의 결과가 JSON_ARRAYAGG() 또는 JSON_OBJECTAGG()의 인수로 사용되었을 때 발견되었지만, NULLIF()가 유사하게 사용된 다른 경우에도 발생할 수 있었습니다. (버그 #90833, 버그 #28007237)

JSON: 바이너리 데이터를 포함하는 JSON 문서를 디스플레이용으로 base-64로 인코딩된 텍스트로 변환할 때, 인코딩된 문자열의 줄바꿈 문자가 적절하게 이스케이프 처리되지 않아 텍스트 표현을 JSON으로 구문 분석할 수 없었고, 결과적으로 잘리거나 손상되었습니다. 이제 MySQL은 인코딩된 문자열의 줄바꿈 문자가 이스케이프되었는지 확인합니다. (버그 #90503, 버그 #27891359)

filesort 작업이 서버 종료를 일으킬 수 있었습니다. (버그 #28791531, 버그 #92777)

Debian 패키징이 이제 Ubuntu 18.10(Cosmic Cuttlefish)을 지원합니다. (버그 #28765706)

Fedora 29 플랫폼에서 OpenSSL 1.1.1 지원이 준비되지 않았기 때문에, OpenSSL 1.0.x를 사용하여 패키지를 빌드합니다. 소스에서 MySQL을 빌드하려면 compat-openssl10-devel 패키지를 사용하는 것이 좋습니다. (버그 #28737143)

Fedora 29 플랫폼에서 MariaDB에서 MySQL 8.0.13으로 업그레이드할 때 누락된 obsoletes 정보로 인해 실패했습니다. (버그 #28727698)

SLES 12용 MySQL 바이너리 배포본은 이제 GCC 7을 사용하여 빌드됩니다. 이 플랫폼에서 지원되는 가장 낮은 GCC 버전은 이제 5.3(이전에는 4.8.5)입니다. (버그 #28542723)

서브쿼리에 기능성 인덱스를 추가하려고 하면 서버가 인덱스 표현식을 처리하려고 시도하는 중에 어설션이 발생했습니다. 이제 이러한 경우 표현식이 허용되지 않으며, 서버는 적절한 오류 메시지를 반환합니다. (버그 #28526493)

지수 계산을 수행할 때 범위 검사가 추가되었습니다. (버그 #28505423)

CMAKE -DWITHOUT_SERVER=1이 빌드 오류를 발생시켰습니다. (버그 #28501563, 버그 #92011)

8바이트 길이의 접두사 인덱스를 지정할 때 SHOW INDEXES 출력에서 Sub_part 열이 NULL로 표시되었습니다. (버그 #28499603)

MySQL을 일부 시스템 라이브러리를 사용하도록 구성한 경우 GCC 8에서 컴파일이 실패했습니다. (버그 #28471072, 버그 #91914)

디버그 빌드에서 서버 부트스트랩 단계가 실패하면, 누락된 정리 코드로 인해 어설션이 발생했습니다. (버그 #28435378, 버그 #91847)

ARM과 Intel x64 플랫폼 간에 MySQL 빌드에서 숫자 범위가 다를 수 있었습니다. (버그 #28401869)

mysqldump –tables 출력에서, 파일 이름이 이미 점을 포함하는 경우에도 파일 이름에 항상 .txt 또는 .sql 접미사가 포함되도록 수정되었습니다. Facebook의 기여에 감사드립니다. (버그 #28380961, 버그 #91745)

MERGE 테이블에서 동시에 INSERTSELECT 문을 실행하면 서버가 종료될 수 있었습니다. (버그 #28379285)

SLES 15에서 MariaDB 패키지에서 MySQL 패키지로 업그레이드할 때 잘못된 obsoletes 정보로 인해 실패했습니다. (버그 #28292138)

데이터 사전 자동 해제기가 이제 데이터 사전 개체 유형에 대한 맵을 동적으로 할당합니다. 또한, 열 통계 및 리소스 그룹에 대한 맵이 추가되었으며, 크기 계산 및 개체 제거에 사용됩니다. ANALYZE TABLE 작업을 위한 자동 해제기가 추가되었습니다. (버그 #28245522, 버그 #91420)

서로 다른 캐릭터 세트를 혼합한 UNION 쿼리가 가짜 오류로 인해 실패할 수 있었습니다. (버그 #28237675)
참고: 이 문제는 버그 #83895, 버그 #25123839의 회귀 문제입니다.

임시 테이블에 대해 CHECK TABLE ... FOR UPGRADE 실행 시 어설션이 발생할 수 있었습니다. (버그 #28220374)
참고: 이 문제는 버그 #24741307의 회귀 문제입니다.

범위 옵티마이저에서 0으로 나누기 오류가 발생할 수 있었습니다. (버그 #28214186)

GCC 8 버그로 인해 외래 키 검사에서 재귀 호출이 스택 공간을 소모할 수 있었습니다. (버그 #28200774, 버그 #28421040, 버그 #91823)

sql_mode를 빈 문자열로 설정한 경우, SELECT CONCAT( FORMAT(LPAD(char,2,''), 1) ) 형식의 쿼리가 제대로 처리되지 않았습니다. 이는 LPAD() 대신 RPAD()를 사용하는 유사한 쿼리에서도 마찬가지였습니다. (버그 #28197977)

비권한 사용자가 자신의 계정 비밀번호 기록 및 재사용 속성을 변경할 수 있었습니다. (버그 #28191838)

OpenSSL 1.1의 OPENSSL_malloc_init() 호출이 Windows에서 제대로 작동하지 않았습니다. 이를 해결하기 위해 기본 OpenSSL 대신 대체 할당 래퍼를 사용하며, 이로 인해 OpenSSL 메모리 계측이 비활성화되었습니다. (버그 #28179051)

데이터 사전 조회 중 특정 객체 유형의 할당이 스택 버퍼 오버플로를 발생시켰습니다. (버그 #28176453)

INFORMATION_SCHEMA에서 테이블 통계를 가져오는 동안 커밋을 시도하는 내부 서버 작업에서 어설션이 발생할 수 있었습니다. (버그 #28165060)

특정 저장 프로시저가 서버 종료를 유발할 수 있었습니다. (버그 #28156802)

CREATE USER 문에 대한 출력이 일반 쿼리 로그와 감사 로그에서 다를 수 있었습니다. (버그 #28147710)

UPDATEDELETE 문이 sql_safe_updates로 인해 오류가 발생할 때, 오류 메시지가 충분히 설명적이지 않았습니다. 이제 오류 메시지에는 실패 원인을 설명하는 첫 번째 진단 정보가 포함됩니다. 예를 들어, 메시지는 range_optimizer_max_mem_size 값이 초과되었거나 유형 변환이 발생하여 인덱스를 사용할 수 없음을 나타낼 수 있습니다.
추가로: (1) 이러한 문에 대해 EXPLAIN을 사용하면 오류가 발생하지 않으며, 사용자가 인덱스가 사용되지 않는 이유를 EXPLAINSHOW WARNINGS 출력에서 확인할 수 있습니다. (2) 여러 테이블에서의 삭제 및 업데이트 작업에서 테이블 스캔을 사용하는 대상 테이블이 있는 경우에만 안전 업데이트 활성화 시 오류가 발생합니다. (버그 #28145710, 버그 #91080)

MySQL Server 및 테스트 RPM 패키지에서 perl-Data-Dumper가 종속성으로 누락되었습니다. (버그 #28144933, 버그 #72926)

서버 시작 시 컴포넌트에 필요한 서비스가 아직 초기화되지 않으면 시작이 실패할 수 있었습니다. (버그 #28142250)

SHOW CREATE TABLE이 외래 키 RESTRICT 옵션을 누락할 수 있었습니다. 이로 인해 mysqldump로 덤프한 테이블에서 외래 키 RESTRICT 옵션이 손실될 수 있었습니다. (버그 #28122781, 버그 #91110)

mysql 클라이언트가 배치 모드에서 여러 줄로 된 큰 문을 가져오는 데 시간이 오래 걸렸습니다. 이 상황에서 메모리 할당이 더 효율적으로 개선되었습니다. Sinisa Milivojevic에게 감사드립니다. (버그 #28116512, 버그 #85155)

SUM()AVG() 함수가 윈도우 함수와 함께 사용된 문자열 인수를 제대로 처리하지 못했습니다. (버그 #28105241)

기하학 컬렉션의 과도한 중첩으로 인해 서버가 스택 공간을 소모할 수 있었습니다. 서버는 이제 스택 오버런 위험이 있을 경우 오류를 발생시킵니다. (버그 #28100563)

mysql 클라이언트에서 -b 짧은 옵션이 --no-beep--binary-as-hex 두 개의 긴 옵션에 할당되어 있었습니다. 이제 -b 옵션은 --no-beep에만 할당됩니다. (버그 #28093271)

자동 증가 기본 키를 가진 테이블에서, 동시에 ALTER TABLE ... ADD ... VIRTUALINSERT 문을 실행하면 중복 키 오류가 발생할 수 있었습니다. (버그 #28089240)

SUM()에서 부동 소수점 값 처리가 개선되었습니다. (버그 #28080199)

일부 ST_Simplify() 표현식이 서버 종료를 유발할 수 있었습니다. (버그 #28079969)

Undefined Behavior Sanitizer가 활성화된 빌드에서 테스트 시 “struct Event_db_repository 형식의 널 포인터에서 멤버 호출” 오류가 반환되었습니다. (버그 #28066155)

WITH_GMOCK CMake 옵션이 Windows 경로 이름을 제대로 처리하지 못했습니다. (버그 #28061409, 버그 #90964)

INFORMATION_SCHEMA 쿼리가 테이블 통계를 캐시하려고 시도할 때 디버깅 어설션을 발생시킬 수 있었습니다. (버그 #28035207)

계정에 역할이 할당된 경우, 특정 sql_mode 설정으로 인해 서버가 시작되지 않을 수 있었습니다. (버그 #28030423)

LDAP 인증 플러그인에 대한 그룹 조회가 사용자에게 권한이 부족한 경우 실패할 수 있었습니다. 이제 그룹 검색 작업이 root 자격 증명을 사용하여 다시 바인딩됩니다. (버그 #28016008)

mysqldump에서 생성한 ANALYZE TABLE ... UPDATE HISTOGRAM 문에 구문 오류가 있었습니다. (버그 #28014376, 버그 #90846)

문자열 함수를 사용하는 생성된 열이 항상 제대로 채워지지 않았습니다. (버그 #27973409)

우선순위 큐에서 사용되는 고정 길이 정렬 키가 정확히 맞으면 실패한 것으로 간주되었습니다. (버그 #27970481, 버그 #92448, 버그 #28654343)

빈 결과에 대해 REPLACE()가 때때로 빈 문자열 대신 null 문자열을 반환했습니다. (버그 #27960921)

더 이상 사용되지 않는 사용자 정의 정렬 방식으로 생성된 테이블을 삭제하면 서버 종료가 발생할 수 있었습니다. (버그 #27952999)

INFORMATION_SCHEMAREFERENTIAL_CONSTRAINTSTABLE_CONSTRAINTS 테이블을 CONSTRAINT_NAME에서 조인할 때 열의 정렬이 달라 실패했습니다. (버그 #27945704, 버그 #90690)

일부 DECIMAL 값 작업이 서버 종료를 유발할 수 있었습니다. (버그 #27942277)

매우 긴 테이블 키가 복제 슬레이브에서 잘못 처리되었습니다. (버그 #27930505)

mysqld$PATH에 나열된 마지막 디렉토리가 설치 디렉토리인 경우 이를 올바르게 감지하지 못했습니다. (버그 #27922896)

서버 시작/종료 중에 PID 파일이 잘못 처리될 수 있었습니다. (버그 #27919254)

--skip-grant-tables로 서버를 시작한 경우에도 일부 계정 관리 문이 비활성화되지 않았습니다. (버그 #27906226)

드물게 세이브포인트 설정 시 어설션이 발생할 수 있었습니다. (버그 #27898591)

copy_integer(), myfunc_int(), mysql_sys_var_int() 또는 thd_killed() 호출 시 런타임 오류가 발생할 수 있었습니다. MyISAM 정렬 함수 호출 또는 unsigned long long 유형의 표현 가능한 값 범위를 벗어난 값에서도 발생했습니다. (버그 #27894901, 버그 #90515, 버그 #27871951, 버그 #27918095, 버그 #90609, 버그 #27937522, 버그 #90661, 버그 #27978325, 버그 #27962900)

mysql_install_plugin이 서버가 데이터 사전에 플러그인 메타데이터를 저장할 수 없을 때 플러그인별 오류를 보고하지 못했습니다. (버그 #27893406)

ssl_fips_mode를 설정할 때 OpenSSL 요구 사항을 충족하지 못하면 설정에 실패함에도 불구하고 값이 ON으로 표시되었습니다. (버그 #27891890)

Windows에서 클라이언트 라이브러리가 mysql_result_metadata() C API 함수의 심볼을 내보내지 않았습니다. (버그 #27868095)

InnoDB 테이블에서 자기 참조 외래 키가 생성되어 서버 오작동을 유발할 수 있었습니다. (버그 #27864515)

서로 다른 캐릭터셋을 혼합하는 UNION 쿼리가 준비된 문 또는 저장 프로시저에서 잘못된 출력을 생성했습니다. (버그 #27849293)

Debian 패키지에서 libcurl-dev 의존성이 누락되었습니다. (버그 #27844465)

클라이언트 프로그램의 --help 출력에 현재 --ssl-fips-mode 값이 포함되지 않았습니다. (버그 #27838966)

Derived_key_comp() 호출에서 런타임 오류가 발생할 수 있었습니다. (버그 #27830679)

MEMORY 테이블에서 메모리 오버플로우 오류가 발생할 수 있었습니다. (버그 #27799513)

BLOB 또는 TEXT 유형에서 더 작은 BLOB 또는 TEXT 유형으로 변환할 때 잘림이나 데이터 손실에 대해 경고나 오류가 보고되지 않았습니다. 이제 엄격한 SQL 모드에서는 적절한 오류가 발생하고, 비엄격 모드에서는 경고가 발생합니다. (버그 #27788685, 버그 #90266)

디버그 빌드에서 my_strnxfrm_unicode_full_bin()이 어설션을 발생시킬 수 있었습니다. (버그 #27752619)

Undefined Behavior Sanitizer가 활성화된 빌드에서 GIS 계산 중 서명된 정수 오버플로우가 발생할 수 있었습니다. (버그 #27751479, 버그 #27744399, 버그 #27811282)

일부 경우에 내부 함수 regexp::EvalExprToCharset()이 잘못 정렬된 주소에 참조를 바인딩할 수 있었습니다. (버그 #27743722)

서버에서 키 파일을 읽을 수 없다는 메시지의 심각도가 INFORMATION에서 WARNING으로 상향되었습니다. (버그 #27737195)

윈도우 함수와 롤업이 결합된 표현식에 대해 임시 테이블 필드가 생성되지 않아 쿼리가 실패했습니다. (버그 #27735167)

FIND_IN_SET( JSON_UNQUOTE( JSON_SET('{}','$','') ), 1) 표현식이 제대로 평가되지 않았습니다. (버그 #27731699)

MyISAM 쿼리 중 임시 테이블을 생성하지 못하면 서버가 종료될 수 있었습니다. Facebook에 이 패치에 대해 감사드립니다. (버그 #27724519, 버그 #90145)

parser_max_mem_size가 저장 프로그램 정의를 구문 분석할 때 효과가 없었습니다. (버그 #27714748)

음수 값을 비교하는 BETWEEN 절에서 잘못된 결과가 발생할 수 있었습니다. (버그 #27691347)

서버 오류 메시지의 몇 가지 오타가 수정되었습니다. Thomas Tsiakalakis에게 이 기여에 대해 감사드립니다. (버그 #27688294, 버그 #90048)

이러한 스크립트는 이제 RPM 패키지에 포함되지 않습니다(이들은 mysqld 바이너리에 컴파일되어 있으므로 불필요함): fill_help_tables.sql, mysql_sys_schema.sql, mysql_system_tables.sql, mysql_system_tables_data.sql, mysql_system_users.sql. (버그 #27672991)

인덱스 병합 작업을 다시 시작할 때 Unique::io_cache가 적절히 정리되지 않아 디버그 빌드에서 어설션이 발생했습니다. (버그 #27599292)

ENUM 열에서 이진 또는 16진 리터럴 값을 사용하는 경우 데이터 사전 캐릭터셋에서 허용되지 않는 바이트로 인해 문자열 유형이 발생했습니다. (버그 #27592803)

다음 조건에서 CONVERT()가 실패할 수 있었습니다:
변환 결과 크기가 max_allowed_packet을 초과하는 경우
sql_mode가 빈 문자열인 경우
결과의 캐릭터셋이 character_set_connection과 다른 경우 (버그 #27592714)

ENUM 또는 SET 필드를 JSON_TABLE()과 함께 사용하는 경우 예기치 않은 동작이 발생할 수 있었습니다. (버그 #27571251)

호스트 이름 해상도 오류로 인해 audit_log 플러그인이 실패할 수 있었습니다. (버그 #27567003)

log_error_verbosity=3으로 설정된 경우 실패한 연결 시도가 오류 로그에 기록되지 않았습니다. (버그 #27539838)

NULL 값을 가진 지속된 시스템 변수가 mysqld-auto.cnf에 잘못 기록되었습니다. (버그 #27512616)

이전 코드 정리가 FEDERATED 스토리지 엔진 오류를 유발했습니다. (버그 #27493633, 버그 #89537)
참고: 이 문제는 버그 #25943754의 회귀 문제입니다.

max_execution_time을 전체 텍스트 검색과 함께 사용할 때 설정이 작동하지 않는 경우가 있었습니다. (버그 #27155294)

커밋되지 않은 트랜잭션을 읽으려는 시도가 어설션을 발생시켰습니다. (버그 #26876608)

ALTER TABLE ... REORGANIZE PARTITION ... 문에서 마지막 파티션 이외의 파티션에 VALUES LESS THAN 구문이 누락된 경우 잘못된 동작이 발생할 수 있었습니다. (버그 #26791931)

일부 경우에 ER_DATA_TOO_LONG이 적절한 오류였지만, ER_TRUNCATED_WRONG_VALUE_FOR_FIELD가 대신 보고되었습니다. (버그 #26475237, 버그 #87100)

mysql.tables 데이터 사전 테이블에 현재 서버 버전 번호를 저장하는 last_checked_for_upgrade 열이 추가되어 성공적인 CHECK TABLE ... FOR UPGRADE 작업을 추적할 수 있게 되었습니다. 이 데이터는 이전에 테이블을 불필요하게 다시 확인하지 않기 위해 .frm 파일에 저장되었습니다. (버그 #24741307, 버그 #83169)

sql_yacc.yy 파일에서 생성된 MYSQLparse() 함수가 크기 제한을 초과하여 Microsoft Visual C++ 컴파일러가 최적화를 중단했습니다. Visual Studio 2017 이상에서 사용할 수 있는 /d2OptimizeHugeFunctions 컴파일러 스위치를 활성화하여 최적화를 복원했습니다. (버그 #24600301)

서명된 정수와 부호 없는 정수의 곱에 대한 범위 검사가 잘못 수행될 수 있었습니다. (버그 #17081376, 버그 #69715)

최대값이 가능한 YEAR 열 값을 2155.0E00 또는 2.15E3과 같은 실수 상수로 표현할 때 실패했습니다. (버그 #91226, 버그 #28172538)

SELECT_LEX 형식의 널 포인터 내에서 멤버 액세스가 발생하지 않도록 방지했습니다. (버그 #90689, 버그 #27945614)

경고에서 보고된 줄 번호 계산의 기준이 입력 행 수에서 사용자에게 표시된 실제 행 번호로 변경되었습니다. GROUP BY를 사용하는 문에 대해서는 이제 이 번호가 집계 그룹 수를 기반으로 합니다. (버그 #90667, 버그 #27938507)

테이블의 고유한 값 수를 추정할 수 있는 Optimizer의 histograms::Histogram 인터페이스에서 버킷의 고유 값 수를 추정하는 데 사용될 수 있는 히스토그램 추정치가 이제 사용됩니다. (버그 #90465, 버그 #27872281)

기본 데이터베이스가 선택되지 않은 경우 INFORMATION_SCHEMA.KEYWORDS 테이블에서 선택하는 작업이 실패했습니다. (버그 #90160, 버그 #27729859)

ANALYZE TABLE UPDATE HISTOGRAM 처리 중 lock_wait_timeout을 초과했을 때 클라이언트에 오류 조건을 반환하지 못했습니다. (버그 #89738, 버그 #27574375)

생성된 열 g를 포함하는 테이블 t를 생성한 후 ALTER TABLE t ALTER COLUMN g SET DEFAULT ... 문을 실행할 수 있었습니다. 이제 생성된 열에 대해 이 방식으로 기본값을 설정하려고 하면 오류 1221 “Incorrect usage of DEFAULT and generated column”이 발생하며, 이는 유사한 CREATE TABLE 문에 대한 동작과 동일합니다. (버그 #88619, 버그 #27164393)

Leave a Comment



이 문서 공유

8.0.13 변경 사항 (2018-10-22 GA)

링크 복사

CONTENTS