MySQL 8.0 Release Note

8.0.11 변경 사항 (2018-04-19 GA)

Estimated reading: 9 minutes 95 views

공식 문서: Changes in MySQL 8.0.11 (2018-04-19, General Availability)

캐릭터셋 지원

utf8mb3 캐릭터셋은 향후 MySQL 버전에서 utf8mb4로 대체될 예정입니다. 현재 utf8 캐릭터셋은 utf8mb3의 별칭이지만, 그 시점에서 utf8mb4를 참조하게 됩니다. utf8의 의미에 대한 혼동을 피하기 위해, 캐릭터셋 참조에서 utf8 대신 utf8mb4를 명시적으로 지정하는 것을 고려하십시오. (WL #10778)

컴파일 관련 사항

MySQL 소스 코드는 clang-format을 사용하여 Google 스타일 규칙으로 변환되었습니다. (버그 #27414321)

Sun RPC가 glibc에서 제거되고 있습니다. CMake는 이제 glibc에 Sun RPC가 없는 경우 libtirpc를 감지하고 사용합니다. (이 CMake 기능을 활용하려면 libtirpcrpcgen을 설치해야 할 수도 있습니다.) (버그 #27368272, 버그 #89168)

서버 빌드를 위한 Boost 라이브러리의 최소 버전이 이제 1.66.0입니다. (버그 #27137349, 버그 #88540)

소스에서 빌드할 때 제공된 CMake 스크립트는 JUnit 및 Ant가 설치되어 지정된 경로에 있다고 가정했습니다. 이 조건이 충족되지 않으면 GCS Java 래퍼 빌드 중에 빌드 오류가 발생했습니다. 이를 해결하기 위해 기존의 WITH_BOOST CMake 옵션과 유사하게 작동하는 새로운 CMake 옵션 WITH_ANT=path_name이 빌드 스크립트에 추가되었습니다. WITH_ANT는 Ant tarball 또는 이미 압축 해제된 아카이브가 저장된 디렉토리 경로로 설정됩니다. WITH_ANT가 설정되지 않았거나 특수 값 system으로 설정된 경우, 빌드는 ant 바이너리가 $PATH에 있다고 가정합니다.
이와 비슷하게, 빌드 중에 필요한 라이브러리를 다운로드하는 CMake 옵션인 ENABLE_DOWNLOADS가 이미 존재합니다. 이제 ENABLE_DOWNLOADS가 설정되고 JUnit이나 Ant가 발견되지 않으면 빌드 과정의 일부로 다운로드됩니다. (버그 #26678793)

구성 관련 사항

새로운 CMake 옵션인 BUNDLE_RUNTIME_LIBRARIES는 Windows용 서버 MSI 및 Zip 패키지와 함께 런타임 라이브러리를 번들링할 수 있게 해줍니다. (버그 #27584796, 버그 #89771)

systemd 서비스 파일은 MySQL 8.0의 더 높은 기본 설정을 수용하기 위해 LimitNOFILE을 10000으로 증가시킵니다. (버그 #27530282)

새로운 WITH_SYSTEM_LIBS CMake 옵션을 활성화하면 명시적으로 설정되지 않은 다음 옵션에 대해 system 값을 선택합니다: WITH_EDITLINE, WITH_ICU, WITH_LIBEVENT, WITH_LZ4, WITH_PROTOBUF, WITH_SSL, WITH_ZLIB. (버그 #27356668, 버그 #89136)

컴파일된 zlib 라이브러리의 버전이 이제 version_compile_zlib 시스템 변수 값으로 런타임에 사용할 수 있습니다. Daniël van Eeden의 패치에 감사드립니다. (버그 #27235065, 버그 #88825)

사용 중단 및 제거 관련 사항

비호환 변경 사항: 다음의 호환성 SQL 모드가 제거되었습니다: DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS. 이 모드는 더 이상 sql_mode 시스템 변수에 할당하거나 mysqldump--compatible 옵션의 허용값으로 사용할 수 없습니다.
MAXDB가 제거됨에 따라, 이제 CREATE TABLE 또는 ALTER TABLETIMESTAMP 데이터 유형은 더 이상 DATETIME으로 취급되지 않고, 본래의 TIMESTAMP로 취급됩니다.
MySQL 5.7에서 제거된 SQL 모드를 사용하는 애플리케이션은 MySQL 5.7 마스터에서 MySQL 8.0 슬레이브로 복제될 때 명령문이 실패할 수 있으며, 또는 마스터와 슬레이브에서 서로 다른 결과를 초래할 수 있습니다. 이와 같은 문제를 피하기 위해 MySQL 8.0에서 제거된 모드를 사용하는 애플리케이션은 해당 모드를 피하도록 수정해야 합니다. (WL #8383, WL #9465)

계정 관리와 관련된 다음 기능이 제거되었습니다:

  • GRANT를 사용한 사용자 생성. 대신 CREATE USER를 사용하십시오. 이 방법을 따르면 NO_AUTO_CREATE_USER SQL 모드는 GRANT 문에 대해 더 이상 중요하지 않으므로 이 모드도 제거되었습니다.
  • GRANT를 사용하여 권한 할당 외의 계정 속성을 수정하는 기능. 여기에는 인증, SSL 및 리소스 제한 속성이 포함됩니다. 이러한 속성은 계정 생성 시 CREATE USER로 설정하거나 이후 ALTER USER를 사용하여 수정하십시오.
  • CREATE USERGRANTIDENTIFIED BY PASSWORD 'hash_string' 구문. 대신, 'hash_string' 값이 지정된 플러그인과 호환되는 형식일 때 CREATE USERALTER USER에서 IDENTIFIED WITH auth_plugin AS 'hash_string'을 사용하십시오.
    또한, IDENTIFIED BY PASSWORD 구문이 제거되었기 때문에 log_builtin_as_identified_by_password 시스템 변수는 불필요하며 제거되었습니다.
  • PASSWORD() 함수. 또한 PASSWORD()가 제거됨에 따라 SET PASSWORD ... = PASSWORD('auth_string') 구문도 더 이상 사용할 수 없습니다.
  • old_passwords 시스템 변수.

MySQL 5.7 애플리케이션이 MySQL 8.0에서 제거된 기능을 사용하는 경우, MySQL 5.7 마스터에서 MySQL 8.0 슬레이브로 복제될 때 문이 실패하거나 마스터와 슬레이브에서 다른 효과를 낼 수 있습니다. 이러한 문제를 피하기 위해 MySQL 8.0에서 제거된 기능을 사용하는 애플리케이션은 이를 피하고 가능한 경우 대체 기능을 사용하도록 수정해야 합니다. (버그 #27455708, WL #10774)

에러 처리

perror는 인수를 이해하는 데 더 유연해졌습니다. 예를 들어, ER_WRONG_VALUE_FOR_VAR 오류의 경우, perror1231, 001231, MY-1231, MY-001231, 또는 ER_WRONG_VALUE_FOR_VAR와 같은 인수를 모두 이해할 수 있습니다. MySQL과 운영 체제 오류가 겹치는 범위 내에서 오류 번호가 있는 경우, perror는 두 개의 오류 메시지를 표시합니다. (버그 #27462408)

INFORMATION_SCHEMA 관련 사항

새로운 INFORMATION_SCHEMA.KEYWORDS 테이블은 MySQL에서 키워드로 간주되는 단어들을 나열하고, 각 키워드가 예약어인지 여부를 표시합니다. 이 테이블은 애플리케이션에 MySQL 키워드 정보를 제공하는 런타임 소스를 제공합니다. 자세한 내용은 INFORMATION_SCHEMA KEYWORDS 테이블을 참조하십시오.
또한, MySQL을 소스에서 빌드하는 경우 빌드 프로세스는 키워드와 그 예약 상태의 배열을 포함하는 keyword_list.h 헤더 파일을 생성합니다. 이 파일은 빌드 디렉토리 아래 sql 디렉토리에 위치하며, 정적 키워드 목록이 필요한 애플리케이션에 유용할 수 있습니다. (WL #8989)

설치 관련 사항

RPM 및 Debian 패키지는 이제 현재 MySQL 시리즈를 share 디렉토리 이름에 추가합니다 (예: share/mysql-8.0). (버그 #27638192, 버그 #26990531)

로깅 관련 사항

이제 오류 로그에 기록된 메시지는 이벤트가 발생한 하위 시스템을 표시합니다. 가능한 하위 시스템 값은 InnoDB(InnoDB 스토리지 엔진), Repl(복제 하위 시스템), Server(그 외)입니다. (WL #11150)

패키징 관련 사항

Debian 패키지를 사용하여 설치 또는 업그레이드할 때 이제 기본 인증 플러그인을 mysql_native_password로 설정하는 옵션을 제공하는 대화 상자가 표시됩니다. 이는 일부 설치 사이트에서 하위 호환성을 위해 유용할 수 있습니다. (버그 #27454287, 버그 #27667294)

compile_innodb 스크립트는 더 이상 사용되지 않으며 MySQL 배포판에서 제거되었습니다. Alexey Kopytov에게 제안에 감사드립니다. (버그 #27448099, 버그 #89437)

Performance Schema 관련 사항

새로운 퍼포먼스 스키마 테이블 log_status는 온라인 백업 도구가 로그 파일을 복사하는 동안 해당 리소스를 잠그지 않고 필요한 로그 파일을 복사할 수 있도록 정보를 제공합니다. log_status 테이블이 쿼리될 때 서버는 테이블을 채우는 동안 로그 기록 및 관련 관리 변경 사항을 잠시 차단한 후 리소스를 해제합니다. log_status 테이블은 온라인 백업 도구에 마스터의 바이너리 로그와 gtid_executed 기록, 각 복제 채널의 릴레이 로그에서 복사해야 할 지점을 알려줍니다. 또한, InnoDB 스토리지 엔진의 마지막 로그 시퀀스 번호(LSN) 및 마지막 체크포인트 시점의 LSN과 같은 개별 스토리지 엔진에 대한 관련 정보를 제공합니다.
log_status 테이블에 액세스하려면 BACKUP_ADMIN 권한이 필요합니다. (버그 #27599831, WL #9452)

이제 퍼포먼스 스키마 객체의 기본 캐릭터셋은 utf8mb4입니다. (버그 #27407745)

보안 관련 사항

이제 MySQL 8.0 빌드는 기본 SSL 라이브러리로 yaSSL 대신 OpenSSL을 사용합니다. MySQL은 yaSSL을 사용하는 빌드를 더 이상 지원하지 않으며, 소스 배포판에는 yaSSL이 포함되지 않습니다.
WITH_SSL CMake 옵션은 더 이상 bundled(yaSSL 사용)을 유효한 값으로 허용하지 않으며, 기본 옵션 값이 bundled에서 system(호스트 시스템에 설치된 OpenSSL 버전 사용)으로 변경되었습니다.
yaSSL 대신 wolfSSL을 GPLv2 호환 라이선스를 가진 기능적으로 동등한 대안으로 사용할 수 있습니다. 또한 wolfSSL(OpenSSL과 마찬가지로) TLSv1.2 프로토콜을 지원하며, yaSSL은 이를 지원하지 않습니다.
wolfSSL을 사용하여 소스에서 MySQL을 빌드하는 방법에 대한 지침은 MySQL 소스 배포판의 extra/README-wolfssl.txt 파일에 나와 있습니다. WITH_SSL CMake 옵션은 이제 유효한 값으로 wolfssl을 허용합니다. -DWITH_SSL=wolfssl을 사용하려면 README-wolfssl.txt의 지침을 따라야 합니다. (버그 #26671671, WL #8998)

이제 MySQL은 OpenSSL 1.0.2를 사용하여 컴파일되고, OpenSSL 라이브러리 및 FIPS 오브젝트 모듈이 런타임에 사용 가능한 경우 FIPS 모드를 지원합니다. FIPS 모드는 허용 가능한 암호화 알고리즘에 대한 제한이나 더 긴 키 길이에 대한 요구사항과 같은 조건을 암호화 작업에 부과합니다. ssl_fips_mode 시스템 변수는 서버 측에서 FIPS 모드를 제어할 수 있게 해줍니다. --ssl-fips-mode 클라이언트 옵션은 다음 프로그램들에서 클라이언트 측에서 FIPS 모드를 제어할 수 있습니다: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlshow, mysqlslap, mysqltest, mysqlxtest, mysql_secure_installation, mysql_upgrade. 자세한 내용은 FIPS 지원을 참조하십시오. (WL #8102)

공간 데이터 지원

비호환 변경 사항: 다음 지오메트리 컬렉션 변경 사항이 구현되었습니다:

  • 표준 GeomCollection 이름이 GeometryCollection 데이터 타입 이름의 동의어로 지원됩니다.
  • GeomCollection() 함수가 GeometryCollection() 함수의 동의어로 지원됩니다.
  • GeomCollectionGeomCollection()은 선호되는 데이터 타입 및 함수 이름입니다.

비호환성: 선호되는 데이터 타입 이름 변경의 결과로, 일부 INFORMATION_SCHEMA 테이블, SHOW CREATE TABLE과 같은 명령문, 그리고 데이터 타입 정보를 표시하는 ST_GeometryType() 함수가 이제 GEOMETRYCOLLECTION 대신 GEOMCOLLECTION을 표시합니다. GEOMETRYCOLLECTION을 찾는 애플리케이션은 이 변경 사항을 고려하여 조정해야 합니다.
자세한 내용은 GeometryCollection 클래스MySQL 전용 함수로 지오메트리 값 생성을 참조하십시오. (WL #2388)

sys 스키마 관련 사항

이제 sys 스키마 객체의 기본 캐릭터셋은 utf8mb4입니다. (버그 #27675959)

테스트 스위트 관련 사항

GIS에서 부동 소수점 결과를 처리하는 컴파일러 및 플랫폼 간 차이점이 감소함에 따라 관련 테스트 케이스에서 더 이상 불필요한 반올림을 사용하지 않아도 되므로 간소화되었습니다. 패치를 제공한 Daniel Black에게 감사드립니다. (버그 #26540102, 버그 #87223, 버그 #27462294)

X Plugin 관련 사항

MySQL을 문서 저장소로 사용할 때 X DevAPI를 사용하여 지오메트리 값을 가지는 열에 SPATIAL 인덱스를 사용하는 것이 이제 완전히 지원됩니다. 이전에는 공간 인덱스를 생성할 수 있었지만, 인덱싱된 열에 공간 참조 시스템 식별자(SRID)가 포함되지 않아 옵티마이저에서 인덱스를 사용하지 못했습니다. 이제 SRID 속성이 인덱싱된 열에 추가되었습니다. (버그 #27568243)

X Plugin 테스트에서 사용되는 소켓 파일의 파일 이름이 22자로 제한됩니다. (버그 #27460677, 버그 #89464)

버그 #26328274에 대한 수정으로 인해 디버그 빌드에서 X Plugin 연결에 빈 호스트 이름이 사용될 때 어설션이 발생했습니다. 이 문제가 이제 수정되었습니다. (버그 #27266584, 버그 #88925)

X Plugin에서 비밀번호가 설정되지 않은 사용자 계정이 PLAIN 인증 방법과 함께 사용될 때 비밀번호 캐시가 채워지지 않았습니다. 이로 인해 이후 인증 시도가 실패했습니다. 이제 사용자 계정의 비밀번호가 비어 있으면 비밀번호 캐시에 항목이 올바르게 채워집니다. (버그 #27257722)

이제 X Plugin은 MySQL 8.0.4에서 추가된 RESTART SQL 문을 지원하여 클라이언트 세션 내에서 MySQL 서버 인스턴스를 재시작할 수 있습니다. (버그 #27245319)

MySQL Shell에서 X 프로토콜을 사용하는 연결은 버전 8.0.4부터 TCP 또는 Unix 소켓을 사용할 수 있습니다. 이 수정으로 인해 Unix 소켓 연결에서도 암호화 프로토콜을 사용할 수 있게 되어, 암호화된 연결이 필요한 사용자 계정도 연결할 수 있습니다. (버그 #27192091)

버그 #26647488 수정으로 DATETIME 데이터 유형 처리 방식이 개선되었으며, 이제 해당 필드가 없어서 데이터 유형을 식별할 수 없는 이전 버전의 플러그인에서 받은 메시지도 올바르게 디코딩됩니다. (버그 #27169735)

X 프로토콜을 사용한 X Plugin 연결 시도에서 연결 옵션에 지정된 기본 데이터베이스가 유효하지 않을 때 오류를 반환하지 않았으며, null 기본 데이터베이스로 연결이 허용되었습니다. 클래식 MySQL 프로토콜을 사용하는 연결 시도는 오류를 반환하고 연결을 허용하지 않았습니다. 이제 X 프로토콜 연결 시도도 잘못된 스키마가 지정된 경우 연결을 허용하지 않습니다. (버그 #26965020)

이제 X Plugin이 기본적으로 로드되며, 플러그인을 설치할 필요가 없어졌습니다. (WL #11040)

추가 및 변경된 기능

InnoDB: InnoDB 테이블스페이스에 대한 ibd2sdi 직렬화된 사전(dictionary) 정보(SDI) 추출 유틸리티가 이제 SDI 데이터를 JSON 예쁘게 출력(pretty print)하는 포맷을 제어하는 --pretty 옵션을 지원합니다. 예쁘게 출력하는 포맷은 기본적으로 활성화되어 있으며, --skip-pretty를 사용하여 예쁘게 출력하는 포맷을 비활성화하면 추출된 SDI 데이터 크기를 줄일 수 있습니다. (버그 #27546514)

InnoDB: 대용량 버퍼 풀을 사용하는 시스템에서 시작 성능을 개선하기 위해 버퍼 풀 초기화가 이제 멀티스레드 방식으로 수행됩니다. (버그 #22963374, 버그 #80784)

InnoDB: 다음과 같은 리두 로그 최적화가 구현되었습니다:

  • 이제 사용자 스레드는 동기화 없이 로그 버퍼에 동시 쓰기를 할 수 있으며, 느슨한 순서로 플러시 리스트에 더러운 페이지를 추가할 수 있습니다.
  • 이제 전용 로그 기록 스레드가 로그 버퍼에서 시스템 버퍼로 리두 로그 레코드를 기록하고, 시스템 버퍼를 리두 로그 파일로 플러시하는 역할을 담당합니다.
  • 플러시된 리두를 기다리는 사용자 스레드의 스핀 대기 시 사용되는 스핀 딜레이를 설정하는 시스템 변수가 추가되었습니다:
    • innodb_log_wait_for_flush_spin_hwm: 사용자가 더 이상 스핀하지 않도록 하는 평균 로그 플러시 시간의 최대값을 정의합니다.
    • innodb_log_spin_cpu_abs_lwm: 플러시된 리두를 기다리는 동안 사용자 스레드가 더 이상 스핀하지 않도록 하는 최소 CPU 사용량을 정의합니다.
    • innodb_log_spin_cpu_pct_hwm: 플러시된 리두를 기다리는 동안 사용자 스레드가 더 이상 스핀하지 않도록 하는 최대 CPU 사용량을 정의합니다.
  • innodb_log_buffer_size 설정 옵션이 이제 동적(dynamic)으로 변경되어 서버가 실행 중일 때 로그 버퍼 크기를 조정할 수 있습니다.

자세한 내용은 InnoDB 리두 로깅 최적화를 참조하십시오. (WL #10310)

macOS: macOS 설치 프로그램이 이제 무작위로 비밀번호를 생성하는 대신, 사용자가 사용할 root 비밀번호를 묻습니다. (버그 #22608157, 버그 #80144)

macOS: macOS 설치 프로그램에 포함된 MySQL 환경 설정 창에 이제 launchd로 서버를 시작할 때 읽을 my.cnf 파일을 지정하는 설정이 포함되었습니다. (버그 #19775549, 버그 #74214)

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

데이터 디렉토리 초기화(예: mysqld –initialize 사용) 중의 로깅 방식이 변경되었습니다:

  • 서버가 초기화 모드에서 실행 중임을 나타내는 시작 메시지가 표시됩니다.
  • 초기화가 완료되었을 때 메시지가 작성됩니다.
  • CA 인증서가 자체 서명되었다는 메시지가 억제됩니다.

(버그 #27557952, 버그 #89693)

로그가 활성화된 경우 서버 버전 문자열에 -log 접미사가 더 이상 추가되지 않습니다. 예를 들어, 이는 version 시스템 변수의 값에 영향을 미칩니다. (버그 #27532097, 버그 #89626)

오류 로그에 기록되는 서버 종료 라인에 이제 서버 버전이 포함됩니다. (버그 #27522788, 버그 #87910)

SHOW CREATE TABLE은 기본 형식일 때 ROW_FORMAT 테이블 옵션을 표시하지 않는 것이 일반적입니다. 이는 운반 가능한 테이블스페이스의 테이블 가져오기 및 내보내기 작업 중에 문제가 될 수 있습니다. 이제 MySQL은 show_create_table_verbosity 시스템 변수를 지원하며, 이 변수가 활성화되면 SHOW CREATE TABLE이 기본 형식 여부와 관계없이 ROW_FORMAT을 표시합니다. (버그 #27516741)

퍼포먼스 스키마 메모리 계측의 오버헤드가 감소되었습니다. (버그 #27500610)

데이터 디렉토리를 초기화하는 동안 서버는 sql_mode=''를 사용하여 객체를 생성했습니다. 이제 서버는 기본 sql_mode 값을 사용하며, 이 값에는 엄격 모드(strict mode)를 포함한 설정이 포함되어 있습니다. (버그 #27476029, 버그 #89495)

mysql-test/std_data/Index.xml에 정의된 콜레이션은 테스트 목적으로만 사용되며, 다른 용도로는 사용되지 않아야 합니다. 일부 사용자가 비테스트 환경에서 이를 사용하고 있었기 때문에, 이 내용을 명확히 하기 위해 파일에 주석이 추가되었습니다. (버그 #27421838)

RESET PERSIST는 더 이상 암시적 커밋을 수행하지 않습니다. (버그 #27374791)

영구 변수를 위해 퍼포먼스 스키마 variables_info 테이블의 SET_TIME 열은 이제 서버 시작 시간이 아니라 변수가 영구적으로 설정된 시간을 반영합니다. (버그 #25677422)

이전에는 SHOW CREATE TABLE이 테이블 기본값과 동일한 콜레이션일 경우, 열 콜레이션을 명시적으로 지정하더라도 이를 표시하지 않았습니다. 이제 SHOW CREATE TABLE은 콜레이션이 테이블 기본값과 동일하더라도 명시적으로 지정된 경우 항상 열 콜레이션을 표시합니다. (버그 #11754608, 버그 #46239)

버그 수정

중요 변경: NO_ZERO_DATE SQL 모드가 활성화된 경우, NOT NULL로 선언된 DATE 또는 DATETIME 열에 대해 기본값을 지정하지 않고, 비어 있지 않은 테이블에 ALTER TABLE로 추가하려는 시도를 거부했습니다. 생성된 열은 기본값을 가지지 않기 때문에, 이 제한은 비어 있지 않은 테이블에 DATE NOT NULL 또는 DATETIME NOT NULL 생성 열을 추가하는 것도 방지했습니다. 이제 생성된 열에 대해 해당 제한이 해제되었으며, 열 값을 결정할 때 누락된 기본값 대신 생성식이 사용될 수 있습니다. (버그 #27252354)

중요 변경: ANALYZE TABLE ... UPDATE HISTOGRAM 문에서 WITH N BUCKETS 절은 이제 선택 사항입니다. 명시되지 않은 경우, _BUCKETS_의 기본값은 100입니다. (버그 #89909, 버그 #27637968)

InnoDB: 치명적인 오류 메시지가 오류 로그에 기록되기 전에 서버가 중지되었습니다. (버그 #27626478)

InnoDB: 대기 잠금을 부여할 수 있는지 결정할 때, 롤백 중인 희생 트랜잭션이 보유한 잠금이 무시되었습니다. (버그 #27607235)

InnoDB: GCC 7.2.0을 사용하여 디버그 빌드를 컴파일할 때 Sdi_Decompressor::decompress() 함수에서 오류가 발생했습니다. (버그 #27565889)

InnoDB: 여러 버퍼 풀을 병렬로 생성하는 동안 버퍼 풀 청크를 등록할 때 어설션이 발생했습니다. 이제 뮤텍스가 버퍼 풀 청크 맵에 버퍼 풀 청크를 등록하는 작업을 보호합니다. (버그 #27565865)

InnoDB: 표준 모니터를 활성화하면 오류가 발생했습니다. (버그 #27534041)

InnoDB: 열을 숨김으로 표시하는 데 사용된 내부 필드가 열 가시성의 추가 수준을 지원하기 위해 불리언 필드에서 열거형 필드로 변경되었습니다. (버그 #27499518, 버그 #89553)

InnoDB: zlib와 관련된 Valgrind 오류가 보고되었으며, 조건부 점프 또는 이동이 초기화되지 않은 값에 의존한다고 표시되었습니다. (버그 #27482740, 버그 #89509)

InnoDB: TempTable 스토리지 엔진과 NO PAD 콜레이션을 사용했을 때 잘못된 GROUP BY 결과가 반환되었습니다. (버그 #27454796)

InnoDB: 페이지 압축 함수에서 잘못된 압축 길이 값으로 인해 처음으로 페이지가 압축될 때 홀 펀칭이 생략되었습니다. (버그 #27399897)

InnoDB: 잘못된 --log-bin 옵션 값으로 서버를 시작하면 어설션이 발생했고, 이후 올바른 --log-bin 값 또는 --log-bin 옵션 없이 서버를 시작하려는 시도에서 계속 어설션 실패가 발생했습니다. (버그 #27393317)

InnoDB: UPDATE 작업 중 LOB가 삽입될 때 LOB 참조가 업데이트되지 않았습니다. (버그 #27368662)

InnoDB: 서버를 다시 시작한 후 TRUNCATE TABLE 작업이 메모리에 저장된 원격 데이터 디렉토리 정보와 일치하지 않는 테이블 플래그로 인해 어설션을 발생시켰습니다. (버그 #27367639)

InnoDB: CREATE TEMPORARY TABLE ... TABLESPACE 구문을 사용하여 파일당 테이블 테이블스페이스에 임시 테이블을 생성하려고 하면 오류가 보고되지 않았습니다. 임시 테이블스페이스는 임시 테이블스페이스에만 허용됩니다. (버그 #27361662)

InnoDB: 대형 객체(LOB)의 첫 번째 페이지에서 취한 래치가 해제되지 않아 다른 스레드가 페이지를 할당하려고 할 때 교착 상태가 발생했습니다. (버그 #27360492)

InnoDB: 암시적 잠금을 명시적 잠금으로 변환하는 작업이 활성 트랜잭션 ID 중 가장 작은 값을 추적하는 멤버 변수를 도입하여 최적화되었습니다.
패치를 제공해주신 Zhai Weixiang에게 감사드립니다. (버그 #27353468, 버그 #89127)

InnoDB: InnoDB 스토리지 엔진에서 내부적으로 사용하는 mysql.innodb_ddl_logmysql.innodb_dynamic_metadata 테이블이 이제 보호됩니다. 이 테이블들에 대해 DDL 및 DML 작업이 더 이상 허용되지 않으며, 이 테이블들은 INFORMATION_SCHEMA 쿼리 결과에 더 이상 표시되지 않습니다. (버그 #27353455, 버그 #89129)

InnoDB: innodb_page_size 설정이 4K인 MySQL 5.7 인스턴스를 업그레이드할 때, 시스템 테이블을 생성 또는 수정하는 동안 mysql_upgrade가 “지정된 키가 너무 깁니다; 최대 키 길이는 768바이트입니다”라는 오류를 발생시켰습니다. 이제 오류가 억제되어 mysql_upgrade 클라이언트가 innodb_page_size 설정이 4K인 인스턴스에서 실행될 수 있습니다. (버그 #27338431)

InnoDB: 복구 프로세스에서 space_id 값을 제대로 결정하지 못해 서버가 종료되었습니다. (버그 #27331936)

InnoDB: 인덱싱된 열의 null 가능성을 수정하는 ALTER TABLE 작업이 어설션을 발생시켰습니다. InnoDB는 새 기본 키를 추가해야 한다고 잘못 가정했으나, 기존 고유 키에서 생성할 수 있었습니다. (버그 #27330454, 버그 #89087)
참조: 이 문제는 버그 #24397406의 회귀(regression)입니다.

InnoDB: ALTER TABLE ... IMPORT TABLESPACE 작업 후, INFORMATION_SCHEMA.INNODB_COLUMNS 테이블에서 메타데이터를 올바르게 가져올 수 없었습니다. (버그 #27322099)

InnoDB: 대형 객체(LOB) 값을 포함하는 INSERT 작업이 어설션을 발생시켰습니다. LOB 조각을 분할한 후 디렉토리 항목에 충분한 공간이 없었습니다. (버그 #27320977)

InnoDB: utf8mb4 캐릭터셋을 사용하는 서버에서 가상 열을 포함한 테이블의 행 형식을 변경하는 ALTER TABLE 작업 중에 INSERT 또는 UPDATE 작업이 인덱스 손상을 초래했습니다. (버그 #27319084)

InnoDB: 가상 열을 포함한 테이블에 대해 INFORMATION_SCHEMA.INNODB_COLUMNS에서 가져온 데이터가 올바르지 않았습니다. (버그 #27316037)

InnoDB: 복구 후 서버가 잘못된 키링 파일로 인해 시작에 실패했습니다. 백업에서 생성된 키링 파일이 비어 있었습니다. (버그 #27307740)

InnoDB: 백그라운드 스레드 간의 교착 상태로 인해 InnoDB 클러스터 노드가 실패했습니다. 한 스레드는 캐시에서 전체 텍스트 검색 테이블을 제거하려 하고, 다른 스레드는 테이블을 동기화하려 했습니다. (버그 #27304661)

InnoDB: InnoDB 복구 메시지에서 오타가 수정되었습니다.
패치를 제공해주신 Daniël van Eeden에게 감사드립니다. (버그 #27287979, 버그 #27010613, 버그 #88185)

InnoDB: InnoDB 복구 중에 암호화 알고리즘 지원이 누락되었다는 메시지가 보고되었습니다. (버그 #27286020)

InnoDB: 누락되었거나 일치하지 않는 키링 파일로 인해 시작 시 어설션 실패가 발생했습니다. (버그 #27278324)

InnoDB: 암호화된 테이블스페이스 파일의 space ID를 확인할 때 암호화 지원이 누락되었다는 오류가 반환되었습니다. (버그 #27278100)

InnoDB: “열려 있는 파일이 너무 많음” 경고를 출력하는 디버그 메시지는 이제 열려 있는 파일 수가 300에 도달했을 때만 출력됩니다. (버그 #27277844)

InnoDB: 갭 잠금을 해제할 때 술어 잠금을 건너뛰지 못해 디버그 어설션이 발생했으며, supremum 레코드 비트를 해제하기 전에 supremum에서 갭 잠금을 해제하지 못해 디버그 어설션이 발생했습니다. (버그 #27272806, 버그 #27294066)

InnoDB: 클론된 데이터 디렉토리에서 서버를 시작할 때 테이블스페이스 ID 검색 실패가 발생했습니다. (버그 #27265874)

InnoDB: 보호되지 않은 전역 변수(fil_n_file_opened)로 인해 서버 종료 시 어설션이 발생했습니다. (버그 #27265473)

InnoDB: 더 이상 유효하지 않은 어설션이 사용 중인 파일의 대기 I/O를 확인할 때 발생했습니다. (버그 #27263206)

InnoDB: 비어 있는 일반 테이블스페이스로 인해 MySQL 8.0으로 업그레이드할 때 실패가 발생했습니다. 비어 있는 데이터 파일에는 특정 페이지 수가 있어야 했습니다. (버그 #27261822)

InnoDB: --innodb-directories 옵션으로 지정된 디렉토리에 키링 데이터 파일이 포함되어 있어 시작 실패가 발생했습니다. --innodb-directories 옵션은 InnoDB 테이블스페이스 파일만 인식해야 합니다. (버그 #27253116)

InnoDB: 최소 경계 사각형(MBR) 크기의 증가를 계산하는 함수가 0을 잘못 반환하여 R-트리 손상이 발생했습니다. (버그 #27237472)

InnoDB: 임시 테이블에서 REPLACE 작업이 어설션을 발생시켰습니다. (버그 #27225649, 버그 #27229072)

InnoDB: 동일한 테이블에서 동시 DML과 함께 테이블에 대한 온라인 ALTER TABLE 작업이 어설션을 발생시켰습니다. 가상 열의 길이를 결정하기 위해 DML 로그에 접근하기 전에 로그 끝 검사가 수행되지 않았습니다. (버그 #27158030)

InnoDB: 가상 인덱스를 추가하는 작업이 실패했을 때, 해제된 가상 인덱스가 가상 열 인덱스 목록에서 제거되지 않았습니다. (버그 #27141613)

InnoDB: 동일한 문장에서 가상 열과 인덱스를 추가하면 오류가 발생했습니다. (버그 #27122803)

InnoDB: 롤백 테이블스페이스 트렁케이트 작업이 어설션을 발생시켰습니다. 롤백 테이블스페이스 세그먼트가 비활성인지 확인하는 검사가 잘못되었습니다. (버그 #27114068)

InnoDB: TempTable 스토리지 엔진이 임시 파일과 mmap을 사용하여 메모리를 할당하지 못했을 때, 디스크 저장 엔진이 대신 사용된다는 잘못된 오류가 보고되었습니다. (버그 #26990375)

InnoDB: 디버그 계측에서 잘못 정의된 래치 순서로 인해 INSERT 작업 중에 래치 순서 위반이 발생했습니다. (버그 #26983412)

InnoDB: 기본 행 형식이 REDUNDANT인 서버에서 테이블스페이스 가져오기 작업이 어설션 실패를 발생시켰습니다. (버그 #26960215)

InnoDB: 생성된 열을 기반으로 한 저장된 필드가 기본 열에 NULL 값을 허용했습니다. (버그 #26958695)

InnoDB: 해결 함수에서 서브쿼리 평가가 어설션을 발생시켰습니다. (버그 #26909960)

InnoDB: 데이터 사전 작업과 관련된 잠금이 CREATE TABLE 성능 저하를 초래했습니다. (버그 #26848711, 버그 #87827)

InnoDB: LOCK INSTANCE FOR BACKUP 작업이 동시 DDL 작업이 완료되기 전에 백업 잠금을 획득할 수 있었습니다. (버그 #26831155, 버그 #87812)

InnoDB: 잘못 지정된 innodb_data_file_path 또는 innodb_temp_data_file_path 값이 초기화 실패를 유발한 시스템 변수를 지정하지 않은 구문 오류를 반환했습니다. (버그 #26805833)

InnoDB: TRUNCATE TABLE 작업을 위한 핸들러가 열려 있으면 작업이 어설션을 발생시켰습니다. 이제 서버는 테이블을 삭제하기 전에 열린 핸들러를 닫습니다.
이 버그 패치는 또한 외래 키 제약과 관련된 TRUNCATE TABLE 오류 메시지를 개선하고 손상된 테이블을 트렁케이트할 수 있게 합니다. (버그 #26710839)

InnoDB: 테이블을 재구성하는 온라인 DDL 작업에서 마지막 삽입 로그 레코드가 두 페이지로 나뉘었을 때 어설션이 발생했습니다. (버그 #26696448, 버그 #87532)

InnoDB: 아직 저장되지 않은 오프 페이지 대형 객체 값에 의존하는 가상 열 값을 생성하려고 시도할 때 어설션이 발생했습니다. (버그 #26625652)

InnoDB: R-트리 검색이 삭제 표시된 레코드를 계산하여 클러스터 인덱스에 있는 레코드 수보다 더 많은 레코드를 찾았습니다. 그 결과, 유효한 R-트리 인덱스가 손상된 것으로 표시되었습니다. (버그 #26381207)

InnoDB: 스키마를 변경하는 RENAME TABLE 작업이 이전에 제거된 전체 텍스트 검색 인덱스에 남아 있던 보조 테이블을 이름 변경하지 못하여, 이전 스키마를 삭제하려고 할 때 어설션 실패가 발생했습니다. (버그 #26334149)

InnoDB: 한 스레드가 외부 페이지에 데이터를 기록하는 동안 다른 스레드가 동일한 데이터를 포함하는 레코드를 읽으려고 하면 어설션이 발생했습니다. (버그 #26300119)
참조: 이 문제는 버그 #23481444의 회귀입니다.

InnoDB: 외부에 저장된 열에 대한 열 접두사가 온라인 로그에서 사용할 수 있는 메모리 양을 초과했습니다. (버그 #25928471)

InnoDB: 체크포인트 중 리두 로그에 동적 메타데이터 변경을 기록하는 작업을 보호하기 위해 도입된 문제가 있는 잠금이 제거되었습니다. 대신 뮤텍스가 사용되며, 동적 메타데이터 변경을 보호하기 위해 체크포인트 LSN이 조정되었습니다. (버그 #25834374)

InnoDB: 자동 증가 열에 대한 인덱스를 검색할 때 열 오프셋을 사용할 때 InnoDB가 가상 열을 고려하지 않았습니다. (버그 #25076416)

InnoDB: 잘못된 디버그 조건으로 인해 버퍼 풀 청크 할당 실패가 발생했고, 청크를 할당하지 못한 상태에서 정리 스레드가 청크에 접근하려고 할 때 어설션 실패가 발생했습니다. (버그 #23593654)
참조: 이 문제는 버그 #21348684의 회귀입니다.

InnoDB: 티켓 획득 교착 상태로 인해 스레드가 InnoDB 스토리지 엔진에 진입하지 못했습니다. (버그 #23476050)

파티셔닝: ALTER TABLE EXCHANGE PARTITION 실행 중 저장 엔진에서 반환된 오류가 서버에서 제대로 처리되지 않았습니다. (버그 #27320682)

복제: 롤백된 빈 XA 트랜잭션은 바이너리 로그에 기록되거나 gtid_executed 시스템 변수의 트랜잭션 세트에 추가되지 않아야 합니다. 그러나 XA COMMIT ... ONE PHASE로 끝나는 빈 XA 트랜잭션 이후 롤백된 빈 XA 트랜잭션이 잘못되어 XA ROLLBACK 문으로 바이너리 로그에 추가되었으며, gtid_executed 시스템 변수에도 추가되었습니다. 이 문제가 이제 수정되었습니다. (버그 #27435974)

복제: 시스템 변수 gtid_next가 AUTOMATIC으로 설정된 경우, 바이너리 로그에 기록되지 않은 롤백된 빈 XA 트랜잭션이 gtid_executed 시스템 변수의 트랜잭션 세트에 잘못 추가되어 불일치가 발생했습니다. 이제 롤백된 빈 XA 트랜잭션은 더 이상 gtid_executed에 기록되지 않습니다. (버그 #27407670)

복제: 퍼포먼스 스키마 테이블 replication_group_member_statsLAST_CONFLICT_FREE_TRANSACTION 값이 그룹 멤버 간에 올바르게 동기화되지 않았습니다. (버그 #27317431)

복제: 그룹에 가입 중인 멤버의 요청이 거부될 가능성이 있습니다. 거부가 재시도로 이어지는 경우(예: 연락한 시드 멤버가 그룹에 없는 경우), 재시도 주기가 무한정 계속될 가능성이 있었습니다. (버그 #27294009)

복제: 바이너리 로그의 기본 만료 기간이 이제 더 이상 사용되지 않는 expire_logs_days 시스템 변수 대신, binlog_expire_logs_seconds 시스템 변수에 대해 기본값으로 설정됩니다. 이제 binlog_expire_logs_seconds의 기본값은 2592000(30일 * 24시간 * 60분 * 60초)이고, expire_logs_days는 기본값이 0으로 설정됩니다.
MySQL 8.0.3 및 8.0.4에서는 binlog_expire_logs_secondsexpire_logs_days의 효과가 누적되었습니다. MySQL 8.0.11부터는 더 이상 누적되지 않으며, 새로운 동작은 다음과 같습니다:

  • 두 변수가 모두 0이 아닌 값을 가지면, 바이너리 로그 만료 기간을 결정할 때 binlog_expire_logs_seconds의 값만 사용되고, expire_logs_days의 값은 무시됩니다.
  • 하나의 변수에만 0이 아닌 값이 지정되면 해당 값이 바이너리 로그 만료 기간을 결정하며, 다른 변수의 기본값은 적용되지 않습니다.
  • 두 변수에 값을 지정하지 않으면, binlog_expire_logs_seconds의 기본값인 30일이 바이너리 로그 만료 기간으로 사용됩니다.

두 변수를 설정할 때 오류 메시지가 발생하며, 시작 시 두 변수에 0이 아닌 값이 지정되면 경고 메시지가 표시됩니다. 또한 expire_logs_days를 설정하면 사용 중단 경고가 발생합니다.
바이너리 로그의 자동 정리를 비활성화하려면, binlog_expire_logs_seconds에 0을 명시적으로 지정하고, expire_logs_days는 지정하지 마십시오. 이전 버전과의 호환성을 위해, expire_logs_days에 0을 명시적으로 지정하고 binlog_expire_logs_seconds를 지정하지 않은 경우에도 자동 정리는 비활성화됩니다. 이제 자동 정리를 비활성화하기 위해 두 변수를 모두 0으로 설정할 필요가 없습니다. (버그 #27252658)

복제: DDL 문인 CREATE DATABASE, ALTER DATABASE, 및 DROP DATABASE는 이제 멀티스레드 슬레이브에서 다른 문과 병렬로 실행할 수 없습니다. 이러한 문은 스키마에 대한 독점 메타데이터 잠금을 필요로 하며, 복제 슬레이브에서 slave_preserve_commit_order=1이 설정된 경우 이론적으로 교착 상태가 발생할 가능성이 있습니다. (버그 #27165446)

복제: 바이너리 로그가 비활성화된 복제 슬레이브에서 빈 DDL 문(예: 복제 필터로 인해)이 어설션을 발생시켰습니다. 바이너리 로그가 활성화된 경우, BEGINCOMMIT 문이 트랜잭션을 생성하기 위해 바이너리 로그에 기록되었지만, 바이너리 로그가 비활성화된 경우 이러한 문이 없어서 어설션이 발생했습니다. 이제 MySQL 서버는 DDL 트랜잭션이 비어 있고 시작되지 않은 경우를 확인하여 어설션을 발생시키지 않고 처리합니다. (버그 #27164661)

복제: 새로운 시스템 변수 rpl_read_size가 추가되어 바이너리 로그 파일 및 릴레이 로그 파일에서 읽는 최소 데이터 크기를 바이트 단위로 설정할 수 있습니다. 기본 읽기 크기는 8KB입니다. 이러한 파일에 대한 디스크 I/O 활동이 데이터베이스 성능을 저하시킬 경우, 읽기 크기를 늘리면 파일이 운영 체제에 의해 캐시되지 않는 경우 파일 읽기 및 I/O 지연을 줄일 수 있습니다.
이 값의 크기만큼 버퍼가 바이너리 로그 및 릴레이 로그 파일을 읽는 각 스레드(마스터의 덤프 스레드와 슬레이브의 코디네이터 스레드를 포함)에 대해 할당된다는 점을 유의해야 합니다. 따라서 큰 값을 설정하면 서버의 메모리 소비에 영향을 미칠 수 있습니다.
패치를 제공해주신 Facebook 팀에게 감사드립니다. (버그 #27147095)

복제: GTID가 활성화된 서버에서 RESET MASTER를 사용했을 때 트랜잭션이 플러시되었지만 아직 커밋되지 않은 경우 서버 GTID가 잘못된 상태로 남아 있었습니다. 이 시점에서 트랜잭션의 GTID는 소유된 GTID 세트에 추가되었지만 아직 실행된 GTID 세트에 추가되지 않았습니다. 트랜잭션의 내용이 RESET MASTER 문에 의해 지워졌을 때, GTID는 바이너리 로그에서 제거되었지만 이미 소유된 상태여서 다시 사용할 수 없었습니다. 이로 인해 GTID 시퀀스에 공백이 생겼습니다.
이번 수정으로 RESET MASTER는 전역 읽기 잠금을 획득하여 작업 중 커밋 단계에 있는 트랜잭션이 없도록 하고, 작업 중에 새로운 트랜잭션이 커밋 단계로 진입하지 않도록 합니다. 진행 중인 커밋이 있으면, RESET MASTER는 완료될 때까지 대기합니다. 초기화가 완료되면 전역 읽기 잠금이 해제되고 스토리지 엔진에 성공적인 초기화가 알림됩니다. 스레드에 대해 이미 FLUSH TABLES WITH READ LOCK이 실행된 경우, RESET MASTER는 잠금을 다시 시도하지 않습니다. (버그 #27041759)

복제: SET @@SESSION.GTID_NEXT 문을 사용하여 안전하지 않거나 빈 XA 트랜잭션에 GTID를 설정하려는 시도가 올바르게 처리되지 않았습니다. 서버에서 gtid_modeOFF 또는 OFF_PERMISSIVE로 설정되고, enforce_gtid_consistencyOFF로 설정된 경우, 안전하지 않은 XA 트랜잭션(임시 테이블 생성 또는 삭제)에 대해 GTID를 설정하면 서버의 GTID 위반 카운터에서 불일치가 발생하고 어설션이 발생했습니다. 또한 빈 XA 트랜잭션에 대해 GTID를 설정하면 바이너리 로그에 잘못된 이벤트 순서가 기록되었습니다. 이제 이러한 상황이 올바르게 처리됩니다. (버그 #27041402, 버그 #88272)

복제: 바이너리 로그를 회전하는 동안 서버가 중지될 때 발생하는 오류 메시지가 문제의 실제 원인을 정확하게 설명하지 않았습니다. 오류 메시지가 개선되어 서버 중지의 실제 원인이 메시지의 일부로 포함됩니다. 마지막 바이너리 로그에서 mysql.gtid_executed 테이블로 GTID 세트를 저장하는 동안 메모리가 부족한 경우를 위한 새로운 오류 ER_OOM_SAVE_GTIDS도 추가되었습니다. (버그 #27040070, 버그 #88262)

복제: CREATE USER IF EXISTS(또는 IF NOT EXISTS) 및 ALTER USER IF EXISTS(또는 IF NOT EXISTS) 문이 오류가 발생했을 때도 바이너리 로그에 기록되었습니다. 이제 MySQL 서버는 이러한 쿼리가 실패하는 원인(예: 잘못된 플러그인이 지정됨)을 확인하고, 그 상황에서는 문을 바이너리 로그에 기록하지 않습니다. 이러한 문이 성공하지만 조건이 충족되지 않아 마스터에서 아무런 효과가 없더라도, 복제 슬레이브에서 조건이 충족될 수 있기 때문에 바이너리 로그에 문이 기록된다는 점에 유의하십시오(버그 #25813089, 버그 #85733). (버그 #26680035)
참조: 관련 사항으로는 버그 #25813089, 버그 #85733이 있습니다.

복제: MySQL 8.0에서 원자 DDL(atomic DDL) 지원이 도입된 이후, 원자 DDL을 지원하는 복제 슬레이브가 원자 DDL을 지원하지 않는 이전 MySQL 버전의 복제 마스터와 동기화되지 않을 수 있었습니다. DDL 문이 부분적으로만 적용될 수 있는 경우, MySQL 8.0을 사용하는 슬레이브는 전체 DDL 문을 롤백하지만, 이전 버전을 사용하는 마스터는 DDL 문의 유효한 부분을 커밋할 수 있습니다. 원자 DDL 문이 마스터와 슬레이브에서 모두 성공적으로 커밋되지 않은 경우, 오류 메시지가 로그에 기록되며, 진행하기 전에 마스터와 슬레이브의 상태가 동기화되지 않았는지 확인해야 합니다. (버그 #26133488)

복제: GTID가 복제 마스터와 슬레이브에서 활성화되고, 슬레이브가 MASTER_AUTO_POSITION=1 옵션을 설정하여 마스터에 연결될 때, 마스터는 슬레이브가 아직 수신하지 않았거나 커밋하지 않은 모든 트랜잭션을 전송해야 합니다. 마스터가 전송해야 할 트랜잭션이 마스터의 바이너리 로그에서 이미 제거된 경우, 마스터는 슬레이브에 ER_MASTER_HAS_PURGED_REQUIRED_GTIDS(1789) 오류를 전송하며 복제가 시작되지 않습니다.
ER_MASTER_HAS_PURGED_REQUIRED_GTIDS 오류 메시지가 수정되어 이 상황에서 적절한 조치에 대한 조언을 제공합니다. 슬레이브는 다른 소스로부터 누락된 트랜잭션을 복제하거나, 최근 백업에서 새 슬레이브를 만들어 교체해야 합니다. 메시지는 또한 이 상황을 방지하기 위해 마스터의 바이너리 로그 만료 기간을 수정할 수 있음을 조언합니다. 또한, 마스터는 삭제된 트랜잭션의 GTID를 식별하고 경고 메시지 ER_FOUND_MISSING_GTIDS(11809)에 포함시켜, 수동으로 GTID를 계산할 필요가 없도록 했습니다. (버그 #26004541, 버그 #29769293)

복제: BLOB 데이터 유형을 포함하는 가상 생성 열에 대한 업데이트의 경우, 일부 스토리지 엔진에서는 복제 시 새로운 BLOB 값뿐만 아니라 이전 BLOB 값도 필요합니다. 이 수정은 BLOB 데이터 유형을 기반으로 하는 JSON 및 GEOMETRY 데이터 유형에도 동일한 동작을 확장하여, 이전 값이 저장되지 않았을 때 발생하는 문제를 해결합니다. (버그 #25873029)

복제: MySQL 8.0.0에서 발생한 동작 변경으로 인해, 생성된 열의 식별이 바이너리 로깅을 위한 쓰기 세트 계산 후에 수행되었습니다. 이로 인해 NDB 클러스터 복제에서 문제가 발생했는데, 해당 스토리지 엔진은 불필요한 경우 생성된 열을 로그 이벤트에서 생략하고, 복제 슬레이브의 적용 스레드는 생성된 열에 대해 NULL 값을 설정하게 되었습니다. 이제 생성된 열의 식별이 쓰기 세트 계산 이전으로 이동되어 이 문제가 발생하지 않도록 수정되었습니다. (버그 #25827408)

복제: 멀티스레드 복제 슬레이브( slave_parallel_workers가 0보다 큰 경우)에서 SHOW SLAVE STATUSSeconds_Behind_Master 필드가 슬레이브의 마스터에 대한 지연을 올바르게 보고하지 않았습니다. 이제 이 값이 정확하게 보고됩니다. 패치에 기여한 Robert Golebiowski에게 감사드립니다. (버그 #25407335, 버그 #84415)

복제: SET @@GLOBAL.GTID_PURGED 문에서 GTID 세트와 함께 플러스 기호(+)를 사용하여 지정된 GTID 세트가 gtid_executed와 교차하지 않음을 나타낼 수 있습니다. 플러스 기호는 GTID_SUBSET()GTID_SUBTRACT() 함수에 대해 허용되었으나, 이는 의미가 없었습니다. 이제 이러한 함수에서 플러스 기호를 지정할 수 없으며, SET @@GLOBAL.GTID_PURGED 작업과 관련된 오류 메시지가 개선되었습니다. (버그 #24675979)

복제: --read-from-remote-server--hexdump 옵션을 사용하여 호출되었을 때, mysqlbinlog가 자동 증가 값을 생성하거나, 사용자 정의 변수를 참조하거나, RAND()를 호출한 SQL 문 뒤에 바이너리 로그 내용을 헥스 덤프로 출력하지 못했습니다. 이러한 이벤트 유형 뒤에는 정보 행 쿼리 로그 이벤트가 있으며, mysqlbinlog는 후속 행 쿼리 로그 이벤트를 수신할 때 캐시된 원본 이벤트를 출력하도록 되어 있습니다. 후속 이벤트가 수신될 때 원본 이벤트가 저장된 메모리에 대한 포인터가 무효화되어 헥스 덤프를 생성할 수 없었습니다. 이 문제가 이제 수정되었습니다. (버그 #24674276)

복제: 잘못되었거나 손상된 바이너리 로그 항목을 처리하는 방법을 개선하기 위해 바이너리 로그 디코딩 절차에 여러 가지 변경이 이루어졌습니다. (버그 #24365972)

복제: XA 트랜잭션에 대한 바이너리 로깅 지원 도입 이후WL#6860, 해당 기능을 사용하는 마스터에서 그렇지 않은 슬레이브로 복제할 때 디버그 빌드에서 어설션이 발생할 수 있었습니다. 슬레이브에서 MASTER_AUTO_POSITION=1이 설정된 경우, 디버그 빌드에서 어설션이 제거되어 디버그 빌드가 비-디버그 빌드와 동일하게 동작하고, MASTER_AUTO_POSITION=1이 설정되어 있는지 여부에 관계없이 지원되지 않는 이벤트 유형의 복제를 시도할 수 있습니다. (버그 #20677683)

복제: group_replication_ip_whitelist를 사용할 때, 그룹의 모든 멤버가 서로 내부 그룹 통신 연결을 설정하지 못하더라도 그룹이 작동하도록 구성할 수 있었습니다. 이제 IP가 허용 목록에 있거나 XCom 구성의 현재 멤버에 속하는 경우에만 들어오는 연결이 허용됩니다. 이를 통해 그룹 통신을 위한 내부 네트워크가 항상 생성될 수 있습니다. (버그 #87834, 버그 #26846549, 버그 #27406775)

그룹 복제: MySQL이 --plugin-load='group_replication.so'로 시작되었지만 그룹 복제가 시작되지 않았을 때 비동기 슬레이브 채널을 시작하면 서버가 응답하지 않는 문제가 발생했습니다. (버그 #27584141)

그룹 복제: 특정 필수 변수가 영구 저장(persist)되었거나, 영구 저장된 변수가 올바른 타임스탬프 순서로 설정되지 않았을 때 그룹 복제가 시작되지 못했습니다. (버그 #27545544, 버그 #27522405)

그룹 복제: 그룹 복제 파일이 rapid 디렉터리에서 plugin 디렉터리로 이동되었습니다. (버그 #27413789)

그룹 복제: 충돌 감지는 기본 키 등가(PKE)의 일부로 스키마 및 테이블 이름을 사용하여 충돌하는 트랜잭션을 감지하고 차단합니다. lower_case_table_names의 값은 스키마 및 테이블 이름이 저장되고 외부화되는 방식에 영향을 미치며, 값에 따라 T1이라는 테이블이 t1로 저장될 수 있습니다. 그룹 내에서 이러한 차이는 불일치를 일으킬 수 있습니다. 이제 모든 멤버가 동일한 lower_case_table_names 값을 가져야 합니다. (버그 #27401817)

그룹 복제: macOS에서 IP 주소 또는 호스트 이름을 사용하여 그룹 복제 관련 구성을 할 경우 실패했습니다. (버그 #27376511, 버그 #89123, 버그 #27604471)

그룹 복제: 온라인 보조 멤버에서 그룹 복제 필수 설정을 잘못 변경하면 예기치 않은 중단이 발생할 수 있었습니다. (버그 #27317478, 버그 #27157202)

그룹 복제: START GROUP_REPLICATION 명령을 실행한 후, 그룹이 온라인 상태가 될 때까지 gtid_mode 시스템 변수를 수정할 수 없도록 잠깁니다. 이 기간 동안 gtid_mode를 수정하려는 시도는 차단됩니다. 그룹 복제를 시작하는 과정에서 서버는 super_read_only=off를 설정해야 하며, 이는 SET GTID_MODE에 의해 획득된 잠금에 종속됩니다. 이로 인해 그룹 복제가 중단될 수 있었고, 서버에 연결하여 문제를 해결할 방법이 없었습니다. 이 문제를 방지하기 위해, SET GTID_MODE에 필요한 잠금을 획득할 수 없는 경우 작업이 중단되도록 수정되었습니다. (버그 #27312241)

그룹 복제: 그룹이 시작되지 못하는 경우(예: 시드 멤버에 연결할 수 없음) 그룹은 1분간 시작 프로세스를 재시도합니다. 이 기간 동안 그룹 복제 플러그인 옵션을 수정하려고 하면 예기치 않은 중단이 발생할 수 있었습니다. 이제 플러그인이 시작 또는 중지되는 동안 그룹 복제 플러그인 옵션을 수정하려고 하면 오류가 발생합니다. (버그 #27275312)

그룹 복제: 부팅 시 플러그인을 자동으로 시작하도록 구성된 서버에서 그룹 복제 플러그인을 제거하려고 하면 교착 상태가 발생할 수 있었습니다. 이제 제거 프로세스는 플러그인이 시작 중인지 확인하고, 시작 중이면 제거가 실패하도록 수정되었습니다. (버그 #27179336)

그룹 복제: 그룹 멤버의 충돌 감지를 위해 트랜잭션 쓰기 세트 추출이 사용됩니다. 이 과정에서 성능 분석 중 성능 저하가 발견되었으며, 쓰기 세트 추출 및 메모리 복사 작업에 대한 메모리 할당 최적화를 통해 이를 처리했습니다. 또한, 현재 테이블에 실제로 외래 키가 있는 경우에만 외래 키 쓰기 세트를 수집하도록 수정되었습니다. (버그 #27016053)

그룹 복제: 멀티-프라이머리 그룹에서 멤버가 비동기 복제 채널과 함께 구성된 경우, 비동기 채널이 그룹 복제가 시작되기 전에 시작될 가능성이 있었습니다. 이로 인해 비동기 채널이 그룹 멤버가 온라인 상태가 되기 전에 트랜잭션을 처리하게 되어, 멤버가 그룹에 참여할 때 문제가 발생할 수 있었습니다. 이 문제를 해결하기 위해, 그룹 멤버의 비동기 채널은 멤버가 온라인 상태가 될 때까지 시작되지 않도록 수정되었습니다. (버그 #26648393)

Linux: Alpine Linux 빌드가 이제 AIO 지원을 활용합니다. (버그 #27327874)

macOS: macOS에서 mysql_config –libs 명령어가 SSL 라이브러리를 나열하지 않았습니다. (버그 #27232576)

Microsoft Windows: Windows에서 RESTART 문은 mysqld가 포크하여 하나의 프로세스가 모니터로, 다른 프로세스가 서버로 작동하도록 구현됩니다. 이로 인해 디버깅을 위한 서버 프로세스에 연결하는 것이 더 어려워집니다. 이를 완화하기 위해, 이제 --gdb 옵션으로 서버를 시작하면 포크가 억제됩니다. 부수적인 효과로, 이 옵션으로 시작된 서버에서는 RESTART 문이 단순히 종료되고 다시 시작되지 않습니다. (버그 #27273229)

JSON: JSON_QUOTE() 함수가 인용된 문자열을 입력 문자열을 보관하는 동일한 버퍼에 기록하는 경우가 있었으며, 이는 잘못된 결과를 초래할 수 있었습니다. 이제 동일한 버퍼에 읽기와 쓰기를 시도하지 않도록 확인합니다. (버그 #27312444)

JSON: 이제 JSON_SEARCH()는 캐시된 Json_path 객체의 수정 작업을 수행하지 않으며, 대신 경로를 나타내는 String 객체에 필요한 업데이트를 수행합니다. 이를 통해 경로의 Json_pathString 표현 간에 필요한 왕복 횟수가 줄어들어 실행 속도가 빨라집니다. 또한, JSON_SEARCH() 함수의 one_or_allescape_char 인수는 불필요하게 캐시되었는데, 이제 이 인수는 캐시되지 않아 함수 실행 시간이 개선됩니다. (버그 #87383, 버그 #26614455)
참조: 관련 문제로는 버그 #21450084, 버그 #77785, 버그 #21472872가 있습니다.

데이터 사전 버전 정보에 기반한 검사를 구현하여 나중에 MySQL 릴리스에서 생성된 데이터 디렉터리로 MySQL 8.0 서버를 시작하지 못하도록 했습니다. 이 검사는 현재 지원되지 않는 제자리 다운그레이드를 방지하기 위해 필요했습니다. (버그 #27708249)

보호된 데이터 사전 테이블은 이제 서버 초기화 파일에 배치된 문에 의해 접근할 수 없습니다. (버그 #27674311, 버그 #90010)

데이터 사전 및 INFORMATION_SCHEMA 버전 번호가 새 MySQL 서버 버전 번호와 동기화되었습니다. (버그 #27674285)

서버가 BLOB 열과 접두사 인덱스를 사용하는 특정 LIKE 쿼리를 올바르게 처리하지 못했습니다. (버그 #27660560)

-DWITH_PROTOBUF=SYSTEM으로 구성된 빌드에서 Protobuf 3.5가 설치된 시스템에서 빌드가 실패했습니다. (버그 #27638713, 버그 #89915)

mysqld-auto.cnf에 저장된 지속 변수를 사용하는 타임스탬프의 마이크로초 부분이 항상 000000으로 저장되었습니다. (버그 #27629719)

Debian 패키지는 이제 MeCab 플러그인 사전 파일에 대한 종속성을 처리합니다. Fedora 패키지는 이제 utf-8 패키지뿐만 아니라 두 개의 MeCab 패키지에 대한 종속성을 처리합니다. (버그 #27612730, 버그 #27613539)

systemd를 사용하는 플랫폼에서 mysqld를 일반 프로세스(Type=notify)로 실행하고 소켓 파일을 사용하여 통신하는 MySQL 8.0.11의 변경 사항이 SLES 12.2 이전의 SLES에서는 작동하지 않았습니다. (버그 #27604999)

INFORMATION_SCHEMA.STATISTICS 테이블의 NON_UNIQUE 열이 MySQL 8.0 이전에는 BIGINT 유형이었으나, 데이터 사전 도입으로 MySQL 8.0에서 VARCHAR 유형이 되었습니다. 이제 NON_UNIQUE 열은 다시 정수 유형을 가지며, BIGINT처럼 크지 않아도 되므로 INT로 변경되었습니다. (버그 #27593348, 버그 #89793)

일부 입력에서 ST_Crosses()가 서버 종료를 초래할 수 있었습니다. (버그 #27576700)

일부 오류 메시지가 올바른 오류 ID가 아닌 0으로 오류 로그에 기록되었습니다. (버그 #27575608)

mysql_upgradeMYSQL_SERVER_PUBLIC_KEY를 올바르게 설정하지 않아 키 파일을 읽지 못했습니다. (버그 #27568278)

autocommit이 비활성화된 경우, MySQL 5.7에서 8.0으로 업그레이드하는 동안 mysql_upgrade가 오류를 발생시켰습니다. (버그 #27549249)

디버그 빌드에서 Performance Schema의 threads 테이블의 PROCESSLIST_STATE 열에서 매우 긴 스테이지 이름을 표시하면 어설션이 발생할 수 있었습니다. (버그 #27545688)

gtid_purged 처리에 메모리 누수가 있었습니다. (버그 #27537968, 버그 #89645)

SET PERSISToptimizer_trace_offset을 지속적으로 설정하면 서버 재시작 후 변수 값이 잘못되었습니다. (버그 #27536421)

validate_password 컴포넌트에 메모리 누수가 발생할 수 있었습니다. (버그 #27521770, 버그 #89597)

sql/handler.h 파일의 오타가 수정되었습니다. 패치에 기여한 Su Tristan에게 감사드립니다. (버그 #27516280, 버그 #89594)

Performance Schema variables_info 테이블이 !include 또는 !includedir 지시문으로 지정된 옵션 파일 내에서 설정된 변수에 대해 잘못된 VARIABLE_SOURCEVARIABLE_PATH 값을 표시했습니다. (버그 #27514223)
참조: 이 문제는 버그 #25563891의 회귀입니다.

MySQL 5.7에서 MySQL 8.0으로 업그레이드한 후, --default-time-zone"+00:00"과 같은 특정 시간 값으로 설정한 상태에서 MySQL 5.7 데이터 디렉터리로 서버를 처음 시작하려고 하면 서버가 종료되었습니다. (버그 #27512609, 버그 #89584)

캐릭터셋 내부 번호를 조회하는 작업이 스레드 안전하지 않아 메모리 누수를 초래할 수 있었습니다. (버그 #27507950)

-DWITH_LIBEVENT=system-DWITH_ICU=system CMake 옵션을 함께 사용하면 구성에 실패했습니다. (버그 #27505535, 버그 #89398)

일부 메시지가 클라이언트 오류 ID를 사용하여 서버 오류 로그에 기록되었습니다. (버그 #27503787, 버그 #89562)

키 마이그레이션 모드에서 실행할 때 서버가 성공적인 작업에 대해 오류를 보고할 수 있었습니다. (버그 #27493997)

Fedora 27에서 MariaDB에서 MySQL 커뮤니티 에디션으로의 업그레이드가 실패했습니다. (버그 #27484835)

ALTER TABLE 명령이 Waiting for tablespace metadata lock 상태에서 중단될 수 있었습니다. (버그 #27472087, 버그 #89487)

Performance Schema status_by_thread 또는 variables_by_thread 테이블을 선택하는 작업이 스레드 안전하지 않아 잘못된 결과를 초래할 수 있었습니다. (버그 #27471510)

INSERT ... ON DUPLICATE KEY UPDATE가 소스 테이블에서 행이 생성되지 않은 경우 부적절하게 처리될 수 있었습니다. (버그 #27460607)

SET PERSIST_ONLY--skip-grant-tables를 무시하고 시스템 변수를 설정하는 데 필요한 동적 권한을 계속 검사했습니다. (버그 #27455943)

RPM 패키지 및 Docker RPM 패키지의 my.cnf 파일에는 이제 이전 기본 인증 플러그인으로 되돌리는 방법(호환성을 위해 caching_sha2_password에서 mysql_native_password로 변경)에 대한 정보가 포함됩니다. (버그 #27454015, 버그 #27675380)

문자열 비교에서 >를 사용할 때 하나의 피연산자만 utf32로 처리되었습니다. (버그 #27452148)

InnoDB 초기화 중 서버 종료로 인해 AddressSanitizer(ASan)가 메모리 누수를 보고했습니다. 패치에는 구문 분석할 수 없는 데이터가 포함된 경우 데이터 사전 속성 테이블을 적절하게 처리하는 방법도 포함되었습니다. (버그 #27447981, 버그 #89433)

-DWITH_SSL=system를 사용할 때, CMake가 시스템 OpenSSL 라이브러리 및 헤더 파일을 찾을 수 없으면 혼란스러운 메시지가 출력되었습니다. 이제 오류가 발생하면 즉시 종료됩니다. (버그 #27447874)

-DWITH_INNODB_EXTRA_DEBUG=ON CMake 옵션으로 구성하면 링커 오류가 발생했습니다. (버그 #27444255, 버그 #89412)

-DWITH_ZLIB=system으로 구성할 때 링커 오류가 발생했습니다. (버그 #27435371, 버그 #89373)

UNION ALL 쿼리에 대한 결과 집합의 메타데이터가 DATE 대신 NEWDATE로 표시될 수 있었습니다. (버그 #27422376)

Undefined Behavior Sanitizer가 활성화된 빌드에서 -922337203685477580을 부정하면 서버 종료가 발생할 수 있었습니다. (버그 #27419181)

프로토콜 압축이 활성화된 상태에서 불필요한 어설션이 발생할 수 있었습니다. (버그 #27418207, 버그 #89324)
참조: 이 문제는 버그 #17922198의 회귀입니다.

데이터 사전 캐시를 채우기 위해 데이터 사전에서 테이블스페이스 객체를 가져오는 작업의 성능이 향상되었습니다. (버그 #27402243)

서버가 --skip-grant-tables로 시작되었을 때 caching_sha2_password 플러그인으로 인증하는 클라이언트가 연결할 수 없었습니다. (버그 #27400095, 버그 #89267)

Linux RPM 및 Debian 패키지에는 이제 MySQL 테스트 스위트를 실행하는 데 필요한 Perl JSON 모듈에 대한 종속성 정보가 포함됩니다. Linux RPM 패키지에는 이제 MySQL 테스트 스위트를 실행하는 데 필요한 Perl Digest 모듈에 대한 종속성 정보도 포함됩니다. (버그 #27392800, 버그 #89250, 버그 #27392808, 버그 #89244)

새로운 시스템 변수인 default_collation_for_utf8mb4는 복제에서 내부적으로 사용됩니다. 이 시스템 변수는 utf8mb4 캐릭터셋에 대한 기본 정렬(collation)로 설정되며, 해당 값은 마스터에서 슬레이브로 복제되어 서로 다른 기본 utf8mb4 정렬을 사용하는 마스터에서 온 데이터를 슬레이브가 정확히 처리할 수 있게 합니다. 이 변수는 주로 MySQL 5.7 또는 그 이전 버전의 마스터 서버에서 MySQL 8.0 슬레이브 서버로의 복제를 지원하거나, MySQL 5.7 프라이머리 노드와 하나 이상의 MySQL 8.0 세컨더리 노드로 구성된 그룹 복제를 지원하기 위해 도입되었습니다. MySQL 5.7의 utf8mb4 기본 정렬은 utf8mb4_general_ci이지만, MySQL 8.0에서는 utf8mb4_0900_ai_ci입니다. 이 변수는 MySQL 8.0 이전 버전에서는 존재하지 않기 때문에, 슬레이브가 해당 변수의 값을 받지 못하면 슬레이브는 마스터가 이전 버전임을 가정하고 값을 이전 기본 정렬인 utf8mb4_general_ci로 설정합니다.
utf8mb4 기본 정렬은 다음의 명령문에서 사용됩니다:

(버그 #27389878, 버그 #27081073)

열 이름 옵션이 있는 DESCRIBE가 열 이름을 무시했습니다. (버그 #27387773, 버그 #89224)

키 마이그레이션 모드에서 서버가 잘못된 옵션을 무시했습니다. (버그 #27387331)

익명 사용자에 대한 SHOW GRANTS가 서버 종료를 유발할 수 있었습니다. (버그 #27375069)

매우 긴 경로 이름에 대한 경로 이름 정규화가 실패할 수 있었습니다. (버그 #27368298)

CMakerpcgen을 사용할 수 있는지 확인하지 않고 가정했습니다. (버그 #27368078)

클라이언트 인증 프로세스가 해제된 후에도 메모리를 사용할 수 있었습니다. (버그 #27366143)

-DWITH_ZLIB=system이 다른 CMake 기능 테스트에 실패할 수 있었습니다. (버그 #27356658, 버그 #89135)

일부 시스템에서 mysqld –initialize를 사용한 데이터 디렉터리 초기화가 매우 느렸습니다. (버그 #27349579, 버그 #89122)

RPM 소스 패키지를 사용한 빌드가 Boost를 다운로드해야 하는 경우 이제 보안 연결을 사용합니다. (버그 #27343289, 버그 #89104)

ULONGLONG 시간 값을 변환하는 내부 check_datetime_range 함수가 Windows에서 어설션을 발생시켰습니다. (버그 #27340709)

caching_sha2_password 인증 플러그인에 대해 너무 많은 잠금이 수행되었습니다(연결당 하나의 잠금/잠금 해제). 이제 플러그인 설치/제거당 하나의 잠금/잠금 해제로 개선되었습니다. (버그 #27335346)

CREATE TABLE ... LIKE 작업에서 테이블 파티션에 대해 암묵적으로 'innodb_system' 테이블스페이스 이름이 할당될 때 어설션이 발생했습니다. (버그 #27331588)

SET PERSIST_ONLY가 큰 값의 변수를 잘못 저장할 수 있었습니다. (버그 #27322254)

audit_log 플러그인이 바이너리 로깅이 비활성화된 상태에서도 명령문을 바이너리 로그에 기록할 수 있었습니다. (버그 #27315321)

GREATEST() 또는 LEAST()를 사용하는 특정 쿼리가 힙-사용 후 해제 오류를 발생시켰습니다. (버그 #27312703)

mysql.routines 데이터 사전 테이블에 external_language 열이 추가되어 다양한 언어로 작성된 저장 루틴을 지원합니다. 이 열에 저장된 데이터는 INFORMATION_SCHEMA.ROUTINES 테이블의 EXTERNAL_LANGUAGES 열을 통해 액세스할 수 있습니다. (버그 #27309116, 버그 #89038)

서버 초기화 시 설정된 lower_case_table_names 설정과 다른 설정으로 서버를 시작하는 것이 금지되었습니다. 이 제한은 데이터 사전 테이블 필드에 사용된 정렬이 서버 초기화 시 정의된 설정에 따라 결정되며, 다른 설정으로 서버를 재시작하면 식별자의 정렬 및 비교 방법에 대한 불일치가 발생할 수 있기 때문에 필요합니다. (버그 #27309094, 버그 #89035)

auth_sock 인증 플러그인을 사용하는 계정에 대해 서버가 이전 MySQL 버전의 클라이언트로부터의 연결을 수락할 수 없었습니다. (버그 #27306178)

audit_log 플러그인의 메모리 누수가 수정되었습니다. (버그 #27302151)

INFORMATION_SCHEMA.FILES 테이블이 이제 스토리지 엔진에서 LOGFILE_GROUP_NAME, LOGFILE_GROUP_NUMBER, ROW_FORMAT, VERSION 열에 필요한 정보를 가져옵니다. (버그 #27292586)

로드 가능한 함수를 삭제할 때 항상 Performance Schema user_defined_functions 테이블에서 항목이 제거되지 않았습니다. (버그 #27270498)

직렬화된 사전 정보(SDI)는 이제 저장 공간을 줄이기 위해 압축된 JSON 형식으로 생성됩니다. (버그 #27265584)

여러 세션에서 RESET PERSISTSET PERSIST를 동시에 실행하면 서버가 종료될 수 있었습니다. (버그 #27264789)

테이블스페이스 통계 수집 프로세스에서 오류가 발생해도 통계가 캐시될 수 있었습니다. (버그 #27259963)

SET PERSISTmysqld-auto.cnf 파일을 쓸 적절한 디렉터리를 찾지 못할 수 있었습니다. (버그 #27253828)

ALTER TABLE가 데이터가 포함된 테이블에서 생성된 NOT NULL 지오메트리 열을 생성하지 못했습니다. (버그 #27252609)

Performance Schema variables_info 테이블이 my.cnf에서 설정되고 mysqld-auto.cnf에 지속된 변수에 대해 잘못된 VARIABLE_SOURCE 값을 표시했습니다. (버그 #27252077)

플러그인 로딩 및 언로딩 처리 오류로 인해 서버 종료가 발생할 수 있었습니다. (버그 #27247280, 버그 #27297704)

RESTART 문이 Ubuntu 패키지에서 작동하지 않았습니다. (버그 #27245918)

FreeBSD에서 LDAP 인증 플러그인이 빌드되지 않았습니다. (버그 #27238252)

캐시된 값이 윈도우 함수에 의해 NULL로 평가되거나, GROUP BY의 일부로 ROLLUP 작업이 포함되어 NULL로 평가될 때 서버가 쿼리를 제대로 처리하지 못했습니다. (버그 #27233287)

LAST_VALUE()와 같은 윈도우 함수가 모든 경우에 NOT NULL 열이 포함된 테이블에서 제대로 작동하지 않았습니다. (버그 #27230463)

역할 캐시 무효화가 잘못 수행될 수 있었습니다. (버그 #27225806)

서버 시작 시 지속된 변수 처리가 잘못되어 서버 종료가 발생할 수 있었습니다. (버그 #27224682)

MySQL 5.7에서 8.0으로 업그레이드할 때, 객체 정의에 대한 sql_mode 값에 NOT_USED가 포함될 수 있었습니다. (버그 #27219709)

JSON_TABLE()이 기본 데이터베이스가 선택되지 않은 경우 실패했습니다. (버그 #27217897)

여러 잠금이 걸려 있는 InnoDB 테이블에 고유 인덱스를 추가하면 어설션이 발생할 수 있었습니다. (버그 #27216817)

CREATE VIEW 문이 뷰 정의에서 JSON_TABLE()을 사용할 때 데이터베이스가 선택되지 않으면 실패했습니다. (버그 #27189940)

CLIENT_SSL_VERIFY_SERVER_CERT에 대한 Doxygen 문서가 수정되었습니다. 패치에 기여한 Bradley Grainger에게 감사드립니다. (버그 #27189363, 버그 #88686)

Performance Schema 복제 테이블에 대한 쿼리가 특히 실행 계획에서 인덱스를 사용하는 경우 잘못된 결과를 반환할 수 있었습니다. (버그 #27184567)

일부 명령문에 대해 FILE 권한이 제대로 확인되지 않았습니다. (버그 #27160888)

SET PERSIST로 지속된 변수를 시작 시 동일한 순서로 설정할 수 있도록 mysqld-auto.cnf 파일에 설정된 항목이 이제 타임스탬프를 기준으로 정렬됩니다(이제 파일에 타임스탬프가 저장됩니다). (버그 #27157520)

dragnet.log_error_filter_rules 시스템 변수를 매우 긴 값으로 설정하면 서버가 종료될 수 있었습니다. (버그 #27120953)

systemd를 사용하는 플랫폼(참조: Managing MySQL Server with systemd)에서 mysqld 프로세스가 더블 포크된 경우 systemd가 상태를 제대로 추론하지 못할 때가 있었습니다. 이로 인해 mysqld가 상태 1로 종료되었을 때에도 systemd가 재시작을 시도했습니다. 이제 systemd는 mysqld를 일반 프로세스로 실행하도록 설정되었으며(Type=forking 대신 Type=notify), 환경 변수 NOTIFY_SOCKET에 소켓 파일의 이름이 지정된 경우 mysqld가 systemd와의 통신을 위해 연결을 시도하고 상태 변화를 해당 소켓으로 기록합니다. (버그 #27109556, 버그 #88463, 버그 #26538598, 버그 #87210)

ST_IsValid()이 비-WGS 84 타원체에 대한 일부 지리적 다각형에 대해 잘못된 결과를 반환했습니다. (버그 #27074700)

FULLTEXT 키와 FTS_DOC_ID 열을 포함하는 테이블에 대한 다중 삽입 명령문이 서버 오류를 발생시켰습니다. (버그 #27041445, 버그 #88267)
참조: 이 문제는 버그 #22679185의 회귀입니다.

엄격한 SQL 모드에서 유효하지 않은 값이 AUTO_INCREMENT 열에 할당될 때 잘못된 처리가 발생하여 어설션이 발생할 수 있었습니다. (버그 #27041393, 버그 #88273)

스레드 스택 고갈이 오류 대신 어설션을 발생시킬 수 있었습니다. (버그 #27041350, 버그 #88277)

SET PERSIST_ONLY가 지속된 변수에 대한 런타임 검증 함수가 호출되어야 하는지를 올바르게 고려하지 않았습니다. (버그 #27016247)

audit_log 플러그인이 이벤트 실행 중단을 잘못 처리하여 서버 종료를 일으킬 수 있었습니다. (버그 #27008133)

큰 부호 있는 정수의 부정 연산에 대한 경계 조건 일부가 수정되었습니다. (버그 #27004880, 버그 #27008075)

ALTER TABLE 명령이 폐기된 테이블스페이스에 대해 AUTO_INCREMENT 값을 설정하려고 시도했습니다. (버그 #26935001)

MyISAM 테이블에서 대량 삽입 및 테이블 복구 작업 중 복구-정렬 알고리즘을 사용하고 4억 5천만 개 이상의 행이 포함된 경우 인덱스 손상이 발생할 수 있었습니다. (버그 #26929724, 버그 #88003, 버그 #28483283)

Performance Schema가 DIGEST_TEXT 값에 공백을 추가하는 경우가 있었습니다. 이제 더 이상 발생하지 않습니다. (버그 #26908015)

시스템 테이블에서 인덱스를 삭제하면 서버가 종료될 수 있었습니다. (버그 #26881798)

뷰와 동일한 이름을 참조하는 GROUP BY를 포함하는 CREATE TABLE ... SELECT 구문을 사용하는 준비된 명령문이 예기치 않은 동작을 일으켰습니다. (버그 #26881703)

자동 커밋이 비활성화되고 XA 트랜잭션이 PREPARED 상태일 때, XA COMMIT 또는 XA ROLLBACK 명령을 실행하려고 하면 실패했습니다. (버그 #26848877, 버그 #87836)

LDAP 인증 플러그인이 생성한 일부 진단 메시지가 오류가 발생하지 않았음에도 불구하고 오류를 암시하는 경우가 있었습니다. (버그 #26844713)

mysql_upgrademysqlpump 초기화 코드가 재구성되어 어설션 실패를 방지했습니다. (버그 #26802211)

메타데이터 잠금 획득 중 오류를 처리하는 과정에서 발생한 문제로 인해 전체 텍스트 검색에서 어설션이 발생할 수 있었습니다. (버그 #26799898)

32비트 서버에서 keyring_file 플러그인이 생성한 키링 파일이 64비트 서버에서 액세스할 수 없었으며, 그 반대의 경우도 마찬가지였습니다. (버그 #26793060)

Performance Schema metadata_locks 테이블과 events_waits_xxx 테이블에서 열 통계에 대한 메타데이터 잠금이 올바르게 표시되지 않았습니다. (버그 #26772858, 버그 #87708)

my_snprintf 플러그인 서비스가 제거되고 C++11 snprintf를 사용하여 다시 구현되었습니다. (버그 #26696147, 버그 #87547)

많은 수의 테이블이 있는 서버에서 MySQL 5.7에서 MySQL 8.0으로의 제자리 업그레이드 후, 데이터 사전 생성 중 과도한 메모리 소비로 인해 서버 시작이 완료되지 못했습니다. (버그 #26486160)

사용자 권한을 수정하는 명령문에서 오류가 발생하면 사용자 권한 캐시에 액세스하려는 다른 트랜잭션에서 교착 상태가 발생할 수 있었습니다. (버그 #26475282)

스레드 풀 플러그인이 실패한 연결에 대해 너무 많은 정보를 기록했습니다. (버그 #26368725, 버그 #86863)

여러 구성 요소를 동시에 활성화하면 서버가 종료될 수 있었습니다. (버그 #26171471, 버그 #86514)

잘못된 형식의 mysqld-auto.cnf 파일이 서버 종료를 유발할 수 있었습니다. (버그 #26085774)

예약된 테이블스페이스에서 테이블을 생성할 때 오류가 반환되지 않았습니다. (버그 #26073851, 버그 #86309)

디버그 빌드에서 KILL 명령을 사용해 저장 루틴을 종료하면 어설션이 발생할 수 있었습니다. 패치를 제공한 Laurynas Biveinis에게 감사드립니다. (버그 #26040870, 버그 #86260)

init_connect 시스템 변수가 설정된 경우, 만료된 비밀번호를 가진 클라이언트가 내용을 실행할 수 없었고, 따라서 비밀번호 변경을 위해 연결할 수 없었습니다. 이제 클라이언트의 비밀번호가 만료된 경우, init_connect 실행이 건너뛰어져 클라이언트가 연결하고 비밀번호를 변경할 수 있게 되었습니다. (버그 #25968185)

다음 세 가지 조건을 모두 충족하는 쿼리에서 YYYYMMDD 형식의 날짜가 올바르게 인식되지 않았습니다:
쿼리가 왼쪽 조인을 수행함.
조인의 내부 테이블에 있는 DATE 열이 다중 열 기본 키의 일부임.
내부 테이블 기본 키의 모든 열이 다른 값과 비교됨(리터럴 또는 열 값일 수 있음). (버그 #25949639)

외래 키가 있는 테이블에 대해 제자리에서 ALTER TABLE 작업을 수행하면 테이블 정의 불일치가 발생했습니다. ALTER TABLE 실행 중 스토리지 엔진 메서드에 전달된 새 테이블 정의에 유효하지 않은 외래 키 이름이 포함되어 있었습니다. (버그 #25915132, 버그 #85997)

존재하지 않는 역할을 계정의 기본 역할로 할당할 수 있었습니다. (버그 #25755666, 버그 #85561)

C API를 사용하여 CURSOR_TYPE_READ_ONLY가 설정된 상태에서 INSERT 준비된 명령문을 실행하려고 하면 클라이언트가 멈췄습니다. (버그 #25701141, 버그 #85105)

RENAME USER 명령이 역할 그래프에 존재하지 않는 사용자나 역할을 이름 변경하려고 하면 실패했습니다. (버그 #25658586)

잘못된 클라이언트/서버 프로토콜 패킷이 수신되면 MySQL 클라이언트 프로그램이 예기치 않게 종료될 수 있었습니다. (버그 #25471090)

Performance Schema가 수집한 메모리 통계가 경합 조건으로 인해 잘못될 수 있었습니다. (버그 #25212799)

CONNECTION_CONTROL 플러그인의 내부 해시 처리 오류로 인해 오류 로그에 잘못된 메시지가 기록되고 결국 서버가 종료되었습니다. (버그 #25052009)

CURRENT_ROLE()ROLES_GRAPHML()이 이전에는 잘못된 이진 문자열을 반환했으나, 이제는 utf8 캐릭터셋 문자열을 반환합니다. (버그 #24843257)

INSTALL COMPONENT 또는 UNINSTALL COMPONENT 명령을 종료하면 mysql.component 시스템 테이블에 동일한 구성 요소에 대한 여러 행이 발생할 수 있었습니다. (버그 #24660436)

X Plugin을 사용하여 고부하 상태에서 SHOW PROCESSLIST를 실행하면 예기치 않게 서버가 종료될 수 있었습니다. (버그 #24621170)
참조: 버그 #23057045와 관련.

MySQL의 정규 표현식 구현에서 빈 값으로 초기화해야 하는 String 객체를 현재 주제로 사용하며, 이 값을 나타내기 위해 "" 리터럴을 사용했습니다. 이는 다른 함수에서 이 리터럴을 사용할 경우 간섭을 일으킬 수 있었습니다. 이제 nullptrString 객체를 생성하여 문제를 해결했습니다. (버그 #23276471)

mysqlpump에서 오류가 발생할 경우 메모리 누수나 비정상 종료가 발생할 수 있었습니다. (버그 #23102944)

LDML 2.8 정렬 정의가 서버 동작을 예기치 않게 만들 수 있었습니다. (버그 #22819030)

로그 열기 작업이 로그 이름 시스템 변수를 잠금 없이 액세스했습니다. 여러 스레드가 이 변수를 동시에 액세스하면 경합 조건이 발생해 서버가 예기치 않게 동작할 수 있었습니다. (버그 #22591899)

범위 옵티마이저가 일정 길이 이상의 문자열 접두사를 계산할 때, 문자의 중간에서 문자열이 잘리면서 디버그 빌드에서 어설션 및 기타 오류가 발생할 수 있었습니다. 이제는 문자열이 문자 경계에서 잘리도록 처리되었습니다. (버그 #22475473, 버그 #13712655)

서브쿼리나 표현식을 포함한 GROUP BY 절이 있는 쿼리가 초기화되지 않은 데이터를 읽음으로 인해 특정 상황에서 무작위 결과를 반환할 수 있었습니다. (버그 #20035304)
참조: 버그 #21922202와 관련.

서브쿼리나 표현식을 포함한 GROUP BY 절이 있는 쿼리가 초기화되지 않은 데이터를 읽어 무작위 결과를 반환하는 경우가 있었습니다. (버그 #20035304)
참조: 버그 #21922202와 관련.

audit_log 플러그인은 준비된 명령문에 대한 자리 표시자 값을 기록하지 않았습니다. (버그 #16617026)

ALTER TABLE ... RENAME 작업이 COPY 알고리즘을 사용할 경우, 테이블에 정의된 외래 키를 손실할 수 있었습니다. (버그 #11756183, 버그 #48070)

UNION 구문에서 작은 정수형 데이터 타입을 사용하는 것이 더 적절할 때도 정수 열이 BIGINT로 캐스팅될 수 있었습니다. (버그 #11747567, 버그 #33004)

ER_REGEXP_INVALID_CAPTURE_GROUP_NAME 오류 13110이 추가되었습니다. (버그 #89796, 버그 #27597980)

윈도우 함수의 행 버퍼 처리 방식이 리팩터링되어 핸들러 읽기 수가 25% 감소했습니다. (버그 #89512, 버그 #27484133)

일부 프레임에서 VARIANCE(), VAR_POP(), VAR_SAMP() 함수가 windowing_use_high_precision 시스템 변수가 false로 설정된 경우 잘못된 결과를 반환했습니다. (버그 #89390, 버그 #27438725)

접두사 인덱스를 사용하는 생성된 열이 있을 때, 옵티마이저가 표현식을 동일한 생성된 열로 대체하려고 시도하지 않아 접두사 인덱스를 사용하여 생성된 열 표현식을 사용하는 쿼리를 최적화하지 못했습니다. (버그 #89291, 버그 #27403367)

FIRST_VALUE()가 빈 프레임에 대해 항상 NULL을 반환하지 않았습니다. (버그 #89116, 버그 #27348276)

선택적 인수를 허용하는 정규 표현식 함수가 하나 이상의 인수가 명시적으로 NULL로 전달된 경우 예상대로 NULL을 반환하지 않았습니다. (버그 #88872, 버그 #27252630)

행 기반 복제가 슬레이브에서 잘못된 인덱스 집합을 사용했습니다. (버그 #88847, 버그 #27244826)

기본 데이터베이스가 선택되지 않은 상태에서 EXPLAIN EXTENDED를 실행하면, EXTENDED 키워드가 제거되었기 때문에 예상했던 SQL 구문 오류 대신 1046번 오류가 발생했습니다. (버그 #88591, 버그 #27153116)

OPTIMIZER_TRACE=0 CMake 옵션이 빌드에 영향을 미치지 않았기 때문에 더 이상 사용되지 않습니다. (버그 #88520, 버그 #27130109)

상수나 집계 열이 없는 GROUP BY를 사용하는 SELECT 명령문이 첫 번째 시도에서는 함수적 종속성 검사를 통과하지 않았으나 두 번째 시도에서는 잘못된 성공을 나타냈습니다. (버그 #88474, 버그 #27427677)
참조: 버그 #21807579와 관련.

CREATE TABLE ... SELECT 명령문에서 UNION을 사용하면 NOT NULL로 선언된 DATE 열에서 엄격 모드로 실패했습니다. (버그 #87711, 버그 #27068222)

중첩된 하위 선택을 사용하는 준비된 명령문이 항상 제대로 처리되지 않았습니다. (버그 #87484, 버그 #26657904)

윈도우 함수를 포함하는 쿼리의 비용 추정이 PARTITION BYORDER BY의 비용을 고려하지 않았고, 프레임 버퍼 사용 비용도 포함하지 않았습니다. (버그 #87373, 버그 #26612356)
참조: 버그 #26502118와 관련.

서브쿼리가 있는 쿼리를 처리할 때, 외부 쿼리가 빈 결과를 생성하는 경우 서브쿼리는 더 이상 최적화되지 않으며, 이러한 경우 EXPLAIN은 “Not optimized, outer query is empty”를 표시합니다.
이 변경 사항은 외부 쿼리에 사용된 테이블이 최적화 중에 비어 있으면 조인 열이 NULL로 설정되어, 서브쿼리 최적화 시 충돌이 발생할 수 있기 때문에 이루어졌습니다.
GROUP BY가 없는 집계가 포함된 외부 쿼리의 경우 예외가 적용되며, 이 경우 결과가 비어 있지 않으므로 SELECT 목록에 있는 모든 서브쿼리를 평가하고 최적화해야 합니다. 이러한 경우의 null 가능성 문제는 이제 올바르게 처리됩니다. (버그 #83115, 버그 #24713879)
참조: 버그 #83216, 버그 #24760317과 관련.

NULL 가능 열을 포함한 고유 키를 구성하는 모든 열을 선택하고 WHERE 조건에서 모든 열에 대해 NULL이 아닌 값을 설정한 경우, MySQL이 해당 열의 고유성을 고려하지 않아 only_full_group_by가 함수적 종속 열을 감지하지 못했습니다. (버그 #79291, 버그 #22279903)

부분 인덱스를 사용할 때, 옵티마이저가 더 비싼 테이블 조회를 수행했으며, 부분 인덱스가 필요한 모든 데이터를 포함하고 있어도 인덱스를 사용하지 않았습니다. (버그 #74359, 버그 #19806106)

Leave a Comment



이 문서 공유

8.0.11 변경 사항 (2018-04-19 GA)

링크 복사

CONTENTS