MySQL 8.0 Release Note

8.0.1 변경 사항 (2017-04-10 Development Milestone)

Estimated reading: 18 minutes 64 views

공식 문서: Changes in MySQL 8.0.1 (2017-04-10, Development Milestone)

계정 관리 관련 사항

호환되지 않는 변경: 컴포넌트와 플러그인은 이제 런타임에 동적으로 권한을 정의할 수 있어, 각자의 기능에 특화된 권한을 생성할 수 있습니다.
동적 권한 구현은 DBA가 SUPER 권한을 점차 대체할 수 있도록 합니다. 과거 SUPER는 서로 관련이 없는 다양한 작업에 사용되었으나, 이제 이러한 작업 중 상당수는 보다 제한적인 범위의 동적 권한으로도 수행할 수 있으며, 이 권한은 해당 작업을 구현한 컴포넌트 또는 플러그인에 의해 등록됩니다. 이전에 SUPER가 필요했던 작업은 관련 동적 권한을 계정에 부여함으로써 허용할 수 있습니다. 예를 들어, 글로벌 시스템 변수를 수정할 수 있어야 하는 사용자에게는 SUPER 대신 SYSTEM_VARIABLES_ADMIN 권한을 부여할 수 있습니다.
이 변경은 DBA가 SUPER를 부여하지 않고도 사용자 권한을 세부적으로 조정할 수 있게 하여 보안을 개선합니다. SUPER 권한은 이제 더 이상 권장되지 않으며 향후 MySQL 버전에서 제거될 예정입니다.
동적 권한은 글로벌 수준에서만 적용됩니다. 서버는 동적 권한이 사용자 계정에 현재 어떻게 할당되어 있는지를 mysql 시스템 데이터베이스의 새로운 테이블인 mysql.global_grants에 저장합니다.
자세한 내용은 정적 권한과 동적 권한에서 확인할 수 있으며, SUPER에서 동적 권한으로 계정을 이전하는 방법이 포함되어 있습니다.
비호환성: SHOW GRANTS 명령은 이제 글로벌 권한 출력에서 ALL PRIVILEGES를 표시하지 않으며, 그 대신 모든 글로벌 권한을 명시적으로 나열합니다. 자세한 사항은 SHOW GRANTS 문을 참조하십시오. SHOW GRANTS 출력에 의존하는 애플리케이션은 이에 맞게 조정해야 합니다.
이전 MySQL 버전에서 이 MySQL 릴리스로 업그레이드할 경우, mysql 시스템 데이터베이스에 이 변경 사항을 적용하려면 mysql_upgrade를 실행하고 서버를 다시 시작해야 합니다. (WL #8131)

C API 관련 사항

libmysqlclient에 의해 구현된 C API는 이제 MySQL 서버 바이너리 로그의 복제 이벤트 스트림을 읽을 수 있는 클라이언트 인터페이스를 포함합니다. 자세한 내용은 C API 바이너리 로그 인터페이스를 참조하십시오. (WL #7672)

캐릭터셋 지원

중요 변경: 기본 캐릭터셋이 latin1에서 utf8mb4로 변경되었습니다. 이에 따라 다음 시스템 변수들이 영향을 받습니다:

이 변경으로 인해, 데이터베이스와 테이블, 뷰, 저장 프로시저 등과 같은 새 객체들의 기본 캐릭터셋과 정렬 규칙이 명시적으로 설정되지 않는 한 이전과 달라질 수 있습니다. 이전 기본값을 유지하려면 my.cnf 파일에 다음과 같이 설정하여 서버를 시작할 수 있습니다:

[mysqld]
character_set_server=latin1
collation_server=latin1_swedish_ci

(WL #7554)

UCA 9.0.0 기반 정렬 규칙(예: utf8mb4_0900_ai_ci)의 성능이 향상되었습니다. 이제 이 정렬 규칙은 다른 UCA 정렬 규칙보다 더 빠릅니다.
또한 max_length_for_sort_data 시스템 변수의 기본값이 1024에서 4096으로 증가했습니다. (버그 #24823885, 버그 #83319)

utf8mb4 캐릭터셋의 기본 정렬 규칙이 utf8mb4_general_ci에서 utf8mb4_0900_ai_ci로 변경되었습니다. utf8mb4_general_ci는 기본 다국어 평면(BMP) 밖의 문자를 제대로 처리하지 못합니다. (버그 #24742157)

유니코드 9.0.0 정렬 규칙의 패드 속성이 PAD SPACE에서 NO PAD로 변경되었습니다. 그 결과, 이러한 정렬 규칙은 문자열 끝의 공백을 다른 문자처럼 중요한 요소로 처리하게 됩니다. 영향을 받는 정렬 규칙 이름에는 _0900_ 문자열이 포함됩니다.
9.0.0 (NO PAD) 정렬 규칙을 사용하는 비이진 문자열(CHAR, VARCHAR, TEXT 문자열)은 후행 공백과 관련하여 PAD SPACE 정렬 규칙과 비교할 때 다르게 처리됩니다. 예를 들어, 'a''a '는 동일한 문자열이 아닌 서로 다른 문자열로 비교됩니다. 예시:

mysql> SET NAMES 'latin1' COLLATE 'latin1_swedish_ci';
mysql> SELECT 'a' = 'a ';
+------------+
| 'a' = 'a ' |
+------------+
|          1 |
+------------+
mysql> SET NAMES 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci';
mysql> SELECT 'a' = 'a ';
+------------+
| 'a' = 'a ' |
+------------+
|          0 |
+------------+

자세한 내용은 비교 시 후행 공백 처리를 참조하십시오.
INFORMATION_SCHEMACOLLATIONS 테이블에는 각 정렬 규칙의 패드 속성을 나타내는 PAD_ATTRIBUTE 열이 추가되었습니다.
또한 latin1_de 정렬 규칙에서 발생한 초기 가중치 문자열 절단 문제도 수정되었습니다. 이 변경의 주된 영향은 WEIGHT_STRING() 함수 결과에 있습니다. (WL #10354)

MySQL 8.0.0에 추가된 utf8mb4 유니코드 문자 세트를 위한 대소문자 구분 없음 및 강세 구분 없음의 콜레이션에 더하여, 새로운 대소문자 구분 및 강세 구분이 있는 콜레이션이 추가되었습니다. 일반 콜레이션은 utf8mb4_0900_as_cs로 명명되었으며, 언어별 규칙이 적용되는 언어별 콜레이션은 utf8mb4_0900_as_cs와 유사한 특성을 가지지만 ISO 639-1 언어 코드를 사용해 언어별 특성을 반영합니다. 예외로, 두 가지 경우 독일어 전화번호부 순서와 전통 스페인어는 언어 코드에 변형 항목이 추가됩니다.

참고
utf8mb4_ja_0900_as_cs는 MySQL에서 Unicode를 위한 최초의 일본어 전용 콜레이션입니다.

Table 2 utf8mb4 UCA 9.0.0 언어별 콜레이션

언어명콜레이션
Croatianutf8mb4_hr_0900_as_cs
Czechutf8mb4_cs_0900_as_cs
Danishutf8mb4_da_0900_as_cs
Esperantoutf8mb4_eo_0900_as_cs
Estonianutf8mb4_et_0900_as_cs
German phone book orderutf8mb4_de_pb_0900_as_cs
Hungarianutf8mb4_hu_0900_as_cs
Icelandicutf8mb4_is_0900_as_cs
Japaneseutf8mb4_ja_0900_as_cs
Latvianutf8mb4_lv_0900_as_cs
Lithuanianutf8mb4_lt_0900_as_cs
Polishutf8mb4_pl_0900_as_cs
Classical Latinutf8mb4_la_0900_as_cs
Romanianutf8mb4_ro_0900_as_cs
Slovakutf8mb4_sk_0900_as_cs
Slovenianutf8mb4_sl_0900_as_cs
Modern Spanishutf8mb4_es_0900_as_cs
Traditional Spanishutf8mb4_es_trad_0900_as_cs
Swedishutf8mb4_sv_0900_as_cs
Turkishutf8mb4_tr_0900_as_cs
Vietnameseutf8mb4_vi_0900_as_cs

utf8mb4_0900_as_cs는 다음 표의 언어에 대해 대소문자 구분 및 강세 구분이 있는 콜레이션으로 작동합니다.

Table 3 utf8mb4_0900_as_cs에 적합한 언어

언어명언어 코드
German (dictionary order)de
Englishen
French (locale fr_FR)fr
Irish Gaelicga
Indonesianid
Italianit
Luxembourgianlb
Malayms
Dutchnl
Portuguesept
Swahilisw
Zuluzu

utf8mb4_0900_as_cs는 프랑스어 프랑스(locale fr_FR)에는 적합하지만 캐나다 프랑스어(locale fr_CA)에는 적합하지 않습니다. 캐나다 프랑스어의 경우 utf8mb4_0900_ai_ci가 적합합니다. 캐나다 프랑스어와 프랑스어 프랑스 간의 차이점은 강세 문자 순서의 차이에 기인합니다.

utf8mb4_da_0900_as_cs는 다음 표의 언어에 대해 대소문자 및 강세를 구분하는 콜레이션으로 작동합니다.

Table 4 utf8mb4_da_0900_as_cs에 적합한 언어

언어명언어 코드
Norwegianno
Norwegian Bokmålnb
Norwegian Nynorsknn

언어 비전용 utf8mb4_0900_as_cs 및 언어 전용 utf8mb4_<LANG>_0900_as_cs Unicode 콜레이션은 다음과 같은 특성을 가집니다:

  • 이 콜레이션은 Unicode Collation Algorithm (UCA) 9.0.0과 Common Locale Data Repository (CLDR) v30을 기반으로 하며, 대소문자 및 강세를 구분합니다. 이 특성은 콜레이션 이름의 _0900, _as, 및 _cs로 표시됩니다. 예외: utf8mb4_la_0900_as_cs는 CLDR에 고전 라틴어가 정의되어 있지 않아 CLDR을 기반으로 하지 않습니다.
  • 이 콜레이션은 [U+0, U+10FFFF] 범위의 모든 문자를 처리합니다.
  • 언어 비전용 콜레이션의 경우, 모든 문자를 기본 순서(아래 설명 참조)로 정렬합니다. 언어 전용 콜레이션의 경우, 해당 언어의 문자를 언어별 규칙에 따라 정확히 정렬하며, 해당 언어에 포함되지 않은 문자는 기본 순서로 정렬합니다.
  • 기본적으로, DUCET 테이블(Default Unicode Collation Element Table)에 나열된 코드 포인트를 가진 문자는 테이블에서 할당된 가중치 값에 따라 정렬됩니다. DUCET 테이블에 코드 포인트가 나열되지 않은 문자는 UCA에 따라 구성된 암시적 가중치 값을 사용하여 정렬됩니다.
    이 콜레이션은 DUCET 가중치 레벨 전부(3차 레벨 포함)를 기준으로 정렬합니다. 이는 대소문자 구분 없음 및 강세 구분 없음 콜레이션이 1차 및 2차 레벨로만 정렬하는 것과 비교됩니다.
  • 언어 비전용 콜레이션의 경우, 결합 문자 시퀀스의 문자는 별도의 문자로 처리됩니다. 언어 전용 콜레이션의 경우, 결합 문자 시퀀스가 문자 정렬 순서를 변경할 수 있습니다.

자세한 내용은 Unicode Character Sets을 참조하십시오. (WL #9109, WL #9751)

컴파일 관련 사항

비호환 변경: my_bool 타입이 MySQL 소스 코드에서 더 이상 사용되지 않습니다. C 부울 변수를 나타내기 위해 이 타입을 사용한 서드파티 코드는 bool 또는 int C 타입을 대신 사용해야 합니다.

참고my_bool에서 bool로 변경됨에 따라 mysql.h 헤더 파일을 컴파일하려면 이제 C++ 또는 C99 컴파일러가 필요합니다.

(버그 #25597667)

InnoDB: LOB 페이지 삭제 함수가 LOB 페이지를 삭제하지 못했습니다. (버그 #24480254)

Windows 빌드는 이제 기본 런타임 라이브러리(/MD 플래그 사용)를 사용합니다. (버그 #25611609)

CMake는 이제 Developer Studio 12.6으로 컴파일하는 것을 지원합니다. (버그 #25384295)

MySQL 배포판에 포함된 rapidjson 라이브러리가 버전 1.1.0으로 업그레이드되었습니다. (버그 #24947436, #83515)

서버 빌드에 필요한 Boost 라이브러리의 최소 버전이 이제 1.63.0입니다. (버그 #24579061, #82834, #25126144, #83905)

GCC 버전 4.4 이상에서는 -fno-expensive-optimizations-ffp-contract=off로 대체되어 더 많은 최적화가 활성화됩니다. Alexey Kopytov에게 감사드립니다. (버그 #24571672, #82760)

MySQL 8.0 빌드를 위해 Windows에서는 CMake의 최소 요구 버전이 3.2.3, Solaris에서는 3.4.0, 그 외에서는 2.8.12로 변경되었습니다. (버그 #24481181, #82628)
참고: 버그 #24687701도 참조하십시오.

소스 코드 베이스를 정리하는 작업이 수행되었습니다. 이에 포함된 사항은 불필요한 CMake 확인 제거, 소스 파일에서 사용되지 않는 매크로 제거, 헤더 파일 재구성으로 의존성을 줄이고 더 모듈화, 정의 없는 함수 선언 제거, 로컬 작성 함수들을 표준 라이브러리 함수로 대체하는 작업 등이 있습니다.

구성 관련 사항

소스 배포판에서 이전에 extra 디렉터리에 있던 몇 가지 유틸리티가 새로운 utilities 디렉터리로 이동되었습니다. (버그 #25416084)

디버깅을 위해 두 가지 새로운 CMake 옵션이 제공됩니다. LINK_RANDOMIZEmysqld 바이너리에서 심볼 순서를 무작위로 할지 여부를 지정하며 기본값은 OFF입니다. LINK_RANDOMIZE_SEEDLINK_RANDOMIZE의 시드 값을 지정합니다. (버그 #25336715)

-DENABLE_DEBUG_SYNC=OFF-DWITH_DEBUG=ON을 동시에 사용할 경우 MySQL이 컴파일되지 않던 문제를 해결하기 위해 ENABLE_DEBUG_SYNC 옵션이 제거되었으며, 이제 WITH_DEBUG 활성화 시 디버그 동기화(Debug Sync)가 자동으로 활성화됩니다. (버그 #18374703)

지속 시스템 변수와 관련된 다음과 같은 변경 사항이 적용되었습니다:

  • 새로운 문장 RESET PERSISTSET PERSISTmysqld-auto.cnf 파일에 지속된 변수 설정을 제거할 수 있습니다.
  • 글로벌 변수를 DEFAULT나 기본값으로 설정할 때 SET PERSIST 또는 @@PERSIST.를 사용하면 기존에는 mysqld-auto.cnf에 해당 변수를 추가하거나 제거했으나, 이제 항상 mysqld-auto.cnf에 설정이 추가됩니다. 설정을 제거하려면 RESET PERSIST를 사용하십시오.
  • 새로운 퍼포먼스 스키마 테이블 persisted_variables이 추가되어 mysqld-auto.cnf 파일의 내용을 SQL을 통해 런타임에 조회할 수 있게 합니다.퍼포먼스 스키마 variables_info 테이블에 각 시스템 변수가 최근에 설정된 시기와 사용자 정보를 보여주는 새로운 열이 추가되었습니다.

자세한 정보는 Persisted System VariablesRESET PERSIST Statement를 참조하십시오.
이전 버전에서 MySQL을 업그레이드할 경우 이러한 변경 사항이 퍼포먼스 스키마에 반영되도록 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #9720, WL #9763)
참고: 버그 #24522064도 참조하십시오.

query_cache_size 시스템 변수의 기본값이 1M에서 0으로 감소되었습니다. 결과적으로 기본적으로 쿼리 캐시 버퍼가 할당되지 않습니다. (WL #9817)

연결 관리 관련 사항

MySQL 서버는 이제 특정 횟수의 연속적인 접속 실패 후 클라이언트에 대한 서버 응답 지연을 점차 증가시키는 기능을 활성화하는 플러그인 라이브러리를 포함합니다. 이 기능은 MySQL 사용자 계정에 접근하려는 무차별 대입 공격을 지연시켜 억제하는 역할을 합니다. 자세한 내용은 연결 제어 플러그인을 참조하십시오. (WL #8885)

데이터 딕셔너리 관련 사항

SQL 계층 코드와 스토리지 엔진 API가 다음을 지원하도록 확장되었습니다:

  • InnoDB가 테이블에 암묵적으로 추가하는 보조 열과 키, 스토리지 엔진 전용 데이터 및 테이블과 테이블스페이스에 대한 객체 식별자, InnoDB 전문 검색 보조 테이블 및 유사한 암묵적으로 생성된 객체에 대한 정보를 저장하는 기능.
  • 데이터 사전 업데이트, 스토리지 엔진 변경 사항, DDL 작업에 대한 바이너리 로그 기록을 원자적 트랜잭션으로 결합하는 기능.

DROP TABLE의 동작이 일부 변경되었습니다. 지정한 테이블 중 존재하지 않는 테이블이 있을 경우 이전에는 존재하지 않는 테이블의 이름을 표시하며 오류를 반환했으나, 존재하는 테이블은 삭제했습니다. 이제는 존재하지 않는 테이블의 이름을 표시하고, 오류와 함께 아무런 변경도 하지 않습니다.
자세한 내용은 원자적 데이터 정의문 지원WL#7743을 참조하십시오. (WL #7743)

다음의 INFORMATION_SCHEMA 테이블이 데이터 사전 테이블의 뷰로 재구현되었습니다:

EVENTS
PARAMETERS
ROUTINES
TRIGGERS

이러한 테이블에 대한 쿼리는 이제 데이터 사전 테이블에서 정보를 가져오므로 이전보다 더 효율적입니다. 예를 들어, 서버는 더 이상 각 INFORMATION_SCHEMA 테이블 쿼리를 위해 임시 테이블을 생성할 필요가 없습니다.
이러한 테이블 개선 사항은 해당 INFORMATION_SCHEMA 테이블과 관련된 정보를 표시하는 SHOW 명령문에도 적용됩니다. 예를 들어, SHOW TRIGGERSTRIGGERS 테이블과 동일한 정보를 표시합니다.
이 MySQL 릴리스를 이전 버전에서 업그레이드하는 경우 mysql_upgrade를 실행하고 서버를 재시작하여 이러한 변경 사항을 반영해야 합니다. (WL #9494)

사용 중단 및 제거 관련 사항

호환성 변경; InnoDB; 파티셔닝: ALTER TABLE ... UPGRADE PARTITIONING 문은 더 이상 지원되지 않습니다.

사용 중단된 PROCEDURE ANALYSE() 구문이 제거되었습니다. (WL #4745)

사용 중단된 libmysqld 임베디드 서버 라이브러리가 다음과 함께 제거되었습니다:

  • mysql_config--libmysqld-libs, --embedded-libs, --embedded 옵션
  • CMakeWITH_EMBEDDED_SERVER, WITH_EMBEDDED_SHARED_LIBRARY, INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR 옵션
  • (문서화되지 않은) mysql--server-arg 옵션
  • mysqltest--embedded-server, --server-arg, --server-file 옵션
  • mysqltest_embeddedmysql_client_test_embedded 테스트 프로그램

(WL #9721, WL #9722, WL #9816)

사용 중단된 --temp-pool 서버 옵션이 제거되었습니다. (WL #8396)

사용 중단된 replace 유틸리티가 제거되었습니다. 이 유틸리티를 계속 사용하려면 현재 버전으로 업그레이드하기 전에 설치된 MySQL 버전에서 복사본을 유지하십시오. (WL #9874)

파서는 더 이상 SQL 문에서 \NNULL의 동의어로 간주하지 않습니다. 대신 NULL을 사용하십시오.
이 변경은 LOAD DATA 또는 SELECT ... INTO OUTFILE를 사용하는 텍스트 파일 가져오기나 내보내기 작업에는 영향을 미치지 않으며, 이 경우 \N은 여전히 NULL을 나타냅니다. 자세한 내용은 LOAD DATA 문을 참조하십시오. (WL #7247)

DTrace에 대한 지원이 제거되었습니다. (WL #9581)

옵티마이저 관련 사항

InnoDB: MySQL이 이제 내림차순 인덱스를 지원하게 되었습니다. 인덱스 정의에서 DESC는 더 이상 무시되지 않으며 키 값을 내림차순으로 저장합니다. 이전에는 역순으로 인덱스를 스캔할 수 있었으나 성능 저하가 발생했습니다. 내림차순 인덱스는 순방향으로 스캔할 수 있어 더 효율적입니다. 또한, 내림차순 인덱스를 통해 옵티마이저가 여러 열로 구성된 인덱스를 사용할 때 일부 열은 오름차순, 다른 열은 내림차순으로 섞어 가장 효율적인 스캔 순서를 적용할 수 있습니다. 자세한 내용은 내림차순 인덱스를 참조하세요.

참고
이전에는 GROUP BY가 기본적으로 정렬을 암시적으로 수행했으나(GROUP BY 열에 대해 ASC 또는 DESC 지정자가 없을 때), 암시적인 GROUP BY 정렬에 의존하는 것은 더 이상 권장되지 않습니다. 이제 GROUP BY는 기본적으로 정렬을 수행하지 않으므로 쿼리 결과가 이전 MySQL 버전과 다를 수 있습니다. 원하는 정렬 순서를 얻으려면 GROUP BY 열에 명시적으로 ASC 또는 DESC 지정자를 사용하거나 ORDER BY 절을 추가하세요.

(WL #1074, WL #7737)

옵티마이저 추적 출력은 이제 filesort 작업에 대한 추가 정보를 포함하며, 예를 들어 키와 페이로드 크기 및 추가 필드가 압축되지 않는 이유 등을 포함합니다. (버그 #25246184, 버그 #84180)

이전에는 보이지 않는 인덱스가 InnoDB 스토리지 엔진에서만 지원되었습니다. 이제 보이지 않는 인덱스는 스토리지 엔진에 관계없이 사용할 수 있습니다. (버그 #23541244)

GROUPING() 함수가 GROUP BY 쿼리에서 WITH ROLLUP 수정자를 포함할 때 사용되도록 도입되었습니다. 이 함수는 쿼리 결과의 슈퍼 집계 행에서 NULL 값과 일반 그룹화된 행에서의 NULL 값을 구별할 수 있게 합니다. 자세한 내용은 Miscellaneous FunctionsGROUP BY Modifiers를 참조하세요. 이 기능 구현에 부분적으로 사용된 패치를 제공해 준 Zhe Dong에게 감사드립니다.

참고GROUPING은 이제 예약어가 되었으며 식별자로 사용하려면 식별자 따옴표가 필요합니다.

(버그 #11754449, 버그 #46053, 버그 #11745963, 버그 #21728, WL #1979)

옵티마이저는 이제 Index Merge 접근 방식을 사용할지 여부를 지정하는 INDEX_MERGENO_INDEX_MERGE 힌트를 지원합니다. 예:

SELECT /*+ INDEX_MERGE(t1 f1, f2, f3) */ f2 FROM t1
  WHERE f1 = 'o' AND f2 = f3 AND f3 <= 4;
SELECT /*+ NO_INDEX_MERGE(t1 f2, f3) */ f1 FROM t1
  WHERE (f2 = 5 OR f3 = 'c') AND (f1 = 4 OR f4 = 'f');

자세한 내용은 Index Merge OptimizationOptimizer Hints를 참조하세요. (WL #9167)

mysql 시스템 데이터베이스의 server_costengine_cost 옵티마이저 비용 모델 테이블에는 이제 각 비용 테이블 추정에 대한 기본값이 포함된 default_value 열이 추가되었습니다. 이 열은 관련된 비용 추정을 변경하더라도 그 값을 유지하는 읽기 전용 생성 열입니다. 자세한 내용은 옵티마이저 비용 모델을 참조하세요.
이전 버전에서 MySQL 릴리스로 업그레이드하는 경우, mysql 시스템 데이터베이스에 이러한 변경 사항을 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #10128)

옵티마이저 비용 모델 engine_cost 테이블에서 메모리 접근 비용이 디스크 접근 비용에 비해 감소되었습니다. 이 변경의 결과로 동일한 쿼리를 두 번 실행할 때 실행 계획이 달라질 수 있습니다. 예를 들어, 서버 시작 시 데이터가 버퍼 풀에 읽히기 전에 실행할 경우와 쿼리를 실행한 후 데이터가 메모리에 있는 경우에 다른 계획을 얻을 수 있습니다. (WL #8737)

MySQL은 이제 재귀적 및 비재귀적 공통 테이블 식(CTE)을 지원합니다. 공통 테이블 식을 사용하면 WITH 절이 SELECT 문 및 특정 다른 문 앞에 오도록 허용하여 명명된 임시 결과 세트를 사용할 수 있습니다. 자세한 내용은 WITH (Common Table Expressions)을 참조하세요.

참고RECURSIVE는 이제 예약어가 되었으며 식별자로 사용하려면 식별자 따옴표가 필요합니다.

(WL #883, WL #3634)

옵티마이저는 이제 테이블을 조인하는 순서를 지정할 수 있는 힌트를 지원합니다. 자세한 내용은 Optimizer Hints를 참조하세요. (WL #9158)

패키징 관련 사항

Microsoft Windows: 알림: MySQL 8.0은 Windows 플랫폼에서 실행되기 위해 Microsoft Visual C++ 2015 재배포 패키지가 필요합니다. 사용자는 서버를 시작하기 전에 시스템에 해당 패키지가 설치되어 있는지 확인해야 합니다. 해당 패키지는 Microsoft 다운로드 센터에서 제공됩니다.

RPM 패키지 구조 변경으로 인해 MySQL 서버를 깨끗하게 설치하기 위해 더 많은 패키지 세트를 제거해야 합니다. (버그 #25603087)

잠재적인 경쟁 조건을 피하기 위해 Debian 패키지는 이제 mkdir, touch, chown의 조합 대신 GNU install 유틸리티를 사용합니다. (버그 #25258829)

새로운 Debian/Ubuntu 패키지인 server-coreclient-core가 추가되었습니다. 이 패키지들은 바이너리만 포함하며, 설정 파일이나 서비스 스크립트, 디렉토리 설정, 매뉴얼 페이지 등은 포함하지 않습니다. 표준 패키지와 함께 자동으로 설치되지만, 독립적으로 설치할 경우 MySQL이 완전히 설정되지 않습니다. 이 패키지는 자체 설치 구성을 사용자 지정하고자 하는 사용자에게 유용할 수 있습니다. (버그 #25146364)

scripts/mysql_security_commands.sqlsupport-files/mysql.server-sys5.sh는 더 이상 사용되지 않으며 MySQL 배포판에서 제거되었습니다. (버그 #24756400, 버그 #24756442)

RPM 패키지는 NUMA 지원이 있는 플랫폼(OEL EL5 이상, Fedora, SLES, Docker)에서 -DWITH_NUMA=ON 옵션을 사용하여 빌드됩니다. (버그 #24689078)

my-default.cnf.sh 파일(기본 my-default.cnf 또는 my-default.ini 파일을 생성하는 데 사용됨)은 더 이상 소스 배포판에 포함되지 않으며, my-default.cnfmy-default.ini는 배포 패키지에 포함되거나 설치되지 않습니다. (버그 #22525354)

사용되지 않고 문서화되지 않은 archive_readerarchive_test 유틸리티가 MySQL 소스 배포판에서 제거되었습니다. (버그 #12818207, 버그 #62014)

Performance Schema 관련 사항

퍼포먼스 스키마는 최소, 최대 및 평균 명령어 지연 시간에 대한 정보를 포함한 명령어 이벤트 요약 테이블을 유지 관리하여 시스템 성능을 고수준에서 평가할 수 있게 합니다. 이제 퍼포먼스 스키마는 명령어 지연 시간에 대한 히스토그램 데이터도 수집하여 지연 시간 분포에 대한 추가적인 인사이트를 제공합니다. 이러한 히스토그램은 다음 테이블에서 사용할 수 있습니다:

자세한 내용은 명령어 히스토그램 요약 테이블을 참조하세요.
또한, events_statements_summary_by_digest 테이블에는 명령어 지연 시간에 대한 백분위수 정보를 제공하는 열이 추가되었습니다. 더 자세한 내용은 명령어 요약 테이블을 참조하세요.
이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우 이러한 변경 사항을 퍼포먼스 스키마에 통합하기 위해 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #5384)

시스템 및 상태 변수 정보는 이제 INFORMATION_SCHEMA에서 유지 관리되지 않습니다. 다음 테이블이 삭제되었습니다: GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, SESSION_STATUS. 대신 해당 퍼포먼스 스키마 테이블을 사용하십시오. 퍼포먼스 스키마 시스템 변수 테이블퍼포먼스 스키마 상태 변수 테이블을 참조하십시오. 또한, 시스템 및 상태 변수 정보가 INFORMATION_SCHEMA 테이블에서 퍼포먼스 스키마 테이블로 이동하는 전환 기간 동안 사용되었던 show_compatibility_56 시스템 변수가 제거되었습니다. 다음 상태 변수는 삭제되었습니다: Slave_heartbeat_period, Slave_last_heartbeat, Slave_received_heartbeats, Slave_retried_transactions, Slave_running. 제공된 정보는 퍼포먼스 스키마 테이블에서 확인할 수 있습니다. 자세한 내용은 퍼포먼스 스키마 시스템 및 상태 변수 테이블로의 이전을 참조하세요. (WL #8057)

INFORMATION_SCHEMAINNODB_LOCKSINNODB_LOCK_WAITS 테이블은 더 이상 지원되지 않습니다. InnoDB 데이터 잠금 정보를 얻으려면 퍼포먼스 스키마의 data_locksdata_lock_waits 테이블을 사용하십시오. 또는, sys 스키마의 innodb_lock_waitsx$innodb_lock_waits 뷰를 사용하여 제거된 INFORMATION_SCHEMA 테이블 대신 새 퍼포먼스 스키마 테이블을 참조할 수 있습니다.
퍼포먼스 스키마 테이블은 어떤 데이터 잠금이 존재하는지, 각 잠금을 보유한 트랜잭션, 다른 잠금에 의해 차단된 트랜잭션 잠금 요청 등을 보고합니다. InnoDB의 경우, data_locks 테이블은 모든 데이터 잠금을 보고하는 반면, INNODB_LOCKS 테이블은 기다리는 데이터 잠금만 보고합니다. 자세한 내용은 data_locks 테이블data_lock_waits 테이블을 참조하십시오. 이전 테이블 열을 새 테이블 열에 매핑하는 방법에 대해서는 INFORMATION_SCHEMA INNODB_LOCKS 테이블INFORMATION_SCHEMA INNODB_LOCK_WAITS 테이블을 참조하세요.
이 테이블들은 필요한 권한이 다릅니다. INFORMATION_SCHEMA 테이블은 전역 PROCESS 권한이 필요하며, 퍼포먼스 스키마 테이블은 선택할 테이블에 대한 퍼포먼스 스키마의 일반적인 SELECT 권한이 필요합니다.
sys 스키마의 innodb_lock_waitsx$innodb_lock_waits 뷰는 변경 없이 사용할 수 있지만, 스키마 및 테이블 이름이 포함된 locked_table 열은 제거되었고, 대신 스키마와 테이블 이름을 각각 포함하는 locked_table_schemalocked_table_name 열이 추가되었습니다. 또한, 이제 이 뷰에는 locked_table_partitionlocked_table_subpartition 열이 포함됩니다. 자세한 내용은 innodb_lock_waits 및 x$innodb_lock_waits 뷰를 참조하십시오.
이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 퍼포먼스 스키마와 sys 스키마에 이러한 변경 사항을 통합하기 위해 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #9275, WL #6657)

플러그인 관련 사항

MySQL 서버 8.0에는 서버 확장성을 개선하기 위한 컴포넌트 기반 인프라가 포함되어 있습니다. 자세한 내용은 MySQL Components를 참조하세요. 그러나 MySQL 플러그인은 컴포넌트 인터페이스 이전에 도입된 인터페이스를 사용합니다. 새로운 플러그인 서비스인 plugin_registry_service를 통해 플러그인이 컴포넌트 레지스트리 및 해당 서비스를 이용할 수 있게 됩니다. (WL #4989)

보안 관련 사항

비호환 변경: STANDALONEWIN 빌드의 경우, 기본 secure_file_priv 값이 빈 문자열에서 NULL로 변경되었습니다. 이는 기본적으로 보안이 강화된 설정으로, 가져오기 및 내보내기 작업이 비활성화됩니다. 이러한 작업을 허용하려면 secure_file_priv를 해당 작업에 사용할 디렉터리 경로로 설정하십시오. (버그 #24679907, 버그 #24695274, 버그 #24707666, WL #6782)

비호환 변경: mysqld_safe에 다음과 같은 변경 사항이 적용되었습니다:

  • mysqld_safermchown 명령 사용 방식의 보안 취약점으로 인해 권한 상승이 발생할 수 있는 문제를 해결했습니다. 이제 chown은 대상 디렉터리가 /var/log일 때만 사용할 수 있습니다. 또한 Unix 소켓 파일의 디렉터리가 없을 경우 이전에는 해당 디렉터리가 자동으로 생성되었으나, 이제는 오류가 발생합니다. 이 변경 사항으로 인해 Solaris에서는 mysqld_safe 실행에 /bin/bash가 필요하며, 다른 Unix/Linux 플랫폼에서는 여전히 /bin/sh가 사용됩니다.
  • --ledir 옵션은 이제 옵션 파일이 아닌 명령줄에서만 사용할 수 있습니다.mysqld_safe는 현재 작업 디렉터리를 무시합니다.
  • mysqld_safe를 호출하는 초기화 스크립트가 --basedir을 명시적으로 전달합니다.초기화 스크립트는 기본 디렉터리가 /var/log 또는 /var/lib인 경우에만 에러 로그 파일을 생성합니다.SLES용 사용되지 않는 systemd 파일이 제거되었습니다.

관련된 기타 변경 사항:

  • mysqld_safe를 호출하는 초기화 스크립트는 --basedir을 명시적으로 전달합니다.
  • 초기화 스크립트는 기본 디렉터리가 /var/log 또는 /var/lib인 경우에만 에러 로그 파일을 생성합니다.
  • SLES용으로 사용되지 않는 systemd 파일이 제거되었습니다.

(버그 #24483092, 버그 #25088048, 버그 #25378439, 버그 #25378565)
참고: 버그 #24464380, 버그 #24388753, 버그 #24619033, 버그 #82920도 참조하십시오.

yaSSL이 버전 2.4.2로 업그레이드되었습니다. 이번 업그레이드에서는 잠재적인 AES 측채널 누출, 비정상적인 크기의 DSA 패딩, 긴 경로 디렉터리 이름을 처리하지 못하는 SSL_CTX_load_verify_locations() OpenSSL 호환성 함수 문제 등이 수정되었습니다. (버그 #24512715, 버그 #24740291)

OpenSSL은 2016년 12월에 버전 1.0.1에 대한 지원을 종료했습니다. 자세한 내용은 https://www.openssl.org/policies/releasestrat.html을 참조하세요. 따라서 MySQL 상용 서버 빌드는 이제 버전 1.0.1 대신 버전 1.0.2를 사용하며, MySQL 상용 서버용 OpenSSL 라이브러리는 1.0.1에서 1.0.2j로 업데이트되었습니다. 이 버전에서 수정된 문제에 대한 설명은 https://www.openssl.org/news/vulnerabilities.html을 참조하십시오.
이 변경 사항은 yaSSL 라이브러리를 사용하는 Oracle이 제공하는 MySQL 커뮤니티 빌드에는 영향을 미치지 않습니다. (WL #9136)

공간 데이터 지원

비호환성 변경: 이전에는 ST_Distance()가 카르테시안 좌표계(Cartesian Spatial Reference Systems, SRS)만 지원했습니다. 이제 ST_Distance()는 지리적 SRS의 기하 값을 감지하고, 타원체 상의 거리(미터 단위)를 반환합니다. 허용되는 지리적 인수 유형은 PointPoint, 또는 PointMultiPoint (순서 무관)입니다. 투영 SRS 및 SRID 0에 대한 계산은 이전과 동일하게 유지됩니다. 자세한 내용은 객체 형상을 사용하는 공간 관계 함수를 참조하십시오.

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

(WL #9347)

비호환성 변경: 다음 함수들은 이전에 WKB 문자열이나 기하학 인수를 허용했으나 이제는 기하학 인수를 허용하지 않으며, 기하학 인수를 사용할 경우 오류가 발생합니다.


해당 함수들이 지오메트리 인수에서 WKB 인수로 변경되는 쿼리 마이그레이션에 대한 자세한 내용은 WKB 값으로 지오메트리 값을 생성하는 함수를 참조하세요. (WL#10166)

비호환성 변경: 다음 함수들은 이제 위도와 경도 좌표를 공간 참조 시스템(SRS)이 지정한 순서에 따라 해석합니다. 또한 기본 축 순서를 재정의할 수 있는 선택적 인수를 허용합니다.

자세한 내용은 WKT 값을 사용하여 기하학 값을 생성하는 함수WKB 값을 사용하여 기하학 값을 생성하는 함수를 참조하십시오.

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

(WL #9434, WL #9435)

비호환성 변경: 다음 함수들은 이제 기하학 값 인수에 적용되는 공간 참조 시스템이 지정한 순서에 따라 위도와 경도 좌표를 반환합니다. 또한 기본 축 순서를 재정의할 수 있는 선택적 인수를 허용합니다.

자세한 내용은 기하학 형식 변환 함수를 참조하십시오.

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

(WL #9432, WL #9433)

st_spatial_reference_systems 데이터 사전 테이블이 SRID 0이 아닌 공간 참조 시스템의 정보를 저장하도록, EPSG 데이터셋 8.7에서 9.0으로 업그레이드되었습니다. 또한 이 테이블의 내용은 데이터 사전 뷰로 구현된 INFORMATION_SCHEMA ST_SPATIAL_REFERENCE_SYSTEMS 테이블을 통해 공개됩니다. 자세한 내용은 INFORMATION_SCHEMA ST_SPATIAL_REFERENCE_SYSTEMS 테이블을 참조하십시오.
MySQL은 이제 공간 데이터를 저장하는 테이블 열에 대한 정보를 제공하는 INFORMATION_SCHEMA ST_GEOMETRY_COLUMNS 테이블을 보유합니다. 이 새 테이블은 기존의 INFORMATION_SCHEMA COLUMNS 테이블을 기반으로 하는 뷰로 구현되었습니다. 자세한 내용은 INFORMATION_SCHEMA ST_GEOMETRY_COLUMNS 테이블을 참조하십시오.
이 MySQL 릴리스를 이전 버전에서 업그레이드하는 경우, mysql_upgrade를 실행하고 서버를 재시작하여 이러한 INFORMATION_SCHEMA 변경 사항을 적용해야 합니다. (버그 #25337054, 버그 #84384, WL #9348, WL #8582)

새로운 공간 함수인 ST_SwapXY()는 기하학 인수를 받아 각 좌표 쌍의 X와 Y 값을 교환합니다. 자세한 내용은 기하학 형식 변환 함수를 참조하십시오. (WL #9436)

SQL 구문 관련 사항

파생 테이블 구문은 이제 테이블 이름 뒤에 명시적인 열 이름 목록을 지정하여 선택 목록에서 가져온 기본 열 이름을 재정의할 수 있습니다. 예를 들어, 다음 파생 테이블의 열 이름은 선택 목록에서 가져옵니다:

mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt;
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+

열 이름을 제공하려면 파생 테이블 이름 뒤에 괄호로 묶인 열 이름 목록을 추가합니다:

mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt (a, b, c, d);
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+

(WL #883)

테스트 스위트 관련 사항

mysql-test-run.pl은 이제 test 데이터베이스의 기본 캐릭터셋을 지정하기 위한 --charset-for-testdb=charset_name 옵션을 제공합니다. 기본값은 latin1입니다. (버그 #25494068, 버그 #84806)

mysql-test-run.pl은 이제 --only-big-tests 옵션을 지원하여 큰 테스트만 실행하고, 일반 테스트(큰 테스트가 아닌 테스트)는 건너뜹니다. --big-test--only-big-tests가 모두 주어질 경우, --only-big-tests는 무시됩니다. (버그 #25182306)

mysql-test-run.pl에 새로운 --discover 옵션이 추가되었습니다. 이 옵션을 지정하면 mysql-test-run.plmysqld를 시작할 때 개발자 스튜디오 메모리 오류 탐지 도구인 discover를 미리 로드하려고 시도합니다. discover의 보고서는 --vardir 옵션으로 지정된 디렉터리 내의 log/mysqld.%p.txt에 있습니다. 이 옵션은 SPARC-M7 시스템에서만 지원됩니다. (버그 #25048971)

mysqltest는 이제 expr 명령을 지원하여 표현식을 평가하고 변수에 할당할 수 있습니다. 자세한 내용은 MySQL 서버 도큐먼트에서 확인할 수 있습니다: https://dev.mysql.com/doc/index-other.html. (버그 #24806741)

mysqltest는 이제 force-cpdir 명령을 지원하여 소스 디렉터리를 대상 디렉터리로 재귀적으로 복사(즉, 하위 디렉터리도 복사)할 수 있습니다. (버그 #24806681)

mysql-test-run.pl에 새로운 --summary-report 옵션이 추가되었습니다. 이 옵션을 지정하면, mysql-test-run.pl은 테스트 요약의 텍스트 버전만 생성하여 해당 옵션 인자로 지정된 파일에 저장합니다. 이 파일은 이메일로 전송하기에 적합한 형식입니다. (버그 #24512357, 버그 #82708)

mysql-test-run.pl--valgrind-option=--tool=custom_tool과 함께 실행될 수 없었습니다. 이때 custom_toolmassif 또는 helgrind와 같은 도구를 지정하면, memcheck용 옵션이 추가되어 다른 도구에서 이해하지 못할 수 있기 때문입니다. 또한, mysql-test-run.pl--callgrind 옵션은 잘못된 --base 옵션을 제공하여 callgrind에서 작동하지 않았습니다. Daniel Black의 패치를 바탕으로 수정되었습니다. (버그 #23713613, 버그 #82039)

mysqltestconnect() 함수는 이제 소켓 파일과 TCP/IP 연결 프로토콜을 지정하기 위해 options 인수에 SOCKETTCP 값을 허용합니다.
또한, 전송 프로토콜은 현재 시스템과 일치해야 합니다. 이전에는 비-Windows 시스템에서 PIPE 또는 SHM을 전달할 경우 기본(소켓 파일) 전송 프로토콜이 사용되었으나, 이제 오류가 발생하며, Windows 시스템에서 SOCKET을 전달할 경우에도 오류가 발생합니다. (버그 #21046241)

mysql-test-run.pl은 이제 --bootstrap 옵션을 지원하여 mysqld 옵션을 부트스트랩 옵션으로 지정할 수 있습니다. mysql-test-run.plmaster.opt 파일에서 --bootstrap 옵션을 발견하면 데이터 디렉터리를 제거하고 재초기화한 후, 새 옵션 설정으로 서버를 재시작합니다. (버그 #18184868)

X Plugin 관련 사항

MYSQLX_TCP_PORT CMake 옵션이 무시되었습니다. (버그 #25493867, 버그 #84804)

protobuf 컴파일러가 mysqlx.proto에 대해 “미사용 import” 경고를 발생시켰습니다. (버그 #25444009, 버그 #84641)

초기화되지 않은 상태에서 검증이 발생할 때 연결이 해제되었습니다. (버그 #25392280)

Mysqlx_notice_warning_sentMysqlx_notice_other_sent 상태 변수 값이 예상대로 증가하지 않았습니다. (버그 #25289949, 버그 #84258, 버그 #25290001, 버그 #84260)

MYSQL_DYNAMIC_PLUGIN 매크로의 수동 정의는 불필요했습니다. (버그 #25162590, 버그 #83988)

IPv6 연결성 지원을 위해 새 시스템 변수 mysqlx_bind_address가 기본값 ‘0.0.0.0’으로 정의되었으나, 기본값은 ‘*’이어야 했습니다. 이를 통해 IPv6 주소, IPv4 주소, 호스트명을 사용하여 X 플러그인에 연결할 수 있습니다. (버그 #25047909, 버그 #83688)

stmt 필드가 메시지에서 필수로 표시되었습니다:

message Mysqlx.Crud.ModifyView {
   required Collection collection = 1;

   optional string definer = 2;
   optional ViewAlgorithm algorithm = 3;
   optional ViewSqlSecurity security = 4;
   optional ViewCheckOption check = 5;

   repeated string column = 6;
   required Mysqlx.Crud.Find stmt = 7;
}

(버그 #24968735, 버그 #83595)

CREATE TABLE foo (doc JSON)으로 생성된 테이블에 대해 list_objects 구문이 테이블을 컬렉션으로 잘못 보고했습니다. (버그 #24963952)

인증 전에 연결된 소켓에 Expect.Open을 보내면 다음과 같은 오류 메시지가 표시되었습니다:

... Plugin mysqlx reported: '10: Invalid message 24 received during client initialization'
... Plugin mysqlx reported: '10: ERROR reading from socket Bad file descriptor (9) 2'

(버그 #24940144, 버그 #83494)

Linux에서 MySQL 셸이 JavaScript와 Python 인터랙티브 모드에서 컬렉션 이름의 대소문자가 일치하지 않으면 컬렉션이 숨겨졌습니다. (버그 #24848125)

인증 중인 사용자와 일치하는 여러 사용자 계정이 있는 경우, X 플러그인은 최적의 일치 계정 대신 모든 일치 계정을 인증하려고 시도했습니다. (버그 #24847537)

C++ 11에서 대응되는 기능을 가진 Boost 클래스가 이동되거나 래핑되었습니다. (버그 #24680856)

동일한 포트에서 두 개의 X 플러그인 인스턴스를 시작하면 오류 메시지가 두 줄로 나뉘어 중복된 정보가 포함되었습니다. (버그 #24679018, 버그 #83008)

performance_schema.threads 테이블이 X 플러그인의 processlist 통계를 표시하지 않았습니다. (버그 #24638038)

클라이언트가 서버에 알 수 없는 메시지 유형을 보낸 경우, 서버는 오류 메시지를 반환한 후 클라이언트를 연결 해제했습니다. (버그 #24611754, 버그 #82868)

클라이언트가 길이가 0인 메시지를 보낼 때 X 플러그인은 응답을 보내지 않았습니다. 이후 메시지에 대해 클라이언트는 오류 E_X_BAD_MESSAGE를 수신하고 헤더 내용에 따라 연결이 해제되었습니다. (버그 #24595459, 버그 #82862)

X 플러그인은 인증되지 않은 사용자에게도 버전 정보를 표시했습니다. (버그 #24562707, 버그 #82784)

X 플러그인은 Update 문에서 중복된 필드 이름이 존재할 때 잘못된 쿼리를 생성했습니다. (버그 #24510083)

sys 데이터베이스의 일부 뷰에 대해 list_objects 구문이 잘못된 정보를 반환했습니다. (버그 #24472325)

X 플러그인은 연결이 닫혀도 클라이언트에 결과 집합을 보내려고 시도했습니다. 이제 플러그인은 연결이 재설정되면 저장 프로시저의 실행을 중단합니다. (버그 #24440344)

데이터베이스 이름을 명시적으로 설정하지 않고 list_objects 문을 사용하여 개체를 나열하려고 하면 컬렉션이 잘못 분류되어 테이블로 처리되었습니다. (버그 #23205895, 버그 #81248)

X 플러그인은 이제 sha256_password 플러그인을 지원합니다. (WL #9271)

기능 추가 및 변경 사항

비호환 변경: INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 구문에서 UPDATESELECT 열을 참조하고 SELECTUNION인 경우 결과가 잘못될 수 있었습니다. 이제 이러한 구문은 금지되며 오류를 발생시킵니다. 이 제한을 우회하려면 UNION을 파생 테이블로 작성하여 단일 테이블 결과 집합으로 취급할 수 있도록 합니다. 자세한 내용은 INSERT … ON DUPLICATE KEY UPDATE 구문을 참조하십시오. (WL #5094)

InnoDB: 기본적으로 InnoDB는 통계를 계산할 때 커밋되지 않은 데이터를 읽습니다. 커밋되지 않은 트랜잭션이 테이블의 행을 삭제하는 경우, InnoDB는 삭제 표시된 레코드를 제외하고 행 추정치와 인덱스 통계를 계산하여 READ UNCOMMITTED 이외의 트랜잭션 격리 수준을 사용하는 다른 트랜잭션에 대해 비최적화된 실행 계획을 생성할 수 있습니다. 새로운 구성 옵션 innodb_stats_include_delete_marked을 활성화하여 InnoDB가 삭제 표시된 레코드를 포함하여 영구 최적화 통계를 계산하도록 할 수 있습니다. (버그 #23333990)

InnoDB: R-트리의 기하학적 파싱 및 경계 상자 계산 코드는 InnoDB에서 서버로 이동되었습니다. (WL #9439)

InnoDB: InnoDB는 이제 SELECT ... FOR SHARESELECT ... FOR UPDATE 잠금 읽기 문에서 NOWAITSKIP LOCKED 옵션을 지원합니다. NOWAIT는 요청된 행이 다른 트랜잭션에 의해 잠겨 있는 경우 문을 즉시 반환하도록 합니다. SKIP LOCKED는 결과 집합에서 잠겨 있는 행을 제거합니다. 자세한 내용은 Locking Read Concurrency with NOWAIT and SKIP LOCKED를 참조하십시오.
SELECT ... FOR SHARESELECT ... LOCK IN SHARE MODE를 대체하지만, LOCK IN SHARE MODE는 이전 버전과의 호환성을 위해 계속 사용할 수 있습니다. 두 문은 동일하게 동작하지만, FOR SHARENOWAIT, SKIP LOCKED, 그리고 OF tbl_name 옵션을 지원합니다. 자세한 내용은 SELECT Statement를 참조하십시오.
OF tbl_name는 잠금 쿼리를 지정된 테이블에 적용합니다.

참고
이제 OF는 예약어가 되었으며, 식별자 인용 없이 식별자로 사용할 수 없습니다.

이제 SELECT ... FOR SHARESELECT ... FOR UPDATE 문에는 SELECT 권한과 더불어 DELETE, LOCK TABLES, 또는 UPDATE 권한 중 적어도 하나가 필요합니다. 이전에는 SELECT 권한만 필요했습니다. (WL #8919, WL #3597)

InnoDB: InnoDB의 데이터 정지 시 암호화 기능이 이제 재실행 로그와 되돌리기 로그 데이터의 암호화를 지원하며, 이는 innodb_redo_log_encryptinnodb_undo_log_encrypt 구성 옵션에 의해 제어됩니다. 자세한 내용은 재실행 로그 암호화되돌리기 로그 암호화를 참조하십시오. (WL #9290, WL #9289)

InnoDB: 디스크에 저장된 InnoDB 내부 임시 테이블은 이제 여러 커서 위치를 지원하여 동일한 스레드 내에서 단일 쓰기 및 다중 읽기 접근이 가능합니다. 이 개선의 목적은 재귀적 및 비재귀적 공통 테이블 표현식(CTE)을 지원하기 위함입니다.
추가적으로, 디스크 기반 InnoDB 내부 임시 테이블의 일관된 읽기 접근이 더티-읽기 방식으로 대체되었으며, 행 수 집계에 테이블 스캔 대신 행 수 통계가 사용됩니다. (WL #9248)

InnoDB: 이제 InnoDBROW_FORMAT=COMPRESSED를 사용하는 테이블에서 대용량 객체를 여러 개의 작은 zlib 스트림으로 압축합니다. 이전에는 대용량 객체 데이터가 단일 zlib 스트림으로 압축되었습니다. (WL #9263)

복제: WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()에 음수 또는 소수의 타임아웃 매개 변수를 제공하면 서버가 예상치 못한 방식으로 동작할 수 있었습니다. 이제 수정된 내용은 다음과 같습니다:

  • 소수 타임아웃 값은 반올림 없이 그대로 읽습니다.
  • 음수 타임아웃 값은 엄격한 SQL 모드의 서버에서는 오류를 반환하며, 엄격하지 않은 SQL 모드에서는 즉시 NULL을 반환하고 대기 없이 경고를 발행합니다.

(버그 #24976304, 버그 #83537)

복제: 수신자(I/O) 및 적용자(SQL) 복제 스레드 간의 경합이 줄어들도록 개선 작업이 수행되었습니다. 이를 통해 슬레이브가 마스터의 높은 삽입 부하를 따라잡을 수 있게 되었습니다. (버그 #78246, 버그 #21753696, WL #8599)

복제: 이진 로그의 자동 삭제 주기를 초 단위로 설정하는 binlog_expire_logs_seconds 시스템 변수가 추가되었습니다. 이 변수와 expire_logs_days의 효과는 누적되어 1.5일과 같은 기간 설정이 가능합니다. 자동 이진 로그 삭제를 완전히 비활성화하려면 두 변수를 모두 0으로 설정하십시오(기본값). (버그 #71697, 버그 #18260088, WL #9237)

복제: 복제 지연 및 대기열을 모니터링하기 위해 성능 스키마 테이블이 추가되었습니다. replication_connection_status 테이블에는 릴레이 로그에서 마지막으로 대기열에 추가된 트랜잭션과 현재 릴레이 로그에 대기열로 추가되고 있는 트랜잭션에 대한 업데이트된 정보가 포함됩니다. replication_applier_status_by_coordinator 테이블에는 작업자의 버퍼에 마지막으로 기록된 트랜잭션과 현재 코디네이터에 의해 처리 중인 트랜잭션에 대한 업데이트된 정보가 포함됩니다. replication_applier_status_by_worker 테이블에는 작업자가 마지막으로 적용한 트랜잭션과 현재 적용 중인 트랜잭션에 대한 업데이트된 정보가 포함됩니다. 각 테이블에 제공되는 정보에는 트랜잭션의 GTID, 커밋 타임스탬프, 처리 단계 타임스탬프, 완료 타임스탬프가 포함됩니다.
replication_applier_status_by_worker 테이블에서 LAST_SEEN_TRANSACTION 열은 APPLYING_TRANSACTION 열로 대체되었습니다. (WL #7374)

복제: 새로운 binlog_expire_logs_seconds 변수는 기존 expire_logs_days 변수와 함께 글로벌 서버 변수로 추가되었습니다. 이 변수는 현재의 일 단위와 비교하여 더 세분화된 바이너리 로그 보존 정책을 수립할 수 있도록 합니다. (WL #9237)

복제: 바이너리 로그를 통한 DDL문 또는 트랜잭션의 복구가 올바르게 구현되었으며, 이는 새로운 데이터 사전을 기반으로 메타데이터 변경을 바이너리 로그에 단일 트랜잭션으로 기록할 수 있는 2단계 커밋 프로토콜을 사용합니다. (WL #9175)

복제: 다중 소스 복제는 이제 채널별 복제 필터를 지원합니다. 이를 통해 특정 채널에서 전달되는 선택된 데이터의 실행을 필터링할 수 있습니다. 이전에는 복제 필터가 글로벌로 적용되어 모든 채널에만 적용되었습니다. (WL #7361)

복제: 행 기반 복제는 이제 바이너리 로그에서 확장된 테이블 메타데이터를 사용합니다. 이 확장된 메타데이터는 두 가지 주요 목적을 위해 사용됩니다: 슬레이브가 마스터와 테이블 구조가 다른 경우 데이터 전송을 원활하게 하며, 외부 소프트웨어가 메타데이터를 사용해 행 이벤트를 디코딩하고 데이터를 외부 데이터베이스에 저장할 수 있습니다. (WL #4618)

복제: GTID 기반의 지연 복제와 복제 지연 모니터링을 위한 인프라가 추가되어 복제 지연을 올바르게 모니터링할 수 있게 되었습니다. 각 트랜잭션(이벤트 또는 문이 아닌)과 관련된 두 가지 새로운 타임스탬프가 바이너리 로그에 추가되었습니다. original_commit_timestamp는 원본 마스터에서 트랜잭션이 커밋된 시간(에포크 이후 마이크로초), immediate_commit_timestamp는 직전 마스터에서 트랜잭션이 커밋된 시간입니다. (WL #7319)

복제: RESET MASTER 문이 확장되어 바이너리 로그 파일 번호를 지정할 수 있게 되었습니다. RESET MASTER TO 문은 새 바이너리 로그 파일의 인덱스를 지정하는 인수를 허용하며, 이는 FLUSH BINARY LOGSPURGE BINARY LOGS TO 문을 단일 RESET MASTER 문으로 대체하여 장애 조치 절차를 간소화하는 데 목적이 있습니다. (WL #9110)

복제: 지연 복제를 위한 지연 정의 및 계산 프로세스가 개선되었습니다. 이는 바이너리 로그의 새로운 타임스탬프인 immediate_commit_timestamp에 의존하며, 이는 직전 마스터의 바이너리 로그에 트랜잭션이 기록된 에포크 이후 마이크로초 단위 시간입니다. 따라서 지연은 더 이상 이벤트별로 계산되지 않고 트랜잭션별로 적용됩니다. (WL #7318)

복제: 이제 바이너리 로그에 기록되는 정보가 커밋 타임스탬프를 기반으로 복제 슬레이브가 병렬 처리를 할지, 아니면 트랜잭션 쓰기 집합을 기반으로 할지 지정할 수 있습니다.
쓰기 집합을 사용하는 경우 커밋 이력에 의존하지 않으므로 커밋 타임스탬프를 사용하는 것보다 더 큰 병렬 처리 가능성을 제공합니다. 이 방식으로 바이너리 로그를 복제 슬레이브에서 적용하면 기본 컴퓨팅 하드웨어(CPU 코어 등)의 기능을 활용하여 이 과정을 가속화할 수 있습니다.
병렬 처리 소스를 선택하는 인터페이스는 새 서버 시스템 변수인 binlog_transaction_dependency_tracking으로 구현되며, COMMIT_ORDER, WRITESET, WRITESET_SESSION 값을 선택할 수 있습니다. COMMIT_ORDER(기본값)는 커밋 타임스탬프를 사용하여 병렬화 정보를 기록하고, WRITESET은 동일한 행을 업데이트하지 않는 트랜잭션이 병렬 처리될 수 있도록 쓰기 집합을 사용하여 정보를 기록합니다. WRITESET_SESSIONWRITESET과 동일한 방식으로 작동하지만 동일한 세션에서 시작된 업데이트는 순서가 변경되지 않습니다. 트랜잭션 의존성 추적을 위해 메모리에 유지되는 행 해시 히스토리의 크기는 이번 릴리스에서 추가된 binlog_transaction_dependency_history_size로 설정할 수 있습니다. (WL #9556, WL #10750)

그룹 복제: 그룹의 뷰 변경 이벤트가 이제 DATABASE 유형의 외부 다중 스레드 슬레이브(MTS)로 복제될 수 있습니다. (버그 #25170698, 버그 #84008)

그룹 복제: 그룹 복제에서 이제 SAVEPOINT SQL 트랜잭션을 지원합니다. (WL #9837, WL #10520)

JSON: JSON 유틸리티 함수 JSON_PRETTY()가 추가되어 기존 JSON 값이나 JSON 문서로 성공적으로 파싱될 수 있는 문자열을 사람이 쉽게 읽을 수 있는 형식으로 출력합니다. 각 JSON 객체 멤버나 배열 값은 출력의 각 줄에 표시되며, 자식 객체나 배열은 부모로부터 2칸 들여쓰기 되어 표시됩니다.

예시:

mysql> SELECT JSON_PRETTY('123');
+--------------------+
| JSON_PRETTY('123') |
+--------------------+
| 123                |
+--------------------+

mysql> SELECT JSON_PRETTY("[1,3,5]");
+------------------------+
| JSON_PRETTY("[1,3,5]") |
+------------------------+
| [
  1,
  3,
  5
]      |
+------------------------+

mysql> SELECT JSON_PRETTY('{"a":"10","b":"15","x":"25"}');
+---------------------------------------------+
| JSON_PRETTY('{"a":"10","b":"15","x":"25"}') |
+---------------------------------------------+
| {
  "a": "10",
  "b": "15",
  "x": "25"
}   |
+---------------------------------------------+

(WL #9191)

JSON: 이전에는 쿼리에서 ORDER BY를 사용해 JSON 값을 정렬할 때, 각 값은 고정된 길이의 일부로 정렬 키에 표현되어 메모리 사용이 1K로 고정되었습니다. 종종 이 사용량이 과도했으며, 예를 들어 정수 스칼라 값은 상대적으로 매우 적은 바이트만을 필요로 함에도 불구하고 나머지 1K는 패딩으로 채워졌습니다.

이를 개선하기 위해 JSON 정렬 키에 가변 길이 부분이 도입되어, 이제 각 키 부분은 값을 저장하는 데 필요한 공간만 차지합니다. 이로 인한 성능 개선 효과는 다음과 같습니다:

  • 정렬 버퍼 공간이 더 효과적으로 사용되므로, 파일 정렬 시 디스크로의 플러시가 덜 필요하게 되어 더 많은 데이터를 메모리에서 정렬할 수 있습니다.
  • 짧은 키는 더 빠르게 비교할 수 있으므로, 메모리 내 정렬뿐만 아니라 디스크를 사용하는 정렬에서도 성능이 눈에 띄게 개선됩니다.

(WL #8741)

WEIGHT_STRING() 디버깅 함수가 더 이상 LEVEL 구문을 지원하지 않습니다. (버그 #25469683, 버그 #84723)

Developer Studio 12.5의 경우, 32비트 빌드는 FORCE_UNSUPPORTED_COMPILER 옵션이 지정되지 않으면 비활성화됩니다. (버그 #25267157, 버그 #84230)

스토리지 엔진에 구애받지 않는 몇 가지 외래 키 제약 조건 검사가 InnoDB 내부에서 수행되었으며, 이제는 SQL 계층에서 수행됩니다. (버그 #25252847)

일부 GIS 범위 초과 검사 기능이 단순화되었습니다. 기여해 주신 Daniel Black님께 감사드립니다. (버그 #25202470, 버그 #84062)

Developer Studio 12.5에서 사용되는 컴파일러 플래그 세트가 개선되었습니다. (버그 #25148549, 버그 #83955)

CMake가 이제 CMP0022 OLD 대신 CMP0022 NEWCMAKE_POLICY를 사용합니다. (버그 #25090147, 버그 #83804)

MySQL이 -Wno-error 옵션으로 빌드되도록 구성된 경우, mysql_config--cflags 옵션에 대해 잘못된 출력을 생성했습니다.

이제 mysql_configpkg-config가 생성하는 컴파일러 옵션 세트는 블랙리스트 방식이 아닌 화이트리스트 방식을 사용해 결정됩니다. (버그 #25040566, 버그 #22898475, 버그 #80662)

UTF-8 바이너리 정렬의 성능이 개선되었습니다. (버그 #24788778, 버그 #83247, 버그 #25076862)

mysqld의 systemd 서비스 파일에 이제 [Unit] 섹션에 Documentation 값이 포함되어 MySQL 참조 매뉴얼의 systemd 문서로 연결됩니다. (버그 #24735762)

단위 테스트에서 이제 Google Mock 1.8을 사용합니다. (버그 #24572381, 버그 #82823)

GROUP BY의 비표준이며 구현되지 않은 WITH CUBE 절이 더 이상 지원되지 않습니다.

참고
이제 CUBE는 예약어가 되었으며 식별자로 사용하려면 식별자 인용이 필요합니다. 

(버그 #24572048, 버그 #82821)

오래된 빌드 스크립트 BUILD/SETUP.sh, BUILD/autorun.sh, BUILD/cmake_configure.sh, BUILD/compile-dist, cmake/configure.pl이 MySQL 소스 배포에서 제거되었습니다. (버그 #24512933)

MySQL 8.0.0에서 제거되었던 mysql_shutdown() C API 함수의 제거가 보류되었습니다. 향후 MySQL 버전에서 제거될 예정이나, 이번 릴리스에서는 유지됩니다. (버그 #24496976, 버그 #82681, WL #9014)

Debian/Ubuntu 패키징 유지보수 스크립트의 일관성과 유지보수성이 개선되었습니다. (버그 #23588977)

ALTER TABLE의 제자리(in-place) 연산이 DEFAULT 값이 있는 컬럼에 의존하는 생성된 컬럼을 포함하는 테이블에서 가능해졌습니다. 수정된 컬럼이 생성된 컬럼 표현식에 포함되지 않은 경우, 예를 들어 별도의 컬럼의 NULL 속성을 변경할 때 테이블 재구축 없이 수행할 수 있습니다. (버그 #22987899, 버그 #80832)

mysql 시스템 데이터베이스 덤프에 대해, mysqldump은 이제 innodb_index_statsinnodb_table_stats 테이블에 대한 DDL 문을 생성하지 않습니다. 이러한 문은 덤프 재로드 시점에서 실패하는데, 해당 테이블은 사용자가 접근할 수 없는 테이블이기 때문입니다. (버그 #22655287)

mysqld--daemonize 옵션으로 호출되면, mysqld가 진정한 데몬으로 작동하도록 stdoutstderr가 터미널 유형의 장치에 연결된 경우 /dev/null로 리디렉션됩니다. (버그 #21627629)

mysql_secure_installation은 이제 유효한 응답으로 간주하는 yes 및 no 응답에 대해 더 엄격하게 확인합니다. (버그 #13344753, 버그 #62925)

MySQL 클라이언트 및 유틸리티 프로그램들은 --version 옵션으로 호출될 때 각각의 프로그램별 버전 번호를 보고했으며, 버전 문자열이 일관된 형식을 따르지 않았습니다. 이제 이러한 프로그램들은 MySQL 버전 번호(예: mysqld와 동일)를 일관된 형식으로 출력합니다. (버그 #11763201, 버그 #55885)

새로운 mysqldump 옵션 --network-timeout이 추가되어, 큰 테이블을 덤프할 때 max-allowed-packet을 최대값으로 설정하고 네트워크 읽기 및 쓰기 타임아웃을 큰 값으로 설정할 수 있습니다. 이 옵션은 기본적으로 활성화되어 있으며, 비활성화하려면 --skip-network-timeout을 사용합니다. (버그 #11754493, 버그 #46103)

두 가지 JSON 집계 함수 JSON_ARRAYAGG()JSON_OBJECTAGG()가 추가되었습니다. JSON_ARRAYAGG() 함수는 열 또는 열 표현식을 인수로 받아 결과 집합을 하나의 JSON 배열로 집계합니다. 예시는 다음과 같습니다:

mysql> SELECT col FROM t1;
+--------------------------------------+
| col                                  |
+--------------------------------------+
| {"key1": "value1", "key2": "value2"} |
| {"keyA": "valueA", "keyB": "valueB"} |
+--------------------------------------+
2 rows in set (0.00 sec)

mysql> SELECT JSON_ARRAYAGG(col) FROM t1;
+------------------------------------------------------------------------------+
| JSON_ARRAYAGG(col)                                                           |
+------------------------------------------------------------------------------+
| [{"key1": "value1", "key2": "value2"}, {"keyA": "valueA", "keyB": "valueB"}] |
+------------------------------------------------------------------------------+
1 row in set (0.00 sec)

배열 요소의 순서는 지정되지 않습니다.

JSON_OBJECTAGG() 함수는 두 개의 열 또는 표현식을 인수로 받아 각각을 키와 값으로 해석하며, 결과를 하나의 JSON 객체로 반환합니다. 예시는 다음과 같습니다:

mysql> SELECT id, col FROM t1;
+------+--------------------------------------+
| id   | col                                  |
+------+--------------------------------------+
|    1 | {"key1": "value1", "key2": "value2"} |
|    2 | {"keyA": "valueA", "keyB": "valueB"} |
+------+--------------------------------------+
2 rows in set (0.00 sec)

mysql> SELECT JSON_OBJECTAGG(id, col) FROM t1;
+----------------------------------------------------------------------------------------+
| JSON_OBJECTAGG(id, col)                                                                |
+----------------------------------------------------------------------------------------+
| {"1": {"key1": "value1", "key2": "value2"}, "2": {"keyA": "valueA", "keyB": "valueB"}} |
+----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

NULL 키는 오류를 발생시키며, 중복된 키는 무시됩니다.
자세한 내용은 집계 함수를 참조하세요. (버그 #78117, 버그 #21647417, WL #7987)

MySQL은 이제 .SDI(직렬화된 사전 정보) 메타데이터 파일에 포함된 정보를 기반으로 MyISAM 테이블을 가져오는 IMPORT TABLE 문을 지원합니다. 이 문은 한 서버에서 “원시” 테이블 파일을 내보내고 다른 서버에 가져오는 데 유용하며, mysqldump를 사용하여 SQL 문으로 테이블을 덤프하고 mysql로 덤프 파일을 처리하는 것보다 빠른 대안을 제공합니다. 자세한 내용은 IMPORT TABLE 문을 참조하세요. (WL #7524)

버그 수정

비호환성 변경: 명시적 컬럼 이름 목록이 제공된 뷰의 저장된 정의가 잘못될 수 있었습니다. 예를 들어, 다음 문장을 보면:

CREATE VIEW v1 (name2) AS SELECT 1 AS name1 UNION SELECT 2 ORDER BY name1;

저장된 정의는 다음과 같이 잘못된 형식으로 나타났습니다:

CREATE VIEW v1 AS SELECT 1 AS name2 UNION SELECT 2 AS 2 ORDER BY name1;

이제 저장된 정의에서 컬럼 이름 목록에 의해 컬럼 이름이 대체되지 않으며, 다음과 같이 저장됩니다:

CREATE VIEW v1 (name2) AS SELECT 1 AS name1 UNION SELECT 2 AS 2 ORDER BY name1;

이 변경으로 인해 발생하는 비호환성은, 이제 INFORMATION_SCHEMAVIEWS 테이블에서만으로는 더 이상 CREATE VIEW 문장을 재생성할 수 없다는 점입니다. VIEW_DEFINITION 값에 컬럼 이름 목록이 표시되지 않기 때문입니다. 대신, COLUMNS 테이블도 참고하여 컬럼 이름 목록을 가져와야 합니다. 또는 더 간단하게는 SHOW CREATE VIEW를 사용할 수 있습니다. (버그 #23265335, 버그 #81377)

InnoDB; Microsoft Windows: Windows의 MySQL 64비트 빌드에서 파일 I/O 재시도 결과가 잘못 해석되어 재시도 경로의 올바른 작동을 위한 캐스트가 누락되어 실패한 단언과 운영 체제 오류가 발생했습니다. (버그 #24711351)

InnoDB: 디버그 빌드에서 래치 디버깅을 초기화하는 호출이 경쟁 조건으로 인해 단언을 발생시켰습니다. (버그 #25700405)

InnoDB: 첫 번째 언두 테이블스페이스가 반드시 공간 ID 1을 사용해야 하는 제한이 제거되었습니다. 첫 번째 언두 테이블스페이스는 이제 1이 아닌 다른 공간 ID를 할당할 수 있습니다. 그러나 언두 테이블스페이스에 대한 공간 ID 값은 여전히 연속된 순서로 할당됩니다. (버그 #25551311)

InnoDB: innodb_force_recovery 설정이 5 또는 6인 서버에서 DROP TABLE 작업이 단언을 발생시켰습니다. 이제 이러한 innodb_force_recovery 설정에서는 DROP TABLE 이 허용되지 않습니다. (버그 #25385590)
참고: 이 문제는 다음 버그의 회귀 문제입니다: 버그 #19779113.

InnoDB: 퍼포먼스 스키마 없이 서버를 컴파일할 경우 빌드 실패가 발생했습니다. (버그 #25348787)

InnoDB: 읽기 예측 중에 잘못된 페이지 크기가 테이블스페이스 크기를 계산하는 데 사용되었습니다. (버그 #25330449)

InnoDB: DWITH_LZ4=system 옵션을 사용하여 Fedora 25에서 컴파일할 때, 더 이상 사용되지 않는 LZ4_COMPRESS_LIMITEDOUTPUT 함수로 인해 빌드 실패가 발생했습니다. (버그 #25297593)

InnoDB: UNIV_PFS_MUTEX, UNIV_PFS_RWLOCK, UNIV_PFS_THREAD와 같은 매크로를 비활성화하면 컴파일 오류가 발생했습니다. (버그 #25251082)

InnoDB: 가상 인덱스에서 NULL 가상 열 필드 이름이 외래 키 제약 조건에 영향을 받는 가상 열을 채우는 동안 필드 이름을 비교할 때 서버 종료를 발생시켰습니다. (버그 #25222337)

InnoDB: InnoDB 파일 I/O 퍼포먼스 스키마 계측을 위한 파일 핸들 타입 이름이 os_pfs_file_t에서 pfs_os_file_t로 변경되었습니다. (버그 #25220118)

InnoDB: INFORMATION_SCHEMA 테이블에서 서브쿼리를 포함한 트랜잭션이 동시 DDL 작업을 차단할 수 있었습니다. (버그 #25200952)

InnoDB: 범위 비교 중 보조 인덱스 필드 번호 대신 클러스터드 인덱스 필드 번호가 전달되어 잘못된 필드를 가져오는 오류가 발생했습니다. (버그 #25175249)

InnoDB: 서버 재시작 시 백그라운드 스레드가 st_my_thread_var 구조를 초기화할 때 my_thread_init()my_thread_exit() 함수가 누락되어 서버 종료를 유발했습니다. (버그 #25167032)

InnoDB: 비기본 읽기 배치 크기 구성으로 memcached 읽기 작업을 수행할 경우 서버가 종료되었습니다. (버그 #25147515)

InnoDB: INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 테이블이 서버 재시작 후 외래 키 제약 이름 (UNIQUE_CONSTRAINT_NAME)에 대해 NULL을 보고했습니다. (버그 #25126722)

InnoDB: READ COMMITTED 격리 수준을 사용할 때 외래 키 검증 중 불필요한 갭 락이 걸렸습니다. (버그 #25082593)

InnoDB: InnoDB 테이블 로딩 시 메모리 요구량이 증가했으며, 이는 주로 임시 테이블 최적화로 추가된 메모리 구조 멤버 때문이었습니다. 이제 이 메모리 구조 멤버는 임시 테이블에서만 필요할 때만 할당됩니다. (버그 #25080442)

InnoDB: FULLTEXT 인덱스를 포함하는 테이블에서 TRUNCATE TABLE 작업 후 공간 크기가 잘못 계산되어 잘못된 읽기가 발생했습니다. (버그 #25053705)

InnoDB: 준비된 XA 트랜잭션이 우선 순위가 높은 트랜잭션에 의해 롤백되었습니다. 차단하는 트랜잭션이 준비 상태인 경우, 높은 우선 순위의 트랜잭션은 대기해야 합니다. (버그 #25032066)

InnoDB: InnoDBsyscall(SYS_futex)에 잘못된 인수를 전달했습니다. (버그 #24923840, 버그 #83375)

InnoDB: 복구 후 언두 테이블스페이스 객체의 노드 크기가 가끔 0이 되어 오류가 발생했습니다. 또한 언두 테이블스페이스 객체가 LRU 리스트에 잘못 배치되었고, 언두 테이블스페이스의 헤더 페이지가 객체가 해제될 때 버퍼 캐시에 있을 수 있어 첫 페이지 읽기 시 파일 열기 오류가 발생했습니다. (버그 #24916359)

InnoDB: 체크포인트 동안 모든 MLOG_FILE_NAME 리두 로그 레코드가 단일 미니 트랜잭션(mtr)에서 기록되어 로그 파싱 버퍼 오버플로가 발생했습니다. (버그 #24793413, 버그 #83245)

InnoDB: GCC mach_parse_compressed 함수는 첫 번째 바이트의 값에 따라 1~5 바이트를 로드해야 합니다. 그러나 GCC 5 및 6에서 GCC 버그 #77673으로 인해 첫 번째 바이트 값이 확인되기 전에 4 바이트를 로드하는 코드가 발생했습니다. 이 동작을 방지하는 해결책이 적용되었습니다. Laurynas Biveinis에게 패치에 감사드립니다. (버그 #24707869, 버그 #83073)

InnoDB: 테이블스페이스 타입 함수 관련 코드가 이름 일관성, 함수 분배 및 사용 문제를 해결하기 위해 개선되었습니다. (버그 #24706739, 버그 #83092)

InnoDB: 디버그 빌드에 InnoDB 퍼포먼스 스키마 계측용 키가 퍼포먼스 스키마에 등록되었는지 확인하는 메커니즘이 추가되었습니다. 이 메커니즘은 디버그 빌드에서 퍼포먼스 스키마 키의 수가 등록된 키 수와 일치하지 않을 경우 시작을 실패하도록 합니다. (버그 #24686908)

InnoDB: 테이블 통계 업데이트 중 경합 조건으로 인해 행 수 추정값이 1로 설정되어 잘못된 쿼리 실행 계획이 생성될 수 있었습니다. (버그 #24666839, 버그 #82968)

InnoDB: glibc 버그로 인해 단명한 분리 스레드가 pthread_create()에서 호출자가 반환되기 전에 종료되어 서버가 종료될 수 있었습니다. Laurynas Biveinis에게 패치에 감사드립니다. (버그 #24605956, 버그 #82886)

InnoDB: 테이블 통계 관련 코드 오류로 dict0stats.cc 소스 파일에서 어설션이 발생했습니다. (버그 #24585978)

InnoDB: InnoDB 코드 베이스에서 ut_malloc 또는 ut_new를 사용하여 메모리를 할당하는 모듈을 나타내는 모듈 기본 이름 목록이 불완전했습니다. 이 목록은 InnoDB 메모리 할당 이벤트 데이터를 보고하기 위해 퍼포먼스 스키마에서 사용됩니다. (버그 #24571816)

InnoDB: 일부 InnoDB 읽기-쓰기 락과 뮤텍스 키가 퍼포먼스 스키마에 사용하도록 등록되지 않았습니다. (버그 #24571597)

InnoDB: innodb_undo_logs 값을 증가시키고 서버를 재시작한 후 새로 할당된 롤백 세그먼트에 언두 테이블스페이스를 할당할 때 활성 언두 테이블스페이스 수가 증가하지 않았습니다. (버그 #24488141)

InnoDB: 사용되지 않는 MLOG_UNDO_HDR_DISCARD 리두 로그 레코드 유형 및 관련 함수가 제거되었습니다. (버그 #24482001)

InnoDB: 서버가 언두 테이블스페이스 ID로 인식하지 않아 퍼지 스레드 시작 시 어설션이 발생했습니다. (버그 #24479773)
참고: 이 문제는 버그 #23517560의 회귀 문제입니다.

InnoDB: 복구 중 더블라이트 버퍼에서 페이지를 복원할 때 암호화가 누락되었다는 잘못된 오류가 보고되었습니다. (버그 #24471076)

InnoDB: 테이블의 버퍼 풀 페이지 수에 대한 잘못된 추정치가 보고되었습니다. 페이지가 제거될 때 페이지 수가 올바르게 감소되지 않았습니다. (버그 #24464147)
참고: 이 문제는 버그 #21747906의 회귀 문제입니다.

InnoDB: 다음은 undo 테이블스페이스 관리와 관련된 코드 변경 사항입니다:

  • 임시 테이블스페이스 롤백 세그먼트를 위한 메모리 내 배열이 추가되어, redo가 활성화된 롤백 세그먼트에서 사용할 수 있도록 TRX_SYS 페이지에서 32개의 슬롯이 해제되었습니다.
    이 변경으로 인해 별도의 undo 테이블스페이스를 구성할 때 innodb_rollback_segments 옵션을 설정할 때 임시 테이블스페이스 롤백 세그먼트를 고려할 필요가 없어졌습니다.
  • undo 로그와 롤백 세그먼트 관련 코드 주석이 수정되었습니다.
  • 롤백 세그먼트와 undo 테이블스페이스를 나열하는 고정 배열이 동적 크기 배열로 대체되었습니다.
  • undo 테이블스페이스를 초기화하는 함수가 리팩토링되었습니다.
  • undo 및 undo 파일 이름을 필요할 때마다 생성하기 위한 클래스를 추가했습니다.

(버그 #24462978)

InnoDB: 캐시된 undo 세그먼트가 느린 종료 과정에서 롤백 세그먼트 기록에서 제거되지 않았습니다. (버그 #24450908)

InnoDB: 단순히 생성된 클러스터된 인덱스(GEN_CLUST_INDEX)만 있는 테이블에서 테이블을 다시 빌드하는 작업 중에 유효하지 않은 키 이름이 호출되어 어설션이 발생했습니다. (버그 #24444831)

InnoDB: MySQL이 GCC 6.1.1로 빌드되지 않았습니다. (버그 #24438752)

InnoDB: 서버가 읽기 전용 모드에 있을 때 테이블스페이스 암호화 마스터 키를 회전하면 오류 메시지 대신 어설션이 발생했습니다. (버그 #24404091)

InnoDB: 명시적으로 정의된 기본 키가 없는 테이블에서 InnoDBNOT NULL 열에 고유 키가 정의되었을 때 암시적인 클러스터된 인덱스(GEN_CLUST_INDEX)를 대체하지 않았습니다. (버그 #24397406)

InnoDB: handler::keys_to_use_for_scanning()이 핸들러 API에서 제거되었습니다. 해당 함수는 더 이상 사용되지 않았습니다. HA_READ_ORDER 인덱스 플래그는 각 인덱스에 대해 동일한 정보를 제공합니다. (버그 #24364448)

InnoDB: 페이지 클리너 스레드가 적응형 해시 인덱스 기능과 관련된 회귀로 인해 어설션을 발생시켰습니다. (버그 #24346574)
참고: 이 문제는 버그 #21407023의 회귀입니다.

InnoDB: InnoDB가 전체 텍스트 최적화 프로그램 스레드에서 사용된 메모리를 해제하지 못했습니다. (버그 #24331265)

InnoDB: 복구 중에 InnoDB가 LOB 페이지를 null 참조를 사용하여 가져오려고 시도했습니다. (버그 #23615208)

InnoDB: 새 인덱스를 추가할 때, 서버가 내부적으로 정의된 외래 키 인덱스를 삭제하고 가상 생성 열에 정의된 보조 인덱스를 외래 키 인덱스로 사용하려고 시도하여 서버가 종료되었습니다. InnoDB는 이제 가상 생성 열에 정의된 보조 인덱스를 참조하는 외래 키 제약 조건을 허용합니다. (버그 #23533396)

InnoDB: INFORMATION_SCHEMA.FILES 쿼리가 테이블스페이스 생성 작업과의 경합으로 인해 서버가 종료되는 문제를 발생시켰습니다. (버그 #23477214, 버그 #81614)

InnoDB: 테이블을 재구성하는 인플레이스 ALTER TABLE 작업 중에 발생한 동시 DML 작업이 가상 인덱스를 업데이트하지 않아 가상 인덱스와 클러스터된 인덱스 간의 불일치가 발생했습니다. (버그 #23219499)

InnoDB: TRUNCATE TABLE 작업이 dict_sys 뮤텍스를 유지하면서 버퍼 풀에서 페이지를 스캔하고 제거하여 동시 DDL 작업이 지연되었습니다. 이제 스캔 중에는 뮤텍스를 해제하고 스캔이 완료되면 다시 획득합니다. (버그 #23070734, 버그 #80060)

InnoDB: R-트리에 GIS 데이터를 삽입할 때 B-트리 커서를 저장하는 동안 페이지 번호 필드가 누락되어 어설션이 발생했습니다. (버그 #23044098, 버그 #80939)

InnoDB: InnoDB 내부 임시 테이블에 쓰기를 수행할 때 Handler_write 카운터가 증가하지 않았습니다. (버그 #23024178)

InnoDB: MySQL 5.7에서 InnoDB 복구 프로세스가 복구 중에 최대 세 번의 리두 로그 스캔이 필요할 수 있었습니다. 스캔 수를 줄이기 위해 첫 번째 및 두 번째 스캔이 병합되었습니다. 이제 메모리 임계값에 도달하지 않는 한 하나의 스캔만 수행됩니다. 그렇지 않으면 동시에 스캔 및 적용을 수행하는 두 번째 스캔이 시작됩니다. (버그 #22963951, 버그 #80788)

InnoDB: 인덱싱된 가상 열을 포함한 ROW_FORMAT=REDUNDANT 테이블에서 테이블 복사 온라인 ALTER TABLE 작업이 어설션을 발생시켰습니다. (버그 #22018745)

InnoDB: 서버 재시작 후 자동 증가 기본 키가 있는 테이블에서 동시 INSERT 작업이 중복 항목 오류를 일으켰습니다. auto_increment_incrementauto_increment_offset 설정이 수정된 후 현재 자동 증가 값이 변경되지 않았습니다. (버그 #20989615, 버그 #76872)

InnoDB: Windows에서 InnoDB 파일 I/O에 대한 Performance Schema 계측이 비활성화되었습니다. (버그 #14025581)

InnoDB: 64자 제한을 초과한 자동 생성된 외래 키 제약 조건 식별자가 INFORMATION_SCHEMA.TABLE_CONSTRAINTS CONSTRAINT_NAME 열에 잘려서 나타났습니다. 이제 자동 생성된 외래 키 제약 조건 식별자는 64자 제한을 초과할 수 없습니다. (버그 #11745347, 버그 #13942)

InnoDB: row_search_mvcc() 함수가 트랜잭션 읽기 뷰에 없는 기록에 대해 범위 쿼리 시 전체 테이블을 불필요하게 탐색했습니다. (버그 #84202, 버그 #23481444, 버그 #25251375)

패키징: Windows API 함수 MiniDumpWriteDump에 잘못된 값(NULL)을 ExceptionParam 파라미터로 전달하여 mysys 라이브러리의 my_create_minidump 함수가 미니덤프 파일에서 예외 정보를 생략하게 되었습니다. (버그 #24505650, 버그 #82695)

파티셔닝: 파티셔닝된 테이블에서 파티션을 삭제하면 테이블의 트리거도 함께 삭제되는 문제가 있었습니다. (버그 #24449174)

파티셔닝: 생성된 열을 기준으로 파티셔닝된 테이블의 행을 업데이트할 때, 디버그 빌드에서 어설션 오류가 발생하거나, 비디버그 빌드에서는 잘못된 결과가 반환될 수 있었습니다. (버그 #22574695, 버그 #80080)

복제: MySQL 8.0.1에서 추가된 원본 커밋 타임스탬프 관련 문이 mysqlbinlog에 MySQL 8.0.0부터 존재하는 것으로 잘못 보고되었습니다. 이는 로그가 잘못된 버전 번호 80000으로 기록되었기 때문입니다. 수정 후 mysqlbinlog 덤프에서 버전을 80001로 변경하였습니다. (버그 #25710507)

복제: 슬레이브에서 릴레이 로그 파일을 처리할 때 락 경합으로 인해 이진 릴레이 성능이 저하되었습니다. (버그 #25321231, 버그 #77778)

복제: 실패한 노드가 클러스터에서 제거된 후 다시 클러스터에 참여하려 할 때 퇴출될 수 있었습니다. (버그 #25311008)

복제: 다중 스레드 슬레이브를 사용할 때, Performance Schema 복제 테이블에 기록된 외부 데이터와 일치하지 않는 작업자 ID 데이터가 오류에 나타났습니다. (버그 #25231367)

복제: MySQL 5.7.17을 컴파일할 때 가변 길이 배열 오류가 발생했습니다. (버그 #25163241, 버그 #83994)

복제: 행 기반 복제에서 utf8mb3 열이 있는 테이블에서 utf8mb4 캐릭터셋이 정의된 동일한 테이블로 복제할 때 필드 길이가 잘못 표시되는 메시지가 반환되었습니다. (버그 #25135304, 버그 #83918)

복제: 마스터 서버에서 이진 로그가 회전하고 이진 로그 파일이 저장된 파티션에서 디스크가 가득 차는 조건이 발생하면 서버가 예기치 않게 중지될 수 있었습니다. 이제 덤프 스레드가 다음 이진 로그 파일로 전환할 때 이진 로그의 존재 여부를 확인하여 슬레이브로 전송된 모든 이진 로그를 수신 스레드에 오류로 반환합니다. (버그 #25076007)

복제: 이전에 실행된 GTID 트랜잭션을 무시하는 GTID 트랜잭션 건너뛰기 메커니즘이 XA 트랜잭션에 대해 올바르게 작동하지 않았습니다. (버그 #25041920)

복제: 릴레이 로그 인덱스 파일이 존재하지 않는 릴레이 로그 파일을 참조할 때 RESET SLAVE ALL이 완전히 정리되지 않는 경우가 있었습니다. (버그 #24901077)

복제: MTS 슬레이브 어플라이어가 (주입된) 오류로 인해 중지되었을 때 문제 해결을 위한 유용한 정보를 제공하지 않았습니다. (버그 #24822686)

복제: 여러 서버에서 복제된 데이터를 사용하는 경우 FLUSH BINARY LOGS가 느려질 수 있었습니다. (버그 #24806259, 버그 #83270)

복제: XA 트랜잭션 사용 시, 슬레이브의 어플라이어(SQL) 스레드에서 잠금 대기 시간 초과나 교착 상태가 발생하면 자동 재시도가 작동하지 않았습니다. 이는 SQL 스레드가 롤백을 수행하더라도 XA 트랜잭션을 롤백하지 않아서 재시작 시 XA START가 처음으로 실행되며 XAER_RMFAIL 오류를 일으키는 문제가 있었습니다. (버그 #24764800)
참고: 관련 버그 #83588, 버그 #24923091, 버그 #24966941 참조.

복제: 부분적으로 실패한 CREATE USER, RENAME USER, 또는 ALTER USER 문이 이진 로깅이 비활성화된 경우 자동 생성된 GTID를 제대로 소비하지 못했습니다. (버그 #24693798)

복제: Binlog_sender가 패킷 버퍼에 이진 로그 이벤트를 기록한 후 슬레이브로 패킷을 보내는 과정에서 전송 버퍼의 크기를 예상대로 줄이지 않았습니다. (버그 #24643036)

복제: GTID 업데이트를 위한 그룹 커밋이 리팩터링되어 많은 소규모 트랜잭션이 있는 워크로드의 성능이 개선되었습니다. (버그 #24398760)

복제: relay_log 옵션이 구성 파일에 지정되지 않으면, relay_log_basename 변수가 hostname을 사용해 동적으로 생성되었지만 설정되지 않았습니다. 슬레이브가 이 초기화되지 않은 변수에 접근하려 하면 서버가 예기치 않게 중단되었습니다. (버그 #24352667)

복제: 다중 스레드 슬레이브 (slave_parallel_workers 값이 0보다 큰 경우)에서 릴레이 로그를 회전할 때 Seconds_Behind_Master 값이 올바르지 않았습니다. (버그 #23532304)

복제: 중간 단계에서 실패한 XA PREPARE 문은 ID = -1로 설정된 상태에서 binlogged 플래그가 true로 설정된 불일치한 XA 트랜잭션 상태를 초래할 수 있었습니다. 이로 인해 XA COMMITXA ROLLBACK 쿼리 실행 시 어설션이 발생했습니다. (버그 #22915670)

복제: 서버가 read_only 시스템 변수를 활성화한 경우 여러 복제 관련 관리 문을 수행하지 못하게 되었습니다. (버그 #22857926, 버그 #25363745, 버그 #25326058, 버그 #84350, 버그 #84437)

복제: 채널이 존재하지 않는 상태에서 CHANGE MASTER TO 명령을 사용할 경우 어설션이 발생할 수 있었습니다. (버그 #22255698)

복제: binlog_group_commit_sync_delay 시스템 변수가 지정된 딜레이를 너무 많은 이진 로그 커밋 그룹에 적용했습니다. (버그 #21420180)

복제: 슬레이브로 복제되는 이진 로그 파일에서 원하지 않는 fseek 수가 줄어들었습니다. (버그 #83226, 버그 #24763579)

복제: 버그 #81657에 대한 수정 사항이 MySQL 8.0에 올바르게 병합되지 않았습니다. Laurynas Biveinis에게 감사드립니다. (버그 #83124, 버그 #24715790)

복제: rpl.rpl_binlog_errors 테스트가 Windows에서 간헐적으로 실패하였습니다. (버그 #82302, 버그 #24330138)

복제: binlog_group_commit_sync_delay 값을 1에서 9 사이로 설정하고 binlog_group_commit_sync_no_delay_count를 1보다 크게 설정했으며, 트랜잭션 커밋 수가 binlog_group_commit_sync_no_delay_count보다 적으면 커밋이 영원히 중단되었고, binlog_group_commit_sync_no_delay_count를 0으로 설정한 경우에도 모든 트랜잭션 커밋이 영원히 중단되었습니다. (버그 #80652, 버그 #22891628)

복제: 동시 CREATE TRIGGERDROP TRIGGER 문이 올바른 순서로 이진 로그에 기록되지 않아 슬레이브가 실패할 수 있었습니다. (버그 #77095, 버그 #21114768)

그룹 복제; Microsoft Windows: 그룹 복제 플러그인이 Windows 플랫폼에서 컴파일될 때 발생하는 불필요한 경고를 제거했습니다. (버그 #25119288)

그룹 복제; Microsoft Windows: 이제 Windows에서 그룹 복제 지원을 빌드하려면 CMake 버전 2.8.12 이상이 필요합니다. (버그 #24964522)

그룹 복제: STOP GROUP_REPLICATION 명령이 ER_GROUP_REPLICATION_CONFIGURATION 오류로 인해 실행될 때, 그룹 복제 멤버의 MEMBER_STATEERROR에서 OFFLINE으로 변경되지 않았습니다. (버그 #25674926)

그룹 복제: 흐름 제어가 활성화된 상태에서 최소 흐름 제어 할당량이 1에 도달하면, 그룹 복제는 제한 이유가 더 이상 유효하지 않은 경우에도 제한을 멈추지 않았습니다. (버그 #25461354)

그룹 복제: group_replication_group_seeds에서 확인할 수 없는 호스트 이름을 사용하는 경우 START GROUP_REPLICATION이 실패했습니다. 이제 그룹 복제를 시작할 때 호스트 이름이 확인되고, 유효한 주소가 하나 이상 포함되어 있어야 합니다. 잘못된 주소는 무시됩니다. (버그 #25460324, 버그 #84674)

그룹 복제: 그룹 복제 플러그인 설치 시 생성되는 _gr_user 계정이 플러그인 제거 시 신뢰성 있게 삭제되지 않았습니다. (버그 #25298987)

그룹 복제: 오프라인 노드에서 그룹 복제를 시작할 때, 노드가 복제를 위해 구성되었으나 복구할 수 없는 경우가 발생할 수 있었습니다. (버그 #25256910)

그룹 복제: 그룹 복제 GCS는 그룹의 비활성 멤버에서 온 메시지를 버리지 않았습니다. (버그 #25134074)

그룹 복제: 서버에 더 이상 접속할 수 없는 경우 그룹 복제 플러그인이 서버에 연락을 시도하여 어설션이 발생했습니다. (버그 #25071492)

그룹 복제: 그룹 복제 응용 SQL 스레드에서 재시작 후 플러그인이 스레드의 실패를 감지할 수 없었습니다. (버그 #24969065)

그룹 복제: 그룹 복제 플러그인 활성화 시 performance_schema_max_mutex_classes의 기본값인 200을 초과하여 일부 그룹 복제 뮤텍스 인스트루먼트가 performance_schema.setup_instruments 테이블에 나타나지 않았습니다. (버그 #24746530)

그룹 복제: yaSSL로 빌드된 서버에서 암호화된 연결로 그룹 복제를 사용하는 경우 뷰 전달을 대기 중에 타임아웃이 발생할 수 있었습니다. (버그 #23592214)

Microsoft Windows: Windows에서 SHOW TABLES FROM _db_name_이 _db_name_이 대문자로 주어진 경우 중단되었습니다. (버그 #24800048, 버그 #83262)

Microsoft Windows: 32비트 빌드는 이제 Windows에서 지원되지 않지만, CMake는 32비트 빌드 시도를 감지하지 못해 나중에 컴파일 오류가 발생했습니다. 이제 CMake는 32비트 빌드 시도를 감지하고 적절한 오류 메시지를 생성합니다. (버그 #24487483, 버그 #82645)

Solaris: WITH_INNODB_MEMCACHED CMake 옵션이 활성화되면 이제 Solaris 11 및 12에서 Developer Studio 12.5 컴파일러를 사용해 memcached를 빌드할 수 있습니다. (버그 #24504155, 버그 #82692)

Solaris: Solaris에서 라이브러리 검색 경로 처리가 잘못되었습니다. (버그 #24487934, 버그 #82646)

Solaris: 이제 Solaris의 최소 지원 버전은 시스템 런타임 라이브러리의 종속성으로 인해 Solaris 11 업데이트 3입니다.

Solaris: Solaris에서 MySQL은 이제 gcc 대신 Developer Studio 12.5로 빌드됩니다. 바이너리를 사용하려면 Developer Studio C/C++ 런타임 라이브러리를 설치해야 합니다. 라이브러리만 설치하는 방법은 다음을 참조하십시오:

https://docs.oracle.com/cd/E60778_01/html/E60743/gozsu.html

JSON: JSON 값이 여러 JSON 배열이나 객체로 둘러싸인 큰 하위 문서로 구성된 경우 JSON 값 직렬화에 과도한 시간이 소요되는 경우가 있었습니다. (버그 #23031146)

JSON: JSON 열에 NULL 값이 존재할 때, ORDER BY 절과 함께 GROUP_CONCAT()을 사용하는 쿼리의 결과가 항상 정확하지 않았습니다. (버그 #22992666)

JSON: 내부 rapid_json_handler가 빌드 도중 자신의 데이터 구조를 사용하여 부분적으로 생성된 DOM을 나타냈고, 결과를 반환하기 전에 이를 Json_dom 그래프로 변환해야 했습니다. 이제 이 핸들러는 그래프를 직접 생성하여 JSON 문서 파싱 시 작업량을 줄입니다. (버그 #22900110)

JSON: 내부 함수 Item_func_case::val_json()CASE 표현식이 NULL로 평가될 때 예상대로 null 값 플래그를 설정하지 않아 서버 디버그 빌드에서 어설션이 발생했습니다. (버그 #22887227)

JSON: SUM() 함수가 JSON 문서에서 추출된 소수 값을 정수로 잘라내어 반환했습니다. (버그 #84935, 버그 #25530204)

JSON: double 값이 표현 가능한 최대 값을 약간 초과하는 JSON 문서가 값 오류를 반환하지 않고 0으로 대체되었습니다. 이제 이러한 값은 MySQL JSON 문서에서 올바르게 처리됩니다. 근본 문제는 RapidJSON에서 발생했으며, 해당 문제는 이슈 #849로 보고되었습니다. (버그 #84891, 버그 #25518504)

JSON: JSON_SEARCH()JSON_CONTAINS_PATH() 함수가 UTF-16로 지정된 one_or_all 인수를 사용할 때 제대로 작동하지 않았습니다. 이제 이러한 함수는 필요할 경우 해당 인수를 utfmb4로 변환한 후 값을 확인합니다. (버그 #84880, 버그 #22516960)

JSON: JSON_UNQUOTE() 함수가 UTF-16 인코딩된 문자열과 함께 작동하지 않았습니다. 이제 이러한 문자열은 내부적으로 utfmb4로 변환된 후 처리됩니다. (버그 #84878, 버그 #25516881)

JSON: 동일한 JSON 열을 하나의 문장에서 업데이트하면 잘못된 값이 테이블에 기록될 수 있었습니다. 이는 두 번째 업데이트가 열 값을 해당 값의 하위 집합으로 덮어쓸 때 발생했습니다. 예시:

UPDATE t SET col = JSON_ARRAY(value), col = col->'$[0]';

(버그 #84694, 버그 #25461627)

JSON: JSON_QUOTE()JSON_UNQUOTE() 함수가 utf8mb4와 같은 멀티바이트 문자 세트에서 제대로 작동하지 않았습니다. (버그 #84680, 버그 #25455065)
참조: 관련 문제 – 버그 #77234, 버그 #21193273.

JSON: 오류 메시지 Error 3152 ER_JSON_USED_AS_KEY의 내용이 JSON 열 '%s'은 키 지정에 사용할 수 없음에서 JSON 열 '%s'은 지정된 JSON 경로에 대한 생성된 열을 통해서만 인덱싱을 지원함으로 변경되었습니다. (버그 #81364, 버그 #23274244)

JSON: MySQL JSON 기능에 대한 내부 테스트가 디버그 서버에서 실행될 때 일부 플랫폼에서 스택 공간이 부족해졌습니다. 스택 사용에 대한 적시 검사가 이루어지지 않아 서버가 종료되었습니다.
문제 해결을 위해 다음 조치가 이루어졌습니다:

  • 중첩된 배열 또는 객체를 직렬화하기 전에 스택 오버런 검사를 수행하여 깊게 중첩된 JSON 문서를 처리할 때 서버 종료 대신 실패하도록 합니다.
  • 최적화 없이 컴파일된 경우 JSON 문서의 직렬화가 스택 사용을 줄이도록 재구성되었습니다.

(버그 #81083, 버그 #23106330, 버그 #26399306)

BIN() 함수가 UNION 내에서 멀티바이트 문자 세트를 사용할 때 잘못된 잘림을 초래할 수 있었습니다. (버그 #27511490, 버그 #89581)

MySQL이 GCC 7로 컴파일되지 않았습니다. (버그 #25643811, 버그 #26825211)

문서화되지 않은 WINDOWS_RUNTIME_MD CMake 옵션이 제거되었습니다. (버그 #25611359)

--skip-innodb 또는 그 변형이 사용된 경우 avoid_temporal_upgrade에 대한 경고가 잘못 생성되었습니다. (버그 #25573578)

mysqld_safe_PID_FILE_.shutdown 파일이 존재하는 경우 서버를 재시작하지 못했습니다. (버그 #25572504)
참조: 이 문제는 버그 #11751149의 회귀 문제입니다.

Debian/Ubuntu 패키지의 경우 MySQL 업그레이드 중 사용자 정의 정렬 파일이 덮어씌워질 수 있었습니다. 문자 집합 파일은 이제 conffiles로 표시되어, 업그레이드 시 사용자 정의 설정을 덮어씌울지 여부를 묻는 메시지가 표시됩니다. (버그 #25525628, 버그 #84761)

데이터베이스 한정자를 사용하여 테이블 이름을 지정하고 DATA DIRECTORY 또는 INDEX DIRECTORY 옵션을 포함한 CREATE TABLE 구문에서 기본 데이터베이스가 없는 경우 오류가 발생했습니다. (버그 #25514146, 버그 #84861)

lower_case_table_names가 활성화된 경우 mysql.foreign_keys 데이터 사전 테이블의 referenced_table_schemareferenced_table_name 필드 값이 소문자로 저장되지 않았습니다. (버그 #25495714)

performance_schema_digests_size=1로 서버를 시작하면 비정상 종료가 발생했습니다. (버그 #25492129, 버그 #84786)

yaSSL을 사용하는 클라이언트의 경우 읽기 제한 시간이 초과되었을 때 연결이 무효화되었으며, 재시도가 아닌 읽기를 중단했습니다. (버그 #25444075)

MySQL을 다른 디렉터리에서 컴파일할 때 절대 경로가 디버그 정보 및 __FILE__에 누출되어 빌드 간 차이가 발생했습니다. (버그 #25436469, 버그 #84608, 버그 #25859274, 버그 #85855)

수축 문자들을 포함하는 UCA 9.0.0 정렬 규칙 계산이 비효율적이었습니다. (버그 #25426632, 버그 #84577)

내부 연결 제한 시간 값이 음수일 때 연결이 대기 상태로 되어 중단되었습니다. 이제 음수 값은 I/O가 없는 경우 무기한 대기 상태로 만듭니다. (버그 #25408557)

Performance Schema의 뮤텍스 이름이 너무 길어 서버 시작 시 경고를 생성했습니다. (버그 #25406915)

일부 플랫폼에서 -DWITH_LIBWRAP=ON 옵션으로 MySQL 컴파일이 실패했습니다. 이제 CMaketcpd.h에 적절한 함수 프로토타입이 있는지 확인합니다. (버그 #25395543, 버그 #84495)

데이터 사전 테이블 열에 정의된 인덱스가 innodb_page_size=4k로 인스턴스를 시작할 때 최대 인덱스 키 길이를 초과했습니다. (버그 #25384527)

mysqld_safe--basedir 옵션으로 지정된 디렉터리의 존재 여부를 확인하지 않았습니다. (버그 #25365194)

-G ninjaCMake를 구성할 때, Xcode 또는 Visual Studio가 아닌 빌드 플랫폼에 부적절한 빌드 출력을 생성했습니다. (버그 #25358460)

mysqld_safe--log-error 옵션으로 지정된 오류 로그 파일이 FIFO일 경우 실패했습니다. (버그 #25356221, 버그 #84427)

준비된 문장에서 서브쿼리 또는 파생 테이블 내의 별칭이 다른 별칭에 의존할 때 문장 실행 중에 잘못된 동작이 발생할 수 있었습니다. (버그 #25343335, 버그 #84398, 버그 #25171608)

mysqld_safe--datadir 옵션 값의 마지막에 / 문자가 있을 경우 실패할 수 있었습니다. (버그 #25319457)

최근의 mysqld_safe 변경으로 인해 mysql.server 스크립트가 기본 디렉터리를 컴파일된 기본 절대 경로와 다른 절대 경로로 지정할 경우 시작하지 못했습니다. (버그 #25319392, 버그 #84263)

Performance Schema가 비활성화된 경우 CONNECTION_CONTROL 플러그인이 컴파일에 실패했습니다. (버그 #25308357, 버그 #84304)

MySQL 워크벤치를 사용하여 생성한 계정의 비밀번호가 올바르게 만료되지 않았습니다. (버그 #25299309)

RPM용 System V init 스크립트에서 [mysqld] 옵션 파일 섹션이 pid-file과 같은 일부 옵션에 대해 무시되었습니다. (버그 #25287707, 버그 #84172)

기본 디렉터리가 사용될 때 init 스크립트가 mysqld_safe를 시작하지 못했습니다. (버그 #25261472, 버그 #84219)

CMake가 GCC 5.3.0 루프 최적화 버그가 발생하는지 감지하고 발생 시 우회합니다. (버그 #25253540)

mysqld_safe –no-defaults가 작동하지 않았습니다 (이전 버그 수정의 부수적 결과). (버그 #25244898, 버그 #84173)

문장 내 또는 문장 간 세미콜론(;)이 있으면 동일한 문장에서 별개의 다이제스트가 생성될 수 있었습니다. (버그 #25244533, 버그 #83253)

구성 요소가 자체 구현을 참조하지 않고 서비스를 등록할 수 없었습니다. 이제 SERVICE_IMPLEMENTATION(component,service) 매크로로 이를 피할 수 있습니다. (버그 #25238906)

특정 저장 함수가 쿼리의 WHERE 절에 사용될 경우, 인덱스 조건 푸시다운(Index Condition Pushdown)을 통해 잘못 처리되어 서버 종료가 발생할 수 있었습니다. (버그 #25196653, 버그 #25174454)

유니코드 정렬 알고리즘 9.0.0을 기반으로 한 ai_ci 대조에서 같게 비교되는 악센트 문자가 LIKE 비교에서 다르게 처리되었습니다. (버그 #25167284, 버그 #83999)

libmysqlclient와 링크된 클라이언트에서 준비된 문장을 사용할 때 잘못된 메모리 접근이 발생할 수 있었습니다. (버그 #25164932)

일부 Linux 시작 스크립트에서 datadir 설정을 올바르게 처리하지 못했습니다. (버그 #25159791)

파티션이 나눠진 테이블의 열에 문자 집합이 지정된 경우 업그레이드 중에 세그멘테이션 오류가 발생할 수 있었습니다. (버그 #25153261)

LOAD DATA 문이 이스케이프 시퀀스 뒤에 오는 멀티바이트 문자를 허용하지 못했습니다. (버그 #25147988, 버그 #83950, 버그 #25865525)

버그 #25088048의 수정으로 인해 mysqld_safe가 MySQL 서버를 시작할 때 사용하는 명령어에서 mysqld 경로가 누락되었습니다. (버그 #25144379)
참고: 이 문제는 버그 #25088048의 회귀 문제입니다.

UCA 대조에 대해, LIKE 비교 시 패턴이 이스케이프 문자로 끝날 경우 잘못된 결과를 반환했습니다. (버그 #25140629, 버그 #83930)

MySQL 5.7에서 8.0으로 스키마를 업그레이드할 때 db.opt 파일에 정의된 문자 집합 및 대조 대신 기본 문자 집합과 대조가 사용되었습니다. (버그 #25139901)

DDL 문이 종료될 때 별도의 함수 호출을 사용하여 데이터 사전 캐시를 업데이트하는 대신, 이제 트랜잭션 커밋의 일부로 데이터 사전 캐시가 업데이트됩니다. (버그 #25095798, 버그 #83818)

CREATE TABLE에서 DATA DIRECTORY 또는 INDEX DIRECTORY가 명시된 경우 FILE 권한이 필요합니다. ALTER TABLE은 파티션 옵션으로 명시된 경우에만 FILE 권한이 필요합니다. (버그 #25092566)

헝가리어 축약 및 합자와 관련된 ICU 순서와 MySQL 유니코드 대조 간의 차이가 있었습니다. 이제 MySQL은 ICU 순서를 따릅니다. (버그 #25090543)

이진 대조를 사용할 때 데이터 사전이 초기화 및 시작되지 못했습니다. 데이터 사전 스키마를 생성하는 쿼리 문자열이 이진 대조 이름에 따옴표를 추가하지 않았습니다. (버그 #25054104, 버그 #83706)

뷰에 접근하는 쿼리를 포함한 저장 프로시저를 실행할 때 세션 종료 전까지 메모리가 해제되지 않았습니다. (버그 #25053286)

FreeBSD 11에서 MAP_NORESERVE를 확인하려다가 컴파일이 실패했습니다. (버그 #25048128, 버그 #83689)

mysql-test-run.pl이 이제 TSAN_OPTIONS 환경 변수가 설정되었는지 확인하며, 값이 설정된 경우 이는 ThreadSanitizer 억제 파일 경로로 간주됩니다. 또한, --sanitize 옵션이 활성화된 경우 ThreadSanitizer 메시지를 위해 서버 오류 로그를 검사합니다. (버그 #24970905, 버그 #83601)

--lower-case-table-names 설정을 사용하여 서버를 시작한 후 첫 번째 클라이언트로부터 USE INFORMATION_SCHEMA; 명령어가 첫 번째로 실행될 때 어설션이 발생했습니다. (버그 #24963580)

대소문자를 구분하지 않는 유니코드 대조의 경우, 다양한 공백 문자가 동일하게 해시되지 않아 잘못된 비교 결과가 발생했습니다. (버그 #24956750, 버그 #83549)

사전 클라이언트가 DDL 문으로 수정 중인 사전 개체를 추적하여, 커밋 전 같은 세션의 미확정 변경사항을 사전 클라이언트가 볼 수 있도록 했습니다. (버그 #24956365, 버그 #83548)

사전 개체 캐시 누락이 동시에 발생할 때 잘못된 처리로 인해, 한 스레드에서 가져온 개체가 대기 중인 스레드가 액세스하기 전에 캐시에서 제거될 수 있었습니다. (버그 #24949179)

CMake가 특정 GCC 버전에서 -fexpensive-optimizations 옵션으로 인해 잘못된 쉬프트-OR 최적화를 유발하는 문제를 피하도록 설정되었습니다. (버그 #24947597, 버그 #83517)

Developer Studio 12.5에서 -std=c++03 옵션을 사용하여 컴파일하는 CMake 지원이 추가되었습니다. 이는 기본적으로 stlport 대신 사용됩니다. (버그 #24947136, 버그 #83512, 버그 #25229424)

NCHARNATIONAL CHAR이 동의어임에도 불구하고 CAST(expr AS NCHAR)는 성공했으나 CAST(expr AS NATIONAL CHAR)는 실패했습니다. 이제 둘 다 작동합니다. (버그 #24934161)

OEL RPM 패키지가 이제 다중 라이브러리 지원을 더 잘 감지하여 32비트 및 64비트 라이브러리를 설치할 수 있는 플랫폼을 확인합니다. Alexey Kopytov에게 패치 제공에 감사드립니다. (버그 #24925181, 버그 #83457)

LOCATE() 함수가 NULL 값이 있는 인수에 대해 일관성 없는 결과를 반환했습니다. 이제 모든 인수가 NULL일 경우 NULL을 반환합니다. (버그 #24911350, 버그 #83427)

비트 연산이 잘못된 인수 null 처리로 인해 서버 종료를 유발할 수 있었습니다. (버그 #24910958, 버그 #24930038, 버그 #24930829)

블록 중첩 루프 알고리즘이 쿼리 실행 중 과도한 메모리를 할당할 수 있었습니다. (버그 #24909223)

MySQL 5.6 호환성 라이브러리를 빌드하는 정보는 MySQL 5.7 이상 버전 .spec 파일에만 필요하며, InnoDB memcached 플러그인을 빌드하는 정보는 삭제되었습니다. (버그 #24908345, 버그 #83409)

뷰 메타데이터의 잘못된 업데이트가 어설션을 발생시킬 수 있었습니다. (버그 #24834622)

keyring_okv 플러그인의 초기화가 okvclient.ora 설정 파일에 STANDBY_SERVER 설정이 누락된 경우 실패했습니다. 이로 인해 STANDBY_SERVER가 필수 설정이 되었으나, 이제는 선택 사항으로 변경되었습니다. (버그 #24816271)

Dictionary_client::acquire_uncached()에 의해 획득된 데이터 사전 객체는 호출자 대신 현재 자동 해제자에 의해 소유됩니다. 또한, TABLE_SHARE 뷰 객체 획득은 acquire()clone()으로 수행되며, acquire_uncached()는 사용되지 않습니다. (버그 #24813358, 버그 #83296)

저장 프로시저 또는 뷰 객체 내에서 호출된 여러 테이블을 사용하는 UPDATE 구문에 파생 테이블이 포함될 때, 두 번째 또는 그 이후 실행 시 권한 검사가 올바르지 않을 수 있었습니다. 이 문제는 파생 테이블이 외부 쿼리로 병합될 경우 발생했습니다. (버그 #24810564)

Created_tmp_tables 상태 변수가 임시 테이블이 생성되지 않은 경우에도 증가되는 문제가 있었습니다. (버그 #24808970, 버그 #83287)

MySQL 5.7에서 MySQL 8.0으로의 현장 업그레이드 중, 루틴을 마이그레이션하는 동안 저장된 루틴 본문 구문 분석이 실패하면 업그레이드도 실패했습니다. 이제는 경고가 보고되며 루틴 본문이 구문 분석 없이 생성됩니다. 또한 뷰 마이그레이션 중 종속성 해결이 실패하면 경고가 보고됩니다. (버그 #24805140, 버그 #83275)

컴파일 시 mysql_upgrade는 동적으로 생성된 sql_commands_system_tables_data_fix.h 파일에 의존하나, 누락된 종속성으로 인해 파일이 생성되지 않는 문제가 있었습니다. (버그 #24802377, 버그 #83272)

액세스 제어 목록(ACL) 캐시를 사용하는 트랜잭션 간의 경쟁 조건이 INFORMATION_SCHEMA 테이블을 채우기 위해 ACL 캐시를 사용할 때 발생하여 서버가 종료될 수 있었습니다. (버그 #24786029)

디버그 빌드에서 데이터베이스나 테이블 이름이 허용된 최대 길이를 초과할 경우 EXPLAIN 또는 DESCRIBE 명령어가 적절한 오류 대신 어설션을 발생시켰습니다. (버그 #24751177, 버그 #83114)

여러 개의 INFORMATION_SCHEMA 테이블이 데이터 사전 테이블의 뷰로 구현되면서 서버의 내부 용도로만 사용되는 여러 네이티브 SQL 함수가 도입되었으나, 사용자도 이 함수들을 호출할 수 있었습니다. 이제는 사용자에 의해 호출될 경우 오류를 반환합니다. (버그 #24749248, 버그 #83189)

CASE, COALESCE(), IF(), 및 IFNULL() 함수가 서명된 값과 서명되지 않은 값을 혼합하여 잘못된 결과 유형을 반환할 수 있었습니다. (버그 #24733658, 버그 #83148)

SSL이 활성화된 서버에 대한 클라이언트 연결이 CA 인증서를 제공하지 않은 상태에서도 --ssl-mode 값이 VERIFY_CA 또는 VERIFY_IDENTITY인 경우 연결이 성공하는 문제가 있었습니다. (버그 #24732452, 버그 #23189252, 버그 #25397416, 버그 #84508)

데이터 디렉토리에 수동으로 디렉토리를 생성하면 데이터 사전에 데이터베이스로 등록되지 않아도 USE dir_name 명령이 성공했습니다. (버그 #24732194, 버그 #83140)

InnoDB 통계가 잘못된 경우, 이전 SELECT가 행을 반환하지 않았음에도 FOUND_ROWS() 함수가 1을 반환할 수 있었습니다. (버그 #24714857, 버그 #83110)

임시 테이블에 대한 ALTER TABLE 명령어가 같은 이름의 비임시 테이블이 존재할 경우 어설션을 발생시킬 수 있었습니다. (버그 #24713918, 버그 #83117)

CMake가 가능한 경우 Debian 플랫폼에서 -DWITH_NUMA=ON 설정을 사용하도록 설정되었습니다. (버그 #24689101)

더 나은 원자적 파일 생성을 위해 Debian 패키징 스크립트가 touch, chmod, chown 대신 coreutils install 명령을 사용하도록 변경되었습니다. (버그 #24688682)

DISABLE_SHARED CMake 옵션을 활성화하면 컴파일 오류가 발생했습니다. (버그 #24687701, 버그 #83039)
참고: 이 문제는 버그 #24481181의 회귀입니다.

BIN(), OCT(), 및 HEX() 함수가 BIT 데이터 유형의 값을 잘못 처리할 수 있었습니다. (버그 #24686658, 버그 #83031)

디버그 빌드에서 CREATE EVENT 또는 ALTER EVENT 명령어의 주석에 잘못된 utf8 문자가 있을 경우 어설션을 발생시켰습니다. 이제는 ER_INVALID_CHARACTER_STRING 오류를 반환합니다. (버그 #24679962)

utf8 문자 집합의 인코딩이 U+D800에서 U+DFFF 사이의 문자를 유효한 것으로 허용했으나, 이 문자는 서로게이트 쌍을 위해 예약된 것으로 직접적인 문자로 나타나지 않기 때문에 이제 유효하지 않다고 간주됩니다. (버그 #24672415)

종속 하위 쿼리가 포함된 WHERE 절이 있는 경우, Loose Index Scan을 허용하는 GROUP BY 또는 DISTINCT이 있는 쿼리가 부정확한 결과를 반환할 수 있었습니다. (버그 #24671968, 버그 #83005)

외래 키가 있는 테이블에서 RENAME TABLE을 수행한 후 생성된 제약 조건 이름이 TABLE_CONSTRAINTS에 업데이트되지 않았습니다. (버그 #24666169)

macOS에서 CMake의 AddressSanitizer 지원이 작동하지 않았습니다. (버그 #24661626, 버그 #82976)
참고: 이 문제는 버그 #23759968의 회귀입니다.

macOS 10.11에서 Xcode 8.0으로 컴파일이 실패했습니다. (버그 #24661523, 버그 #82975)

비가시 인덱스에 적용된 인덱스 힌트가 오류를 발생시키지 않았습니다. (버그 #24660093, 버그 #82960)

일부 경우, INFORMATION_SCHEMA.KEY_COLUMN_USAGE에서 모든 외래 키 제약 조건에 대한 데이터를 보고하지 않았습니다. (버그 #24655803, 버그 #82961)

큰 문자열에서 REPLACE() 함수가 느리게 동작하고 종료되지 않을 수 있었습니다. (버그 #24652792)

DebugPrintTest 및 DebugPrintDeathTest 단위 테스트가 Aarch64 플랫폼에서 0으로 나누기를 적절하게 처리하지 못했습니다. Alexey Kopytov에게 패치에 감사드립니다. (버그 #24624555, 버그 #82889)

FreeBSD에서 GCC 6을 사용한 컴파일이 작동하지 않았습니다. (버그 #24619561, 버그 #82922)

최근 MySQL 릴리스에서 수행된 mysqld_safe 변경 사항으로 인해 –ledir, –mysqld, –mysqld-version 옵션이 더 이상 옵션 파일에서 지정될 수 없고 명령줄에서 지정해야 합니다. 이로 인해 mysqld_safe를 호출하는 초기화 스크립트가 실패할 수 있었습니다. 이제 이러한 스크립트는 첫 번째 명령줄 인수로 MYSQLD_OPTS 환경 변수를 mysqld_safe에 전달하고 필요한 경우 명령줄 전용 mysqld_safe 옵션 값을 설정합니다. systemd를 사용하는 플랫폼에서는 /etc/sysconfig/mysqld에서 다음과 같은 행으로 MYSQLD_OPTS 값을 설정할 수 있습니다:

MYSQLD_OPTS=" --ledir=/mysqld_ledir --mysqld=my_wrapper "

MYSQLD_OPTS 값에는 mysqld_safemysqld에 전달할 mysqld 옵션도 포함될 수 있습니다. (버그 #24619033, 버그 #82920)
참조: 이 문제는 버그 #24464380, 버그 #24483092, 버그 #25088048, 버그 #25378439, 버그 #25378565의 회귀 문제입니다.

SET PERSIST innodb_buffer_pool_size = value 명령이 innodb_buffer_pool_size 변수의 새로운 값이 아닌 원래 값을 mysqld-auto.cnf에 저장했습니다. (버그 #24613005, 버그 #82905)

SLES 패키지 설치 스크립트의 후반부에 오타가 있어 일부 정리가 수행되지 않았습니다. (버그 #24605300, 버그 #82389)

데이터 디렉터리를 업그레이드하는 동안 서버가 오류 로그에 작성한 일부 메시지에서 표준 타임스탬프 및 프로세스 ID 정보가 누락되었습니다. (버그 #24600054, 버그 #82874)

Last_query_costLast_query_partial_plans 상태 변수의 세션 값이 초기화되기 전에 액세스될 수 있었습니다. (버그 #24596263)

CREATE TABLE … SELECT 구문에서 경고가 발생하면 서버가 종료될 수 있었습니다. (버그 #24595992)

업데이트 가능한 뷰에 데이터를 삽입하는 데 사용된 LOAD DATA에 대해 실제로 업데이트가 가능한지 확인하는 검사가 누락되었습니다. (버그 #24595937)

하위 쿼리에서 LONGTEXT를 반환하는 결정론적 함수가 사용될 때 서버가 널 포인터를 역참조할 수 있었습니다. (버그 #24595581)

ALTER VIEW로 수정된 뷰가 오류로 인해 실패하면 삭제될 수 있었습니다. (버그 #24594140)

JSON 문서를 문자열로 변환하는 작업이 문서가 크고 많은 부호 있는 정수를 포함할 경우 느릴 수 있었습니다. (버그 #24586888)

데이터 사전에는 임시 테이블(#sql로 시작하는 이름)의 항목이 포함될 수 있습니다. 이들 테이블은 INFORMATION_SCHEMA 쿼리 및 SHOW 명령을 통해 노출되었습니다. 이로 인해 mysqldumpmysqlpump가 이러한 테이블을 덤프하려고 할 때 실패할 수 있었습니다. 이제 임시 테이블은 INFORMATION_SCHEMA 쿼리 및 SHOW 명령에서 숨겨집니다. (버그 #24580599, 버그 #24571427)

뷰가 정의될 때 정의의 문자 세트가 고려되지 않았습니다. 이 값이 기본 문자 세트와 다를 경우 뷰에서 사용된 테이블 이름이 인식되지 않아 뷰가 무효로 표시될 수 있습니다.
디버그 빌드의 경우 ALTER VIEW 구문을 구문 분석하는 동안 오류가 발생하고 진단 영역이 비어 있으면 단언문이 발생할 수 있습니다. (버그 #24580586)

LOAD DATA 구문에 대해 너무 많은 열 값이 포함된 입력 데이터는 MySQL 5.6에서는 오류를 발생시키지 않고 경고만 표시했습니다. 이제는 오류가 발생합니다. (버그 #24577194, 버그 #82830)

SET PERSIST를 global_log 시스템 변수와 함께 사용할 때 효과가 없었습니다. (버그 #24569624, 버그 #82807)

Performance Schema variables_info 테이블의 VARIABLE_SOURCE 열이 옵션 파일에 변수 없이 지정된 일부 부울 옵션에 대해 올바르게 설정되지 않았습니다. (버그 #24567960)

.mylogin.cnf 옵션 파일은 클라이언트 프로그램에서 사용하기 위한 것이지만 서버에서도 이를 읽었습니다. 이제 서버는 이를 더 이상 읽지 않습니다. (버그 #24557925)

boost::chrono의 사용이 std::chrono로 대체되었습니다. 이전 사용법은 링크 오류를 일으켰습니다. (버그 #24556808, 버그 #82781)

X Plugin이 다른 플러그인과 다른 컴파일 옵션으로 빌드되었습니다. (버그 #24555770, 버그 #82777)

Performance Schema가 variables_by_thread 테이블을 채우는 동안 초기화가 해제 중인 다른 스레드의 세션 변수에 접근하려고 할 수 있었습니다. (버그 #24555658)

적절한 권한이 없는 사용자가 서버 구성 요소를 로드 및 언로드할 수 있었습니다. (버그 #24528148)

INSTALL COMPONENTUNINSTALL COMPONENT 구문을 동시 실행할 경우 서버가 종료될 수 있었습니다. (버그 #24527148)

Debian/Ubuntu 플랫폼에서 MySQL의 systemd 시작 스크립트가 /etc/mysql/my.cnf 파일 내의 datadir 설정을 무시했습니다. (버그 #24517024, 버그 #82709)

LOCK TABLES 명령이 활성화된 상태에서 트리거가 있는 테이블에 DML 명령을 수행하면 서버가 종료될 수 있었습니다. (버그 #24506766)

계정 관리 명령을 실행 중인 병렬 슬레이브 스레드가 권한 캐시 잠금 처리 중 경합 상태로 인해 실패할 수 있었습니다. (버그 #24503606)

트리거가 있는 테이블에서 다른 DDL 작업과 동시에 ALTER TABLE 명령을 실행하면 데이터 사전이 손상될 수 있었습니다. (버그 #24497803)

mysqladmin shutdown이 서버 프로세스 ID 파일을 확인하는 중 오류가 발생할 경우, 오류가 치명적이지 않다는 것을 명확하게 표시하지 않았습니다. 이제 오류 메시지에 실행이 계속됨을 나타냅니다. (버그 #24496214)

null_audit 플러그인에서 시스템 변수 null_audit_event_record를 잘못 설정하면 서버가 종료될 수 있었습니다. 이 변수는 이제 null_audit 플러그인 내에서만 설정할 수 있도록 읽기 전용으로 변경되었습니다. (버그 #24493829, 버그 #82670)

특정 상황에서 IF(col_name > 5000, (1 / col_name), 5000)와 같은 표현이 DECIMAL(6,4) 타입을 가져와 결과를 잘못되게 만들 수 있었습니다. (버그 #24492965, 버그 #82668)

ZEROFILL 열에 사용된 데이터 구조가 메모리 손상을 일으켜 서버가 종료될 수 있었습니다. (버그 #24489302)

mysql-multi.server.sh 스크립트의 작동이 데이터 디렉터리의 my.cnf에 의존했으나, 이 옵션 파일은 더 이상 사용되지 않기 때문에 mysql-multi.server.sh가 제거되었습니다. (버그 #24487870)

인덱스가 있는 열을 참조하는 서브쿼리의 MIN() 또는 MAX() 함수가 잘못된 결과를 생성할 수 있었습니다. (버그 #24484060, 버그 #82638, 버그 #24657798, 버그 #82965)

SHOW TRIGGERS 명령의 출력 순서가 Linux와 Windows에서 다를 수 있었습니다. (버그 #24482919, 버그 #82637)

mysqld_safe가 데이터 디렉터리에서 my.cnf를 읽으려 했으나, 이는 더 이상 표준 옵션 파일 위치가 아닙니다. (버그 #24482156)

mysql_upgrade 실행 후, INSTALL COMPONENT 명령을 실행하면 서버가 종료될 수 있었습니다. (버그 #24453571)

정규 표현식 패턴을 큰 문자열에 대해 일치시킬 경우 메모리 할당 실패나 정수 오버플로로 인해 서버가 종료될 수 있었습니다. (버그 #24449076, 버그 #24449090)

MySQL 5.7 데이터 디렉터리로 서버를 시작할 경우 default_rolesrole_edges 시스템 테이블이 없어 실패할 수 있었습니다. (버그 #24447771)

큰 값의 CONNECTION 테이블 옵션이 포함된 CREATE TABLE 문에서 잘못된 오류가 보고되었습니다. 값은 이제 1024바이트로 제한됩니다. (버그 #24437124)

SHOW CREATE TRIGGER 명령 실행 중 ER_LOCK_WAIT_TIMEOUT 오류가 발생하면 어설션이 발생할 수 있었습니다. (버그 #24420809, 버그 #82483)

상수 접기(Constant Folding) 과정에서 큰 부호 없는 정수를 잘못된 결과로 처리할 수 있었습니다. (버그 #24401273, 버그 #82425)

너무 긴 서브 파티션 이름을 사용할 경우 서버가 종료될 수 있었습니다. 이제 64자를 초과하는 파티션 또는 서브 파티션 이름에는 ER_TOO_LONG_IDENT 오류가 발생합니다. (버그 #24400628, 버그 #82429)

Gis_wkb_vector<Gis_point> 복사 생성자가 명시적으로 인스턴스화되지 않아 Intel 컴파일러에 빌드 문제가 발생했습니다. (버그 #24397833, 버그 #82358)

REPAIR TABLE 작업 중 임시 파일을 사용하는 방식으로 인해 권한 상승이 발생할 수 있었습니다. (버그 #24388746)

UNINSTALL PLUGINSHOW PLUGINS 명령 사이의 경합 상태로 인해 서버가 종료될 수 있었습니다. (버그 #24344026)

ROW 모드 바이너리 로그에서 컴포넌트 설치 시 어설션이 발생했습니다. (버그 #24343582)

역할과 관련된 잠재적 메모리 누수가 수정되었습니다. (버그 #24337928)

세미조인으로 변환된 하위 쿼리가 프로그래밍 방식으로 INFORMATION_SCHEMA 테이블을 생성하는 경우, INFORMATION_SCHEMA 테이블을 잘못해서 비어 있는 것으로 처리할 수 있었습니다.
버그 수정 이전의 문제 해결 방법: SET optimizer_switch='semijoin=off'; (버그 #24287772, 버그 #82214)

mysqldumpslow가 느린 쿼리 로그의 타임스탬프 형식을 추적하지 않아 타임스탬프를 제대로 파싱하지 못했습니다. (버그 #24007040)

Ubuntu 패키지에 포함된 AppArmor 프로파일이 libnuma/sys 경로를 읽도록 허용하지 않아 서버 시작이 실패할 수 있었습니다. (버그 #23854929)

옵티마이저가 세미조인 변환 대상 쿼리에 대해 RAND()를 상수로 잘못 처리할 수 있었습니다. (버그 #23854015)

디버그 빌드에서 길이가 다른 이진 피연산자 간의 비트 연산으로 어설션이 발생할 수 있었습니다. (버그 #23853628)

트랜잭션 롤백 요청 시, 명령만 롤백하고 전체 트랜잭션을 롤백하지 않으면 트랜잭션에 다른 작업을 추가하려 할 때 어설션이 발생했습니다. (버그 #23753319, 버그 #82143)

utf8mb4_unicode_ci 정렬을 사용하는 STRCMP() 함수가 ORDER BY와 다른 결과를 반환할 수 있었습니다. 이 문제는 해결되었습니다. (버그 #23752284, 버그 #82132)

mysqlpump으로 생성된 전체 논리 백업은 GTID가 활성화된 경우 복원할 수 없었습니다.
덤프 파일에 작성된 GTID 정보를 제어할 수 있도록, 이제 mysqlpump--set-gtid-purged 옵션이 추가되어, 출력에 SET @@GLOBAL.gtid_purged 명령문을 추가할지 여부를 지정할 수 있습니다. (버그 #23748432)

audit_log 플러그인이 오류를 처리하는 동안 또 다른 오류를 신호로 보내면 무한 재귀가 발생할 수 있었습니다. (버그 #23717558, 버그 #82052)

MYSQL_AUDIT_CONNECT 이벤트 실패와 관련된 audit_log 플러그인의 오류 로그 메시지에 근본적인 오류 원인이 표시되어 디버깅을 돕습니다. (버그 #23710632)

MySQL은 이제 readdir_r() 대신 readdir()를 사용합니다. readdir_r()glibc 2.24 이후로 더 이상 사용되지 않으며, 이로 인해 MySQL의 디버그 빌드와 GCC 6.1을 사용한 빌드가 실패했습니다.
추가적으로, GCC 6.1 컴파일러 경고로 인해 발생하는 여러 문제가 수정되었습니다. (버그 #23708395, 버그 #24437737, 버그 #82515, 버그 #24459890, 버그 #82583, 버그 #25103242)

FORCE INDEXSELECT COUNT(*) 쿼리에서 효과적이지 않았습니다. (버그 #23596760, 버그 #81854)

서버 시작 시 유닉스 소켓 파일의 잠금 파일(예: mysql.sock의 잠금 파일로 mysql.sock.lock)을 생성합니다. 서버가 이 잠금 파일에 프로세스 ID를 기록하지 못하면 파일이 제거되지 않아 이후 서버 시작이 실패할 수 있었습니다. (버그 #23582603, 버그 #81838)

디버그 빌드에서 Item_func_spatial_collection::val_str()을 사용하는 쿼리가 단언문을 발생시킬 수 있었습니다. (버그 #23573720)

연결 클래스의 감사 로그 이벤트에서 connection_type 값은 연결 이벤트에만 사용할 수 있었습니다. 이제 이 값은 연결, 연결 해제, 사용자 변경 이벤트에서 사용할 수 있습니다. (버그 #23541550)

audit_log 플러그인의 audit_log_filter_remove_filter() 함수에 NULL 인수가 주어지면 서버가 종료되었습니다. (버그 #23522793)

FEDERATED 저장소 엔진 없이 MySQL을 구성하려는 시도가 실패했습니다 (-DWITH_FEDERATED_STORAGE_ENGINE=0 옵션이 작동하지 않았습니다). (버그 #23508203, 버그 #81665)

Solaris에서 gettimeofday()가 잘못된 값을 반환하여 서버가 종료될 수 있었습니다. (버그 #23499695)

keyring_file 플러그인이 파일이 존재하지 않을 때 키를 스토리지 파일에 기록하려고 시도할 수 있었습니다. 올바른 스토리지 파일이 존재할 때만 키가 플러시되도록 하기 위해, keyring_file은 이제 SHA-256 체크섬을 파일에 저장합니다. 파일을 업데이트하기 전에 플러그인은 예상되는 체크섬을 포함하고 있는지 확인합니다. (버그 #23498254)

max_join_size보다 큰 튜플을 생성하는 유니온 쿼리가 서버 종료를 일으킬 수 있었습니다. (버그 #23303485)

잘못된 구조의 그랜트 테이블은 사용자 관리 작업에 문제를 일으킬 수 있습니다. 이러한 수정의 결과로, 그랜트 테이블을 수정하는 모든 작업에서 서버는 테이블이 예상된 구조인지 확인하고 그렇지 않은 경우 오류를 생성합니다. mysql_upgrade를 실행하여 테이블을 예상된 구조로 업데이트해야 합니다. (버그 #23295423, 버그 #25095876, 버그 #25448037)

ST_ExteriorRing()이 유효한 것으로 간주된 잘못된 WKB 문자열을 전달받아 서버 종료를 일으킬 수 있었습니다. (버그 #23280574)

디버그 빌드에서 XA 트랜잭션의 브랜치를 준비하지 못하면 서버가 종료될 수 있었습니다. (버그 #23264552, 버그 #81375)

옵티마이저가 기본 키에 대한 range 접근이 아닌 보조 인덱스에 대한 ref 접근을 선택할 수 있었으며, 이때 비용이 더 높았습니다. (버그 #23259872, 버그 #81341)

디스크가 가득 찬 오류 메시지 중 하나에 잘못된 오류 코드가 포함되어 있었습니다. (버그 #23247332, 버그 #81346)

ORDER BYLIMIT가 있는 쿼리에서 옵티마이저 추적이 옵티마이저가 다른 인덱스로 전환한 것을 기록하지 않았습니다. (버그 #23227428, 버그 #81250)

version_tokens 플러그인과 함수에서 사용된 잠금을 잘못 처리하여 version_tokens가 제거되는 동안 함수가 호출되면 서버가 종료될 수 있었습니다. (버그 #23210850)

저장 프로그램 내에서 실행된 DML 문에서 발생한 특정 오류가 잘못 처리되어 서버 종료를 일으킬 수 있었습니다. (버그 #23209989)

QUOTE() 함수가 과도한 메모리를 할당할 수 있었습니다. 이제 최대 max_allowed_packet 바이트로 제한되며, 이보다 많은 메모리를 할당하려고 하면 경고와 함께 NULL을 반환합니다. (버그 #23195404)

일부 깊이 중첩된 표현식의 경우, 옵티마이저가 스택 오버플로우를 감지하지 못해 서버가 종료될 수 있었습니다. (버그 #23135667)

X 플러그인을 통해 생성된 세션에서 잘못된 스레드 부착/분리가 서버 종료를 일으킬 수 있었습니다. (버그 #23057045)

mysqld_safe가 데이터 디렉터리를 찾으려고 할 때 $MY_BASEDIR_VERSION/var를 가능한 위치 중 하나로 잘못 고려했습니다. (버그 #23013510, 버그 #80866)

일부 생성된 열에 대해 테이블 재구성을 위한 열 정의의 문자 집합 변환이 열 값을 변경할 수 있었습니다. (버그 #22991924)

OS X DMG 설치 프로그램이 키링 플러그인 설치를 제대로 설정하지 않았습니다. (버그 #22991650)

쿼리가 파생 테이블의 열을 기준으로 GROUP BY를 수행하고 선택 목록에 집계 함수와 그룹 열을 혼합한 표현식이 포함된 경우, ONLY_FULL_GROUP_BY SQL 모드가 활성화되어 있으면 오류가 발생했습니다. (버그 #22924183, 버그 #80726)

MySQL 5.6에서 5.7로의 바이너리(제자리) 업그레이드 후, mysqlpump를 사용하여 수행된 데이터 내보내기가 덤프 파일을 다시 로드하려는 시도에서 date_column의 기본값이 잘못되었다는 오류를 일으켰습니다. (버그 #22919028, 버그 #80706)

긴 부동 소수를 정수로 변환하지 못하면 서버가 종료될 수 있었습니다. (버그 #22907691)

유닉스 및 유닉스 유사 시스템에서 옵션 값 없이 --log-error를 지정하면 결과로 생성된 오류 로그 파일이 --pid-file 옵션이 주어진 경우 PID 파일의 디렉터리에 잘못 생성되었습니다. (버그 #22900354)

main.log_tables-big 테스트 케이스가 부하가 높은 호스트에서 불안정할 수 있었습니다. Laurynas Biveinis에게 패치에 감사드립니다. (버그 #22874167, 버그 #80607)

X 플러그인을 통해 실행된 SQL 문은 퍼포먼스 스키마에 계측되지 않았습니다. (버그 #22859462)

rpl.rpl_key_rotation 테스트 케이스가 마스터 서버와 올바르게 동기화되지 않았습니다. Laurynas Biveinis에게 패치에 감사드립니다. (버그 #22838596, 버그 #80531)

TEXT 타입 열(TINYTEXT 등)에 대한 인덱스 접두사 길이를 일관성 있게 처리하지 않아 DROP INDEX 작업이 실패할 수 있었습니다.
이 수정의 결과로 인해, 최대 열 데이터 유형 크기를 초과하는 인덱스 접두사가 지정된 CREATE TABLECREATE INDEX 문에 대해 더 제한적인 동작이 적용됩니다:

  • 고유하지 않은 인덱스의 경우, 엄격 SQL 모드가 활성화된 경우 오류가 발생하고, 엄격 모드가 비활성화된 경우 인덱스 길이가 최대 열 데이터 유형 크기로 축소되고 경고가 표시됩니다.
  • 고유 인덱스의 경우 SQL 모드와 관계없이 오류가 발생하며, 인덱스 길이를 줄이면 지정된 고유 요건을 충족하지 않는 중복 항목이 삽입될 수 있기 때문입니다.

(버그 #22740093, 버그 #80392)

저장된 루틴 이름에 대한 메타데이터 잠금이 대소문자를 구분하여 수행되었지만 루틴 이름은 대소문자를 구분하지 않았습니다. (버그 #22700385)

DISTINCT가 포함된 집계 함수를 사용하는 쿼리가 잘못된 결과를 반환할 수 있었습니다. (버그 #22686994, 버그 #80310)

innodb_numa_interleave 시스템 변수가 NUMA를 지원하지 않는 시스템에서도 잘못 노출되었습니다. Tomislav Plavcic에게 감사드립니다.

CMake는 현재 플랫폼의 NUMA 지원 여부에 따라 기본 WITH_NUMA 값을 설정하도록 변경되었습니다. NUMA를 지원하지 않는 플랫폼에서 CMake는 다음과 같이 동작합니다:

  • NUMA 옵션 없이 (일반적인 경우) CMake는 계속 정상 작동하며, 다음과 같은 경고를 출력합니다: NUMA 라이브러리가 없거나 필요한 버전을 사용할 수 없음
  • -DWITH_NUMA=ON를 사용하면 CMake는 다음 오류와 함께 중단됩니다: NUMA 라이브러리가 없거나 필요한 버전을 사용할 수 없음

(버그 #22678436, 버그 #80288)

복잡한 WHERE 조건이 포함된 특정 SQL 쿼리가 경고, 메모리 손상, 또는 서버 종료를 일으킬 수 있었습니다. (버그 #22671573)

서버를 오프라인 상태로 전환할 때 퍼포먼스 스키마 내의 경쟁 조건으로 인해 서버가 종료될 수 있었습니다. (버그 #22551677)

macOS에서 소문자와 대문자가 포함된 새 이름으로 트리거가 연결된 테이블의 이름을 변경한 경우, 해당 트리거에 대해 DROP TRIGGER를 실행하면 테이블에 대해 ER_NO_SUCH_TABLE 오류가 발생했습니다. (버그 #22512899, 버그 #79873)

MYSQL_FIELD C API 구조에서 파생 테이블에 대한 org_table 값이 *로 설정되어 이 값을 의존하는 쿼리가 실패할 수 있었습니다. 이제 org_table 값은 뷰 또는 파생 테이블의 열에 따라 설정됩니다: 뷰에서 선택한 열의 경우 org_table은 해당 뷰의 이름을 지정하며, 파생 테이블에서 선택한 열의 경우 org_table은 기본 테이블의 이름을 지정합니다. 파생 테이블이 뷰를 감싸는 경우에도 org_table은 여전히 기본 테이블의 이름을 지정하고, 열이 표현식인 경우 org_table은 빈 문자열로 설정됩니다. (버그 #22364401, 버그 #79641)

RPM 패키지에서 배포된 /etc/my.cnf 파일의 기본 error-log 위치가 설치된 logrotate 스크립트의 위치와 달라 logrotate가 실패했습니다. (버그 #22322685)

퍼포먼스 스키마의 events_statements_summary_by_digest 테이블이 동일한 쿼리 요약과 스키마 조합에 대해 단일 행 대신 여러 행을 포함할 수 있었습니다. (버그 #22320066, 버그 #79533)

퍼포먼스 스키마 시스템 및 상태 변수 테이블에서 utf8이 아닌 문자셋으로 표현된 변수 값이 잘리거나 잘못된 값을 가질 수 있었습니다. (버그 #22313205)

디버그 빌드에서 유효하지 않은 UTF-8 이름의 표현식 속성을 사용하여 테이블 파티셔닝 표현식을 변경하면 어설션이 발생할 수 있었습니다. (버그 #22152229)

AUTO_INCREMENT 열이 포함된 테이블에 삽입 작업을 수행한 후 LAST_INSERT_ID()가 올바른 값을 반환했지만, C API 함수 mysql_insert_id()의 값이 0으로 재설정되었습니다. (버그 #22028117, 버그 #78778)

Ubuntu에서 Community에서 Commercial 패키지로 업그레이드하는 동안 mysqldmy_print_defaults가 설치되지 않은 것처럼 보이는 오류 메시지가 표시되었습니다. 이 메시지는 잘못된 것이며, 이제 표시되지 않습니다. (버그 #21807248)

시스템 변수 optimizer_switchuse_index_extensions 플래그가 비활성화된 경우, 일부 SELECT DISTINCT 쿼리가 잘못된 결과를 반환할 수 있었습니다. (버그 #21749123, 버그 #78244)

UPDATE 문에서 WHERE 절에 잘못된 문자열 값이 있으면 범위 스캔 대신 인덱스 스캔이 사용되어, 인덱스에 없는 값에 대해 속도가 크게 느려질 수 있었습니다. 이제 옵티마이저는 이를 “불가능한 WHERE 조건”으로 판단합니다. (버그 #21032418, 버그 #76933)

Debian 패키지에서 AppArmor 관련 포함 파일이 누락되었고, 잘못 AppArmor에 종속되어 표시되어 AppArmor를 제거하여 비활성화할 수 없었습니다. (버그 #20768958)

automatic_sp_privileges 시스템 변수가 활성화되었을 때 익명 사용자에게 기대되는 효과가 발생하지 않았습니다. (버그 #20266641)

복제 환경에서 SET PASSWORD 또는 ALTER USER가 해시 문자열 구문 분석 실패로 인해 슬레이브에서 실행되지 않을 수 있었습니다. (버그 #20228478)

옵티마이저 resolve_const_item() 함수가 Item_decimal()을 호출할 때 마지막 두 인수를 잘못된 순서로 전달했습니다. (버그 #19062566)

ALTER TABLE 연산이 다음 조건에서 DATE 또는 DATETIME 열을 추가할 때 오류를 보고하지 못했습니다: a) 해당 열이 NOT NULL 이고 기본값이 제공되지 않은 경우; b) strict 및 NO_ZERO_DATE SQL 모드가 활성화된 경우; c) 테이블이 비어 있지 않은 경우.
ALTER TABLE 연산이 다음 조건에서 경고 대신 오류를 발생시켰습니다: a) 열이 NOT NULL 이고 기본값이 제공되지 않은 경우; b) strict SQL 모드가 활성화되고 NO_ZERO_DATE SQL 모드가 비활성화된 경우; c) 테이블이 비어 있지 않은 경우. (버그 #16888677)

소수 초 부분이 포함된 TIME, DATE 또는 TIMESTAMP 값을 소수 자릿수가 적은 동일 유형의 열에 삽입하면 반올림이 발생했습니다. 이는 MySQL 5.5와 다르며, MySQL 5.5에서는 반올림 대신 잘림을 사용했습니다. 이 동작을 제어할 수 있도록 새로운 TIME_TRUNCATE_FRACTIONAL SQL 모드가 추가되었습니다. 기본값은 반올림을 사용하는 것이며, 이 모드를 활성화하면 반올림 대신 잘림이 발생합니다. (버그 #16583910, 버그 #68760)

NOT IN 서브쿼리가 내부 테이블의 인덱스 접두사를 사용할 때 잘못된 결과를 생성할 수 있었습니다. (버그 #13915291)

비-Linux Unix 시스템에서 mysql.server 시작 스크립트가 pgrep 대신 Linux 명령어 pidof를 사용했습니다. (버그 #13788154, 버그 #64342)

비정상 서버 종료 후 mysqld_safe 인스턴스를 여러 개 시작하면 한 mysqld_safe 인스턴스가 다른 인스턴스를 종료시킬 수 있었습니다. 버그 수정의 결과로 mysqld_safe.pid 파일은 더 이상 사용되지 않습니다. (버그 #11751149, 버그 #41908)

mysqld_safe--help 메시지가 --no-defaults, --defaults-file, 및 --defaults-extra-file 옵션이 제공될 경우 첫 번째 인수로 지정해야 한다는 내용을 명시하도록 수정되었습니다. (버그 #11745176, 버그 #11192)

각 레벨의 XML 파서 위치 스택에 대한 경계 확인(고정 깊이)을 배열 크기를 상한으로 사용하여 설정하였으므로 한 단계 벗어났습니다. 이 문제는 허용 깊이를 하나 줄여 위치 스택의 최대 요소 수와 일치하도록 수정되었습니다. (버그 #83871, 버그 #25111907)
참고: 관련 버그 #14040071, 버그 #15948580.

Leave a Comment



이 문서 공유

8.0.1 변경 사항 (2017-04-10 Development Milestone)

링크 복사

CONTENTS