MySQL 8.0 Release Note

8.0.3 변경 사항 (2017-09-21 RC)

Estimated reading: 9 minutes 46 views

공식 문서: Changes in MySQL 8.0.3 (2017-09-21, Release Candidate)

계정 관리 관련 사항

CREATE USER 구문에서 이제 DEFAULT ROLE 절을 사용하여 계정의 기본 역할을 지정할 수 있습니다.
SHOW CREATE USER 구문은 이제 기본 역할이 NONE이 아닌 경우 계정의 기본 역할을 표시합니다. (버그 #24670738, 버그 #82987)

MySQL은 이제 비밀번호 기록에 대한 정보를 유지하므로, 이전 비밀번호 재사용에 대한 제한을 설정할 수 있습니다. DBA는 새 비밀번호가 일정 횟수의 비밀번호 변경 기간 또는 특정 기간 동안 이전 비밀번호와 동일하지 않도록 요구할 수 있습니다. 전역적으로 password_historypassword_reuse_interval 시스템 변수를 사용하여 비밀번호 재사용 정책을 설정하거나, CREATE USERALTER USER 구문을 통해 계정별로 설정할 수 있습니다. 기존의 비밀번호 만료 기능과 함께 이 새로운 재사용 제한 기능을 통해 DBA는 비밀번호 관리에 대해 더 완벽한 제어권을 가질 수 있습니다. 자세한 내용은 비밀번호 관리를 참조하십시오.

중요
사항비밀번호 재사용 제한 구현에는 mysql.user 시스템 테이블의 구조 변경과 새로운 mysql.password_history 시스템 테이블이 포함됩니다. 이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우 이러한 시스템 데이터베이스 변경 사항을 적용하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. 이를 완료하기 전까지는 비밀번호 변경이 불가능합니다.

(WL #6595)

Atomic DDL 관련 사항

MySQL은 이제 원자적 데이터 정의문(atomic DDL)을 지원합니다. 원자적 DDL 문은 데이터 사전 업데이트, 스토리지 엔진 작업 및 DDL 작업과 관련된 바이너리 로그 기록을 하나의 크래시 안전한 트랜잭션으로 결합하여 완전히 커밋되거나 롤백되도록 합니다.
테이블과 비테이블 DDL 문 모두 지원됩니다. 테이블 관련 DDL 작업에는 스토리지 엔진의 지원이 필요하지만 비테이블 DDL 작업에는 필요하지 않습니다. 현재 InnoDB 스토리지 엔진은 원자적 DDL을 지원합니다.

  • 지원되는 테이블 DDL 문에는 데이터베이스, 테이블스페이스, 테이블 및 인덱스에 대한 CREATE, ALTER, DROP 구문과 TRUNCATE TABLE 구문이 포함됩니다.
  • 지원되는 비테이블 DDL 문에는 다음이 포함됩니다:
    • 저장 프로시저, 트리거, 뷰, 로드 가능한 함수에 대한 CREATEDROP 구문과, 해당되는 경우 ALTER 구문입니다. CREATE TRIGGERDROP TRIGGER의 원자적 DDL 지원은 MySQL 8.0.0에 추가되었습니다.
    • 계정 관리 구문: 사용자 및 역할에 대한 CREATE, ALTER, DROP, 해당되는 경우 RENAME 구문과 GRANTREVOKE 구문입니다. 계정 관리 구문에 대한 원자적 DDL 지원은 MySQL 8.0.1에 추가되었습니다.

테이블 관련 DDL 작업의 경우, InnoDB는 DDL 로그를 mysql.innodb_ddl_log 데이터 사전 테이블에 기록합니다. innodb_print_ddl_logs 설정 옵션을 활성화하면 DDL 복구 로그가 stderr에 출력됩니다.
원자적 DDL 기능은 일부 구문의 동작을 변경합니다:

  • DROP VIEW는 지정된 뷰가 존재하지 않는 경우 오류가 발생하며, 아무런 변경도 이루어지지 않습니다. 이전에는 존재하지 않는 뷰를 지정한 경우 오류 메시지를 반환했지만, 존재하는 뷰는 삭제했습니다.
  • DROP TABLE은 지정된 테이블이 존재하지 않는 경우 오류가 발생하며, 아무런 변경도 이루어지지 않습니다. 이전에는 존재하지 않는 테이블을 지정한 경우 오류 메시지를 반환했지만, 존재하는 테이블은 삭제했습니다.
  • 지정된 모든 테이블이 원자적 DDL을 지원하는 스토리지 엔진을 사용하는 경우 DROP TABLE은 완전히 원자적으로 동작합니다.
  • DROP DATABASE는 모든 테이블이 원자적 DDL을 지원하는 스토리지 엔진을 사용하는 경우 원자적으로 동작합니다. 그러나 파일 시스템에서 데이터베이스 디렉터리를 제거하는 작업은 마지막에 발생하며, 원자적 트랜잭션의 일부가 아닙니다. 데이터베이스 디렉터리 제거가 파일 시스템 오류나 서버 중단으로 실패할 경우, DROP DATABASE 트랜잭션은 롤백되지 않습니다.
  • 원자적 DDL을 지원하는 스토리지 엔진을 사용하는 테이블에서 중단된 DDL 작업은 더 이상 스토리지 엔진, 데이터 사전 및 바이너리 로그 간의 불일치를 일으키거나 고아 파일을 남기지 않습니다.
  • 계정 관리 구문의 부분 실행은 더 이상 허용되지 않습니다. 계정 관리 구문은 지정된 모든 사용자가 성공하거나 오류가 발생할 경우 롤백되어 아무런 영향도 미치지 않습니다.

DROP TABLE, DROP VIEW 및 계정 관리 구문 동작의 변경 사항은 버전 간 복제 구성에 영향을 미칩니다.
자세한 내용은 원자적 데이터 정의문 지원을 참조하십시오. (버그 #24620918, WL #9173, WL #9536, WL #7896, WL #9045, WL #7743)

C API 관련 사항

이제 MySQL C API는 클라이언트가 결과 집합의 메타데이터 전송을 선택적으로 설정할 수 있도록 지원합니다. 메타데이터 전송을 억제하면 특히 적은 행을 반환하는 여러 쿼리를 실행하는 세션의 경우 성능이 향상될 수 있습니다. 자세한 내용은 선택적 결과 집합 메타데이터를 참조하십시오. (WL #8134)

캐릭터셋 지원

MySQL은 이제 utf8mb4 유니코드 캐릭터셋에 대한 러시아어 정렬 규칙을 지원합니다:

  • utf8mb4_ru_0900_ai_ci는 악센트에 민감하지 않고 대소문자를 구분하지 않습니다.
  • utf8mb4_ru_0900_as_cs는 악센트와 대소문자 모두에 민감합니다.

(WL #10753)

컴파일 관련 사항

디버그 빌드의 경우, SAFE_MUTEX 컴파일 플래그가 memcached 플러그인이 빌드에 포함된 경우 비활성화되었습니다. 이제는 더 이상 발생하지 않으며, 디버그 빌드에서는 항상 SAFE_MUTEX가 활성화됩니다. 이 변경으로 인해 발견된 일부 코드 문제는 수정되었습니다. (버그 #26442367, 버그 #87068)

EL6 및 EL7의 바이너리 패키지는 이제 Devtoolset 3 대신 Devtoolset 6을 사용하여 컴파일되며, GCC 4.9.2 대신 6.2.1을 사용하여 컴파일됩니다. (버그 #26436968, 버그 #87061)

이제 MySQL은 Oracle Linux에서 SPARC용으로 컴파일됩니다. (버그 #26306331, 버그 #86745)

macOS에서 Clang을 사용하는 MySQL 컴파일은 이제 특정 인라인 구성 요소와 문제를 일으키는 8.0 버전 이외의 Clang 버전을 요구합니다. (버그 #26279510, 버그 #86711)

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

설정 관련 사항

performance_schema_max_mutex_classes 시스템 변수의 기본값이 220에서 250으로 증가했습니다. performance_schema_max_thread_classes 시스템 변수의 기본값도 50에서 100으로 증가했습니다. (버그 #26193630)

새로운 cte_max_recursion_depth 시스템 변수는 공통 테이블 표현식(CTE)의 최대 재귀 깊이를 설정합니다. 이 변수의 값을 초과하는 수준까지 재귀되는 CTE는 서버가 실행을 종료합니다. 자세한 내용은 공통 테이블 표현식 재귀 제한을 참조하십시오. (버그 #26136509, 버그 #86444, WL #10972)

back_log 시스템 변수의 기본값이 이제 max_connections의 값으로 설정되어 허용되는 백로그가 허용된 최대 연결 수에 맞춰 조정됩니다. (WL #9704)

기본적으로 이벤트 스케줄러를 활성화하기 위해 event_scheduler 시스템 변수의 기본값이 OFF에서 ON으로 변경되었습니다. (WL #9644)

max_allowed_packet 시스템 변수의 기본값이 4194304(4M)에서 67108864(64M)로 증가했습니다. (WL #8393)

max_error_count 시스템 변수의 기본값이 64에서 1024로 증가했습니다. (WL #9686)

데이터 딕셔너리 관련 사항

다음 INFORMATION_SCHEMA 테이블은 데이터 딕셔너리 테이블의 뷰로 재구현되었습니다:

FILES
PARTITIONS
REFERENTIAL_CONSTRAINTS

이제 이러한 테이블에 대한 쿼리는 데이터 딕셔너리 테이블에서 정보를 얻기 때문에 더 효율적입니다. 예를 들어, 서버는 더 이상 각 INFORMATION_SCHEMA 테이블의 쿼리마다 임시 테이블을 생성할 필요가 없습니다.
이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우 이러한 변경 사항을 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #9814, WL #11059)

사용 중단 및 제거 관련 사항

복제: 다음의 오래된 mysqlbinlog 옵션은 이제 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다:

  • --short-form: 이 옵션은 테스트 목적으로 출력 결과를 SQL 문장으로 제한하는 데 사용되었습니다.
  • --stop-never-slave-server-id: 이 옵션은 --stop-never 옵션을 사용하는 연결에 서버 ID를 제공했습니다. 이 기능이 필요한 경우, --connection-server-id 옵션을 대신 사용하십시오.

이러한 옵션의 사용 중단 경고는 표준 출력이 아닌 표준 오류로 전송되므로, mysqlbinlog 출력을 사용하는 도구의 작동에 방해가 되지 않습니다. (WL #9632, WL #9633)

복제: sql_log_bin 시스템 변수의 글로벌 범위는 삭제되었습니다. 이제 sql_log_bin은 세션 범위만 가집니다. @@GLOBAL.sql_log_bin에 접근하는 애플리케이션은 조정이 필요합니다. (WL #10922)

다음의 암호화 관련 사용 중단 항목이 제거되었습니다:

제거된 암호화 함수 대신 다음을 사용할 수 있습니다: ENCRYPT()의 경우 단방향 해싱을 위해 SHA2()를 사용하십시오. 다른 함수들은 AES_ENCRYPT()AES_DECRYPT()를 대신 사용하십시오. (버그 #26493987, WL #10788, WL #10789)

사용 중단된 tx_isolationtx_read_only 시스템 변수가 제거되었습니다. 대신 transaction_isolationtransaction_read_only를 사용하십시오. (WL #9636)

사용 중단된 쿼리 캐시가 제거되었습니다. 제거 항목에는 다음이 포함됩니다:

이러한 사용 중단된 쿼리 캐시 항목은 여전히 사용 중단 상태이나, 아무런 효과가 없으며, 향후 MySQL 버전에서 제거될 예정입니다:

  • SQL_NO_CACHE SELECT 수정자.
  • ndb_cache_check_time 시스템 변수.

have_query_cache 시스템 변수는 여전히 사용 중단 상태이며, 항상 NO 값을 가지며, 향후 MySQL 버전에서 제거될 예정입니다. (WL #10824)

EXPLAIN 구문의 사용 중단된 EXTENDEDPARTITIONS 키워드가 제거되었습니다. 이러한 키워드는 항상 활성화된 상태로 필요하지 않습니다. (WL #9678)

사용되지 않는 date_format, datetime_format, time_format, 및 max_tmp_tables 시스템 변수가 제거되었습니다. (WL #9680)

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

사용 중단된 log_warnings 시스템 변수와 --log-warnings 서버 옵션이 제거되었습니다. 대신 log_error_verbosity 시스템 변수를 사용하십시오. (WL #9676)

사용 중단된 secure_auth 시스템 변수와 --secure-auth 클라이언트 옵션이 제거되었습니다. mysql_options() C API 함수의 MYSQL_SECURE_AUTH 옵션이 제거되었습니다. (WL #9674)

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

MySQL 8.0.2에서 슬레이브 상태 로그를 위한 시스템 변수인 master_info_repositoryrelay_log_info_repository의 기본값은 FILE 대신 TABLE로 설정되었습니다. MySQL 8.0.3에서는 이 두 시스템 변수의 FILE 설정이 사용 중단되었으며, 사용 시 경고가 발생합니다. FILE 설정은 향후 MySQL 버전에서 제거될 예정입니다.
TABLE 설정은 복제 저장소 정보가 데이터 디렉터리의 파일이 아닌 InnoDB 테이블에 저장되도록 하여, 예기치 않은 중단 상황에서도 복제가 안정적으로 유지되도록 합니다.
슬레이브 상태 로그가 파일로 저장될 때의 기본 이름은 master.inforelay-log.info였으며, 각각 --master-info-file--relay-log-info-file 옵션을 사용해 이름을 변경할 수 있었습니다. InnoDB 테이블로 사용할 경우 슬레이브 상태 로그는 mysql.slave_master_infomysql.slave_relay_log_info로 명명됩니다.
슬레이브 상태 로그에 FILE 저장소를 사용하는 기존 복제 슬레이브를 TABLE 저장소로 전환하려면, 다음 명령을 실행하여 기존 복제 저장소를 동적으로 변환하십시오:

STOP SLAVE;
SET GLOBAL master_info_repository = 'TABLE';
SET GLOBAL relay_log_info_repository = 'TABLE';

마스터 정보 로그 테이블 mysql.slave_master_info에는 마스터 연결 비밀번호가 포함되므로 보호되어야 합니다. 복제 슬레이브의 데이터를 백업할 때는 복제 상태 로그가 포함된 mysql.slave_master_infomysql.slave_relay_log_info 테이블을 백업하십시오. 이 테이블들은 복제 슬레이브의 데이터를 복원한 후 복제를 재개하는 데 필요합니다. (WL #6959)

InnoDB 관련 사항

외래 키가 포함된 부모 테이블에서 열 이름 변경은 외래 키 잠금 기능 작업이 진행 중이므로 일시적으로 비활성화되었습니다. 이 제한은 MySQL 8.0.4에서 해제될 예정입니다. (버그 #26334071)
참고: 관련 사항으로는 버그 #26659110이 있습니다.

로깅 관련 사항

이제 서버 시작 시 기본적으로 바이너리 로그가 활성화됩니다. log_bin 시스템 변수는 기본값으로 ON으로 설정되며, 이는 --log-bin 옵션을 지정하지 않아도 동일합니다. 이는 운영 환경에서 표준적으로 적용되는 설정이므로, 기본적으로 활성화하여 추가적인 설정 및 계획이 필요 없도록 하였습니다.
바이너리 로깅을 비활성화하려면 시작 시 --skip-log-bin 또는 --disable-log-bin 옵션을 지정하면 됩니다.
server_id 시스템 변수의 기본값은 이제 0 대신 1로 설정됩니다. 복제 토폴로지에서 각 서버에 고유한 서버 ID를 설정해야 하며, 이전에는 log_bin=ON일 때 서버 ID를 지정하지 않으면 서버가 시작되지 않았습니다. 이제 서버는 시작되지만 명시적으로 서버 ID를 설정하지 않은 경우 경고 메시지가 표시됩니다. (MySQL 8.0.4부터는 정보성 메시지로 표시됩니다.)
서버에서 바이너리 로깅이 활성화되면, 데이터 변경을 일으키는 모든 문장이 바이너리 로그에 기록됩니다. 이는 기본 이름과 숫자 확장자를 가진 일련의 파일로 구성됩니다. 기본적으로 서버는 데이터 디렉터리에 바이너리 로그 파일과 인덱스 파일을 생성합니다. MySQL 8.0.3에서는 기본 파일 이름이 host_name-bin으로 설정되어 호스트 이름을 사용하며, MySQL 8.0.4부터는 --log-bin 옵션을 지정하지 않으면 기본 이름은 binlog가 되며, 빈 문자열이나 아무 문자열도 지정하지 않으면 host_name-bin이 됩니다.
바이너리 로그 파일과 인덱스 파일의 이름 및 위치는 --log-bin--log-bin-index 옵션을 지정하여 선택할 수 있습니다. 호스트 이름이 변경될 경우에도 동일한 바이너리 로그 파일 이름을 계속 사용할 수 있도록 기본 이름을 명시적으로 지정하는 것이 권장됩니다. log_bin_basename 시스템 변수는 바이너리 로그 파일의 기본 이름과 지정된 경로를 저장합니다.
복제 슬레이브의 릴레이 로그와 릴레이 로그 인덱스의 이름은 --relay-log--relay-log-index 옵션으로 지정되며, 바이너리 로그 및 바이너리 로그 인덱스와 같은 이름을 가질 수 없습니다. MySQL 8.0.3부터는 바이너리 로그와 릴레이 로그 파일의 기본 이름이 동일하면 서버가 오류 메시지를 출력하고 시작되지 않습니다.
서버가 시작되거나 로그가 플러시될 때마다 일련의 새로운 바이너리 로그 파일이 생성됩니다. 현재 파일의 크기가 max_binlog_size (기본값: 1GB 최대 허용값)에 도달하면 서버는 자동으로 새로운 바이너리 로그 파일을 생성합니다. MySQL 8.0.3에서는 바이너리 로그 파일이 기본적으로 30일 후 만료되며, 만료된 파일은 서버 시작 시나 바이너리 로그가 플러시될 때 자동으로 제거될 수 있습니다. PURGE BINARY LOGS 구문을 사용하여 바이너리 로그 파일을 수동으로 삭제하거나, binlog_expire_logs_seconds 시스템 변수를 통해 다른 바이너리 로그 만료 기간을 지정할 수 있습니다.
바이너리 로깅 동작을 수정하기 위한 다양한 옵션이 있으며, 자세한 내용은 바이너리 로그바이너리 로깅 옵션 및 변수를 참조하십시오. (WL #10470)
참고: 관련 사항으로는 버그 #26730000이 있습니다.

옵티마이저 관련 사항

옵티마이저는 이제 단일 구문 동안 시스템 변수의 세션 값을 설정하는 SET_VAR 힌트를 지원합니다. 예시:

SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name;
INSERT /*+ SET_VAR(foreign_key_checks=OFF) */ INTO t2 VALUES(2);

자세한 내용은 옵티마이저 힌트를 참조하십시오. (버그 #22906815, WL #681)

옵티마이저는 이제 column_statistics 데이터 사전 테이블에 저장된 열 값 히스토그램 통계를 사용하여 쿼리 실행 계획을 작성합니다. 히스토그램 사용은 열과 상수를 비교하는 조건에 적용됩니다. 옵티마이저 통계를 참조하십시오. (WL #9223)

이전에는 eq_range_index_dive_limit 시스템 변수를 사용하지 않는 한, 인덱스 다이브를 사용하지 않도록 할 방법이 없었습니다. 이제 단일 테이블 쿼리에서 특정 조건에 따라 인덱스 다이브를 생략할 수 있습니다. (자세한 내용은 범위 최적화를 참조하십시오.) (WL #6526)

optimizer_switch 시스템 변수에 쿼리 실행 계획 작성 시 옵티마이저가 숨겨진 인덱스를 사용할지 여부를 제어하는 새로운 플래그 use_invisible_indexes가 추가되었습니다. 이 플래그가 off(기본값)일 경우 옵티마이저는 숨겨진 인덱스를 무시합니다 (이 플래그가 추가되기 전과 동일한 동작). 플래그가 on일 경우, 숨겨진 인덱스는 여전히 보이지 않지만 옵티마이저는 실행 계획 작성에 이를 고려합니다. (WL #10891)

패키징 관련 사항

MySQL 서버 Docker 이미지에서 mysqlcheck가 누락되어 있어 mysql_upgrade를 실행할 수 없었습니다. (버그 #26400146, 버그 #86968)

Debian에서는 디버그가 아닌 바이너리가 mysql-server 패키지에서 mysql-server-core 패키지로 이동되었습니다. (버그 #26382333, 버그 #86899)

Debian/Ubuntu용 mysql-community-source 패키지는 더 이상 제공되지 않으며, 해당 MySQL 소스 tarball은 dev.mysql.com의 다른 패키지에서 제공됩니다. (버그 #26201482)

MySQL에 포함된 zlib 라이브러리가 1.2.3 버전에서 1.2.11 버전으로 업그레이드되었습니다. MySQL은 zlib 라이브러리를 사용하여 압축을 구현합니다.
zlib 1.2.11의 compressBound() 함수는 1.2.3 버전에 비해 주어진 바이트 길이를 압축하는 데 필요한 버퍼 크기에 대한 약간 더 큰 추정치를 반환합니다. compressBound() 함수는 압축된 InnoDB 테이블에서 행을 생성하거나 업데이트할 때 허용되는 최대 행 크기를 결정하는 InnoDB 함수에 의해 호출됩니다. 따라서 행 크기가 최대 행 크기에 근접한 CREATE TABLE ... ROW_FORMAT=COMPRESSED, INSERT, UPDATE 작업은 이전 릴리스에서 성공했더라도 실패할 수 있습니다. 이 문제를 피하려면 MySQL 8.0 테스트 인스턴스에서 큰 행을 포함하는 압축된 InnoDB 테이블을 대상으로 CREATE TABLE 구문을 테스트하십시오. (WL #10551)

Performance Schema 관련 사항

MySQL 8.0.2부터 성능 스키마 테이블 정의는 서버 내부에서 관리됩니다. 이 변경에 따라 성능 스키마 테이블에 대해 CREATE TABLEDROP TABLE 구문을 사용할 수 없습니다. (버그 #26136994)

events_statements_summary_by_digest 테이블은 이제 각 행에 대해 해당 행의 다이제스트 값을 생성하는 샘플 문장을 제공합니다. 애플리케이션은 이 정보를 이용해 xxx_history_long 테이블을 조사하는 등의 대안보다 더 효율적으로 문장 샘플을 캡처할 수 있습니다. 후자의 방법은 해당 xxx_history_long 소비자를 활성화해야 하므로 추가 오버헤드가 발생하며, 이 테이블이 필요하지 않은 애플리케이션에서는 불필요할 수 있습니다. 자세한 내용은 성능 스키마 문장 다이제스트 및 샘플링문장 요약 테이블을 참조하십시오.
또한, events_statements_summary_by_digest 테이블의 FIRST_SEENLAST_SEEN 타임스탬프 열은 이제 초의 소수 부분을 포함합니다. (WL #9830)

성능 스키마 setup_instruments 테이블에는 이제 인스트루먼트 메타데이터 열이 추가되어, 인스트루먼트 속성, 변동성, 인스트루먼트 목적을 설명하는 설명 문자열이 포함됩니다. 또한, TIMED 열은 이제 NULL 값을 가질 수 있어, 타이밍을 지원하지 않는 인스트루먼트를 나타냅니다. setup_instruments 테이블을 참조하십시오.
새로운 성능 스키마 setup_threads 테이블은 계측된 스레드 클래스 이름과 속성을 제공합니다. 자세한 내용은 setup_threads 테이블을 참조하십시오. (WL #7801)

플러그인 관련 사항

새로운 get_sysvar_source 플러그인 서비스는 플러그인이 시스템 변수 설정의 출처를 검색할 수 있게 해줍니다.

참고
이 작업의 일환으로, 여러 MyISAM 키 캐시를 참조하는 데 사용되는 복합 구조 변수 구문이 사용 중단되었습니다. 다중 키 캐시를 참조하십시오.

(WL #9424)

보안 관련 사항

새로운 caching_sha2_password 인증 플러그인이 추가되었습니다. sha256_password 플러그인과 마찬가지로 caching_sha2_password는 SHA-256 비밀번호 해싱을 구현하지만, 연결 시 지연 문제를 해결하기 위해 캐싱을 사용합니다. 또한 더 많은 연결 프로토콜을 지원하며, RSA 비밀번호 교환 기능을 위해 OpenSSL에 링크할 필요가 없습니다. 자세한 내용은 SHA-2 캐싱 플러그인 인증을 참조하십시오. (WL #9591)

서버를 --skip-grant-tables 옵션으로 시작하면 인증 검사가 비활성화되므로, 이 경우 서버는 skip_networking을 활성화하여 원격 연결을 차단합니다. (WL #4321)

서버 관리

MySQL은 이제 리소스 그룹의 생성 및 관리를 지원하며, 서버 내에서 실행 중인 스레드를 특정 그룹에 할당하여 그룹에 할당된 리소스에 따라 스레드가 실행되도록 허용합니다. 그룹 속성은 그룹 내 스레드의 리소스 소비를 제한하거나 허용할 수 있게 해줍니다. DBA는 다양한 작업 부하에 맞추어 이러한 속성을 수정할 수 있습니다. 현재 관리 가능한 리소스는 CPU 시간이며, 이는 CPU 코어, 하이퍼스레드, 하드웨어 스레드를 포함한 “가상 CPU”의 개념으로 표현됩니다. 서버는 시작 시 사용 가능한 가상 CPU 수를 결정하며, 적절한 권한을 가진 DBA는 이러한 CPU를 리소스 그룹과 연결하고 스레드를 그룹에 할당할 수 있습니다. 자세한 내용은 리소스 그룹을 참조하십시오. (WL #9467)

공간 데이터 지원

비호환 변경: 이전에는 기하학적 관계를 테스트하는 다음 함수들이 직교 좌표계(Cartesian SRS)만 지원했습니다: ST_Contains(), ST_Crosses(), ST_Disjoint(), ST_Equals(), ST_Intersects(), ST_Overlaps(), ST_Touches(), ST_Within(), MBRContains(), MBRCoveredBy(), MBRCovers(), MBRDisjoint(), MBREquals(), MBRIntersects(), MBROverlaps(), MBRTouches(), MBRWithin().
이제 이 함수들은 지리적 SRS의 기하학적 인수를 감지하고 지리적 결과를 반환합니다. 투영된 SRS 및 SRID 0에 대한 계산은 동일하게 유지됩니다. 자세한 내용은 객체 모양을 사용하는 공간 관계 함수최소 경계 사각형을 사용하는 공간 관계 함수를 참조하십시오.

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

(WL #10827)

InnoDB: InnoDB 공간 인덱스에 대한 공간 참조 식별자(SRID) 지원이 추가되었습니다. (WL #10439)

공간 데이터 유형은 이제 저장된 값에 대한 공간 참조 시스템(SRS)을 명시적으로 나타내기 위해 SRID 속성을 허용합니다. 자세한 내용은 공간 데이터 유형을 참조하십시오.
각 열의 SRID 속성 값을 나타내기 위해, INFORMATION_SCHEMA.COLUMNS 테이블에 SRS_ID 열이 추가되었습니다.
명시적인 SRID 속성이 있는 공간 열은 SRID 제한을 받습니다: 해당 열은 해당 ID를 가진 값만 허용하며, 해당 열의 SPATIAL 인덱스는 옵티마이저에 의해 사용될 수 있습니다. SRID 속성이 없는 공간 열의 SPATIAL 인덱스는 옵티마이저에 의해 무시됩니다. SPATIAL 인덱스 최적화를 참조하십시오. (WL #8592)

SQL 구문 관련 사항

ALTER TABLE에서는 이제 RENAME COLUMN old_name TO new_name 구문을 사용하여 컬럼 이름을 더 쉽게 변경할 수 있습니다. 컬럼 이름을 변경하되 정의는 변경하지 않으려는 경우 RENAME COLUMN이 더 편리하며, 이는 현재 컬럼 정의를 다시 지정해야 하는 CHANGE 구문보다 간편합니다. CHANGE를 사용할 경우 정의를 모르면 정의를 조회해야 하고, 정확하게 다시 지정하지 않으면 데이터가 변경되거나 손실될 가능성이 있습니다. (버그 #11746522, 버그 #26949, 버그 #11747473, 버그 #32497, 버그 #11765084, 버그 #58006, 버그 #14031617, WL #10761)

X Plugin 관련 사항

서버가 --skip-grant-tables 옵션으로 시작될 때 X Plugin을 설치할 수 없었습니다. (버그 #26516678)

X Plugin 소켓 연결이 정상적으로 작동하지 않았습니다. (버그 #26427112, 버그 #87019)

소스에서 MySQL을 컴파일할 때 드물게 사용되는 특정 CMake 인수가 X Plugin 빌드에 문제를 일으켰습니다. (버그 #26141933)

X 프로토콜을 사용하는 Mysqlx.Connection.CapabilitiesGet 요청이 사용 가능한 인증 메커니즘의 전체 목록을 반환하지 않았습니다. (버그 #26044113)

혼합 대문자 또는 대문자 스키마 이름의 경우, list_objects 구문이 컬렉션을 테이블로 잘못 보고할 수 있었습니다. (버그 #25769683)

X Plugin이 데이터 디렉터리 권한 테스트에 포함할 플러그인 목록에서 누락되었습니다. (버그 #24823999)

기능 추가 및 변경 사항

InnoDB: 새로운 --innodb-dedicated-server 서버 옵션은 서버에서 감지한 메모리 양에 따라 InnoDB가 다음 옵션을 자동으로 설정할 수 있게 합니다:

이 옵션은 전용 서버에서 실행되는 MySQL 서버 인스턴스를 위한 것입니다. 자세한 내용은 전용 MySQL 서버의 자동 InnoDB 구성 활성화를 참조하십시오. (WL #9193)

InnoDB: 이제 일반 테이블스페이스의 이름 변경이 ALTER TABLESPACE ... RENAME TO 구문으로 지원됩니다.
ALTER TABLESPACEDROP TABLESPACE ENGINE 절은 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. (WL #8972)

InnoDB: 오래된 InnoDB 시스템 테이블과 관련된 코드가 제거되었습니다. InnoDB 시스템 테이블에 기반한 INFORMATION_SCHEMA 뷰는 데이터 딕셔너리 테이블의 내부 시스템 뷰로 대체되었습니다. 영향받은 InnoDB INFORMATION_SCHEMA 뷰는 다음과 같이 이름이 변경되었습니다:


Table 1. 이름이 변경된 InnoDB 정보 스키마 뷰

기존 이름신규 이
INNODB_SYS_COLUMNSINNODB_COLUMNS
INNODB_SYS_DATAFILESINNODB_DATAFILES
INNODB_SYS_FIELDSINNODB_FIELDS
INNODB_SYS_FOREIGNINNODB_FOREIGN
INNODB_SYS_FOREIGN_COLSINNODB_FOREIGN_COLS
INNODB_SYS_INDEXESINNODB_INDEXES
INNODB_SYS_TABLESINNODB_TABLES
INNODB_SYS_TABLESPACESINNODB_TABLESPACES
INNODB_SYS_TABLESTATSINNODB_TABLESTATS
INNODB_SYS_VIRTUALINNODB_VIRTUAL

MySQL 8.0.3 이상으로 업그레이드한 후 이전 InnoDB INFORMATION_SCHEMA 뷰 이름을 참조하는 스크립트를 업데이트하십시오.
새로운 INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF 뷰는 InnoDB 테이블스페이스에 대한 공간, 이름, 경로, 플래그, 공간 유형 데이터를 제공합니다. (WL #9535)

InnoDB: InnoDB가 전역 데이터 딕셔너리와 통합될 때, 데이터 딕셔너리의 파일별 테이블 테이블스페이스 이름이 innodb_file_per_table_x 형식으로 생성되었습니다. 여기서 xInnoDB 테이블스페이스 ID입니다. 사용 편의성을 위해 데이터 딕셔너리의 파일별 테이블 테이블스페이스 이름은 다시 테이블 이름과 동일해졌습니다.
MySQL 5.7에서 MySQL 8.0으로 업그레이드하면 데이터 딕셔너리의 MySQL 5.7 innodb_table_statsinnodb_index_stats 테이블스페이스 이름에 “_backup57”이 추가되어 MySQL 8.0의 해당 이름과 구분됩니다. (WL #10436)

InnoDB: 기본 innodb_autoinc_lock_mode 설정이 1(연속적)에서 2(교차적)로 변경되었습니다. 교차적 잠금 모드는 다중 행 삽입을 병렬로 실행할 수 있도록 하여 동시성과 확장성을 개선합니다. 새로운 innodb_autoinc_lock_mode 기본 설정은 MySQL 5.7에서 복제 유형의 기본값이 문장 기반 복제에서 행 기반 복제로 변경된 것과 일치합니다. 문장 기반 복제는 지정된 SQL 문장 순서에 대해 자동 증가 값이 예측 가능하고 반복 가능한 순서로 할당되도록 연속적 자동 증가 잠금 모드를 필요로 하지만, 행 기반 복제는 SQL 문장의 실행 순서에 민감하지 않습니다. 자세한 내용은 InnoDB AUTO_INCREMENT 잠금 모드를 참조하십시오.
문장 기반 복제를 사용하는 시스템의 경우, 새로운 innodb_autoinc_lock_mode 기본 설정이 순차적 자동 증가 값에 의존하는 애플리케이션을 중단시킬 수 있습니다. 이전 기본값으로 복원하려면 innodb_autoinc_lock_mode를 1로 설정하십시오. (WL #9699)

InnoDB: 직렬화된 사전 정보(SDI)는 이제 임시 테이블스페이스와 언두 테이블스페이스 파일을 제외한 모든 InnoDB 테이블스페이스 파일에 포함됩니다. SDI는 테이블 및 테이블스페이스 객체에 대한 직렬화된 메타데이터입니다. SDI 데이터의 존재는 메타데이터의 중복성을 제공합니다. 예를 들어, 데이터 딕셔너리를 사용할 수 없게 된 경우 테이블스페이스 파일에서 사전 객체 메타데이터를 추출할 수 있습니다. SDI 추출은 ibd2sdi 도구를 사용하여 수행됩니다. SDI 데이터는 JSON 형식으로 저장됩니다.
테이블스페이스 파일에 SDI 데이터가 포함되면서 파일 크기가 증가합니다. SDI 레코드는 기본적으로 16KB 크기의 단일 인덱스 페이지를 필요로 합니다. 그러나 SDI 데이터는 저장 시 압축되어 저장 공간 사용량을 줄입니다. (WL #9538)

InnoDB: innodb_flush_neighbors의 기본값이 1에서 0으로 변경되었습니다. 이는 버퍼 풀에서 인접한 페이지를 플러시하는 기능을 비활성화합니다. 0의 설정은 탐색 시간이 중요한 요소가 아닌 비회전형 스토리지(SSD) 장치에 최적화되어 있습니다. 회전형 스토리지(HDD)를 사용하는 시스템에서는 이전 기본값인 1로 설정을 변경하는 것이 좋습니다. (WL #9631)

InnoDB: 버퍼 풀의 사전 플러싱 및 플러싱 동작에 영향을 미치는 구성 옵션의 기본값이 수정되었습니다:

  • innodb_max_dirty_pages_pct_lwm 기본값이 0에서 10으로 변경되었습니다. 이전 기본값 0은 버퍼 풀 사전 플러싱을 비활성화합니다. 10의 값은 버퍼 풀의 더티 페이지 비율이 10%를 초과할 때 사전 플러싱을 활성화하여 성능 일관성을 향상시킵니다.
  • innodb_max_dirty_pages_pct 기본값이 75에서 90으로 변경되었습니다. InnoDB는 버퍼 풀에서 더티 페이지 비율이 이 값을 초과하지 않도록 데이터를 플러시하려고 시도합니다. 기본값 증가로 인해 버퍼 풀에 더 많은 비율의 더티 페이지가 허용됩니다.

(WL #9707, WL #9630)

InnoDB: innodb_undo_tablespaces의 최소값이 0에서 2로 변경되었습니다. 이전 릴리스에서는 innodb_undo_tablespaces가 0으로 설정된 경우 시스템 테이블스페이스가 롤백 세그먼트에 사용되었습니다. 최소값을 2로 설정하여 롤백 세그먼트가 시스템 테이블스페이스가 아닌 언두 테이블스페이스에 생성되도록 보장합니다. 자세한 내용은 언두 테이블스페이스를 참조하십시오. (WL #10583)

복제; JSON: 새로운 시스템 변수 binlog_row_value_options가 추가되었습니다. 현재 이 변수는 설정되지 않거나 PARTIAL_JSON 값으로 설정될 수 있습니다. 이 설정은 MySQL의 행 기반 복제가 JSON 문서의 일부 부분만 수정할 때, 그리고 JSON_SET(), JSON_REPLACE(), JSON_REMOVE() 함수 조합을 사용할 때 각 업데이트에 대해 압축된 바이너리 로그 형식을 사용하게 합니다. 이 압축 형식은 업데이트 후 이미지에 전체 문서가 아닌 수정된 JSON 문서의 부분만을 포함합니다. 수정이 전체 문서보다 많은 공간을 차지하거나 부분 업데이트를 생성할 수 없는 경우 전체 문서가 대신 사용됩니다.
자세한 내용은 JSON 값의 부분 업데이트 및 변수 설명을 참조하십시오. (WL #2955)

복제: GTID 기반 복제(gtid_mode=ON)를 사용할 때 CHANGE MASTER TO 구문의 IGNORE_SERVER_IDS 옵션이 사용 중단되었습니다. GTID를 사용할 경우 이미 적용된 트랜잭션은 자동으로 무시되므로 이 기능이 필요하지 않습니다.
GTID 기반 복제를 시작하기 전에 관련된 서버에 이전에 설정된 모든 무시된 서버 ID 목록을 확인하고 지우십시오. 개별 채널에 대해 발행할 수 있는 SHOW_SLAVE_STATUS 구문은 무시된 서버 ID 목록이 있는 경우 이를 표시합니다. 목록이 없으면 Replicate_Ignore_Server_Ids 필드는 비어 있습니다.
서버에 gtid_mode=ON가 설정된 경우, CHANGE MASTER TO 구문에서 IGNORE_SERVER_IDS 옵션을 포함하면 사용 중단 경고가 발생합니다. 또한, 채널에 기존 서버 ID가 IGNORE_SERVER_IDS로 설정된 경우 SET GTID_MODE=ON 구문을 사용할 때도 사용 중단 경고가 발생합니다. 이러한 경고를 받은 경우, CHANGE MASTER TO 구문에서 빈 목록을 사용한 IGNORE_SERVER_IDS 옵션을 포함하여 목록을 지울 수 있습니다. (WL #10963)

복제: log_slave_updates 시스템 변수는 이제 기본값으로 ON으로 설정되어 있어, 복제 슬레이브를 시작할 때 --log-slave-updates를 명시적으로 지정할 필요가 없습니다.
log_slave_updates 시스템 변수는 읽기 전용입니다. 복제 슬레이브가 SQL 스레드에서 수행된 업데이트를 자체 바이너리 로그에 기록하지 않도록 하려면 슬레이브 서버 시작 시 --log-slave-updates=OFF를 지정하십시오. (WL #10479)

그룹 복제: 이번 릴리스에는 새로운 서버 시스템 변수인 group_replication_communication_debug_options가 추가되어 그룹 복제 구성 요소별로 디버깅 및 추적 메시지를 동적으로 필터링할 수 있습니다. (WL #10200)

그룹 복제: 그룹 복제 스레드 상태가 이제 MySQL 성능 스키마에 표시됩니다. (WL #10622)

JSON: JSON_MERGE() 함수가 JSON_MERGE_PRESERVE()로 이름이 변경되었습니다.
이번 릴리스에서는 또한 RFC 7396을 준수하는 JSON_MERGE_PATCH() 함수를 추가했습니다. 이 함수는 JSON_MERGE_PRESERVE()와 유사한 동작을 하지만 두 가지 예외가 있습니다:

  • JSON_MERGE_PATCH()는 두 번째 객체의 키와 일치하는 첫 번째 객체의 멤버를 제거하며, 두 번째 객체에서 해당 키와 연관된 값이 JSON null이 아닌 경우에만 적용됩니다.
  • 첫 번째 객체와 키가 일치하는 두 번째 객체의 멤버가 있으면, JSON_MERGE_PATCH()는 첫 번째 객체의 값을 두 번째 객체의 값으로 _대체_합니다. 반면에, JSON_MERGE_PRESERVE()는 두 번째 값을 첫 번째 값에 추가합니다.

아래 예시는 키 "a"가 일치하는 세 개의 JSON 객체를 각각의 함수로 병합했을 때의 결과를 비교합니다:

mysql> SET @x = '{ "a": 1, "b": 2 }',
     >     @y = '{ "a": 3, "c": 4 }',
     >     @z = '{ "a": 5, "d": 6 }';

mysql> SELECT  JSON_MERGE_PATCH(@x, @y, @z)    AS Patch,
    ->         JSON_MERGE_PRESERVE(@x, @y, @z) AS Preserve\G
*************************** 1. row ***************************
   Patch: {"a": 5, "b": 2, "c": 4, "d": 6}
Preserve: {"a": [1, 3, 5], "b": 2, "c": 4, "d": 6}

JSON_MERGE()는 여전히 JSON_MERGE_PRESERVE()의 별칭으로 지원되지만, 이제 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다.
자세한 내용은 JSON 값을 수정하는 함수를 참조하십시오. (버그 #81283, 버그 #23255346, WL #9692)

InnoDB는 이제 시스템이 과부하 상태일 때 트랜잭션 잠금 해제를 스케줄링하기 위해 VATS(Variance-Aware Transaction Scheduling)를 사용하여, 잠금 시스템 대기 뮤텍스의 경쟁을 줄입니다. 잠금 스케줄링은 잠금 대기 큐에 32개 이상의 스레드가 대기할 때 VATS를 사용합니다.
VATS에 대한 자세한 내용은 Identifying the Major Sources of Variance in Transaction Latencies: Towards More Predictable Databases를 참조하십시오.
기여해주신 Jiamin Huang께 감사드립니다. (버그 #25290971, 버그 #84266, WL #10793)

MySQL은 이제 필요한 경우 외래 키 제약 조건으로 연결된 테이블에 메타데이터 잠금을 확장합니다. 메타데이터 잠금 확장은 관련 테이블에서 충돌하는 DML 및 DDL 작업이 동시에 실행되는 것을 방지합니다. 이 기능은 부모 테이블이 수정될 때 외래 키 메타데이터 업데이트를 가능하게 합니다. 이전에는 자식 테이블이 소유한 외래 키 메타데이터를 안전하게 업데이트할 수 없었습니다.
테이블이 LOCK TABLES로 명시적으로 잠겨 있으면, 이제 외래 키 제약 조건으로 연결된 모든 테이블이 암묵적으로 열리고 잠깁니다. 외래 키 검사에서는 관련 테이블에 대해 읽기 전용 공유 잠금(LOCK TABLES READ)이 설정됩니다. 연쇄 업데이트의 경우, 연산에 관련된 관련 테이블에 대해 공유 없는 쓰기 잠금(LOCK TABLES WRITE)이 설정됩니다.
외래 키 관계에 있는 테이블에 대해 LOCK TABLES이 활성화된 경우, 해당 테이블에 대해 ALTER TABLE ... RENAME은 허용되지 않습니다. 이는 임시적인 제한이며, MySQL 8.0.4에서 버그 #26647340의 패치를 통해 해제되었습니다. (WL #6049)

이진 로그 만료 기간을 일 단위로 지정하는 expire_logs_days 시스템 변수가 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. expire_logs_days는 이진 로그 만료 기간을 정의하는 데 충분한 유연성을 제공하지 않습니다.
이제 이진 로그 만료 기간을 초 단위로 설정하기 위해 binlog_expire_logs_seconds를 사용할 수 있습니다. MySQL 8.0.3에서는 두 변수의 효과가 누적됩니다. 예를 들어, expire_logs_days가 1이고 binlog_expire_logs_seconds가 43200인 경우, 이진 로그는 1.5일마다 삭제됩니다. 이는 binlog_expire_logs_seconds를 129600으로, expire_logs_days를 0으로 설정한 것과 동일한 결과를 냅니다. expire_logs_days를 지정하지 않은 경우 기본 설정인 30일이 이진 로그 만료 기간에 추가된다는 점에 유의하십시오. binlog_expire_logs_seconds만 사용하려면 expire_logs_days=0을 명시적으로 설정하십시오.
이진 로그의 자동 삭제를 비활성화하려면 expire_logs_daysbinlog_expire_logs_seconds를 모두 명시적으로 0으로 설정해야 합니다. (WL #10924)
참고: 관련 사항으로는 버그 #26483363이 있습니다.

새로운 유형의 백업 잠금이 추가되어, 온라인 백업 중 DML을 허용하면서 일관되지 않은 스냅샷을 초래할 수 있는 작업을 방지합니다. 새로운 백업 잠금은 LOCK INSTANCE FOR BACKUPUNLOCK INSTANCE 구문으로 지원됩니다. 이 명령어를 사용하려면 BACKUP_ADMIN 권한이 필요합니다. (WL #9451)

버그 수정

비호환 변경; JSON: JSON 객체에 동일한 키 이름을 가진 멤버가 여러 개 포함된 경우, MySQL은 첫 번째 멤버만 유지하고 나머지를 삭제했습니다. 이는 중복된 키 이름을 처리하는 방법으로 다음의 방식을 제시한 RFC 7159에 반하는 것입니다:

  • 오류를 보고하거나(또는 객체 구문 분석에 실패)
  • 중복된 키와 값을 모두 보고
  • 마지막 키-값 쌍만 보고

JavaScript에서 JSON 텍스트를 평가할 때, 동일한 이름의 쌍이 여러 개 지정된 경우 마지막 쌍이 유지됩니다. MySQL은 이제 이와 같이 마지막 옵션을 구현합니다. 다음과 같이 동작합니다:

mysql> CREATE TABLE t1 (c1 JSON);

mysql> INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}');

mysql> SELECT c1 FROM t1;
+------------------+
| c1               |
+------------------+
| {"x": [3, 5, 7]} |
+------------------+

이 문제에 대한 수정은 또한 여러 동일한 키의 값으로 JSON 배열을 포함하는 데이터를 JSON 열에 삽입할 때 발생하는 오류를 수정합니다. (버그 #86620, 버그 #86866, 버그 #26238736, 버그 #26369555)

성능; JSON: JSON 문자열의 표현을 생성할 때 이제 일반적인 경우인 특수 문자가 없는 경우를 최적화하여, 문자열의 첫 번째 특수 문자를 스캔하고 각 탈출 문자가 필요 없는 문자열을 단일 memcpy() 호출로 복사합니다. 이전에는 각 문자를 검사하여 탈출이 필요한지 확인하고, 필요한 경우 하나씩 복사했습니다.
이 수정은 또한 제어 문자 \u001f(단위 구분자 문자)를 탈출하지 못하는 오류도 수정합니다. (버그 #86898, 버그 #26388690, 버그 #87722, 버그 #26780307)
참고: 관련 사항으로는 버그 #25977595가 있습니다.

InnoDB: 외래 키 절의 ON UPDATEON DELETE 기본값이 RESTRICT에서 NO ACTION으로 변경되었습니다. NO ACTION은 MySQL에서 RESTRICT 키워드와 동일한 SQL 표준 키워드입니다. (버그 #30186407, 버그 #96466)

InnoDB: 내부 부모 및 자식 테이블 이름의 파일 이름 인코딩으로 인해 허용된 길이를 초과하여 INFORMATION_SCHEMA.INNODB_SYS_FOREIGN 테이블에 외래 키 레코드가 누락되었습니다. (버그 #27020089)

InnoDB: ALTER TABLE, DROP TABLE, DROP DATABASE 작업을 수행할 때 긴 세마포어 대기가 발생했습니다. (버그 #26779650)

InnoDB: 테이블스페이스 가져오기와 관련된 함수에서 잘못된 오류 처리 코드가 제거되었습니다. (버그 #26595476)

InnoDB: MySQL 5.6 이전에 생성된 파일별 테이블 테이블스페이스로 인해 MySQL 8.0.2로의 제자리 업그레이드 중에 실패가 발생했습니다. 해당 테이블스페이스는 InnoDB SYS_TABLESPACES 시스템 테이블에 등록되지 않았습니다.
MySQL 5.5 이전에 생성된 소수점 열이 있는 테이블도 정밀도 유형 불일치로 인해 MySQL 8.0.2로의 제자리 업그레이드 중에 실패가 발생했습니다. (버그 #26542296, 버그 #87229)

InnoDB: MySQL 설치 중 외래 키 제약 시스템 테이블 생성에 대한 불필요한 경고가 보고되었습니다. (버그 #26483335)

InnoDB: 보조 인덱스 항목 수 불일치로 인해 동시 ALTER TABLE 작업 중에 쿼리가 중단되었습니다. (버그 #26381213)

InnoDB: TABLESPACECOMPRESSION 속성을 포함하도록 엄격 모드가 비활성화된 상태에서 테이블을 변경하려고 할 때 세그멘테이션 오류가 발생했습니다. (버그 #26375851)

InnoDB: TempTable 스토리지 엔진을 사용한 DML 작업 중에 세그멘테이션 오류가 발생했습니다. (버그 #26363837)

InnoDB: ALTER TABLE ... REORGANIZE PARTITION 작업 중에 암묵적 행 형식 변환이 잘못된 어설션을 발생시켰습니다. (버그 #26326611)

InnoDB: 암호화된 테이블을 재구축한 ALTER TABLE 작업이 암호화 속성을 올바르게 설정하지 않았습니다. (버그 #26243264)

InnoDB: Windows에서 메모리 내 내부 임시 테이블을 위한 TempTable 스토리지 엔진을 사용할 때 메모리 누수가 발생했습니다. (버그 #26237680)

InnoDB: Valgrind 테스트를 위한 빌드가 활성화되지 않은 서버 빌드에서 Valgrind 테스트를 실행할 때 오해의 소지가 있는 오류가 발생했습니다. (버그 #26037206)

InnoDB: 고아 전체 텍스트 검색 테이블 삭제와 관련된 문제 코드가 시작 시 잘못된 객체 ID 어설션 실패를 유발했습니다. (버그 #25998362)

InnoDB: DML 작업 중에 삭제된 파티션을 확인하는 과정에서 첫 번째 파티션만 확인했습니다. 다른 삭제된 파티션을 확인하지 않아 어설션 실패가 발생했습니다. (버그 #25942592)

InnoDB: 파일에 쓰여지기 전에 할당된 메모리가 초기화되지 않아 Valgrind 오류가 발생했습니다. (버그 #25913151, 버그 #85986)

InnoDB: 가상 열과 인덱스를 동일한 구문에서 추가할 때 오류가 발생했습니다. (버그 #25899959)

InnoDB: 파티션이 많은 테이블에 대해 대규모 업데이트 작업을 수행할 때 슬레이브 인스턴스에서 복제 지연이 발생했습니다. (버그 #25687813, 버그 #85352)

InnoDB: 끝 범위 비교 중에 실패가 발생했습니다. (버그 #25669686)

InnoDB: innodb_buffer_pool_load_now 설정이 읽기 전용 모드에서 활성화되지 않았습니다. 버퍼 풀 로드 스레드를 신호하는 이벤트가 초기화되지 않았기 때문입니다. (버그 #25586766)

InnoDB: 멀티버전 동시성 제어 행 검색 함수의 커서 위치 확인 중에 어설션이 발생했습니다. (버그 #25377592)

InnoDB: 잘못된 변수가 row_mysql_handle_errors 루틴에 전달되어 어설션 실패를 일으켰습니다. (버그 #25183130)

InnoDB: 전체 텍스트 검색 동기화 작업에서 사전 작업 잠금을 기다리는 중에 서버가 종료되는 문제가 발생했습니다. (버그 #24938374, 버그 #26376681, 버그 #26376239)

InnoDB: 트랜잭션이 커밋 작업 전에 암묵적 잠금을 명시적 잠금으로 변환할 때 다른 트랜잭션이 동일한 레코드에 대해 명시적 잠금을 획득하려고 시도할 가능성을 고려하도록 어설션 코드를 수정했습니다. (버그 #24344131)

InnoDB: 암호화되거나 페이지 압축된 테이블에 대해 FLUSH TABLES ... FOR EXPORT 작업을 수행할 때 어설션이 발생했습니다. (버그 #22916982)

InnoDB: innodb_force_recovery 설정이 0보다 큰 경우 DROP TABLE 작업이 허용되지 않았습니다. (버그 #22392152)

InnoDB: 새로 생성된 테이블이 트랜잭션이 커밋되기 전에 삭제되면 CREATE TABLE ... SELECT 작업에서 어설션 실패가 발생했습니다. (버그 #22154768)

InnoDB: 테이블을 재구축하고 외래 키를 추가하지만 외래 키 제약 이름을 지정하지 않은 제자리 ALTER TABLE 작업이 중복된 제약 이름 때문에 실패했습니다. InnoDB는 기존 외래 키 제약 이름을 고려하지 않았습니다. 이 문제는 MySQL 8.0.3에서 외래 키 메타데이터가 데이터 딕셔너리로 이동되고 외래 키 제약 이름 생성이 SQL 계층으로 이동하면서 해결되었습니다. (버그 #18199504, 버그 #71616)

InnoDB: 외래 키 검사 중에 InnoDB 데이터 딕셔너리를 잠그는 함수 호출이 잘못된 위치에 있어 제거되었습니다. (버그 #12917178, 버그 #62221)

InnoDB: 기존 외래 키 제약 이름을 사용할 때 보고된 오류 메시지가 일관되지 않았으며 충분한 정보를 제공하지 못했습니다. (버그 #11925430, 버그 #60633)

파티셔닝: 힙 레코드를 가져올 때 특정 경우에 파티션 ID가 0으로 설정될 수 있었습니다. (버그 #86255, 버그 #26034430)

파티셔닝: 파티션화된 InnoDB 테이블을 생성하지 못한 경우에 롤백이 올바르게 수행되지 않았습니다. 이는 외래 키 정보를 확인하는 동안 불필요한 커밋이 발생했기 때문입니다. 현재 파티션화된 테이블은 외래 키를 지원하지 않으므로 이 검사는 필요하지 않으며, 이러한 경우에는 이제 수행되지 않습니다. (버그 #85299, 버그 #25667278)

파티셔닝: LIST로 파티션된 테이블에서 NULL을 포함하는 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #76418, 버그 #20748521)
참고: 관련 사항으로는 버그 #86255, 버그 #26034430이 있습니다.

복제; 그룹 복제: 그룹 복제와 비동기 복제가 동시에 실행되는 멤버에서 비동기 복제가 그룹 복제의 제한 사항(예: InnoDB 스토리지 엔진만 사용, 테이블에 기본 키 필요 등)을 준수하지 않았습니다. 이는 mysqlbinlog을 해당 멤버에서 실행할 때도 발생할 수 있었습니다. 이제 그룹 복제와 비동기 복제를 동시에 실행하는 멤버에서는 그룹 복제 요구 사항을 위반할 수 없습니다. (버그 #85164, 버그 #25609945)
참고: 관련 사항으로는 버그 #85781, 버그 #25828806이 있습니다.

복제: 멀티스레드 슬레이브에서 릴레이 로그에 사용된 디스크 공간 기록의 업데이트 타이밍으로 인해 데드락 상태가 발생할 수 있었습니다. 이제 업데이트 타이밍이 변경되어 데드락이 발생하지 않습니다. (버그 #26729635)

복제: slave_preserve_commit_order=1로 설정된 경우, 테이블에 공유 쓰기 잠금을 보유하는 트랜잭션과 동일한 잠금을 필요로 하는 이전 커밋 순서의 트랜잭션 간에 데드락이 발생할 수 있었습니다. (버그 #26666609)

복제: 사용되지 않는 변수 opt_reckless_slave가 제거되었습니다. (버그 #26500285)

복제: FLUSH LOGS가 커밋 단계에서 이미 오류 응답을 보낸 후 OK 메시지를 전송하려고 했습니다. Laurynas Biveinis님께 패치에 대해 감사드립니다. (버그 #26272158, 버그 #25363745, 버그 #84437)

복제: GTID가 사건 로그 이벤트에 대해 생성된 경우, MySQL 오류 코드 1590 (ER_SLAVE_INCIDENT)을 복제 슬레이브에서 --slave-skip-errors=1590 시작 옵션을 사용하여 건너뛸 수 없었습니다. (버그 #26266758)

복제: 복구 중인 멤버에서 group_replication_recovery_complete_at="transactions_certified" 설정 시 COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE 값이 잘못 설정되었습니다. (버그 #26180350)

복제: 인덱스가 있는 파티션화된 테이블을 복제할 때, slave_rows_search_algorithms 설정에 HASH_SCAN이 지정된 복제 슬레이브에서 HA_ERR_KEY_NOT_FOUND 오류와 함께 슬레이브 I/O 스레드가 중지되는 경우가 있었습니다. (버그 #26137159)

복제: 내부 서버용 시스템 변수인 pseudo_slave_mode가 트랜잭션 내에서 변경될 때 가끔 어설션이 발생했습니다. 이제 서버는 트랜잭션 내에서 이 변수를 변경하지 않습니다. (버그 #26034192, 버그 #86250)

복제: 복제 슬레이브가 병렬화에 쓰기 집합을 사용할 때(binlog_transaction_dependency_tracking 시스템 변수로 지정), 빈 트랜잭션은 무시되며 릴레이 로그 회전의 처리가 최적화되었습니다. (버그 #25982097)

복제: 성능 스키마의 replication_applier_status_by_worker 테이블이 비활성 작업자에 대해 APPLYING_TRANSACTION 값을 잘못 표시하는 경우가 있었습니다. 이 테이블은 작업자 스레드가 중지되기 전에 채워지고 있었습니다. (버그 #25896166, 버그 #85951)

복제: START GROUP_REPLICATION이 실행 중일 때 플러그인을 제거하려고 하면 예기치 않은 동작이 발생할 수 있었습니다. (버그 #25423650, 버그 #91042, 버그 #28088177)

복제: 다수의 슬레이브 적용 작업자 스레드를 생성하는 중에 실패가 발생하면 일부 스레드가 고아 상태로 남아 리소스가 회수되지 않았습니다. 버그 수정에 기여한 Laurynas Biveinis님께 감사드립니다. (버그 #24679056, 버그 #82980)

복제: binlog_checksum 옵션은 트랜잭션 내에서 변경할 수 없습니다. 이 요청된 기능이 바이너리 로그에서 실행되는 동안 MySQL이 이 구문을 트랜잭션 내에서 로그할 수 없기 때문입니다. (버그 #22914463)

복제: group_replication_force_members는 그룹이 정상적으로 작동하는 상황, 즉 다수의 멤버에 접근할 수 있는 상황에서도 사용할 수 있었습니다. 이 잘못된 사용은 그룹의 불안정을 초래할 수 있었습니다. 따라서 이 기능은 다수의 멤버에 접근할 수 없고 이전 그룹의 일부 멤버로 새로운 멤버십을 형성하는 경우에만 사용하도록 제한되었습니다. (버그 #86359, 버그 #26093967)

복제: 낮은 버전의 멤버를 더 높은 버전의 그룹에 추가하면 더 높은 버전을 실행 중인 멤버들이 접근 불가능해졌습니다. (버그 #85026, 버그 #25568493)

그룹 복제: 그룹 복제 흐름 제어 변수는 이제 일부 멤버가 차단되었을 때 최소 처리량에 영향을 주지 않도록 설정할 수 있습니다. (버그 #26537497)

그룹 복제: 사용 가능한 리소스 부족으로 인해 그룹 복제 플러그인의 지연 초기화 스레드가 시작되지 않을 때, 잠긴 뮤텍스가 남아있었습니다. 이제 스레드가 시작되지 않을 경우 뮤텍스가 잠금 해제되도록 보장합니다. (버그 #26394678)

그룹 복제: 단일 기본 모드로 배포된 그룹 복제 플러그인이 지연 초기화된 경우, 비동기 복제 채널을 통해 보조 노드에서 쓰기가 가능해졌습니다. 이는 그룹 복제 플러그인의 일반적인 초기화에서는 허용되지 않습니다. (버그 #26314756)

그룹 복제: 옵션 파일에 그룹 복제 관련 설정이 포함된 경우 서버가 시작 시 예기치 않게 종료될 수 있었습니다. (버그 #26314472)

그룹 복제: 그룹 복제 복구 채널에 대해 구성할 때 group_replication_recovery_use_sslgroup_replication_recovery_ssl_verify_server_cert의 값이 업데이트되지 않았습니다. (버그 #26142801)

그룹 복제: server_uuidgroup_replication_group_name과 동일한 값으로 설정할 수 있었으며, 이로 인해 예기치 않은 동작이 발생했습니다. GTID는 UUID로 식별되므로 이 문제를 해결하기 위해 server_uuidgroup_replication_group_name과 동일한 값으로 설정하는 것이 더 이상 허용되지 않습니다. (버그 #26035931)

그룹 복제: 잘못된 값으로 그룹 복제 흐름 제어 옵션이 설정된 상태로 서버를 시작할 수 있었습니다. 이제 --group-replication-flow-control-min-quota, --group-replication-flow-control-max-quota, 및 --group-replication-flow-control-min-recovery-quota 옵션은 서버 시작 시 유효성을 검사합니다. (버그 #87206, 버그 #26531899)

그룹 복제: 그룹 복제 멤버에 대해 호스트 이름 해상도가 작동하지 않을 때, 실제 문제는 호스트 이름 해상도에 있지만 연결 시도 시 자격 증명 문제로 잘못된 오류가 반환되었습니다. (버그 #86858, 버그 #26368004)

그룹 복제: 그룹 복제 플러그인은 이제 단일 기본 모드가 활성화된 경우 auto_increment_incrementauto_increment_offset을 설정하지 않습니다. (버그 #86669, 버그 #26263155)

그룹 복제: 그룹 복제 파티션 스레드가 성능 스키마에 표시되지 않았습니다. (버그 #86626, 버그 #26241008)

JSON: JSON 객체와 배열의 내부 표현(Json_objectJson_array)에서 컨테이너가 Json_dom에 대한 원시 포인터 대신 스마트 포인터를 사용하도록 변경되었습니다. 이제 고아가 된 DOM 객체가 자동으로 삭제됩니다. (버그 #26161264)

JSON: JSON 문서 내 문자열 리터럴에서 ASCII 문자 31(\u001f, 단위 구분자)이 문자열로 포맷될 때 인용되지 않았습니다(예: CAST('"\u001f"' AS JSON)일 때). (버그 #25977959)

JSON: path_expression이 배열이 아닌 값을 식별할 때, JSON_INSERT()JSON_ARRAY_INSERT() 함수가 path_expression[0]path_expression과 동일하게 평가하지 못했습니다. (버그 #86213, 버그 #26022576)

JSON: 와일드카드를 사용한 JSON_EXTRACT() 검색이 비정상적으로 긴 시간이 걸렸습니다. (버그 #84523, 버그 #25418534)
참고: 관련 사항으로는 버그 #83959, 버그 #25151440이 있습니다.

높은 부하 상태에서 성능 스키마 버퍼 컨테이너 코드에서 무한 루프가 발생했습니다. (버그 #26666274)

MySQL 전용 typedef(ucharmy_bool)가 mysql.h 헤더 파일이 포함된 경우 클라이언트 네임스페이스에 잘못 재도입되었습니다. (버그 #26588846, 버그 #26582752, 버그 #87337)

uint8korr() 및 관련 매크로가 x86에서도 비정렬 접근을 명시적으로 수행하도록 수정되었습니다. (버그 #26568748, 버그 #87298)

main.mysql_upgrade_grant, main.roles-upgrade, 및 auth_sec.secure_file_priv_warnings 테스트 케이스가 오류 로그를 잘못 처리했습니다. sys_vars.innodb_redo_log_encrypt_basic 테스트 케이스 출력이 불안정했습니다. 패치를 제공해 주신 Laurynas Biveinis님께 감사드립니다. (버그 #26562401, 버그 #87279, 버그 #26575150, 버그 #87313, 버그 #26575142, 버그 #87314, 버그 #26582158, 버그 #87303)

디버그 빌드에서 sql_buffer_result가 활성화된 경우 재귀적 공통 테이블 표현식이 서버 종료를 유발했습니다. (버그 #26556025)

윈도우 함수가 상수 함수로 잘못 해석되면 서버가 종료될 수 있었습니다. (버그 #26500442)

윈도우 함수에서 GROUP BY ... WITH ROLLUP을 사용할 때 서버가 종료될 수 있었습니다. (버그 #26497353, 버그 #26497247)

윈도우 함수에서 JSON 열이 어설션을 발생시켰습니다. (버그 #26496733)

윈도우 함수에서 RANGE 프레임에 대한 인수보다 작은 값을 사용할 때 서버가 종료되었습니다. (버그 #26496645)

-DWITHOUT_SERVER=1로 컴파일할 때 my_symlink.c에 대해 my_dir.h에 대한 #include가 누락되어 컴파일 오류가 발생했습니다. 패치를 제공해 주신 Christian Hesse님께 감사드립니다. (버그 #26495816, 버그 #87137)

-DWITH_SSL=system-DWITH_ZLIB=system로 컴파일할 때 시스템 openssl zlib 명령이 사용 가능하다고 가정했으나, 그렇지 않을 수 있었습니다. 이제 해당 명령의 가용성을 확인하며, 사용 불가능할 경우 zlib_decompress 유틸리티가 빌드됩니다. (버그 #26494495, 버그 #87123)

yaSSL이 TLS 암호 협상을 잘못 수행할 수 있었습니다. (버그 #26482173)

일부 thread_stack 설정으로 인해 서버가 종료될 수 있었습니다. (버그 #26438067)

윈도우 함수에서 ROW 프레임이 행 수에 대한 비정수 인수를 허용했습니다. (버그 #26411055, 버그 #86990)

REPLACE(UUID(),...) 표현식이 (잘못) 캐시되어 결과 집합의 각 행에 대해 동일한 값을 반환할 수 있었습니다. (버그 #26395601)

소스 트리 내에서 MySQL을 빌드할 때, make install이 일부 CMake 파일을 트리 내의 mysql-test 디렉터리에 설치했습니다. (버그 #26385175, 버그 #86905)

Performance Schema의 session_connect_attrssession_account_connect_attrs 테이블의 PROCESS_ID 열이 더 큰 프로세스 ID 값을 수용하기 위해 INT에서 BIGINT UNSIGNED로 변경되었습니다. 패치를 제공해 주신 Daniël van Eeden님께 감사드립니다. (버그 #26357806, 버그 #86835)

생성된 열의 값이 JSON_EXTRACT()에서 생성된 경우, 옵티마이저가 필요한 경우에도 해당 열의 인덱스를 사용하지 않는 경우가 있었습니다. (버그 #26352119)

log_error_services 시스템 변수를 NULL로 설정하면 서버가 종료되었습니다. (버그 #26331795)

tar 파일 패키지의 경우, 일부 테스트 스위트 공유 라이브러리가 서버 패키지에 설치되었고 테스트 패키지에는 설치되지 않았습니다. (버그 #26329850)

유효한 뷰에 대한 SHOW COLUMNS 쿼리가 실패할 수 있었습니다. (버그 #26322203, 버그 #86778)

히스토그램 통계의 이름을 변경하거나 제거하는 작업이 서버 종료를 유발할 수 있었습니다. (버그 #26303972)

VARCHAR 열에 대해 명시적 정렬(ORDER BY col_name COLLATE collation_name)을 사용할 때, 암시적 정렬(COLLATE 절 없음)보다 훨씬 느렸습니다. 심지어 명시적 정렬이 암시적 정렬과 동일한 경우에도 마찬가지였습니다. (버그 #26286790, 버그 #86710)

SET binlog_format = ROW이 구문 오류를 발생시켰습니다. ROW는 이제 예약어이기 때문입니다. 이전과의 호환성을 위해 이 구문이 특별히 인식됩니다. (버그 #26269280)

SET PERSIST_ONLYSYSTEM_VARIABLES_ADMINPERSIST_RO_VARIABLES_ADMIN 권한이 있는 사용자만 사용할 수 있어야 하지만, SUPER 권한이 있는 사용자에게도 잘못 허용되었습니다. (버그 #26247864)

MySQL 8.0.0에서 도입된 information_schema_stats 구성 옵션이 제거되고 information_schema_stats_expiry로 대체되었습니다.
information_schema_stats_expiry는 캐시된 INFORMATION_SCHEMA 테이블 통계의 만료 설정을 정의합니다. 자세한 내용은 INFORMATION_SCHEMA 쿼리 최적화를 참조하십시오.
TABLES_DYNAMICSTATISTICS_DYNAMIC 내부 시스템 뷰가 제거되었습니다. (버그 #26203731, 버그 #83957)

Debian 플랫폼용 소스 패키지에 미리 빌드된 디버그 바이너리가 포함되어 있어 다른 아키텍처에서 빌드가 실패했습니다. (버그 #26186911)

서버 시작 시 로드 가능한 함수 등록 서비스가 작동하지 않았습니다. (버그 #26173244)

Performance Schema의 setup_objects 테이블에서 테이블 계측을 비활성화하면 인덱스 통계의 인덱스 이름이 잘못될 수 있었습니다. (버그 #26162562)

존재하지 않는 테이블스페이스 파일을 삭제하려고 시도할 때 잘못된 오류 메시지가 반환되었습니다. (버그 #26133507, 버그 #86438)

mysqlbinlog--read-from-remote-server 옵션과 함께 실행할 때, --rewrite-db 옵션을 사용하여 지정된 재작성 규칙이 무시되어 데이터가 대상 데이터베이스에 기록되지 않았습니다. (버그 #26117735, 버그 #86288)

DDL 작업 중 데이터 딕셔너리 캐시에서 복사된 타임스탬프 데이터가 더 이상 유효하지 않은 time_zone 값으로 변환되었습니다. 이로 인해 릴리스 빌드에서 오류가 발생하고 디버그 빌드에서 어설션 실패가 발생했습니다. (버그 #26091333, 버그 #86290)

데이터 딕셔너리 업데이트가 성공했지만 바이너리 로그 이벤트 기록에 실패하면 일관되지 않은 상태가 발생할 수 있었습니다. (버그 #26037355)

mysqlbinlog은 이제 Table_map_log_event 이벤트 유형에 대한 전체 메타데이터를 출력합니다. (버그 #26020990)

ALTER EVENT 구문에서 일부 문자열 함수가 서버 종료를 유발할 수 있었습니다. (버그 #25942505)

daemon_memcached 플러그인을 제거할 때 심각한 오류가 발생했습니다. (버그 #25909540)

공통 테이블 표현식과 많은 ? 매개변수를 사용하는 준비된 구문이 느릴 수 있었습니다. (버그 #25903274, 버그 #85933)

UPDATE 또는 DELETE 구문에 ORDER BY ... LIMIT 절이 포함된 경우, 옵티마이저가 filesort보다 저렴한 정렬 방법을 찾지 못하는 경우가 있었습니다. (버그 #25899921)

rpl_diff.inc 테스트 케이스 파일이 서버 간의 데이터 차이를 찾지 못했습니다. 패치를 제공해 주신 Yura Sorokin님께 감사드립니다. (버그 #25860138, 버그 #85838)

ngram 전체 텍스트 파서 검색 쿼리가 잘못된 결과를 반환하고 어설션을 발생시켰습니다. (버그 #25851975)

인덱스 가상 생성 열, 외래 키, 트리거의 조합이 어설션을 유발할 수 있었습니다. (버그 #25817660, 버그 #85757)

뷰에서 선택할 때 물질화 활성화 여부에 따라 결과가 다르게 나타날 수 있었습니다. (버그 #25782811, 버그 #85622)

SET PERSISTevent_scheduler 시스템 변수를 설정한 후 --skip-grant-tables 옵션으로 서버를 시작하면 서버가 재시작에 실패했습니다. (버그 #25776940)

디버그 빌드에서 외래 키 관계가 있는 테이블에 인덱스를 추가하면 어설션이 발생할 수 있었습니다. (버그 #25739983)

시스템 테이블에 대한 MIN()/MAX() 접근으로 인해 어설션이 발생할 수 있었습니다. (버그 #25738624)

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 테이블이 데이터 딕셔너리가 아닌 InnoDB 스토리지 엔진에서 외래 키 정보를 요청했습니다. (버그 #25730513)

실패한 DROP VIEW가 바이너리 로그에 기록될 수 있었습니다. (버그 #25680097)

SHOW CREATE VIEW가 원래 뷰 정의에 없던 데이터베이스 이름 접두사를 테이블 이름에 추가할 때가 있었습니다. (버그 #25634576, 버그 #85176)

Performance Schema의 variables_info 테이블이 !include 또는 !includedir 지시어로 지정된 옵션 파일 내 변수에 대해 잘못된 VARIABLE_SOURCEVARIABLE_PATH 값을 표시했습니다. (버그 #25563891)

UCA 기반 정렬에 대한 상수 문자열 전파가 실패할 수 있었습니다. (버그 #25503965, 버그 #84837)

mysqlpump이 덤프된 테이블 수에 대한 잘못된 진행 정보를 표시했습니다. (버그 #25432850)

수축 문자(contraction character)를 포함하는 테일러링 규칙을 사용하는 UCA 9.0.0 정렬에 대한 계산이 비효율적이었습니다. (버그 #25426632, 버그 #84577)

DECIMAL 값에 대한 GROUP BY DESCNULL 값을 비-NULL 값과 잘못 그룹화할 수 있었습니다. (버그 #25407964, 버그 #84537)

일부 mysqldump 경고가 표준 출력으로 전송되어 덤프 파일에 기록되었습니다. (버그 #25380000, 버그 #82992)

WITH ROLLUP 결과로 생성된 NULL 값이 GROUP BY .. WITH ROLLUP 절이 포함된 뷰에서 준비된 구문을 실행할 때 이전 행의 값으로 대체되었습니다. (버그 #25174118)

전체 텍스트 검색 결과가 innodb_ft_result_cache_limit 설정을 초과하면 서버 오류가 발생했습니다. 이 버그의 패치에는 관련 패치(버그 #21140111)도 포함되었습니다. (버그 #25033538)

MySQL 8.0.1에서 구문 분석기가 리팩토링된 후 일부 INSERT ... ON DUPLICATE KEY UPDATE 구문이 잘못 처리되었습니다. 이 문제는 수정되었습니다. (버그 #24716127, 버그 #25526439, 버그 #25071305)

디버그 빌드에서 16진수 형식의 기본값이 있는 VARBINARY 또는 BINARY 열을 가진 CREATE TABLE 구문이 서버 종료를 유발했습니다. (버그 #24679166, 버그 #83020)

옵티마이저가 상수로 간주하는 저장 함수가 WHERE 절의 NOT IN 조건에서 서브쿼리로 호출될 때 서버 종료를 유발할 수 있었습니다. (버그 #23577867)

mysqldump 메모리 누수가 수정되었습니다. 패치를 제공해 주신 Yura Sorokin님께 감사드립니다. (버그 #23531150, 버그 #81714)

조인 버퍼에 가상 생성 열이 포함된 상태에서 배치 키 접근 최적화를 사용하는 쿼리가 잘못된 결과를 반환하거나 서버 종료를 유발할 수 있었습니다. (버그 #23169112)

세션이 세이브포인트로 롤백된 후 종료되면 세이브포인트까지의 구문이 커밋될 수 있었습니다. (버그 #22350047, 버그 #79596)

MySQL은 외부 쿼리 블록에서 정의된 집계된 표현식의 별칭을 참조할 때, 그 참조가 의미 없는 GROUP BY 서브쿼리에서도 이를 허용했습니다. (버그 #21974346, 버그 #78785)

sha256_password 플러그인을 사용하여 인증하는 Connector/Python을 사용하는 클라이언트에서 서버가 연결을 잘못 처리할 수 있었습니다. (버그 #21421642)

GROUP BY가 포함된 일부 SELECT DISTINCT 쿼리가 잘못된 결과를 반환할 수 있었습니다. (버그 #20692219, 버그 #76283)

Leave a Comment



이 문서 공유

8.0.3 변경 사항 (2017-09-21 RC)

링크 복사

CONTENTS