카테고리 : MySQL/릴리스노트/8.0

(구) MySQL 8.0.1 릴리스 노트

MySQL 8.0.1 Community Server 릴리스 노트 한국어 번역본

저자: Oracle 작성: 2017.04.10 약 118분 70,700자

계정 관리 관련 사항

  • 호환되지 않는 변경: 컴포넌트와 플러그인은 이제 권한을 동적으로(런타임에) 정의할 수 있으며, 이를 통해 구현하는 기능과 구체적으로 연결된 권한을 생성할 수 있습니다.

    동적 권한의 구현을 통해 DBA는 SUPER 권한에서 벗어나기 위한 마이그레이션을 시작할 수 있습니다. 과거에는 SUPER가 광범위하고 계속 증가하는 다양한 작업과 연결되어 왔으며, 이러한 작업이 모두 서로 관련되어 있는 것은 아니었습니다. SUPER가 포괄하던 많은 작업은 이제 더 제한된 범위의 동적 권한과도 연결되며, 해당 권한은 그 작업을 구현하는 컴포넌트 또는 플러그인에 의해 등록됩니다. 이전에 SUPER 권한이 필요했던 이러한 각 작업은 SUPER가 아니라 연결된 동적 권한을 부여함으로써 계정에 허용할 수 있습니다. 예를 들어, 전역 시스템 변수를 수정할 수 있어야 하는 사용자에게는 SUPER가 아니라 SYSTEM_VARIABLES_ADMIN을 부여할 수 있습니다.

    이 변경은 DBA가 SUPER 부여를 피하고 사용자 권한을 허용된 작업에 더 가깝게 맞출 수 있게 하여 보안을 개선합니다. SUPER는 이제 deprecated되었으며 향후 MySQL 버전에서 제거될 예정입니다.

    동적 권한은 전역 수준에서만 적용됩니다. 서버는 사용자 계정에 대한 동적 권한의 현재 할당 정보를 mysql 시스템 데이터베이스의 새 테이블인 mysql.global_grants에 저장합니다.

    자세한 내용은 Static Versus Dynamic Privileges를 참조하십시오. 해당 설명에는 SUPER에서 동적 권한으로 계정을 마이그레이션하기 위한 지침이 포함되어 있습니다.

    비호환성: SHOW GRANTS는 더 이상 전역 권한 출력에서 ALL PRIVILEGES를 표시하지 않습니다. 이는 전역 수준에서 ALL PRIVILEGES의 의미가 어떤 동적 권한이 정의되어 있는지에 따라 달라지기 때문입니다. 대신 SHOW GRANTS는 부여된 각 전역 권한을 명시적으로 나열합니다. 자세한 내용은 SHOW GRANTS Statement를 참조하십시오. SHOW GRANTS 출력을 처리하는 애플리케이션은 이에 맞게 조정해야 합니다.

    이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 이러한 변경 사항을 mysql 시스템 데이터베이스에 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #8131)

C API 관련 사항

  • libmysqlclient에서 구현되는 C API에 이제 MySQL server binary log에서 replication event 스트림을 읽기 위한 client interface가 포함됩니다. 자세한 내용은 C API Binary Log Interface를 참조하십시오(WL #7672).

캐릭터셋 지원

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

    그 결과, 명시적 캐릭터셋과 콜레이션을 지정하지 않는 한 새 객체의 기본 캐릭터셋과 콜레이션은 이전과 달라집니다. 여기에는 데이터베이스와 그 안의 객체(예: 테이블, 뷰, stored program)가 포함됩니다. 이전 기본값을 유지하는 한 가지 방법은 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으로 증가했습니다. (Bug #24823885, Bug #83319)

  • utf8mb4 캐릭터셋의 기본 콜레이션이 utf8mb4_general_ci에서 utf8mb4_0900_ai_ci로 변경되었습니다. utf8mb4_general_ci는 Basic Multilingual Plane (BMP) 외부의 문자를 올바르게 처리하지 않습니다. (Bug #24742157)

  • Unicode 9.0.0 콜레이션의 pad 속성이 PAD SPACE에서 NO PAD로 변경되었습니다. 따라서 이러한 콜레이션은 이제 문자열 끝의 공백을 다른 문자와 마찬가지로 유의미한 것으로 처리합니다. 영향을 받는 콜레이션은 이름에 문자열 _0900_이 포함됩니다.

    9.0.0 (NO PAD) 콜레이션을 가진 nonbinary 문자열(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 |
    +------------+
    

    Trailing Space Handling in Comparisons도 참조하십시오.

    INFORMATION_SCHEMA COLLATIONS 테이블에는 이제 각 콜레이션의 pad 속성을 나타내는 PAD_ATTRIBUTE 컬럼이 있습니다.

    조기 weight string 잘림과 관련된 latin1_de 콜레이션의 문제가 수정되었습니다. 유일하게 예상되는 영향은 WEIGHT_STRING() 함수 결과에 대한 것입니다. (WL #10354)

  • MySQL 8.0.0에서 utf8mb4 Unicode 캐릭터셋에 대해 대소문자를 구분하지 않고 악센트를 구분하지 않는 콜레이션를 추가한 이전 작업을 보완하여, 대소문자를 구분하고 악센트를 구분하는 새로운 콜레이션가 추가되었습니다. 일반 콜레이션의 이름은 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 언어별 콜레이션

    Language Collation
    크로아티아어 utf8mb4_hr_0900_as_cs
    체코어 utf8mb4_cs_0900_as_cs
    덴마크어 utf8mb4_da_0900_as_cs
    에스페란토 utf8mb4_eo_0900_as_cs
    에스토니아어 utf8mb4_et_0900_as_cs
    독일어 전화번호부 순서 utf8mb4_de_pb_0900_as_cs
    헝가리어 utf8mb4_hu_0900_as_cs
    아이슬란드어 utf8mb4_is_0900_as_cs
    일본어 utf8mb4_ja_0900_as_cs
    라트비아어 utf8mb4_lv_0900_as_cs
    리투아니아어 utf8mb4_lt_0900_as_cs
    폴란드어 utf8mb4_pl_0900_as_cs
    고전 라틴어 utf8mb4_la_0900_as_cs
    루마니아어 utf8mb4_ro_0900_as_cs
    슬로바키아어 utf8mb4_sk_0900_as_cs
    슬로베니아어 utf8mb4_sl_0900_as_cs
    현대 스페인어 utf8mb4_es_0900_as_cs
    전통 스페인어 utf8mb4_es_trad_0900_as_cs
    스웨덴어 utf8mb4_sv_0900_as_cs
    튀르키예어 utf8mb4_tr_0900_as_cs
    베트남어 utf8mb4_vi_0900_as_cs

    utf8mb4_0900_as_cs는 다음 표의 언어에 대해서도 악센트를 구분하고 대소문자를 구분하는 콜레이션으로 작동합니다.

    Table 3 utf8mb4_0900_as_cs가 적합한 언어

    Language Name Language Code
    독일어(사전 순서) de
    영어 en
    프랑스어(locale fr_FR) fr
    아일랜드 게일어 ga
    인도네시아어 id
    이탈리아어 it
    룩셈부르크어 lb
    말레이어 ms
    네덜란드어 nl
    포르투갈어 pt
    스와힐리어 sw
    줄루어 zu

    utf8mb4_0900_as_cs는 프랑스 프랑스어(locale fr_FR)에는 적합하지만 캐나다 프랑스어(locale fr_CA)에는 적합하지 않습니다. 캐나다 프랑스어에는 utf8mb4_0900_ai_ci가 적합합니다. ai_cias_cs 콜레이션 사이에 차이가 있는 이유는 캐나다 프랑스어의 악센트 문자가 프랑스 프랑스어와 다른 순서를 가지기 때문입니다.

    utf8mb4_da_0900_as_cs는 다음 표의 언어에 대해서도 악센트를 구분하고 대소문자를 구분하는 콜레이션으로 작동합니다.

    Table 4 utf8mb4_da_0900_as_cs가 적합한 언어

    Language Name Language Code
    노르웨이어 no
    노르웨이어 Bokmål nb
    노르웨이어 Nynorsk nn

    언어별이 아닌 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는 Classical Latin이 CLDR에 정의되어 있지 않기 때문에 CLDR을 기반으로 하지 않습니다.

    • 콜레이션은 [U+0, U+10FFFF] 범위의 모든 문자에 대해 작동합니다.

    • 콜레이션이 언어별이 아닌 경우, 보충 문자를 포함한 모든 문자를 기본 순서(아래에 설명됨)로 정렬합니다. 콜레이션이 언어별인 경우, 해당 언어의 문자는 언어별 규칙에 따라 올바르게 정렬하고, 해당 언어에 속하지 않는 문자는 기본 순서로 정렬합니다.

    • 기본적으로 콜레이션은 DUCET table (Default Unicode Collation Element Table)에 나열된 code point를 가진 문자를 해당 table에 할당된 weight 값에 따라 정렬합니다. 콜레이션은 DUCET table에 나열된 code point가 없는 문자를 UCA에 따라 구성되는 implicit weight 값을 사용하여 정렬합니다.

      해당 콜레이션은 tertiary level을 포함하여 세 DUCET weight level 모두에서 정렬합니다. 이는 primary 및 secondary level에서만 정렬하는 accent-insensitive, case-insensitive collation과 비교됩니다.

    • 언어별로 지정되지 않은 콜레이션의 경우 contraction sequence의 문자는 별도의 문자로 처리됩니다. 언어별 콜레이션의 경우 contraction이 문자 정렬 순서를 변경할 수 있습니다.

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

컴파일 관련 사항

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

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

    (Bug #25597667)

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

  • Windows 빌드는 이제 기본 runtime library를 사용합니다(빌드는 /MD 플래그를 사용함). (Bug #25611609)

  • Developer Studio 12.6으로 컴파일하기 위한 CMake 지원이 추가되었습니다. (Bug #25384295)

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

  • 서버 빌드용 Boost library의 최소 버전은 이제 1.63.0입니다. (Bug #24579061, Bug #82834, Bug #25126144, Bug #83905)

  • 4.4보다 높은 GCC 버전의 경우, -fno-expensive-optimizations-ffp-contract=off로 대체되었으며, 이는 더 많은 최적화를 활성화하는 효과가 있습니다. 패치를 제공한 Alexey Kopytov에게 감사드립니다. (Bug #24571672, Bug #82760)

  • MySQL 8.0을 빌드하기 위해 필요한 CMake의 최소 버전은 이제 Windows에서는 3.2.3, Solaris에서는 3.4.0, 그 외에서는 2.8.12입니다. (Bug #24481181, Bug #82628)

    참조: 함께 참조: Bug #24687701.

  • 다음을 포함하여 소스 코드 기반을 정리하는 작업이 수행되었습니다: 필요하지 않은 CMake 검사 제거, 소스 파일에서 사용되지 않는 매크로 제거, 의존성 수를 줄이고 더 모듈화하기 위한 헤더 파일 재구성, 정의가 없는 함수 선언 제거, 로컬로 작성된 함수를 업계 표준 library의 동등한 함수로 대체.

설정 관련 사항

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

  • 디버깅을 위한 두 가지 새로운 CMake 옵션을 사용할 수 있습니다. LINK_RANDOMIZEmysqld 바이너리에서 심볼 순서를 랜덤화할지 여부를 나타내며(기본값 OFF), LINK_RANDOMIZE_SEEDLINK_RANDOMIZE의 seed 값을 지정합니다. (Bug #25336715)

  • -DENABLE_DEBUG_SYNC=OFF-DWITH_DEBUG=ON이 모두 지정된 경우 MySQL이 컴파일되지 않았습니다. ENABLE_DEBUG_SYNC 옵션은 제거되었으며, WITH_DEBUG를 활성화하면 Debug Sync가 활성화됩니다. (Bug #18374703)

  • persisted system variable과 관련하여 다음 변경 사항이 적용되었습니다.

    • 새로운 문인 RESET PERSIST는 persisted global system variable 설정을 저장하는 mysqld-auto.cnf 파일에 SET PERSIST로 persist된 변수 설정을 제거할 수 있게 합니다.
    • 이전에는 SET PERSIST(또는 @@PERSIST.)를 사용하여 global variable을 DEFAULT 또는 변수의 literal default value로 설정하면, 해당 변수가 존재하지 않는 경우 mysqld-auto.cnf 파일에 해당 변수의 설정도 추가하거나, 존재하는 경우 mysqld-auto.cnf에서 이를 제거했습니다. 이제 해당 할당은 항상 mysqld-auto.cnf 파일에 해당 변수의 설정을 추가하며, 파일에서 설정을 제거하려면 RESET PERSIST를 사용하십시오.
    • 새로운 Performance Schema 테이블인 persisted_variablesmysqld-auto.cnf 파일에 대한 SQL 인터페이스를 제공하여, 런타임에 SELECT 문을 사용해 파일 내용을 검사할 수 있게 합니다.
    • Performance Schema variables_info 테이블에는 각 system variable이 가장 최근에 언제 그리고 어떤 사용자에 의해 설정되었는지를 보여 주는 새 컬럼이 있습니다.

    자세한 내용은 Persisted System VariablesRESET PERSIST Statement를 참조하십시오.

    이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 이러한 변경 사항을 Performance Schema에 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #9720, WL #9763)

    참조: 다음도 참조하십시오: Bug #24522064.

  • query_cache_size system variable의 기본값이 1M에서 0으로 줄었습니다. 따라서 기본적으로 query cache buffer가 할당되지 않습니다. (WL #9817)

연결 관리 관련 사항

  • MySQL Server는 이제 일정 횟수의 연속된 connection 시도 실패 후 client에 대한 server 응답에 증가하는 지연을 도입할 수 있도록 관리자를 지원하는 plugin library를 포함합니다. 이 기능은 MySQL user account에 액세스하려는 무차별 대입 공격을 늦추는 억제 수단을 제공합니다. 자세한 내용은 Connection Control Plugins를 참조하십시오. (WL #8885)

Data Dictionary 관련 사항

  • SQL 계층 코드와 스토리지 엔진 API가 다음에 대한 data dictionary 지원을 제공하도록 확장되었습니다.

    • InnoDB가 테이블에 암시적으로 추가하는 auxiliary column 및 key, 테이블과 tablespace에 대한 스토리지 엔진 전용 데이터 및 객체 식별자, 그리고 InnoDB full-text search auxiliary table 및 이와 유사한 기타 암시적으로 생성되는 객체에 대한 정보를 저장합니다.
    • DDL 작업에 대한 data dictionary 업데이트, 스토리지 엔진 변경, binary log 쓰기를 atomic transaction으로 결합합니다.

    명명된 테이블 중 존재하지 않는 테이블이 있는 경우 DROP TABLE에 대한 동작 변경이 발생합니다. 이전에는 이 구문이 존재하지 않아 drop할 수 없었던 테이블을 나타내는 오류를 반환했지만, 존재하는 테이블도 drop했습니다. 이제 이 구문은 여전히 존재하지 않는 테이블을 나타내지만, 오류와 함께 실패하며 변경 사항은 적용되지 않습니다.

    자세한 내용은 Atomic Data Definition Statement SupportWL#7743을 참조하십시오. (WL #7743)

  • 이러한 INFORMATION_SCHEMA 테이블은 data dictionary 테이블에 대한 view로 다시 구현되었습니다.

    EVENTS
    PARAMETERS
    ROUTINES
    TRIGGERS
    

    이제 해당 테이블에 대한 쿼리는 다른 더 느린 방식이 아니라 data dictionary 테이블에서 정보를 가져오므로 더 효율적입니다. 예를 들어, 서버는 더 이상 INFORMATION_SCHEMA 테이블의 각 쿼리에 대해 temporary table을 생성할 필요가 없습니다.

    해당 테이블에 대한 개선 사항은 INFORMATION_SCHEMA 테이블에 해당하는 정보를 표시하는 SHOW 구문에도 적용됩니다. 예를 들어, SHOW TRIGGERSTRIGGERS 테이블과 동일한 정보를 표시합니다.

    이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 이러한 변경 사항을 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #9494)

Deprecated 및 제거 관련 사항

  • 호환되지 않는 변경; InnoDB; Partitioning: ALTER TABLE... UPGRADE PARTITIONING 문은 더 이상 지원되지 않습니다.

  • Deprecated된 PROCEDURE ANALYSE() 구문이 제거되었습니다. (WL #4745)

  • Deprecated된 libmysqld 내장 서버 라이브러리가 다음 항목과 함께 제거되었습니다.

    • mysql_config --libmysqld-libs, --embedded-libs, --embedded 옵션
    • CMake WITH_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)

  • Deprecated된 --temp-pool 서버 옵션이 제거되었습니다. (WL #8396)

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

  • Parser는 더 이상 SQL 문에서 \NNULL의 동의어로 간주하지 않습니다. 대신 NULL을 사용하십시오.

    이 변경 사항은 LOAD DATA 또는 SELECT... INTO OUTFILE을 사용하여 수행되는 텍스트 파일 import 또는 export 작업에는 영향을 주지 않으며, 이 경우 NULL은 계속 \N으로 표현됩니다. LOAD DATA Statement를 참조하십시오. (WL #7247)

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

Optimizer 관련 사항

  • InnoDB: MySQL은 이제 descending index를 지원합니다. index 정의의 DESC는 더 이상 무시되지 않고 key 값을 내림차순으로 저장하게 합니다. 이전에는 index를 역순으로 scan할 수 있었지만 성능상의 불이익이 있었습니다. descending index는 정방향으로 scan할 수 있으며, 이는 더 효율적입니다. 또한 descending index는 가장 효율적인 scan 순서가 일부 column에는 오름차순을, 다른 column에는 내림차순을 혼합하는 경우 optimizer가 multiple-column index를 사용할 수 있게 합니다. 자세한 내용은 Descending Indexes를 참조하십시오.

    이전에는 GROUP BY가 기본적으로 암시적으로 정렬했습니다(즉, GROUP BY column에 ASC 또는 DESC 지정자가 없는 경우). 그러나 암시적 GROUP BY 정렬에 의존하는 것은 deprecated되었습니다. GROUP BY는 더 이상 기본적으로 정렬하지 않으므로 query 결과가 이전 MySQL 버전과 다를 수 있습니다. 지정된 정렬 순서를 생성하려면 GROUP BY column에 명시적 ASC 또는 DESC 지정자를 사용하거나 ORDER BY clause를 제공하십시오.

    (WL #1074, WL #7737)

  • Optimizer trace 출력에는 이제 key 및 payload size, addon field가 packed되지 않는 이유와 같은 filesort 작업에 대한 더 많은 정보가 포함됩니다. (Bug #25246184, Bug #84180)

  • 이전에는 invisible index가 InnoDB storage engine에 대해서만 지원되었습니다. 이제 invisible index는 storage engine에 중립적입니다(모든 engine에 대해 지원됨). (Bug #23541244)

  • GROUPING() 함수가 WITH ROLLUP modifier를 포함하는 GROUP BY query에서 사용하도록 도입되었습니다. 이 함수는 query 결과에서 super-aggregate row의 NULL 값과 일반 grouped row의 NULL 값을 구별할 수 있게 합니다. 자세한 내용은 Miscellaneous FunctionsGROUP BY Modifiers를 참조하십시오. 이 기능을 구현하는 데 부분적으로 사용된 patch를 제공한 Zhe Dong에게 감사드립니다.

    GROUPING은 이제 reserved word이며 identifier quoting 없이 identifier로 사용할 수 없습니다.

    (Bug #11754449, Bug #46053, Bug #11745963, Bug #21728, WL #1979)

  • optimizer는 이제 Index Merge access method 사용에 영향을 주는 INDEX_MERGENO_INDEX_MERGE hint를 지원합니다. 예:

    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 system database의 server_costengine_cost optimizer cost model table에는 이제 각 cost table estimate의 기본값을 포함하는 default_value column이 포함됩니다. 이 column은 연결된 cost estimate가 변경되더라도 값을 유지하는 read-only generated column입니다. 자세한 내용은 The Optimizer Cost Model을 참조하십시오.

    이전 버전에서 이 MySQL release로 upgrade하는 경우, 이러한 변경 사항을 mysql system database에 반영하려면 mysql_upgrade를 실행하고 server를 재시작해야 합니다. (WL #10128)

  • Optimizer 비용 모델 engine_cost 테이블에서 메모리 액세스 비용이 디스크 액세스 비용에 비해 낮아졌습니다. 이 변경의 한 가지 영향은 동일한 쿼리를 두 번 실행하는 사이에 실행 계획이 변경될 수 있다는 것입니다. 예를 들어, 서버 시작 시점에 데이터가 buffer pool로 읽혀 들어가기 전에는 쿼리가 실행된 후와 다른 계획을 얻을 수 있는데, 그때는 데이터가 메모리에 있게 되기 때문입니다. (WL #8737)

  • MySQL은 이제 비재귀 및 재귀 common table expression을 모두 지원합니다. Common table expression은 명명된 임시 결과 집합의 사용을 가능하게 하며, 이는 SELECT 문과 특정 다른 문 앞에 WITH 절을 허용하는 방식으로 구현됩니다. 자세한 내용은 WITH (Common Table Expressions)를 참조하십시오.

    RECURSIVE는 이제 예약어이며, identifier quoting 없이 식별자로 사용할 수 없습니다.

    (WL #883, WL #3634)

  • Optimizer는 이제 테이블을 조인할 순서를 지정할 수 있게 하는 hint를 지원합니다. 자세한 내용은 Optimizer Hints를 참조하십시오. (WL #9158)

패키징 관련 사항

  • Microsoft Windows: 알림: MySQL 8.0은 Windows 플랫폼에서 실행하려면 Microsoft Visual C++ 2015 Redistributable Package가 필요합니다. 사용자는 서버를 시작하기 전에 해당 패키지가 시스템에 설치되어 있는지 확인해야 합니다. 이 패키지는 Microsoft Download Center에서 사용할 수 있습니다.
  • RPM 패키지 구조의 변경으로 인해 MySQL Server를 깨끗하게 설치하려면 더 많은 패키지 집합을 제거해야 합니다. (Bug #25603087)
  • 잠재적인 race condition을 방지하기 위해 Debian 패키지는 이제 mkdir, touch, chown의 조합 대신 GNU install 유틸리티를 사용합니다. (Bug #25258829)
  • server-coreclient-core라는 새 Debian/Ubuntu 패키지를 이제 사용할 수 있습니다. 이 패키지들은 바이너리만 포함하며, 설정 또는 서비스 스크립트, 디렉터리 설정, man page 등은 포함하지 않습니다. 이 패키지들은 표준 패키지와 함께 자동으로 설치되지만, 단독으로 설치되는 경우 동작하는 MySQL 설정을 만들지는 않습니다. 자체 설치 설정을 사용자 지정하려는 사용자에게 유용할 수 있습니다. (Bug #25146364)
  • scripts/mysql_security_commands.sqlsupport-files/mysql.server-sys5.sh는 더 이상 사용되지 않으며 MySQL 배포판에서 제거되었습니다. (Bug #24756400, Bug #24756442)
  • RPM 패키지는 이제 NUMA 지원이 있는 플랫폼, 즉 EL5보다 높은 OEL, Fedora, SLES, Docker에서 -DWITH_NUMA=ON으로 빌드됩니다. (Bug #24689078)
  • my-default.cnf.sh 파일(기본 my-default.cnf 또는 my-default.ini 파일을 생성하는 데 사용됨)은 더 이상 소스 배포판에 포함되지 않으며, my-default.cnfmy-default.ini는 더 이상 배포 패키지에 포함되거나 설치되지 않습니다. (Bug #22525354)
  • 사용되지 않고 문서화되지 않은 archive_readerarchive_test 유틸리티가 MySQL 소스 배포판에서 제거되었습니다. (Bug #12818207, Bug #62014)

Performance Schema 관련 사항

  • Performance Schema는 최소, 최대 및 평균 statement 지연 시간에 대한 정보를 포함하는 statement event summary 테이블을 유지 관리합니다. 이러한 테이블은 시스템 성능에 대한 상위 수준 평가를 가능하게 합니다. 더 세분화된 수준에서 평가할 수 있도록 Performance Schema는 이제 statement 지연 시간에 대한 histogram 데이터도 수집합니다. 이러한 histogram은 지연 시간 분포에 대한 추가적인 insight를 제공하며 다음 테이블에서 사용할 수 있습니다.

    자세한 내용은 Statement Histogram Summary Tables를 참조하십시오.

    또한 events_statements_summary_by_digest 테이블에는 이제 statement 지연 시간에 대한 percentile 정보를 제공하는 컬럼이 있습니다. 자세한 내용은 Statement Summary Tables를 참조하십시오.

    이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 이러한 변경 사항을 Performance Schema에 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #5384)

  • 시스템 및 status variable 정보는 더 이상 INFORMATION_SCHEMA에서 유지 관리되지 않습니다. 다음 테이블이 제거되었습니다: GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, SESSION_STATUS. 대신 해당 Performance Schema 테이블을 사용하십시오. Performance Schema System Variable TablesPerformance Schema Status Variable Tables를 참조하십시오. 또한 show_compatibility_56 시스템 변수가 제거되었습니다. 이 변수는 INFORMATION_SCHEMA 테이블의 시스템 및 status variable 정보가 Performance Schema 테이블로 이동되던 전환 기간에 사용되었으며, 더 이상 필요하지 않습니다. 다음 status variable이 제거되었습니다: Slave_heartbeat_period, Slave_last_heartbeat, Slave_received_heartbeats, Slave_retried_transactions, Slave_running. 이들이 제공하던 정보는 Performance Schema 테이블에서 사용할 수 있습니다. Migrating to Performance Schema System and Status Variable Tables를 참조하십시오. (WL #8057)

  • Deprecated된 INFORMATION_SCHEMA INNODB_LOCKSINNODB_LOCK_WAITS 테이블이 제거되었습니다. InnoDB data lock 정보를 얻으려면 대신 Performance Schema data_locksdata_lock_waits 테이블을 사용하십시오. 또는 제거된 INFORMATION_SCHEMA 테이블이 아니라 새로운 Performance Schema 테이블을 사용하도록 다시 구현된 sys schema innodb_lock_waitsx$innodb_lock_waits view를 사용하십시오.

    Performance Schema 테이블은 어떤 data lock이 존재하는지, 각 lock을 어떤 transaction이 보유하는지, 어떤 transaction lock request가 다른 lock에 의해 차단되는지를 노출합니다. InnoDB의 경우 data_locks 테이블은 대기 중인 data lock만 보고하던 INNODB_LOCKS 테이블과 달리 모든 data lock을 보고합니다. 자세한 내용은 The data_locks TableThe data_lock_waits Table를 참조하십시오. 이전 테이블 컬럼을 새 테이블 컬럼에 매핑하는 방법에 대한 정보는 The INFORMATION_SCHEMA INNODB_LOCKS TableThe INFORMATION_SCHEMA INNODB_LOCK_WAITS Table를 참조하십시오.

    테이블은 필요한 권한에서 차이가 있습니다. INFORMATION_SCHEMA 테이블에는 전역 PROCESS 권한이 필요합니다. Performance Schema 테이블에는 선택할 테이블에 대한 일반적인 Performance Schema 권한인 SELECT가 필요합니다.

    sys 스키마 innodb_lock_waitsx$innodb_lock_waits 뷰는 변경 없이 사용할 수 있지만, 결합된 schema/table 이름 값을 포함하던 locked_table 컬럼이 제거되고 별도의 스키마 및 테이블 이름 값을 포함하는 locked_table_schemalocked_table_name 컬럼으로 대체된다는 예외가 있습니다. 또한 이러한 뷰에는 이제 locked_table_partitionlocked_table_subpartition 컬럼이 포함됩니다. 자세한 내용은 The innodb_lock_waits and x$innodb_lock_waits Views를 참조하십시오.

    이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 이러한 변경 사항을 Performance Schema 및 sys 스키마에 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #9275, WL #6657)

플러그인 관련 사항

  • MySQL Server 8.0에는 서버 확장성을 개선하기 위한 컴포넌트 기반 인프라가 포함되어 있습니다. MySQL Components를 참조하십시오. 그러나 MySQL plugins는 컴포넌트 인터페이스보다 앞선 인터페이스를 사용합니다. 새로운 plugin service인 plugin_registry_service를 통해 plugins는 component registry와 해당 services에 액세스할 수 있습니다. (WL #4989)

보안 관련 사항

  • 호환되지 않는 변경: STANDALONEWIN 빌드의 경우, 기본 secure_file_priv 값이 빈 문자열에서 NULL로 변경되었습니다. 이는 import 및 export 작업을 비활성화하므로 기본적으로 안전한 설정입니다. 이러한 작업을 허용하려면 secure_file_priv를 해당 작업에 사용할 디렉터리의 경로명으로 설정하십시오. (Bug #24679907, Bug #24695274, Bug #24707666, WL #6782)

  • 호환되지 않는 변경: mysqld_safe에 다음 변경 사항이 적용되었습니다.

    • mysqld_safe에서 rmchown을 안전하지 않게 사용하면 권한 상승이 발생할 수 있었습니다. 이제 chown은 대상 디렉터리가 /var/log인 경우에만 사용할 수 있습니다. 호환되지 않는 변경 사항으로, Unix 소켓 파일의 디렉터리가 없으면 더 이상 생성되지 않으며, 대신 오류가 발생합니다. 이러한 변경으로 인해 Solaris에서 mysqld_safe를 실행하려면 /bin/bash가 필요합니다. 다른 Unix/Linux 플랫폼에서는 여전히 /bin/sh가 사용됩니다.
    • 이제 --ledir 옵션은 option file이 아니라 command line에서만 허용됩니다.
    • mysqld_safe는 현재 작업 디렉터리를 무시합니다.

    기타 관련 변경 사항:

    • mysqld_safe를 호출하는 initialization script는 --basedir를 명시적으로 전달합니다.
    • initialization script는 base directory가 /var/log 또는 /var/lib인 경우에만 error log file을 생성합니다.
    • SLES용 미사용 systemd 파일이 제거되었습니다.

    (Bug #24483092, Bug #25088048, Bug #25378439, Bug #25378565)

    참조: 다음도 참조하십시오: Bug #24464380, Bug #24388753, Bug #24619033, Bug #82920.

  • yaSSL이 버전 2.4.2로 업그레이드되었습니다. 이 업그레이드는 잠재적 AES side channel leak, 일반적이지 않은 크기의 DSA padding, 긴 경로 디렉터리 이름을 처리하지 못하는 SSL_CTX_load_verify_locations() OpenSSL compatibility function 관련 문제를 수정합니다. (Bug #24512715, Bug #24740291)

  • OpenSSL은 2016년 12월에 버전 1.0.1 지원을 종료합니다. https://www.openssl.org/policies/releasestrat.html을 참조하십시오. 따라서 MySQL Commercial Server 빌드는 이제 버전 1.0.1이 아니라 버전 1.0.2를 사용하며, MySQL Commercial Server에 링크된 OpenSSL library가 버전 1.0.1에서 버전 1.0.2j로 업데이트되었습니다. 이 버전에서 수정된 문제에 대한 설명은 https://www.openssl.org/news/vulnerabilities.html을 참조하십시오.

    이 변경 사항은 대신 yaSSL library를 사용하는 Oracle 제공 MySQL Server의 MySQL Community 빌드에는 영향을 주지 않습니다. (WL #9136)

be translated to "Spatial Data 지원." I have to ensure that all div tags are preserved in the translation. The term "Incompatible Change" translates to "호환되지 않는 변경 사항." I'm thinking about the note tag—should I keep it as is, or translate it? I’m leaning towards keeping the [!note] rule in the translation. Finally, I’ll translate the text as well.Translating chapter headings

Spatial Data 지원

SQL Syntax Notes

  • Derived table 구문은 이제 select list에서 가져온 기본 column name을 재정의하기 위해 table name 뒤에 명시적 column name 목록을 허용합니다. 예를 들어, 이 derived table의 column name은 해당 select list에서 가져옵니다.

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

    column name을 제공하려면 derived table name 뒤에 괄호로 묶은 column name 목록을 둡니다.

    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입니다. (Bug #25494068, Bug #84806)

  • mysql-test-run.pl에는 이제 big test만 실행되도록 하는 --only-big-tests 옵션이 있습니다. 일반(non-big) 테스트는 건너뜁니다. --big-test--only-big-tests가 모두 지정되면 --only-big-tests는 무시됩니다. (Bug #25182306)

  • mysql-test-run.pl에는 새로운 --discover 옵션이 있습니다. 이 옵션이 지정되면 mysql-test-run.plmysqld를 시작할 때 Developer Studio Memory Error Discovery Tool인 discover를 미리 로드하려고 시도합니다. discover의 보고서는 --vardir로 지정된 디렉터리 아래의 log/mysqld.%p.txt에서 찾을 수 있습니다. 이 옵션은 SPARC-M7 시스템에서만 지원됩니다. (Bug #25048971)

  • mysqltest는 이제 표현식을 평가하고 변수에 할당할 수 있게 하는 expr 명령을 지원합니다. 자세한 내용은 https://dev.mysql.com/doc/index-other.html에서 제공되는 MySQL Server Doxygen 문서의 명령 설명을 참조하십시오. (Bug #24806741)

  • mysqltest는 이제 소스 디렉터리를 대상 디렉터리로 재귀적으로 복사하는(즉, 하위 디렉터리를 복사하는) force-cpdir 명령을 지원합니다. (Bug #24806681)

  • mysql-test-run.pl에는 새로운 --summary-report 옵션이 있습니다. 이 옵션이 지정되면 mysql-test-run.pl은 테스트 요약만의 일반 텍스트 버전을 생성하고 옵션 인수로 명명된 파일에 씁니다. 이 파일은 이메일로 보내기에 적합합니다. (Bug #24512357, Bug #82708)

  • mysql-test-run.plcustom_tool 값이 massif 또는 helgrind와 같은 경우 --valgrind-option=--tool=custom_tool과 함께 실행할 수 없었는데, 이는 다른 도구가 이해하지 못할 수 있는 memcheck용 옵션을 추가했기 때문입니다. 또한 mysql-test-run.pl--callgrind 옵션은 callgrind에 유효하지 않은 --base 옵션을 제공했기 때문에 작동하지 않았습니다. 수정의 기반이 된 패치를 제공한 Daniel Black에게 감사드립니다. (Bug #23713613, Bug #82039)

  • mysqltest connect() 함수는 이제 socket-file 및 TCP/IP connection protocol 사용을 지정하기 위해 options 인수에 SOCKETTCP 값을 허용합니다.

    또한 이제 transport protocol은 현재 시스템과 일치해야 합니다. 이전에는 Windows가 아닌 시스템에서 PIPE 또는 SHM을 전달하면 기본(socket-file) transport protocol이 사용되었습니다. 이제는 이 경우 오류가 발생하며, 마찬가지로 Windows 시스템에서 SOCKET을 전달하면 오류가 발생합니다. (Bug #21046241)

  • mysql-test-run.pl은 이제 mysqld 옵션을 bootstrap 옵션으로 지정할 수 있게 하는 --bootstrap 옵션을 지원합니다. mysql-test-run.plmaster.opt 파일에서 --bootstrap 옵션을 발견하면 데이터 디렉터리를 제거하고 다시 초기화한 다음 새 옵션 설정으로 서버를 다시 시작합니다. (Bug #18184868)

X Plugin 관련 사항

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

  • protobuf 컴파일러가 mysqlx.proto에 대해 “unused import” 경고를 출력했습니다. (Bug #25444009, Bug #84641)

  • 검증이 발생했을 때 초기화되지 않은 Connection이 해제되었습니다. (Bug #25392280)

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

  • MYSQL_DYNAMIC_PLUGIN 매크로의 수동 정의는 중복이었습니다. (Bug #25162590, Bug #83988)

  • IPv6 연결 지원은 기본값이 '0.0.0.0'인 새 시스템 변수 mysqlx_bind_address를 정의했지만, X Plugin에 대한 Connection이 IPv6 주소, IPv4 주소 또는 호스트 이름을 사용하여 이루어질 수 있도록 기본값은 '*'였어야 했습니다. (Bug #25047909, Bug #83688)

  • stmt 필드가 다음 메시지에서 required로 표시되었습니다.

    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;
    }
    

    (Bug #24968735, Bug #83595)

  • CREATE TABLE foo (doc JSON)으로 생성된 테이블에 대해, list_objects 문은 해당 테이블을 collection으로 잘못 보고했습니다. (Bug #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'
    

    (Bug #24940144, Bug #83494)

  • Linux에서 JavaScript 및 Python 대화형 모드의 MySQL Shell은 collection 이름의 대소문자가 균일하지 않은 경우 collection을 숨겼습니다. (Bug #24848125)

  • 인증 중인 사용자와 일치하는 사용자 계정이 여러 개 존재하는 경우, X Plugin은 가장 잘 일치하는 계정 대신 일치하는 모든 계정을 인증하려고 시도했습니다. (Bug #24847537)

  • C++ 11에 대응 기능이 있는 Boost 클래스가 이동되거나 래핑되었습니다. (Bug #24680856)

  • 두 개의 X Plugin 인스턴스가 동일한 포트에서 시작되었을 때, 결과 오류 메시지가 두 줄로 나뉘고 중복 정보를 포함했습니다. (Bug #24679018, Bug #83008)

  • performance_schema.threads 테이블은 X Plugin에 대한 processlist 통계를 표시하지 않았습니다. (Bug #24638038)

  • 클라이언트가 알 수 없는 메시지 타입을 서버에 보낸 경우, 서버는 오류 메시지를 다시 보낸 다음 클라이언트의 연결을 끊었습니다. (Bug #24611754, Bug #82868)

  • 클라이언트가 길이가 0인 메시지를 보냈을 때, X Plugin은 응답을 보내지 않았습니다. 이후 메시지에 대해 클라이언트는 헤더 내용에 따라 오류 E_X_BAD_MESSAGE를 수신하고 연결이 끊겼습니다. (Bug #24595459, Bug #82862)

  • X Plugin은 인증되지 않은 사용자를 포함하여 연결된 모든 사용자에게 해당 버전을 표시했습니다. (Bug #24562707, Bug #82784)

  • X Plugin은 Update 문에 중복 필드 이름이 존재할 때 잘못된 쿼리를 생성했습니다. (Bug #24510083)

  • list_objects 문은 sys 데이터베이스의 일부 view에 대해 잘못된 정보를 반환했습니다. (Bug #24472325)

  • X Plugin은 Connection이 이미 닫힌 경우에도 클라이언트에 결과 세트를 보내려고 했습니다. 이제 플러그인은 Connection이 reset되면 저장 프로시저 실행을 중지합니다. (Bug #24440344)

  • 데이터베이스 이름을 명시적으로 설정하지 않고 list_objects 문을 사용하여 객체를 나열하려고 하면 collection이 table로 잘못 분류되었습니다. (Bug #23205895, Bug #81248)

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

추가되거나 변경된 기능

  • 호환되지 않는 변경: 이전에는 UPDATESELECT 컬럼을 참조하는 INSERT... SELECT... ON DUPLICATE KEY UPDATE 문에서 SELECTUNION인 경우 결과가 올바르지 않을 수 있었습니다. 이제 이러한 문은 금지되며 오류를 발생시킵니다. 이 제한을 우회하려면 UNION을 derived table로 작성하여 해당 행을 허용되는 single-table result set으로 처리할 수 있도록 하십시오. INSERT... ON DUPLICATE KEY UPDATE Statement를 참조하십시오. (WL #5094)

  • InnoDB: 기본적으로 InnoDB는 통계를 계산할 때 커밋되지 않은 데이터를 읽습니다. 테이블에서 행을 삭제하는 커밋되지 않은 트랜잭션의 경우, InnoDB는 행 추정치와 인덱스 통계를 계산할 때 delete-marked된 레코드를 제외하며, 이는 READ UNCOMMITTED 이외의 트랜잭션 격리 수준을 사용하여 해당 테이블에서 동시에 작업 중인 다른 트랜잭션에 대해 최적이 아닌 실행 계획으로 이어질 수 있습니다. 이 시나리오를 방지하기 위해, persistent optimizer statistics를 계산할 때 InnoDB가 delete-marked된 레코드를 포함하도록 보장할 수 있는 새 설정 옵션 innodb_stats_include_delete_marked를 활성화할 수 있습니다. (Bug #23333990)

  • InnoDB: R-tree용 Geometry 파싱 및 bounding box 계산 코드는 InnoDB에서 서버로 이동되었습니다. (WL #9439)

  • InnoDB: 이제 InnoDBSELECT... FOR SHARESELECT... FOR UPDATE locking read 문에서 NOWAITSKIP LOCKED 옵션을 지원합니다. NOWAIT는 요청된 행이 다른 트랜잭션에 의해 잠겨 있는 경우 문이 즉시 반환되도록 합니다. SKIP LOCKED는 잠긴 행을 result set에서 제거합니다. 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은 locking query를 명명된 테이블에 적용합니다.

    이제 OF는 예약어이며 identifier quoting 없이 식별자로 사용할 수 없습니다.

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

  • InnoDB: InnoDB 저장 데이터 암호화 기능은 이제 redo log 및 undo log 데이터의 암호화를 지원하며, 이는 innodb_redo_log_encryptinnodb_undo_log_encrypt 설정 옵션으로 제어됩니다. Redo Log EncryptionUndo Log Encryption을 참조하십시오. (WL #9290, WL #9289)

  • InnoDB: 디스크에 저장되는 InnoDB 내부 임시 테이블은 이제 여러 커서 위치를 지원하여, 같은 스레드 내에서 단일 writer와 여러 reader의 접근을 허용합니다. 이 개선의 목적은 재귀 및 비재귀 common table expression(CTE)에 대한 지원을 제공하는 것입니다.

    또한 InnoDB 디스크 기반 내부 임시 테이블에 대한 consistent-read 접근은 dirty-read 방식으로 대체되며, InnoDB 디스크 기반 내부 임시 테이블의 행 수는 이제 더 느린 테이블 스캔 대신 행 수 통계를 사용합니다. (WL #9248)

  • InnoDB: 이제 InnoDBROW_FORMAT=COMPRESSED를 사용하는 테이블에 대해 large object를 더 작은 zlib 스트림의 시퀀스로 압축합니다. 이전에는 large object 데이터가 단일 zlib 스트림으로 압축되었습니다. (WL #9263)

  • Replication: 음수 또는 소수 timeout 매개변수가 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()에 제공되면 서버가 예기치 않은 방식으로 동작했습니다. 이 수정으로 다음과 같이 동작합니다.

    • 소수 timeout 값은 반올림 없이 그대로 읽힙니다.
    • 음수 timeout 값은 서버가 strict SQL mode인 경우 오류와 함께 거부됩니다. 서버가 strict SQL mode가 아닌 경우, 이 값은 함수가 대기 없이 즉시 NULL을 반환하게 한 다음 경고를 발생시킵니다.

    (Bug #24976304, Bug #83537)

  • Replication: receiver(I/O)와 applier(SQL) replication 스레드 간의 경합을 줄이기 위한 작업이 수행되었습니다. 이를 통해 slave가 master의 더 높은 insert 부하를 따라갈 수 있습니다. (Bug #78246, Bug #21753696, WL #8599)

  • Replication: binary log 제거 간격을 초 단위로 설정하는 binlog_expire_logs_seconds 시스템 변수가 추가되었습니다. 이 변수와 expire_logs_days의 효과는 누적되므로, 1.5일과 같은 기간을 설정할 수 있습니다. 자동 binary log 제거를 완전히 비활성화하려면 두 변수를 모두 0으로 설정하십시오. 이는 두 변수의 기본값입니다. (Bug #71697, Bug #18260088, WL #9237)

  • Replication: Replication 지연 및 큐를 모니터링하기 위해 performance schema 테이블이 추가되었습니다. replication_connection_status 테이블에는 relay log에 마지막으로 큐에 들어간 transaction과 현재 relay log에 큐에 들어가는 중인 transaction에 대한 업데이트된 정보가 있습니다. replication_applier_status_by_coordinator 테이블에는 worker의 buffer에 마지막으로 기록된 transaction과 현재 coordinator가 처리 중인 transaction에 대한 업데이트된 정보가 있습니다. replication_applier_status_by_worker 테이블에는 worker가 마지막으로 적용한 transaction과 현재 적용 중인 transaction에 대한 업데이트된 정보가 있습니다. 이러한 각 테이블에 표시되는 정보에는 transaction의 GTID, commit timestamp, 처리 단계 timestamp 및 완료 timestamp가 포함됩니다.

    replication_applier_status_by_worker 테이블에서 LAST_SEEN_TRANSACTION 컬럼은 APPLYING_TRANSACTION 컬럼으로 대체됩니다. (WL #7374)

  • Replication: 새로운 binlog_expire_logs_seconds 변수는 기존 expire_logs_days 변수에 추가되는 global server variable입니다. 목적은 현재의 일 단위 granularity보다 더 세밀한 binary log 보존 정책을 용이하게 하는 것입니다. (WL #9237)

  • Replication: binary log에 의한 DDL statement 또는 transaction의 올바른 복구는 binary log 데이터를 기반으로 DDL transaction을 올바르게 복구하기 위한 지원을 구현합니다. 새로운 data-dictionary의 맥락에서는 2-phase commit protocol을 사용하여 metadata 변경을 수행하고 이를 단일 transaction으로 binary log에 기록할 수 있게 됩니다. (WL #9175)

  • Replication: 이제 Multi-source replication은 channel별 replication filter를 지원합니다. 이를 통해 특정 channel에서 선택된 replicated data의 실행을 filter out할 수 있습니다. 지금까지 replication filter는 global이었으며 모든 channel에만 적용 가능했습니다. (WL #7361)

  • Replication: 이제 Row-based replication은 binary log에서 확장된 table metadata를 사용합니다. 확장된 metadata는 두 가지 주요 목적을 수행합니다. slave는 table structure가 master의 것과 다를 때 metadata를 사용하여 데이터를 원활하게 전송하고, 외부 software는 metadata를 사용하여 row event를 decode하고 데이터를 외부 database에 저장할 수 있습니다. (WL #4618)

  • Replication: replication 지연을 적절히 모니터링할 수 있도록 GTID 기반 delayed replication 및 replication lag 모니터링을 위한 infrastructure가 추가되었습니다. binary log에서 각 transaction(각 event 또는 statement가 아님)과 연결된 두 개의 새로운 timestamp가 도입되었습니다. original_commit_timestamp는 원래 master에서 transaction이 commit된 시점의 epoch 이후 microseconds 단위이고, immediate_commit_timestamp는 immediate master에서 transaction이 commit된 시점의 epoch 이후 microseconds 단위입니다. (WL #7319)

  • Replication: RESET MASTER statement는 binary log file number를 지정할 수 있도록 확장되었습니다. RESET MASTER TO statement는 사용할 새 binary log file의 index를 지정하는 argument를 허용합니다. 목적은 FLUSH BINARY LOGSPURGE BINARY LOGS TO statement를 단일 RESET MASTER statement로 대체하여 failover 절차를 단순화하는 것입니다. (WL #9110)

  • Replication: 지연된 replication에서 지연이 정의되고 계산되는 방식에 사용되는 프로세스가 개선되었습니다. 이는 binary log의 새로운 timestamp인 immediate_commit_timestamp에 의존하며, 이는 transaction이 immediate master의 binary log에 기록된 epoch 이후 microseconds 수입니다. 이는 지연이 더 이상 event별로 계산되지 않고, 이제 transaction별로 적용됨을 의미합니다. (WL #7318)

  • Replication: 이제 binary log에 기록되는 정보가 replication slave에서 commit timestamp를 기반으로 병렬화할 수 있게 할지, 또는 transaction write set을 기반으로 병렬화할 수 있게 할지를 지정할 수 있습니다.

    write set을 사용하는 것은 commit history에 의존하지 않으므로 commit timestamp를 사용하는 것보다 더 큰 병렬 처리 가능성을 가집니다. 이러한 방식으로 replication slave에서 binary log를 적용할 때, 기본 컴퓨팅 하드웨어의 기능(예: CPU core)을 활용할 수 있으며, 따라서 이 프로세스의 속도를 높일 수 있습니다.

    병렬화 소스를 선택하기 위한 인터페이스는 새로운 server system variable binlog_transaction_dependency_tracking로 구현되며, 이 변수는 COMMIT_ORDER, WRITESET, 또는 WRITESET_SESSION 값 중 하나를 사용할 수 있습니다. COMMIT_ORDER(기본값)는 commit timestamp를 사용하여 병렬화 정보를 log에 기록하게 하고, WRITESET은 동일한 row를 업데이트하지 않는 모든 transaction을 병렬화할 수 있는 방식으로 write set을 사용하여 이 정보를 log에 기록하게 하며, WRITESET_SESSION은 동일한 session에서 시작된 update를 재정렬할 수 없다는 점을 제외하고 WRITESET과 동일한 방식으로 동작합니다. transaction dependency를 추적하기 위해 메모리에 유지되는 row hash history의 크기는 이번 릴리스에서 함께 도입된 binlog_transaction_dependency_history_size를 사용하여 설정할 수 있습니다. (WL #9556, WL #10750)

  • Group Replication: 이제 group의 view change event를 DATABASE 유형의 외부 multithreaded slave(MTS)로 replicate할 수 있습니다. (Bug #25170698, Bug #84008)

  • Group Replication: 이제 Group Replication은 SAVEPOINT SQL transaction을 지원합니다. (WL #9837, WL #10520)

  • JSON: 기존 JSON 값 또는 JSON document로 성공적으로 parse될 수 있는 임의의 string을 사람이 쉽게 읽을 수 있는 형식으로 출력하는 JSON utility function JSON_PRETTY()가 추가되었습니다. 각 JSON object member 또는 array value는 출력의 별도 line에 표시되며, 각 child object 또는 array는 parent에 대해 2 spaces 들여쓰기됩니다.

    예:

    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 값을 정렬할 때, 각 값이 sort key에서 고정 길이를 가진 부분으로 표현되었으며, 이러한 각 부분은 1K의 메모리를 필요로 했습니다. 많은 경우 이러한 사용량은 과도했습니다. 예를 들어 integer scalar 값은 상대적으로 매우 적은 바이트만 필요하므로, 1K의 나머지 부분(90% 이상)은 padding으로 채워졌습니다.

    이 문제를 해결하기 위해 JSON sort key에 대해 variable length part가 도입되었으며, 이제 각 key part는 값을 저장하는 데 필요한 공간만 차지합니다. 이는 성능에 대해 다음과 같은 이점을 제공합니다.

    • sort buffer 공간이 더 효율적으로 사용되므로 filesort가 디스크로 flush해야 하는 시점이 더 이르거나 빈번할 필요가 없으며, 이는 더 많은 데이터를 메모리에서 정렬할 수 있음을 의미합니다.
    • 더 짧은 key는 더 긴 key보다 더 빠르게 비교할 수 있어, 메모리 내 정렬뿐 아니라 디스크 사용이 필요한 정렬에서도 눈에 띄는 성능 향상을 제공합니다.

    (WL #8741)

  • WEIGHT_STRING() debugging function은 더 이상 LEVEL 절을 지원하지 않습니다. (Bug #25469683, Bug #84723)

  • Developer Studio 12.5의 경우, FORCE_UNSUPPORTED_COMPILER 옵션이 지정되지 않으면 이제 32-bit build가 비활성화됩니다. (Bug #25267157, Bug #84230)

  • storage engine에 독립적인 여러 foreign key constraint check가 InnoDB 내부에서 수행되고 있었습니다. 이제 이러한 check는 SQL layer에서 수행됩니다. (Bug #25252847)

  • 일부 GIS out-of-bounds checking이 단순화되었습니다. 기여해 주신 Daniel Black에게 감사드립니다. (Bug #25202470, Bug #84062)

  • Developer Studio 12.5에 사용되는 compiler flag 집합이 개선되었습니다. (Bug #25148549, Bug #83955)

  • 이제 CMakeCMP0022 OLD가 아니라 CMP0022 NEWCMAKE_POLICY를 사용합니다. (Bug #25090147, Bug #83804)

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

    이제 mysql_configpkg-config가 생성하는 compiler option 집합은 blacklist가 아니라 whitelist에 의해 결정됩니다. (Bug #25040566, Bug #22898475, Bug #80662)

  • UTF-8 binary collation의 성능이 개선되었습니다. (Bug #24788778, Bug #83247, Bug #25076862)

  • 이제 mysqld의 systemd service file은 MySQL Reference Manual의 systemd 문서에 대한 링크를 제공하기 위해 [Unit] 섹션에 Documentation 값을 포함합니다. (Bug #24735762)

  • 이제 unit testing은 Google Mock 1.8을 사용합니다. (Bug #24572381, Bug #82823)

  • GROUP BY에 대한 구현되지 않았고 비표준인 WITH CUBE 절은 더 이상 지원되지 않습니다.

    이제 CUBE는 reserved word이며 identifier quoting 없이는 identifier로 사용할 수 없습니다.

    (Bug #24572048, Bug #82821)

  • 다음 outdated build script가 MySQL source distribution에서 제거되었습니다: BUILD/SETUP.sh, BUILD/autorun.sh, BUILD/cmake_configure.sh, BUILD/compile-dist, 그리고 cmake/configure.pl. (Bug #24512933)

  • MySQL 8.0.0에서 mysql_shutdown() C API function을 제거한 변경 사항이 되돌려졌습니다. 이 function은 여전히 향후 MySQL version에서 제거될 예정이지만, 해당 제거는 연기되었습니다. (Bug #24496976, Bug #82681, WL #9014)

  • Debian/Ubuntu packaging maintainer script의 일관성과 유지보수성이 개선되었습니다. (Bug #23588977)

  • DEFAULT 값을 가진 column에 의존하는 generated column이 포함된 table에서, 수정되는 column이 generated column expression에 포함되지 않는 경우 column modification에 대해 이제 in-place ALTER TABLE operation이 가능합니다. 예를 들어 별도 column의 NULL property 변경은 table rebuild 없이 in place로 수행할 수 있습니다. (Bug #22987899, Bug #80832)

  • mysql 시스템 데이터베이스의 dump에 대해, mysqldump는 더 이상 innodb_index_statsinnodb_table_stats 테이블에 대한 DDL 문을 생성하지 않습니다. 이러한 문은 해당 테이블이 사용자 접근 가능하지 않기 때문에 dump reload 시점에 실패합니다. (Bug #22655287)

  • mysqld--daemonize와 함께 호출되면, terminal type device에 연결된 경우 stdoutstderr/dev/null로 리디렉션되어 mysqld가 진정한 daemon처럼 동작할 수 있습니다. (Bug #21627629)

  • mysql_secure_installation은 유효한 yes 및 no 응답으로 간주하는 항목에 대해 더 엄격해졌습니다. (Bug #13344753, Bug #62925)

  • MySQL client 및 utility 프로그램은 --version 옵션과 함께 호출될 때 자체 프로그램별 버전 번호를 보고했으며, version string은 일관된 형식을 따르지 않았습니다. 이제 이러한 프로그램은 일관된 형식으로 MySQL version number(mysqld와 동일)를 출력합니다. (Bug #11763201, Bug #55885)

  • 새로운 mysqldump 옵션인 --network-timeoutmax-allowed-packet을 최댓값으로 설정하고 network read 및 write timeout을 큰 값으로 설정하여 큰 테이블을 dump할 수 있게 합니다. 이 옵션은 기본적으로 활성화됩니다. 비활성화하려면 --skip-network-timeout을 사용하십시오. (Bug #11754493, Bug #46103)

  • 두 JSON aggregation function인 JSON_ARRAYAGG()JSON_OBJECTAGG()가 추가되었습니다. JSON_ARRAYAGG() 함수는 column 또는 column expression을 인수로 받고, 여기에 표시된 것처럼 result set을 단일 JSON array로 집계합니다.

    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)
    

    array element의 순서는 지정되지 않습니다.

    JSON_OBJECTAGG()는 각각 key 및 value로 해석하는 두 column 또는 expression을 받으며, 여기에 표시된 것처럼 결과를 단일 JSON object로 반환합니다.

    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 key는 error를 발생시키며, 중복 key는 무시됩니다.

    자세한 내용은 Aggregate Functions를 참조하십시오. (Bug #78117, Bug #21647417, WL #7987)

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

수정된 버그

  • 호환되지 않는 변경: 명시적 컬럼 이름 목록이 제공된 view의 저장된 정의가 유효하지 않을 수 있었습니다. 예를 들어, 이 구문의 경우:

    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;
    

    이 변경으로 인한 비호환성은 CREATE VIEW 구문을 더 이상 INFORMATION_SCHEMA VIEWS 테이블만으로는 다시 생성할 수 없다는 것입니다. VIEW_DEFINITION 값이 컬럼 이름 목록을 표시하지 않기 때문입니다. 대신, 컬럼 이름 목록을 얻으려면 COLUMNS 테이블도 참조해야 합니다. 또는 (그리고 더 간단하게) SHOW CREATE VIEW를 사용하십시오. (Bug #23265335, Bug #81377)

  • InnoDB; Microsoft Windows: Windows의 MySQL 64-bit 빌드에서 retry path의 올바른 동작에 필요한 cast가 누락되어 file I/O retry 결과가 잘못 해석되었고, 그 결과 assertion 실패와 operating system error가 발생했습니다. (Bug #24711351)

  • InnoDB: debug 빌드에서 latch debugging을 초기화하는 호출이 race condition으로 인해 assertion을 발생시켰습니다. (Bug #25700405)

  • InnoDB: 첫 번째 undo tablespace가 space ID 1을 사용해야 한다는 제한이 제거되었습니다. 이제 첫 번째 undo tablespace에는 1이 아닌 space ID가 할당될 수 있습니다. undo tablespace의 space ID 값은 여전히 연속된 순서로 할당됩니다. (Bug #25551311)

  • InnoDB: innodb_force_recovery 설정이 5 또는 6인 서버에서 DROP TABLE 작업이 assertion을 발생시켰습니다. 이러한 innodb_force_recovery 설정에서는 더 이상 DROP TABLE이 허용되지 않습니다. (Bug #25385590)

    참조: 이 문제는 다음의 regression입니다: Bug #19779113.

  • InnoDB: Performance Schema 없이 서버를 컴파일하면 빌드 실패가 발생했습니다. (Bug #25348787)

  • InnoDB: read-ahead 중 tablespace 크기를 계산하는 데 잘못된 page size가 사용되었습니다. (Bug #25330449)

  • InnoDB: DWITH_LZ4=system을 사용하여 Fedora 25에서 컴파일하면 deprecated된 LZ4_COMPRESS_LIMITEDOUTPUT 함수로 인해 빌드 실패가 발생했습니다. (Bug #25297593)

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

  • InnoDB: virtual index의 NULL virtual column field name으로 인해 foreign key constraint의 영향을 받는 virtual column을 채우는 동안 발생하는 field name 비교 중 서버가 종료되었습니다. (Bug #25222337)

  • InnoDB: InnoDB file I/O Performance Schema instrumentation의 file handle type name이 os_pfs_file_t에서 pfs_os_file_t로 변경되었습니다. (Bug #25220118)

  • InnoDB: INFORMATION_SCHEMA 테이블에 대한 subquery가 있는 transaction이 concurrent DDL 작업을 차단할 수 있었습니다. (Bug #25200952)

  • InnoDB: range comparison 중 clustered index field number 대신 secondary index field number가 전달되어, 결국 잘못된 field를 검색하게 되었습니다. (Bug #25175249)

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

  • InnoDB: 기본값이 아닌 읽기 배치 크기 설정을 사용하는 memcached 읽기 작업이 서버 종료를 초래했습니다. (Bug #25147515)

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

  • InnoDB: READ COMMITTED 격리 수준을 사용하는 동안 외래 키 검증 중에 gap lock이 불필요하게 획득되었습니다. (Bug #25082593)

  • InnoDB: InnoDB 테이블을 로드하는 데 MySQL 5.7에서 더 많은 메모리가 필요했는데, 이는 주로 임시 테이블 최적화와 함께 도입된 인메모리 구조 멤버의 추가 때문이었습니다. 임시 테이블에만 사용되는 인메모리 구조 멤버는 이제 필요한 경우에만 할당됩니다. (Bug #25080442)

  • InnoDB: FULLTEXT 인덱스가 있는 테이블에서 TRUNCATE TABLE 작업 후, 공간 크기가 잘못 계산되어 유효하지 않은 읽기가 발생했습니다. (Bug #25053705)

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

  • InnoDB: InnoDBsyscall(SYS_futex)에 유효하지 않은 인수를 전달했습니다. (Bug #24923840, Bug #83375)

  • InnoDB: redo log recovery 후 undo tablespace 객체의 노드 크기가 간헐적으로 0이 될 수 있었으며, 결국 오류를 발생시켰습니다. 또한 undo tablespace 객체가 LRU 목록에 잘못 배치되었고, tablespace 객체가 해제될 때 undo tablespace의 header page가 buffer cache에 존재할 수 있어 첫 번째 page 읽기에서 파일 열기 실패가 발생했습니다. (Bug #24916359)

  • InnoDB: checkpoint 중에 모든 MLOG_FILE_NAME redo log 레코드가 단일 mini-transaction(mtr)에 기록되어 log parsing buffer overflow가 발생했습니다. (Bug #24793413, Bug #83245)

  • InnoDB: GCC mach_parse_compressed 함수는 첫 번째 바이트의 값에 따라 1바이트에서 5바이트를 로드해야 합니다. GCC 버그로 인해 GCC 5와 6은 첫 번째 바이트 값이 확인되기 전에 4바이트를 로드하는 코드를 생성합니다(GCC Bug #77673). workaround가 이 동작을 방지합니다. 패치를 제공해 준 Laurynas Biveinis에게 감사드립니다. (Bug #24707869, Bug #83073)

  • InnoDB: tablespace type 함수와 관련된 코드는 이름 일관성, 함수 배치, 함수 사용 관련 문제를 해결하도록 개선되었습니다. (Bug #24706739, Bug #83092)

  • InnoDB: InnoDB Performance Schema instrumentation의 키가 Performance Schema에 등록되었는지 확인하기 위해 debug build에 메커니즘이 추가되었습니다. 이 메커니즘은 Performance Schema 키 수가 등록된 Performance Schema 키 수와 일치하지 않는 경우 debug build에서 시작이 실패하도록 합니다. (Bug #24686908)

  • InnoDB: 테이블 통계를 업데이트하는 동안의 race condition으로 인해 예상 행 수가 1이 되고 잘못된 query execution plan이 생성될 수 있었습니다. (Bug #24666839, Bug #82968)

  • InnoDB: glibc 버그로 인해 수명이 짧은 detached thread가 호출자가 pthread_create()에서 반환되기 전에 종료될 수 있었고, 이로 인해 서버 종료가 발생했습니다. 패치를 제공해 준 Laurynas Biveinis에게 감사드립니다. (Bug #24605956, Bug #82886)

  • InnoDB: 테이블 통계와 관련된 코드의 오류로 인해 dict0stats.cc 소스 파일에서 assertion이 발생했습니다. (Bug #24585978)

  • InnoDB: ut_malloc 또는 ut_new를 사용하여 메모리를 할당하는 InnoDB 코드베이스의 모듈을 나타내는 module base name 목록이 불완전했습니다. 이 목록은 Performance Schema가 InnoDB 메모리 할당 이벤트 데이터를 보고하는 데 사용됩니다. (Bug #24571816)

  • InnoDB: 일부 InnoDB rw-lock 및 mutex 키가 Performance Schema와 함께 사용되도록 등록되지 않았습니다. (Bug #24571597)

  • InnoDB: innodb_undo_logs 값을 증가시키고 서버를 재시작한 후, 새로 할당된 rollback segment에 undo tablespace를 할당할 때 활성 undo tablespace 수가 증가하지 않았습니다. (Bug #24488141)

  • InnoDB: 사용되지 않는 MLOG_UNDO_HDR_DISCARD redo log record 타입과 관련 함수가 제거되었습니다. (Bug #24482001)

  • InnoDB: 서버가 tablespace ID를 undo tablespace ID로 인식하지 못해 purge thread가 시작될 때 assertion이 발생했습니다. (Bug #24479773)

    참조: 이 문제는 다음의 regression입니다: Bug #23517560.

  • InnoDB: InnoDB가 recovery 중 doublewrite buffer에서 페이지를 복원할 때 누락된 encryption에 대한 오류를 잘못 보고했습니다. (Bug #24471076)

  • InnoDB: InnoDB가 테이블에 대해 buffer pool에 있는 페이지 수의 추정치를 잘못 보고했습니다. 페이지가 제거될 때 페이지 수가 올바르게 감소하지 않았습니다. (Bug #24464147)

    참조: 이 문제는 다음의 regression입니다: Bug #21747906.

  • InnoDB: undo tablespace 관리와 관련된 다음 코드 변경이 구현되었습니다:

    • temporary tablespace rollback segment를 위한 in-memory 배열이 추가되어, redo-enabled rollback segment가 사용할 수 있도록 TRX_SYS 페이지에서 32개 슬롯을 확보했습니다.

      이 변경의 결과로, 별도의 undo tablespace를 구성하는 동안 innodb_rollback_segments 설정 옵션을 설정할 때 더 이상 temporary tablespace rollback segment를 고려할 필요가 없습니다.

    • undo log 및 rollback segment와 관련된 코드 주석이 개정되었습니다.

    • rollback segment와 undo tablespace를 나열하는 고정 배열이 동적 크기 배열로 대체되었습니다.

    • undo tablespace를 초기화하는 함수가 refactoring되었습니다.

    • undo 및 undo file 이름의 just-in-time 생성을 관리하기 위한 클래스가 추가되었습니다.

    (Bug #24462978)

  • InnoDB: slow shutdown 중 cached undo segment가 rollback segment history에서 제거되지 않았습니다. (Bug #24450908)

  • InnoDB: 생성된 clustered index(GEN_CLUST_INDEX)만 있는 테이블에서 table-rebuilding 작업 중, 유효하지 않은 key 이름으로 호출된 오류로 인해 오류 및 assertion이 발생했습니다. (Bug #24444831)

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

  • InnoDB: 서버가 read-only 모드일 때 tablespace encryption master key를 rotation하면 오류 메시지를 표시하는 대신 assertion이 발생했습니다. (Bug #24404091)

  • InnoDB: 명시적으로 정의된 primary key가 없는 테이블에서, NOT NULL 컬럼에 unique key가 정의되었을 때 InnoDB가 implicit clustered index(GEN_CLUST_INDEX)를 대체하지 않았습니다. (Bug #24397406)

  • InnoDB: handler::keys_to_use_for_scanning()이 handler API에서 제거되었습니다. 이 함수는 더 이상 사용되지 않았습니다. HA_READ_ORDER index flag는 각 index에 대해 동일한 정보를 제공합니다. (Bug #24364448)

  • InnoDB: adaptive hash index 기능과 관련된 regression으로 인해 page cleaner thread에서 assertion이 발생했습니다. (Bug #24346574)

    참조: 이 문제는 다음의 regression입니다: Bug #21407023.

  • InnoDB: InnoDB가 full-text optimizer thread에서 사용한 메모리를 해제하지 못했습니다. (Bug #24331265)

  • InnoDB: recovery 중 InnoDB가 null 참조를 사용하여 LOB 페이지를 가져오려고 시도했습니다. (Bug #23615208)

  • InnoDB: 새 index를 추가할 때, 서버가 내부적으로 정의된 foreign key index를 삭제하고 virtual generated column에 정의된 secondary index를 foreign key index로 사용하려고 시도하여 서버 종료가 발생했습니다. 이제 InnoDB는 foreign key constraint가 virtual generated column에 정의된 secondary index를 참조하도록 허용합니다. (Bug #23533396)

  • InnoDB: INFORMATION_SCHEMA.FILES 쿼리가 동시 tablespace 생성 작업과의 race condition으로 인해 서버 종료를 초래했습니다. (Bug #23477214, Bug #81614)

  • InnoDB: 테이블을 재구성하는 in-place ALTER TABLE 작업 중 동시 DML 작업이 virtual index를 업데이트하지 않아 virtual index와 clustered index 간 불일치가 발생했습니다. (Bug #23219499)

  • InnoDB: TRUNCATE TABLE 작업이 buffer pool에서 페이지를 검색하고 제거하는 동안 dict_sys mutex를 보유하여 동시 DDL 작업이 정지되었습니다. 이제 검색 중에는 mutex가 해제되고 검색이 완료되면 다시 획득됩니다. (Bug #23070734, Bug #80060)

  • InnoDB: GIS 데이터를 R-tree에 삽입할 때 B-tree cursor를 저장하는 중 발견된 page number 필드 누락으로 인해 assertion이 발생했습니다. (Bug #23044098, Bug #80939)

  • InnoDB: InnoDB 내부 임시 테이블에 쓰기 작업을 수행해도 Handler_write 카운터가 증가하지 않았습니다. (Bug #23024178)

  • InnoDB: MySQL 5.7의 InnoDB recovery process 변경으로 인해 recovery 중 redo log를 최대 세 번 scan해야 할 수 있었습니다. scan 수를 줄이기 위해 첫 번째 scan과 두 번째 scan이 병합되었습니다. 이 변경으로, scan에 의해 채워지는 redo log record hash table이 memory threshold에 도달하지 않는 한 scan은 하나만 수행됩니다. 이 경우 동시 scan 및 apply를 수행하는 두 번째 scan이 시작됩니다. (Bug #22963951, Bug #80788)

  • InnoDB: indexed virtual column이 있는 ROW_FORMAT=REDUNDANT 테이블에서 table-copying online ALTER TABLE 작업이 assertion을 발생시켰습니다. (Bug #22018745)

  • InnoDB: 서버 재시작 후 auto-increment primary key가 있는 테이블에 대한 동시 INSERT 작업이 duplicate entry 오류를 발생시켰습니다. auto_increment_incrementauto_increment_offset 설정이 수정된 후 현재 auto-increment 값이 변경되지 않았습니다. (Bug #20989615, Bug #76872)

  • InnoDB: InnoDB file I/O에 대한 Performance Schema instrumentation이 Windows에서 비활성화되어 있었습니다. (Bug #14025581)

  • InnoDB: 64자 제한을 초과한 자동 생성 foreign key constraint identifier가 INFORMATION_SCHEMA.TABLE_CONSTRAINTS CONSTRAINT_NAME 컬럼에 잘린 형태로 표시되었습니다. 자동 생성 foreign key constraint identifier는 더 이상 64자 제한을 초과할 수 없습니다. (Bug #11745347, Bug #13942)

  • InnoDB: row_search_mvcc() 함수가 range query에 대해 불필요하게 전체 테이블을 순회했으며, 이는 record가 transaction read view에 없을 때 발생했습니다. (Bug #84202, Bug #23481444, Bug #25251375)

  • Packaging: mysys library의 my_create_minidump 함수가 Windows API 함수 MiniDumpWriteDump를 호출할 때 ExceptionParam parameter에 잘못된 값(NULL)을 사용했습니다. 이로 인해 exception information이 minidump file에서 누락되었습니다. (Bug #24505650, Bug #82695)

  • Partitioning: partitioned table의 경우 partition을 drop하면 해당 테이블의 trigger도 함께 drop되었습니다. (Bug #24449174)

  • Partitioning: generated column에 partitioning이 있는 테이블의 row를 업데이트하면 debug build에서는 assertion failure가 발생할 수 있었고, nondebug build에서는 잘못된 결과가 반환될 수 있었습니다. (Bug #22574695, Bug #80080)

  • Replication: MySQL 8.0.1은 원본 commit timestamp 관련 구문을 추가하지만, mysqlbinlog는 이러한 구문이 잘못된 버전 번호 80000으로 로그에 기록되었기 때문에 MySQL 8.0.0부터 존재했던 것으로 잘못 보고하고 있었습니다. 수정 사항은 mysqlbinlog dump에서 버전을 80001로 변경합니다. (Bug #25710507)

  • Replication: slave에서 relay log 파일을 처리하는 동안 lock contention이 binary relay 성능을 저해했습니다. (Bug #25321231, Bug #77778)

  • Replication: 클러스터에서 제거된 실패한 노드가 클러스터에 다시 참여할 때 추방될 수 있었습니다. (Bug #25311008)

  • Replication: multithreaded slave를 사용할 때, applier 오류가 Performance Schema replication 테이블에 externalize된 데이터와 일치하지 않는 worker ID 데이터를 표시했습니다. (Bug #25231367)

  • Replication: MySQL 5.7.17 컴파일이 variable length array 오류로 실패했습니다. (Bug #25163241, Bug #83994)

  • Replication: row-based replication에서 utf8mb3 컬럼이 있는 테이블에서 해당 컬럼이 utf8mb4 캐릭터셋으로 정의된 동일한 정의의 테이블로 복제할 때, field length를 잘못 표시하는 메시지가 반환되었습니다. (Bug #25135304, Bug #83918)

  • Replication: master 서버의 binary log가 rotate되고 binary log 파일이 저장되던 파티션에서 디스크가 가득 찬 상태가 발생한 경우, 서버가 예기치 않게 중지될 수 있었습니다. 수정 사항은 dump thread가 다음 binary log 파일로 전환할 때 binary log의 존재 여부를 확인하는 검사를 추가합니다. binary log가 비활성화된 경우, 현재 active log까지의 모든 binary log가 slave로 전송되고 receiver thread에 오류가 반환됩니다. (Bug #25076007)

  • Replication: 이전에 실행된 GTID transaction을 조용히 건너뛰는 GTID transaction skipping 메커니즘이 XA transaction에 대해 제대로 작동하지 않았습니다. (Bug #25041920)

  • Replication: relay log index 파일이 존재하지 않는 relay log 파일을 명명한 경우, RESET SLAVE ALL이 때때로 완전히 적절하게 정리하지 못했습니다. (Bug #24901077)

  • Replication: MTS slave applier가 (injected) 오류 때문에 중지되었을 때, troubleshooting에 유용한 정보를 보고하지 않았습니다. (Bug #24822686)

  • Replication: FLUSH BINARY LOGS는 많은 서버에서 복제된 데이터가 있을 때 느려질 수 있었습니다. (Bug #24806259, Bug #83270)

  • Replication: XA transaction을 사용할 때, replication slave의 applier (SQL) thread에서 lock wait timeout 또는 deadlock이 발생한 경우, 자동 retry가 작동하지 않았습니다. 원인은 SQL thread가 rollback을 수행하더라도 XA transaction을 rollback하지 않았기 때문입니다. 이는 transaction이 retry될 때 첫 번째 event가 XA START였음을 의미했으며, XA transaction이 이미 진행 중이었으므로 이는 유효하지 않아 XAER_RMFAIL 오류로 이어졌습니다. (Bug #24764800)

    참조: 참고 항목: Bug #83588, Bug #24923091, Bug #24966941.

  • Replication: 일부 실패한 CREATE USER, RENAME USER, 또는 ALTER USER 구문은 binary logging이 비활성화되었을 때 자동 생성되거나 지정된 GTID를 올바르게 소비하지 않았습니다. (Bug #24693798)

  • Replication: binary log에서 event를 packet buffer에 기록한 다음 해당 packet을 slave로 보내는 Binlog_sender가 예상대로 send buffer의 크기를 줄이지 않았습니다. (Bug #24643036)

  • Replication: 많은 small transaction이 있는 workload에서 성능을 개선하기 위해 GTID의 group commit update가 refactor되었습니다. (Bug #24398760)

  • Replication: 설정 파일에 relay_log 옵션이 지정되지 않은 경우, relay_log_basename 변수는 내부적으로 hostname을 사용하여 즉석에서 구성되었지만 relay_log_basename 변수는 설정되지 않았습니다. slave가 이 초기화되지 않은 변수에 접근하려고 하면 서버가 예기치 않게 중단되었습니다. (Bug #24352667)

  • Replication: 멀티스레드 slave(slave_parallel_workers가 0보다 큼)를 사용할 때 relay log를 회전하는 경우 Seconds_Behind_Master 값이 올바르지 않았습니다. (Bug #23532304)

  • Replication: 중간 단계에서 실패한 XA PREPARE 문은 일관되지 않은 XA transaction 상태로 이어질 수 있었으며, 이때 ID = -1이지만 binlogged 플래그는 true로 설정되었습니다. 이로 인해 XA COMMITXA ROLLBACK 쿼리를 실행하는 동안 assert가 발생했습니다. (Bug #22915670)

  • Replication: read_only system variable이 활성화된 경우 서버가 여러 replication 관련 관리 문이 동작하지 못하도록 막았습니다. (Bug #22857926, Bug #25363745, Bug #25326058, Bug #84350, Bug #84437)

  • Replication: 존재하지 않는 channel에 대한 CHANGE MASTER TO는 assertion을 발생시킬 수 있었습니다. (Bug #22255698)

  • Replication: binlog_group_commit_sync_delay system variable로 지정된 지연이 너무 많은 binary log commit group에 적용되었습니다. (Bug #21420180)

  • Replication: slave로 복제 중인 binary log 파일에 대해 생성되는 원치 않는 fseek 수가 줄었습니다. (Bug #83226, Bug #24763579)

  • Replication: Bug #81657의 수정 사항이 MySQL 8.0에 올바르게 병합되지 않았습니다. 이를 알려 준 Laurynas Biveinis에게 감사드립니다. (Bug #83124, Bug #24715790)

  • Replication: rpl.rpl_binlog_errors 테스트가 Windows에서 간헐적으로 실패했습니다. (Bug #82302, Bug #24330138)

  • Replication: binlog_group_commit_sync_delay가 1과 9 사이의 값으로 설정되었고, binlog_group_commit_sync_no_delay_count가 1보다 큰 값으로 설정되었으며, transaction commit 수가 binlog_group_commit_sync_no_delay_count보다 적은 경우, 더 이상 commit이 수신되지 않으면 이러한 commit이 영원히 중단되었습니다. 또한 binlog_group_commit_sync_no_delay_count가 0으로 설정된 경우 모든 transaction commit이 영원히 중단되었습니다. (Bug #80652, Bug #22891628)

  • Replication: 동시에 실행된 CREATE TRIGGERDROP TRIGGER 문이 올바른 순서로 binary log에 기록되지 않아 slave가 실패했습니다. (Bug #77095, Bug #21114768)

  • Group Replication; Microsoft Windows: Windows 플랫폼에서 Group Replication plugin을 컴파일할 때 발생한 불필요한 warning이 제거되었습니다. (Bug #25119288)

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

  • Group Replication: Group Replication 멤버의 MEMBER_STATE는 오류가 ER_GROUP_REPLICATION_CONFIGURATION일 때 STOP GROUP_REPLICATION 명령이 실행되면 ERROR에서 OFFLINE으로 변경되지 않았습니다. (Bug #25674926)

  • Group Replication: flow control이 활성화된 상태에서 최소 flow control quota 1에 도달하면, throttling의 원인이 더 이상 유효하지 않아도 Group Replication이 throttling을 중지하지 않았습니다. (Bug #25461354)

  • Group Replication: group_replication_group_seeds에 확인할 수 없는 host name을 사용하면 START GROUP_REPLICATION이 실패했습니다. 이 수정은 Group Replication을 시작할 때 group_replication_group_seeds의 host name이 검증되고, 목록에 유효한 주소가 하나 이상 포함되도록 보장합니다. 유효하지 않은 주소는 무시됩니다. (Bug #25460324, Bug #84674)

  • Group Replication: Group Replication plugin 설치로 생성된 _gr_user 계정이 plugin 제거 시 안정적으로 제거되지 않았습니다. (Bug #25298987)

  • Group Replication: 오프라인 노드에서 Group Replication을 시작할 때 노드가 replication용으로 설정될 수 있었지만, 복구할 수 없을 수 있었습니다. (Bug #25256910)

  • Group Replication: Group Replication GCS가 그룹의 비활성 멤버에서 온 메시지를 폐기하지 않았습니다. (Bug #25134074)

  • Group Replication: Group Replication plugin이 더 이상 가능하지 않은 서버 접촉을 시도하면 assertion이 발생했습니다. (Bug #25071492)

  • Group Replication: group replication applier SQL thread에서 재시작을 실행한 후, plugin이 더 이상 해당 thread의 실패를 감지할 수 없었습니다. (Bug #24969065)

  • Group Replication: group replication plugin을 활성화하면 performance_schema_max_mutex_classes 기본값 200을 초과했습니다. 그 결과 일부 group replication mutex instrument가 performance_schema.setup_instruments 테이블에 나타나지 않았습니다. (Bug #24746530)

  • Group Replication: yaSSL로 빌드된 서버에서 암호화된 connection과 함께 group replication을 사용하면 view delivery를 기다리는 동안 timeout 실패가 발생할 수 있었습니다. (Bug #23592214)

  • Microsoft Windows: Windows에서 db_name이 대문자로 지정된 경우 SHOW TABLES FROM db_name이 중단되었습니다. (Bug #24800048, Bug #83262)

  • Microsoft Windows: 32-bit 빌드는 더 이상 Windows에서 지원되지 않지만, CMake가 32-bit 빌드가 시도될 때 이를 감지하지 못해 이후 compilation error가 발생했습니다. 이제 CMake는 32-bit 빌드 시도를 감지하고 적절한 error message를 생성합니다. (Bug #24487483, Bug #82645)

  • Solaris: WITH_INNODB_MEMCACHED CMake option이 활성화된 경우, 이제 Developer Studio 12.5 compiler를 사용하여 Solaris 11 및 12에서 memcached를 빌드할 수 있습니다. (Bug #24504155, Bug #82692)

  • Solaris: Solaris의 library search path 처리가 올바르지 않았습니다. (Bug #24487934, Bug #82646)

  • Solaris: system runtime library에 대한 dependency로 인해, 이제 Solaris의 최소 필요 버전은 Solaris 11 update 3입니다.

  • Solaris: Solaris에서 MySQL은 이제 gcc 대신 Developer Studio 12.5로 빌드됩니다. binary를 사용하려면 Developer Studio C/C++ runtime library가 설치되어 있어야 합니다. library만 설치하는 방법은 여기를 참조하십시오.

    https://docs.oracle.com/cd/E60778_01/html/E60743/gozsu.html
    
  • JSON: JSON 값이 여러 수준의 JSON 배열, 객체 또는 둘 모두로 감싸인 큰 하위 문서로 구성된 경우, JSON 값의 serialization을 완료하는 데 때때로 과도한 시간이 필요했습니다. (Bug #23031146)

  • JSON: JSON 컬럼에 NULL 값이 존재하는 경우, ORDER BY 절과 함께 GROUP_CONCAT()를 사용하는 쿼리의 결과가 항상 올바르지는 않았습니다. (Bug #22992666)

  • JSON: 내부 rapid_json_handler는 부분적으로 빌드된 DOM을 표현하기 위해 자체 데이터 구조를 사용했으며, 이들은 결과를 반환하기 전에 Json_dom 그래프로 변환되어야 했습니다. 이제 이 handler는 그래프를 직접 빌드하므로, 그래프를 빌드하고 따라서 JSON 문서를 파싱하는 데 필요한 작업량이 줄어듭니다. (Bug #22900110)

  • JSON: 내부 함수 Item_func_case::val_json()CASE 표현식이 NULL로 평가될 때 null 값 플래그를 항상 예상대로 설정하지 않았으며, 이로 인해 서버의 debug build에서 assertion이 발생했습니다. (Bug #22887227)

  • JSON: SUM() 함수가 JSON 문서에서 추출된 decimal 값을 잘라내어 integer 결과를 생성했습니다. (Bug #84935, Bug #25530204)

  • JSON: double로 표현할 수 있는 최댓값보다 약간 큰 double 값을 포함한 JSON 문서는 해당 값을 거부하고 오류를 발생시키는 대신 조용히 0으로 대체했습니다. 이제 이러한 값은 MySQL JSON 문서에서 올바르게 처리됩니다.

    근본적인 문제는 RapidJSON의 문제로 추적되었으며, 이 문제는 해당 라이브러리의 개발자에게 Issue #849로 보고되었습니다. (Bug #84891, Bug #25518504)

  • JSON: JSON_SEARCH()JSON_CONTAINS_PATH() 함수는 one_or_all 인수가 UTF-16 encoding을 사용하여 지정된 경우 동작하지 않았습니다. 이 두 함수 모두에서 이제 이 인수의 값이 검사되기 전에 필요한 경우 utfmb4로 변환됩니다. (Bug #84880, Bug #22516960)

  • JSON: JSON_UNQUOTE() 함수는 UTF-16 encoding을 사용한 문자열에서 동작하지 않았습니다. 이제 이러한 문자열은 처리되기 전에 내부적으로 utfmb4로 변환됩니다. (Bug #84878, Bug #25516881)

  • JSON: 단일 statement에서 동일한 JSON 컬럼을 업데이트하면 잘못된 값이 테이블에 기록될 수 있었습니다. 이는 두 번째 업데이트가 컬럼 값을 그 자체의 subset으로 덮어쓸 때 발생했습니다. 이러한 statement의 예는 다음과 같습니다.

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

    (Bug #84694, Bug #25461627)

  • JSON: JSON_QUOTE()JSON_UNQUOTE() 함수는 utf8mb4와 같은 multibyte character set에서 올바르게 동작하지 않았습니다. (Bug #84680, Bug #25455065)

    참조: 함께 참조: Bug #77234, Bug #21193273.

  • JSON: Error 3152 ER_JSON_USED_AS_KEY의 오류 메시지가 JSON column '%s' cannot be used in key specification에서 덜 혼동스럽고 더 정확한 JSON column '%s' supports indexing only via generated columns on a specified JSON path로 변경되었습니다. (Bug #81364, Bug #23274244)

  • JSON: MySQL JSON 기능에 대한 내부 테스트가 debug 활성화 서버를 대상으로 실행될 때 일부 플랫폼에서 stack space를 모두 소진했습니다. stack 사용량에 대한 적시 검사가 수행되지 않았기 때문에 서버가 이 상황을 감지하지 못했고, 이로 인해 서버 종료가 발생했습니다.

    이 문제에 대한 수정은 두 부분으로 이루어집니다:

    • 중첩 배열 또는 객체를 serialize하려고 시도하기 전에 이제 stack overrun 검사가 수행되므로, 깊게 중첩된 JSON 문서를 처리할 때 종료를 유발하는 대신 작업이 정상적으로 실패합니다.
    • JSON 문서의 serialization은 최적화 없이 컴파일될 때 stack 사용이 더 적게 필요하도록 재구성되었습니다.

    (Bug #81083, Bug #23106330, Bug #26399306)

  • BIN()UNION 내에서 사용될 때 multibyte 캐릭터셋에서 잘못된 truncation을 생성할 수 있었습니다. (Bug #27511490, Bug #89581)

  • MySQL은 GCC 7로 컴파일되지 않았습니다. (Bug #25643811, Bug #26825211)

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

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

  • mysqld_safePID_FILE.shutdown 파일이 있는 경우 서버를 다시 시작하지 못했습니다. (Bug #25572504)

    참조: 이 문제는 다음의 regression입니다: Bug #11751149.

  • Debian/Ubuntu 패키지의 경우, 사용자 정의 콜레이션 파일이 MySQL 업그레이드 중에 덮어써질 수 있었습니다. Charset 파일은 이제 conffiles로 표시되므로, 사용자 customization이 있는 경우 업그레이드 중에 이를 덮어쓸지 여부를 묻는 prompt가 생성됩니다. (Bug #25525628, Bug #84761)

  • 테이블 이름을 database qualifier와 함께 지정하고 DATA DIRECTORY 또는 INDEX DIRECTORY 옵션을 포함한 CREATE TABLE 문에서, default database가 없으면 오류가 발생했습니다. (Bug #25514146, Bug #84861)

  • mysql.foreign_keys data dictionary 테이블의 referenced_table_schemareferenced_table_name field 값은 lower_case_table_names가 활성화된 경우 lowercase로 저장되지 않았습니다. (Bug #25495714)

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

  • yaSSL에 대해 링크된 클라이언트의 경우, read timeout이 발생하면 read를 재시도하는 대신 connection이 invalid가 되었습니다. (Bug #25444075)

  • 서로 다른 디렉터리에서 MySQL을 컴파일하면 absolute path가 debug 정보와 __FILE__로 누출되어 서로 다른 build가 생성되었습니다. (Bug #25436469, Bug #84608, Bug #25859274, Bug #85855)

  • UCA 9.0.0 콜레이션에 대한 계산은 contraction 문자를 포함하는 tailoring rule에 대해 비효율적이었습니다. (Bug #25426632, Bug #84577, Bug #25426632, Bug #84577)

  • 음수 internal connection timeout 값은 connection이 idle 상태가 되어 abort되게 했습니다. 이제 음수 값은 I/O가 없는 경우 connection이 무기한 block되게 합니다. (Bug #25408557)

  • mutex Performance Schema 이름이 너무 길어 서버 시작 시 경고가 생성되었습니다. (Bug #25406915)

  • 일부 플랫폼에서 MySQL이 -DWITH_LIBWRAP=ON으로 컴파일되지 않았습니다. 이제 CMake 지원은 tcpd.h에 적절한 함수 프로토타입이 있는지 확인합니다. (Bug #25395543, Bug #84495)

  • 인스턴스가 innodb_page_size=4k로 초기화된 경우, data dictionary 테이블 컬럼에 정의된 인덱스가 최대 인덱스 키 길이를 초과했습니다. (Bug #25384527)

  • mysqld_safe--basedir 옵션으로 지정된 디렉터리가 존재하는지 확인하지 않았습니다. (Bug #25365194)

  • CMake-G ninja로 설정하면 Xcode 또는 Visual Studio 이외의 빌드 플랫폼에는 적합하지 않은 빌드 출력이 생성되었습니다. (Bug #25358460)

  • --log-error 옵션으로 지정된 에러 로그 파일이 FIFO인 경우 mysqld_safe가 실패했습니다. (Bug #25356221, Bug #84427)

  • prepared statement의 경우, 다른 alias가 subquery 또는 derived table 내의 alias에 의존하면 해당 alias가 statement 실행 중 잘못된 동작을 일으킬 수 있었습니다. (Bug #25343335, Bug #84398, Bug #25171608)

  • --datadir 옵션 값이 / 문자로 끝나는 경우 mysqld_safe가 실패할 수 있었습니다. (Bug #25319457)

  • 최근 mysqld_safe 변경으로 인해 base directory가 컴파일 시 기본값으로 내장된 절대 경로와 다른 절대 경로로 지정된 경우 mysql.server 스크립트가 이를 시작할 수 없었습니다. (Bug #25319392, Bug #84263)

  • Performance Schema가 비활성화된 경우 CONNECTION_CONTROL plugin이 컴파일되지 않았습니다. (Bug #25308357, Bug #84304)

  • MySQL Workbench를 사용하여 생성된 계정의 비밀번호가 올바르게 만료되지 않았습니다. (Bug #25299309)

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

  • 기본값이 아닌 base directory가 사용된 경우 init 스크립트가 mysqld_safe를 실행하지 못했습니다. (Bug #25261472, Bug #84219)

  • 이제 CMake는 GCC 5.3.0 루프 최적화 버그가 발생하는지 감지하고, 발생하는 경우 workaround를 시도합니다. (Bug #25253540)

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

  • statement 내부 또는 statement 사이의 세미콜론(;) 문자가 동일한 statement에서 서로 다른 digest가 생성되도록 할 수 있었습니다. (Bug #25244533, Bug #83253)

  • 컴포넌트가 private implementation을 참조하지 않고는 서비스를 등록할 수 없었습니다. 이제 SERVICE_IMPLEMENTATION(component,service) 매크로를 사용하여 이를 피할 수 있습니다. (Bug #25238906)

  • 특정 stored function이 쿼리 WHERE 절에서 사용되는 경우 Index Condition Pushdown을 사용하여 처리될 수 있었으며(이는 발생해서는 안 됨), 그 결과 서버가 종료되었습니다. (Bug #25196653, Bug #25174454)

  • Unicode Collation Algorithm 9.0.0 기반 ai_ci 콜레이션의 경우, 비교 결과가 같은 accented character가 LIKE 비교에서 서로 다른 것으로 처리되었습니다. (Bug #25167284, Bug #83999)

  • libmysqlclient에 링크된 클라이언트의 경우, prepared statement 사용 중 잘못된 메모리 접근이 발생할 수 있었습니다. (Bug #25164932)

  • 일부 Linux startup 스크립트가 datadir 설정을 올바르게 처리하지 않았습니다. (Bug #25159791)

  • partitioned table의 컬럼에 character set이 지정된 경우, 업그레이드 중 segmentation fault가 발생할 수 있었습니다. (Bug #25153261)

  • LOAD DATA가 escape sequence 뒤에 오는 multibyte character를 허용하지 못했습니다. (Bug #25147988, Bug #83950, Bug #25865525)

  • Bug #25088048에 대한 수정으로 인해 mysqld_safe가 MySQL 서버를 시작하는 데 사용하는 명령에 더 이상 mysqld 경로가 포함되지 않게 되었습니다. (Bug #25144379)

    참조: 이 문제는 다음의 regression입니다: Bug #25088048.

  • UCA 콜레이션의 경우, escape character로 끝나는 pattern에 대한 LIKE 비교가 잘못된 결과를 반환했습니다. (Bug #25140629, Bug #83930)

  • MySQL 5.7에서 MySQL 8.0으로 스키마를 업그레이드할 때 db.opt 파일에 정의된 캐릭터셋과 콜레이션 대신 기본 캐릭터셋과 콜레이션이 사용되었습니다. (Bug #25139901)

  • 별도의 함수 호출을 사용하여 DDL 문 끝에서 데이터 딕셔너리 캐시를 업데이트하는 대신, 이제 데이터 딕셔너리 캐시는 트랜잭션 커밋의 일부로 업데이트됩니다. (Bug #25095798, Bug #83818)

  • 이제 CREATE TABLEDATA DIRECTORY 또는 INDEX DIRECTORY가 테이블 또는 파티션 옵션으로 명시적으로 지정된 경우 FILE 권한을 요구합니다. ALTER TABLE은 어느 옵션이든 파티션 옵션으로 명시적으로 지정된 경우 FILE 권한을 요구합니다(테이블 옵션으로 지정된 경우에는 이를 무시합니다). (Bug #25092566)

  • Hungarian contractions 및 ligatures에 대해 ICU 순서와 MySQL Unicode 콜레이션 사이에 일부 차이가 있었습니다. 이제 MySQL은 ICU 순서를 따릅니다. (Bug #25090543)

  • binary collation을 사용할 때 데이터 딕셔너리가 초기화 및 시작에 실패했습니다. 데이터 딕셔너리 스키마를 생성하기 위해 생성된 쿼리 문자열이 binary collation 이름에 따옴표를 추가하지 않았습니다. (Bug #25054104, Bug #83706)

  • view에 접근하는 쿼리를 포함한 stored procedure를 실행하면 세션이 종료될 때까지 해제되지 않는 메모리가 할당될 수 있었습니다. (Bug #25053286)

  • FreeBSD 11에서 컴파일할 때 더 이상 정의되지 않는 MAP_NORESERVE를 확인하려고 시도하면서 실패했습니다. (Bug #25048128, Bug #83689)

  • 이제 mysql-test-run.plTSAN_OPTIONS 환경 변수가 설정되어 있는지 확인합니다. 설정되어 있으면 해당 값은 ThreadSanitizer suppressions(테스트 실행 중 무시할 오류)를 포함하는 파일의 경로 이름으로 사용됩니다. 또한 이제 --sanitize 옵션은 mysql-test-run.pl이 서버 오류 로그에서 ThreadSanizer 메시지를 스캔하도록 합니다. (Bug #24970905, Bug #83601)

  • 0이 아닌 --lower-case-table-names 설정으로 서버를 시작한 후, 첫 번째 client의 첫 번째 명령이 USE INFORMATION_SCHEMA;였을 때 assertion이 발생했습니다. (Bug #24963580)

  • 대소문자를 구분하지 않는 Unicode 콜레이션의 경우, 다양한 공백 문자가 동일한 값으로 해시되지 않아 이들 간의 비교가 잘못되었습니다. (Bug #24956750, Bug #83549)

  • 이제 dictionary clients는 DDL 문에 의해 수정 중인 커밋되지 않은 dictionary objects를 추적하여, 커밋 시점 전에 dictionary object cache에 영향을 주지 않고 동일한 세션의 커밋되지 않은 변경 사항을 dictionary client에 표시합니다. (Bug #24956365, Bug #83548)

  • 동시에 발생한 dictionary object cache misses가 올바르게 처리되지 않았습니다. 한 thread가 검색한 object가 대기 중인 thread가 접근을 시도하기 전에 cache에서 제거될 수 있었습니다. (Bug #24949179)

  • 이제 CMake는 해당 옵션이 잘못된 shift-or optimizations를 유발하는 GCC 버전에 대해 -fexpensive-optimizations 옵션을 구성하지 않습니다. (Bug #24947597, Bug #83517)

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

  • NCHARNATIONAL CHAR는 동의어이지만, CAST(expr AS NCHAR)는 성공한 반면 CAST(expr AS NATIONAL CHAR)는 성공하지 않았습니다. 이제 둘 다 동작합니다. (Bug #24934161)

  • 이제 OEL RPM 패키지는 multilib 지원(32비트 및 64비트 라이브러리를 설치할 수 있음)이 있는 플랫폼을 더 잘 감지합니다. 패치를 제공해 준 Alexey Kopytov에게 감사드립니다. (Bug #24925181, Bug #83457)

  • 이제 OEL RPM 패키지는 multilib 지원(32비트 및 64비트 라이브러리를 설치할 수 있음)이 없는 플랫폼을 더 잘 감지합니다. 패치를 제공해 준 Alexey Kopytov에게 감사드립니다. (Bug #24916428, Bug #83428)

  • LOCATE() 함수는 substr 또는 str 인수가 NULL인 경우 NULL을 반환했지만, pos 인수가 NULL인 경우에는 그렇지 않았습니다. 이제 어떤 인수라도 NULL이면 NULL을 반환합니다. (Bug #24911350, Bug #83427)

  • Bit 연산은 인수의 null 가능성이 잘못 처리된 경우 서버 종료를 유발할 수 있었습니다. (Bug #24910958, Bug #24930038, Bug #24930829)

  • Block Nested Loop 알고리즘은 쿼리 실행 중 너무 많은 메모리를 할당할 수 있었습니다. (Bug #24909223)

  • MySQL 5.7 이상 .spec 파일에서 MySQL 5.6 호환성 라이브러리를 빌드하는 것에 대한 정보는 libmysqlclientlibmysqld를 빌드하는 경우에만 필요합니다. InnoDB memcached plugin 빌드에 대한 정보는 제거되었습니다. (Bug #24908345, Bug #83409)

  • view metadata의 잘못된 업데이트가 assertion을 발생시킬 수 있었습니다. (Bug #24834622)

  • okvclient.ora 설정 파일에서 STANDBY_SERVER 설정이 누락된 경우 keyring_okv plugin 초기화가 실패하여, 사실상 이 설정이 필수 설정이 되었습니다. 이제 STANDBY_SERVER는 선택 사항입니다. (Bug #24816271)

  • Dictionary_client::acquire_uncached()가 획득한 data dictionary 객체는 이제 호출자 대신 현재 auto-releaser가 소유합니다. 또한 TABLE_SHARE view 객체의 획득은 acquire_uncached() 대신 acquire() andclone()에 의해 수행됩니다. (Bug #24813358, Bug #83296)

  • 저장 프로시저 또는 view 객체 내에서 호출된 다중 테이블 UPDATE 안에서 사용된 derived table에 대해, 해당 derived table이 외부 쿼리로 merge된 경우 객체의 두 번째 또는 이후 실행에서 권한 검사가 올바르지 않을 수 있었습니다. (Bug #24810564)

  • Created_tmp_tables status variable은 temporary table이 생성되지 않은 일부 경우에도 증가했습니다. (Bug #24808970, Bug #83287)

  • routine을 마이그레이션하는 동안 저장 routine 본문의 parsing이 실패한 경우 MySQL 5.7에서 MySQL 8.0으로의 in-place upgrade가 실패했습니다. 이제 warning이 보고되고 routine은 해당 본문을 parsing하지 않고 생성됩니다. 또한 view 마이그레이션 중 view에 대한 dependency resolution이 실패할 때 이제 warning이 보고됩니다. (Bug #24805140, Bug #83275)

  • 컴파일의 경우 mysql_upgrade는 동적으로 생성되는 sql_commands_system_tables_data_fix.h 파일에 의존하지만, dependency 누락으로 인해 해당 파일이 생성되지 않을 수 있었습니다. (Bug #24802377, Bug #83272)

  • access-control list (ACL) cache에 접근하는 transaction과 INFORMATION_SCHEMA 테이블을 채우기 위해 ACL cache를 사용하는 작업 사이의 race condition이 서버 종료를 유발할 수 있었습니다. (Bug #24786029)

  • debug build의 경우 허용되는 최대 길이보다 긴 database 또는 table 이름을 가진 테이블에 대해 EXPLAIN 또는 DESCRIBE를 실행하면 적절한 error를 표시하는 대신 assertion이 발생했습니다. (Bug #24751177, Bug #83114)

  • 여러 INFORMATION_SCHEMA 테이블을 data dictionary 테이블 위의 view로 구현하면서 서버 내부 사용만을 목적으로 하는 여러 native SQL 함수가 도입되었지만, 사용자가 이를 호출할 수 있었습니다. 이제 이러한 함수는 사용자가 호출하면 error를 생성합니다. (Bug #24749248, Bug #83189)

  • CASE, COALESCE(), IF()IFNULL()은 signed 인수와 unsigned 인수가 혼합된 경우 이를 잘못 merge하여 잘못된 결과 타입을 생성할 수 있었습니다. (Bug #24733658, Bug #83148)

  • SSL이 활성화된 server에 대한 client의 connection은 --ssl-mode 값이 VERIFY_CA 또는 VERIFY_IDENTITY이고 client가 CA certificate를 제공하지 않은 경우에도 성공했습니다. (Bug #24732452, Bug #23189252, Bug #25397416, Bug #84508)

  • data directory에 directory를 수동으로 생성하면, 해당 directory가 data dictionary에 database로 등록되지 않았음에도 USE dir_name이 성공했습니다. (Bug #24732194, Bug #83140)

  • InnoDB statistics가 올바르지 않은 경우, 이전 SELECT가 row를 반환하지 않았더라도 FOUND_ROWS()가 1을 반환할 수 있었습니다. (Bug #24714857, Bug #83110)

  • 동일한 이름의 nontemporary table이 존재하는 경우 temporary table에 대한 ALTER TABLE이 assertion을 발생시킬 수 있었습니다. (Bug #24713918, Bug #83117)

  • CMake는 이제 가능한 경우 Debian platform에 대해 -DWITH_NUMA=ON을 설정합니다. (Bug #24689101)

  • atomic file creation을 더 잘 제공하기 위해, Debian packaging script는 이제 touch, chmod, chown 대신 coreutils install command를 사용합니다. (Bug #24688682)

  • DISABLE_SHARED CMake 옵션을 활성화하면 compilation failure가 발생했습니다. (Bug #24687701, Bug #83039)

    참조: 이 문제는 다음의 regression입니다: Bug #24481181.

  • BIN(), OCT(), 및 HEX() 함수가 BIT data type의 값을 잘못 처리할 수 있었습니다. (Bug #24686658, Bug #83031)

  • debug build의 경우, CREATE EVENT 또는 ALTER EVENT statement의 comment에 있는 유효하지 않은 utf8 문자가 assertion을 발생시켰습니다. 이제 이는 ER_INVALID_CHARACTER_STRING error를 생성합니다. (Bug #24679962)

  • utf8 character set의 encoding은 U+D800과 U+DFFF 사이의 문자를 유효한 것으로 허용했지만, 이 문자는 surrogate pair용으로 예약되어 있으며 character를 직접 나타내지 않습니다. 이제 이 문자는 유효하지 않은 것으로 간주됩니다. (Bug #24672415)

  • WHERE clause에 dependent subquery가 포함되어 있고, table에 select list의 column 뒤에 subquery의 column이 이어지는 secondary index가 있으며, GROUP BY 또는 DISTINCT가 query에서 Loose Index Scan을 사용할 수 있게 하는 경우, query가 잘못된 결과를 생성할 수 있었습니다. (Bug #24671968, Bug #83005)

  • foreign key가 있는 table에 대한 RENAME TABLE operation 후, 생성된 constraint name이 TABLE_CONSTRAINTS에서 업데이트되지 않았습니다. (Bug #24666169)

  • macOS에서 CMake AddressSanitizer support가 작동하지 않았습니다. (Bug #24661626, Bug #82976)

    참조: 이 문제는 다음의 regression입니다: Bug #23759968.

  • Xcode 8.0을 사용하는 macOS 10.11에서 compilation이 실패했습니다. (Bug #24661523, Bug #82975)

  • invisible index에 적용된 index hint가 error를 생성하지 않았습니다. (Bug #24660093, Bug #82960)

  • 일부 경우에 INFORMATION_SCHEMA.KEY_COLUMN_USAGE가 모든 foreign key constraint에 대한 data를 보고하지 않았습니다. (Bug #24655803, Bug #82961)

  • 큰 string에 대한 REPLACE()가 느리고 kill할 수 없을 수 있었습니다. (Bug #24652792)

  • DebugPrintTestDebugPrintDeathTest unit test는 Aarch64 플랫폼에서 divide-by-zero 테스트를 올바르게 처리하지 못했습니다. 패치를 제공해 주신 Alexey Kopytov에게 감사드립니다. (Bug #24624555, Bug #82889)

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

  • 최근 MySQL 릴리스에서 mysqld_safe에 적용된 변경으로 인해 --ledir, --mysqld, --mysqld-version 옵션은 command line에 지정해야 하며, 더 이상 option file에 지정할 수 없습니다. 이로 인해 mysqld_safe를 호출하는 init script가 실패할 수 있었습니다. 이제 이러한 script는 MYSQLD_OPTS environment variable의 값을 mysqld_safe에 대한 첫 번째 command-line argument로 전달하며, 이 값은 필요할 수 있는 command line 전용 mysqld_safe 옵션 값으로 설정됩니다. systemd를 사용하는 플랫폼에서는 다음과 같은 줄을 사용하여 /etc/sysconfig/mysqld에서 MYSQLD_OPTS 값을 설정할 수 있습니다.

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

    MYSQLD_OPTS의 값에는 mysqld_safemysqld에 전달할 mysqld 옵션도 포함될 수 있습니다. (Bug #24619033, Bug #82920)

    참조: 이 문제는 다음의 회귀입니다: Bug #24464380, Bug #24483092, Bug #25088048, Bug #25378439, Bug #25378565.

  • SET PERSIST innodb_buffer_pool_size = valueinnodb_buffer_pool_size의 새 값이 아니라 원래 값을 mysqld-auto.cnf에 저장했습니다. (Bug #24613005, Bug #82905)

  • SLES packages의 경우 installation script postamble의 오타로 인해 일부 cleanup이 수행되지 않았습니다. (Bug #24605300, Bug #82389)

  • data directory를 업그레이드하는 동안 서버가 error log에 기록한 일부 메시지에 표준 timestamp 및 process ID 정보가 누락되었습니다. (Bug #24600054, Bug #82874)

  • Last_query_costLast_query_partial_plans status variable의 session 값이 초기화되기 전에 접근될 수 있었습니다. (Bug #24596263)

  • CREATE TABLE... SELECT 중에 발생하는 warning으로 인해 서버가 종료될 수 있었습니다. (Bug #24595992)

  • updateable view에 데이터를 삽입하는 데 사용되는 LOAD DATA의 경우, column이 실제로 update 가능한지 확인하는 check가 누락되었습니다. (Bug #24595937)

  • LONGTEXT를 반환하는 deterministic function이 subquery에서 사용될 때 서버가 null pointer를 dereference할 수 있었습니다. (Bug #24595581)

  • ALTER VIEW로 변경된 view는 statement가 error로 실패한 경우 drop될 수 있었습니다. (Bug #24594140)

  • JSON document를 string으로 변환하는 작업은 document가 크고 signed integer를 많이 포함한 경우 느릴 수 있었습니다. (Bug #24586888)

  • data dictionary에는 temporary table(#sql로 시작하는 이름)에 대한 entry가 포함될 수 있습니다. 이러한 table은 INFORMATION_SCHEMA query 및 SHOW statement를 통해 노출되었습니다. 이로 인해 mysqldumpmysqlpump가 이러한 table을 dump하려고 할 때 실패할 수 있었습니다. 이제 temporary table은 INFORMATION_SCHEMA query 및 SHOW statement에 대해 숨겨집니다. (Bug #24580599, Bug #24571427)

  • view가 정의될 때 definition의 character set이 고려되지 않았습니다. 이것이 default character set과 다른 경우, view에서 사용된 table name이 인식되지 않아 view가 invalid로 표시될 수 있었습니다.

    debug build의 경우, ALTER VIEW statement를 parsing하는 동안 error가 발생하고 diagnostics area가 비어 있으면 assertion이 발생할 수 있었습니다. (Bug #24580586)

  • LOAD DATA 문에서 컬럼 값이 너무 많은 입력 데이터는 MySQL 5.6에서와 같이 오류를 발생시키는 대신 경고만 생성했습니다. 이제는 오류가 발생합니다. (Bug #24577194, Bug #82830)

  • global_log 시스템 변수에 SET PERSIST를 사용하는 것이 효과가 없었습니다. (Bug #24569624, Bug #82807)

  • Performance Schema variables_info 테이블에서, 변수 없이 옵션 파일에 지정된 일부 boolean 옵션에 대해 VARIABLE_SOURCE 컬럼이 올바르게 설정되지 않았습니다. (Bug #24567960)

  • .mylogin.cnf 옵션 파일은 클라이언트 프로그램이 사용하도록 의도되었지만, 서버도 이를 읽고 있었습니다. 서버는 더 이상 이를 읽지 않습니다. (Bug #24557925)

  • boost::chrono 사용은 이전 항목이 링크 오류를 유발하고 있었기 때문에 std::chrono로 대체되었습니다. (Bug #24556808, Bug #82781)

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

  • variables_by_thread 테이블을 채울 때, Performance Schema가 deinitialize되고 있던 다른 스레드의 세션 변수에 접근하려고 시도할 수 있었습니다. (Bug #24555658)

  • 적절한 권한이 없는 사용자가 서버 컴포넌트를 로드하고 언로드할 수 있었습니다. (Bug #24528148)

  • INSTALL COMPONENTUNINSTALL COMPONENT 문의 동시 실행이 서버 종료를 유발할 수 있었습니다. (Bug #24527148)

  • Debian/Ubuntu 플랫폼에서 MySQL용 systemd startup script가 /etc/mysql/my.cnfdatadir 설정을 무시했습니다. (Bug #24517024, Bug #82709)

  • LOCK TABLES 문이 적용 중일 때, 트리거가 있는 테이블에 대한 DML 문이 서버 종료를 유발할 수 있었습니다. (Bug #24506766)

  • 계정 관리 문을 실행하는 병렬 slave 스레드가 권한 캐시 잠금 처리의 race condition으로 인해 실패할 수 있었습니다. (Bug #24503606)

  • 트리거가 있는 테이블에서 다른 DDL 작업과 동시에 ALTER TABLE을 실행하면 손상된 data dictionary가 발생할 수 있었습니다. (Bug #24497803)

  • mysqladmin shutdown이 서버 process ID 파일을 확인하는 중 오류가 발생한 경우, 해당 오류가 치명적이지 않음을 명확하게 나타내지 않는 오류 메시지를 표시했습니다. 이제 실행이 계속됨을 나타냅니다. (Bug #24496214)

  • null_audit 플러그인의 경우, null_audit_event_record 시스템 변수를 부적절하게 설정하면 서버 종료가 발생할 수 있었습니다. 이 변수는 null_audit 플러그인 내부에서만 설정되어야 하므로, 이제 읽기 전용입니다. (Bug #24493829, Bug #82670)

  • 특정 컨텍스트에서 IF(col_name > 5000, (1 / col_name), 5000)과 같은 표현식이 DECIMAL(6,4) 타입을 가질 수 있었고, 이로 인해 결과가 잘릴 수 있었습니다. (Bug #24492965, Bug #82668)

  • ZEROFILL 컬럼에 사용되는 데이터 구조에서 메모리 손상이 발생할 수 있었고, 최종적으로 서버 종료로 이어질 수 있었습니다. (Bug #24489302)

  • mysql-multi.server.sh 스크립트의 동작은 데이터 디렉터리의 my.cnf를 기반으로 했습니다. 해당 옵션 파일은 더 이상 사용되지 않으므로 mysql-multi.server.sh가 제거되었습니다. (Bug #24487870)

  • 하위 쿼리의 MIN() 또는 MAX()가 인덱스된 컬럼을 참조하는 경우, 쿼리가 잘못된 결과를 생성할 수 있었습니다. (Bug #24484060, Bug #82638, Bug #24657798, Bug #82965)

  • SHOW TRIGGERS 출력 순서가 Linux와 Windows에서 다를 수 있었습니다. (Bug #24482919, Bug #82637)

  • mysqld_safe는 데이터 디렉터리에서 my.cnf를 읽으려고 시도했지만, 이는 더 이상 표준 option file 위치가 아닙니다. (Bug #24482156)

  • mysql_upgrade를 실행한 후 INSTALL COMPONENT 문을 실행하면 server exit가 발생할 수 있었습니다. (Bug #24453571)

  • 큰 문자열에 대한 regular expression pattern match가 memory allocation failure 또는 integer overflow로 인해 server exit를 초래할 수 있었습니다. (Bug #24449076, Bug #24449090)

  • MySQL 5.7 data directory로 server를 시작하면 default_rolesrole_edges system table이 없기 때문에 실패했습니다. (Bug #24447771)

  • CONNECTION table option에 큰 값을 사용하는 CREATE TABLE 문에 대해 잘못된 오류가 보고되었습니다. 이제 이 값은 1024 bytes로 제한됩니다. (Bug #24437124)

  • SHOW CREATE TRIGGER 실행 중 ER_LOCK_WAIT_TIMEOUT 오류가 발생하면 assertion이 발생할 수 있었습니다. (Bug #24420809, Bug #82483)

  • Constant folding이 큰 unsigned integer에 대해 잘못된 결과를 생성할 수 있었습니다. (Bug #24401273, Bug #82425)

  • 매우 긴 subpartition 이름을 사용하면 server exit가 발생할 수 있었습니다. 이제 64자를 초과하는 partition 또는 subpartition 이름은 ER_TOO_LONG_IDENT 오류를 생성합니다. (Bug #24400628, Bug #82429)

  • Gis_wkb_vector<Gis_point> copy constructor가 명시적으로 instantiated되지 않아 Intel compiler에서 build 문제가 발생했습니다. (Bug #24397833, Bug #82358)

  • REPAIR TABLE이 temporary file을 사용하는 방식을 악용하여 privilege escalation이 가능했습니다. (Bug #24388746)

  • UNINSTALL PLUGINSHOW PLUGINS 사이의 race condition으로 인해 server exit가 발생할 수 있었습니다. (Bug #24344026)

  • ROW mode binary logging에서 component installation이 assertion을 발생시켰습니다. (Bug #24343582)

  • role과 관련된 잠재적 memory leak이 수정되었습니다. (Bug #24337928)

  • semijoin으로 변환되고 INFORMATION_SCHEMA table을 programmatically generated한 subquery가 INFORMATION_SCHEMA table을 비어 있는 것으로 잘못 처리할 수 있었습니다.

    이 bug fix 이전에 이 문제를 우회하는 방법: SET optimizer_switch='semijoin=off'; (Bug #24287772, Bug #82214)

  • mysqldumpslow가 slow query log의 timestamp를 parse하지 못했습니다. log timestamp format 변경을 추적하도록 업데이트되지 않았기 때문입니다. (Bug #24007040)

  • Ubuntu package가 설치한 AppArmor profile에 libnuma/sys hierarchy path를 읽도록 허용하는 entry가 누락되어 server startup failure가 발생했습니다. (Bug #23854929)

  • optimizer가 semijoin transformation의 대상이 된 query에 대해 RAND()를 constant로 잘못 처리할 수 있었습니다. (Bug #23854015)

  • debug build의 경우, bit operator에 대한 길이가 같지 않은 binary operand가 assertion을 발생시킬 수 있었습니다. (Bug #23853628)

  • transaction rollback request가 전체 transaction이 아니라 statement만 rollback한 경우, transaction에 다른 operation을 attach하려는 모든 시도가 assertion을 발생시켰습니다. (Bug #23753319, Bug #82143)

  • utf8mb4_unicode_ci 콜레이션을 사용하는 argument에 대한 STRCMP()ORDER BY와 다른 결과를 반환할 수 있었습니다. STRCMP()가 수정되었습니다. (Bug #23752284, Bug #82132)

  • GTID가 enabled된 경우 mysqlpump로 만든 complete logical backup을 restore할 수 없었습니다.

    dump file에 기록되는 GTID information을 제어할 수 있도록, 이제 mysqlpump에는 output에 SET @@GLOBAL.gtid_purged 문을 추가할지 여부를 나타내는 --set-gtid-purged option이 있습니다. (Bug #23748432)

  • audit_log plugin이 오류를 처리하는 동안 오류를 신호로 알린 경우 무한 재귀가 발생할 수 있었습니다. (Bug #23717558, Bug #82052)

  • MYSQL_AUDIT_CONNECT 이벤트 실패와 관련하여 audit_log plugin이 error log에 기록하는 메시지는 이제 디버깅을 돕기 위해 근본적인 오류 원인도 출력합니다. (Bug #23710632)

  • MySQL은 이제 readdir_r()이 아니라 readdir()을 사용합니다. 후자는 glibc 2.24부터 deprecated되었으며 MySQL의 debug build와 GCC 6.1을 사용하는 build가 실패하게 했습니다.

    또한 GCC 6.1 compiler warning을 초래하는 여러 문제가 수정되었습니다. (Bug #23708395, Bug #24437737, Bug #82515, Bug #24459890, Bug #82583, Bug #25103242)

  • FORCE INDEXSELECT COUNT(*) query에 대해 효과가 없었습니다. (Bug #23596760, Bug #81854)

  • 시작 중에 server는 Unix socket file에 대한 lock file을 생성합니다(예를 들어 mysql.sock에 대한 lock file로 mysql.sock.lock). server가 process ID를 lock file에 쓰지 못한 경우 해당 file을 제거하지 못했으며, 이로 인해 file이 수동으로 제거될 때까지 이후 server 시작이 실패할 수 있었습니다. (Bug #23582603, Bug #81838)

  • debug build의 경우 Item_func_spatial_collection::val_str()를 사용하여 실행된 query가 assertion을 발생시킬 수 있었습니다. (Bug #23573720)

  • connection class의 audit log event에 대해 connection_type 값은 connect event에서만 사용할 수 있었습니다. 이제 이 값은 connect, disconnect 및 change-user event에서 사용할 수 있습니다. (Bug #23541550)

  • audit_log plugin audit_log_filter_remove_filter() function은 NULL 인수가 지정된 경우 server exit를 발생시켰습니다. (Bug #23522793)

  • FEDERATED storage engine 없이 MySQL을 구성하려는 시도가 실패했습니다(CMake -DWITH_FEDERATED_STORAGE_ENGINE=0 option이 작동하지 않았습니다). (Bug #23508203, Bug #81665)

  • Solaris에서 gettimeofday()가 유효하지 않은 값을 반환하여 server shutdown을 유발할 수 있었습니다. (Bug #23499695)

  • keyring_file plugin은 storage file이 존재하지 않을 때 해당 storage file에 key를 쓰려고 시도할 수 있었습니다. key가 올바른 storage file이 존재할 때만 flush되도록 하기 위해, keyring_file은 이제 keyring의 SHA-256 checksum을 file에 저장합니다. file을 update하기 전에 plugin은 file에 예상 checksum이 포함되어 있는지 확인합니다. (Bug #23498254)

  • max_join_size보다 큰 tuple을 생성하는 union query는 server exit를 초래할 수 있었습니다. (Bug #23303485)

  • 잘못된 구조의 grant table은 사용자 관리 작업에서 문제를 일으킬 수 있습니다. 이에 대한 수정의 결과로, grant table을 수정하는 모든 작업에 대해 server는 이제 table이 예상 구조를 가지고 있는지 확인하고 그렇지 않은 경우 오류를 생성합니다. table을 예상 구조로 update하려면 mysql_upgrade를 실행해야 합니다. (Bug #23295423, Bug #25095876, Bug #25448037)

  • ST_ExteriorRing()은 유효하다고 판단된 유효하지 않은 WKB string이 전달되어 server exit를 유발할 수 있었습니다. (Bug #23280574)

  • debug build의 경우 XA transaction의 branch 준비 실패가 server exit로 이어질 수 있었습니다. (Bug #23264552, Bug #81375)

  • optimizer는 비용이 더 높은 경우에도 primary key에 대한 range access 대신 secondary index에 대한 ref access를 선택할 수 있었습니다. (Bug #23259872, Bug #81341)

  • disk-full error message의 한 instance에 잘못된 error code가 포함되어 있었습니다. (Bug #23247332, Bug #81346)

  • ORDER BYLIMIT가 있는 query의 경우 optimizer trace는 optimizer가 다른 index로 전환한 것을 기록하지 않았습니다. (Bug #23227428, Bug #81250)

  • version_tokens plugin 및 function에서 사용하는 lock의 부적절한 처리로 인해 version_tokens가 uninstall되는 동안 function 중 하나가 호출된 경우 server exit가 발생할 수 있었습니다. (Bug #23210850)

  • stored programs 내에서 실행된 DML 문장의 특정 오류가 잘못 처리되어 서버 종료가 발생할 수 있었습니다. (Bug #23209989)

  • QUOTE() 함수가 과도한 메모리를 할당할 수 있었습니다. 이제 max_allowed_packet 바이트의 제한이 적용되며, 이를 초과하여 할당하려는 시도에 대해서는 경고와 함께 NULL을 반환합니다. (Bug #23195404)

  • 일부 깊게 중첩된 표현식의 경우, optimizer가 스택 오버플로를 감지하지 못해 서버 종료가 발생했습니다. (Bug #23135667)

  • X Plugin을 통해 생성된 세션의 경우, 잘못된 thread attachment/detachment로 인해 서버 종료가 발생할 수 있었습니다. (Bug #23057045)

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

  • 일부 generated column의 경우, 테이블 재빌드를 위한 컬럼 정의의 캐릭터셋 변환이 컬럼 값을 변경할 수 있었습니다. (Bug #22991924)

  • OS X DMG installer가 keyring plugin 설치를 올바르게 설정하지 않았습니다. (Bug #22991650)

  • 쿼리가 derived table의 컬럼에 대해 GROUP BY를 수행하고 select list에 aggregate function과 group column을 혼합한 표현식이 포함된 경우, ONLY_FULL_GROUP_BY SQL mode가 활성화되어 있으면 오류가 발생했습니다. (Bug #22924183, Bug #80726)

  • MySQL 5.6에서 5.7로 binary (in-place) upgrade를 수행한 다음 mysqlpump를 사용하여 데이터 export를 수행하면, dump file을 다시 로드하려는 시도에 대해 Invalid default value for date_column 오류가 발생했습니다. (Bug #22919028, Bug #80706)

  • 긴 float를 integer로 cast하는 작업이 실패하면 서버 종료가 발생할 수 있었습니다. (Bug #22907691)

  • Unix 및 Unix-like 시스템에서, 옵션 값 없이 --log-error를 지정하여 생성되는 error log file이 --pid-file 옵션도 함께 제공된 경우 PID file의 디렉터리에 잘못 생성되었습니다. (Bug #22900354)

  • main.log_tables-big test case는 부하가 높은 호스트에서 불안정할 수 있었습니다. 패치를 제공한 Laurynas Biveinis에게 감사드립니다. (Bug #22874167, Bug #80607)

  • X Plugin을 통해 실행된 SQL 문이 Performance Schema에서 instrument되지 않았습니다. (Bug #22859462)

  • rpl.rpl_key_rotation test case가 master server와 올바르게 동기화되지 않았습니다. 패치를 제공한 Laurynas Biveinis에게 감사드립니다. (Bug #22838596, Bug #80531)

  • DROP INDEX 작업은 TEXT 타입 컬럼(TINYTEXT 등)의 index prefix length 처리 불일치로 인해 실패할 수 있었습니다.

    이 수정의 결과로, 지정된 index prefix가 최대 컬럼 데이터 타입 크기를 초과하는 CREATE TABLECREATE INDEX 문에 대해 더 제한적인 동작이 적용됩니다.

    • nonunique index의 경우, 오류가 발생하거나(strict SQL mode가 활성화된 경우), index length가 최대 컬럼 데이터 타입 크기 이내가 되도록 줄어들고 경고가 생성됩니다(strict mode가 활성화되지 않은 경우).
    • unique index의 경우, index length를 줄이면 지정된 uniqueness 요구 사항을 충족하지 않는 nonunique entry의 삽입이 가능해질 수 있으므로 SQL mode와 관계없이 오류가 발생합니다.

    (Bug #22740093, Bug #80392)

  • stored routine 이름에 대한 metadata locking은 대소문자를 구분하여 수행되었지만, routine 이름은 대소문자를 구분하지 않습니다. (Bug #22700385)

  • DISTINCT와 함께 aggregate function을 사용한 쿼리가 잘못된 결과를 생성할 수 있었습니다. (Bug #22686994, Bug #80310)

  • innodb_numa_interleave system variable이 NUMA가 활성화되지 않은 일부 시스템에서 잘못 사용할 수 있었습니다. 패치를 제공해 준 Tomislav Plavcic에게 감사드립니다.

    CMake는 이제 현재 플랫폼에 NUMA 지원이 있는지 여부에 따라 기본 WITH_NUMA 값을 설정합니다. NUMA 지원이 없는 플랫폼에서 CMake는 다음과 같이 동작합니다.

    • NUMA 옵션이 없는 경우(일반적인 경우), CMake는 정상적으로 계속 진행하며 다음 warning만 생성합니다: NUMA library missing or required version not available
    • -DWITH_NUMA=ON을 사용하는 경우, CMake는 다음 error와 함께 중단됩니다: NUMA library missing or required version not available

    (Bug #22678436, Bug #80288)

  • 복잡한 WHERE 조건을 포함하는 특정 SQL 쿼리가 warning, memory corruption 또는 서버 종료를 유발할 수 있었습니다. (Bug #22671573)

  • 서버를 offline으로 전환할 때, Performance Schema 내부의 race condition으로 인해 서버가 종료될 수 있었습니다. (Bug #22551677)

  • macOS에서, 관련 trigger가 있는 table의 이름을 소문자와 대문자를 모두 포함하는 새 이름으로 변경한 경우, 해당 trigger에 대한 DROP TRIGGER가 table에 대해 ER_NO_SUCH_TABLE error를 발생시켰습니다. (Bug #22512899, Bug #79873)

  • MYSQL_FIELD C API structure에서, derived table에 대한 org_table 값이 *였으며, 이 값에 의존하는 쿼리에 failure를 유발할 수 있었습니다. view 및 derived table에 대한 org_table 값은 이제 다음과 같이 설정됩니다: column이 view에서 선택된 경우, org_table은 view의 이름을 지정합니다. column이 derived table에서 선택된 경우, org_table은 base table의 이름을 지정합니다. derived table이 view를 감싸는 경우에도, org_table은 여전히 base table의 이름을 지정합니다. column이 expression인 경우, org_table은 empty string입니다. (Bug #22364401, Bug #79641)

  • RPM package의 경우, 배포된 /etc/my.cnf 파일의 기본 error-log 위치가 설치된 logrotate script의 위치와 달라 logrotate가 실패했습니다. (Bug #22322685)

  • Performance Schema events_statements_summary_by_digest table이 예상되는 단일(고유) row가 아니라, 동일한 statement digest 및 schema 조합에 대해 여러 row를 포함할 수 있었습니다. (Bug #22320066, Bug #79533)

  • Performance Schema system 및 status variable table의 경우, utf8과 다른 character set으로 표현된 variable value가 잘리거나 잘못될 수 있었습니다. (Bug #22313205)

  • debug build의 경우, 잘못된 UTF-8 이름을 가진 expression attribute를 사용하여 table partitioning expression을 변경하면 assertion이 발생했습니다. (Bug #22152229)

  • AUTO_INCREMENT column을 포함하는 table에서 insert를 수행한 다음 SELECT operation을 수행한 후, LAST_INSERT_ID()는 올바른 값을 반환하지만, mysql_insert_id() C API function의 값은 0으로 reset되고 있었습니다. (Bug #22028117, Bug #78778)

  • Ubuntu에서 Community package에서 Commercial package로 upgrade하는 동안 mysqldmy_print_defaults가 설치되지 않은 것처럼 보이게 하는 error message가 표시되었습니다. 이러한 message는 잘못 표시된 것이며 이제 표시되지 않습니다. (Bug #21807248)

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

  • UPDATE 문의 WHERE 절에 있는 유효하지 않은 문자열 값으로 인해 range scan이 아니라 index scan이 사용되었습니다. index에 존재하지 않는 값의 경우, 이는 훨씬 더 느릴 수 있었습니다. 이제 optimizer는 이를 “impossible WHERE” 조건으로 판단합니다. (Bug #21032418, Bug #76933)

  • Debian 패키지에는 AppArmor 관련 include 파일이 누락되어 있었고, AppArmor에 종속된 것으로 잘못 표시되어 있었습니다(이로 인해 AppArmor를 uninstall하여 비활성화하는 것이 불가능했습니다). (Bug #20768958)

  • automatic_sp_privileges 시스템 변수가 활성화된 경우, anonymous user에 대해 기대한 효과가 없었습니다. (Bug #20266641)

  • replication 환경에서 SET PASSWORD 또는 ALTER USER가 hash 문자열을 올바르게 parse하지 못해 slave에서 실행에 실패할 수 있었습니다. (Bug #20228478)

  • optimizer resolve_const_item() 함수가 마지막 두 인수를 잘못된 순서로 Item_decimal()에 호출했습니다. (Bug #19062566)

  • in-place ALTER TABLE 작업은 다음 조건에서 DATE 또는 DATETIME column을 추가할 때 오류를 보고하지 못했습니다. a) column이 NOT NULL이고 default 값이 제공되지 않았습니다. b) strict 및 NO_ZERO_DATE SQL mode가 활성화되어 있었습니다. c) table이 비어 있지 않았습니다.

    ALTER TABLE 작업은 다음 조건에서 DATE 또는 DATETIME column을 추가할 때 warning이 아니라 오류와 함께 실패했습니다. a) column이 NOT NULL이고 default 값이 제공되지 않았습니다. b) strict SQL mode가 활성화되어 있고 NO_ZERO_DATE SQL mode가 활성화되어 있지 않았습니다. c) table이 비어 있지 않았습니다. (Bug #16888677)

  • fractional seconds 부분이 있는 TIME, DATE, 또는 TIMESTAMP 값을 동일한 type이지만 fractional digit 수가 더 적은 column에 삽입하면 rounding이 발생했습니다. 이는 rounding이 아니라 truncation을 사용한 MySQL 5.5와 다릅니다. 이 동작에 대한 제어를 가능하게 하기 위해, 새로운 TIME_TRUNCATE_FRACTIONAL SQL mode를 사용할 수 있습니다. 기본값은 rounding을 사용하는 것입니다. 이 mode가 활성화되면, 대신 truncation이 발생합니다. (Bug #16583910, Bug #68760)

  • inner table의 index prefix가 사용된 경우 NOT IN subquery가 잘못된 결과를 생성할 수 있었습니다. (Bug #13915291)

  • non-Linux Unix 시스템에서 mysql.server startup script는 pgrep이 아니라 Linux 명령 pidof를 사용했습니다. (Bug #13788154, Bug #64342)

  • 비정상적인 server 종료 후 mysqld_safe의 여러 instance를 시작하면 하나의 mysqld_safe instance가 다른 instance를 kill할 수 있었습니다. 버그 수정의 결과로, mysqld_safe.pid 파일은 더 이상 사용되지 않습니다. (Bug #11751149, Bug #41908)

  • mysqld_safe--help 메시지가 수정되어, --no-defaults, --defaults-file, --defaults-extra-file 옵션이 지정되는 경우 첫 번째 인수여야 한다는 점을 언급하도록 했습니다. (Bug #11745176, Bug #11192)

  • 각 레벨에 대한 XML parser 위치 스택(고정된 깊이를 가짐)의 bounds check가 배열의 크기를 상한으로 사용했으므로 1만큼 벗어나 있었습니다. 이는 허용 가능한 깊이를 1만큼 줄임으로써 수정되었으며, 이는 실제로 위치 스택의 최대 요소 수와 일치합니다. (Bug #83871, Bug #25111907)

    참조: 함께 참조: Bug #14040071, Bug #15948580.