계정 관리 관련 사항
-
데이터 디렉터리 초기화 또는 업그레이드 중에 MySQL은 이제
'mysql.session'@'localhost'예약 계정을 생성합니다. 이 계정은 플러그인이 서버에 접근하기 위해 내부적으로 사용됩니다. 클라이언트 연결에 사용할 수 없도록 잠겨 있습니다. (Bug #25642343) -
이제 필수 역할을 정의하고 부여된 역할이 클라이언트 연결 시점에 자동으로 활성화되도록 하기 위해 다음 시스템 변수를 사용할 수 있습니다:
mandatory_roles는 서버가 모든 사용자에게 자동으로 부여된 것으로 처리해야 하는 역할을 나열하는 값을 사용합니다.activate_all_roles_on_login은 사용자가 서버에 로그인할 때 부여된 모든 역할의 자동 활성화에 대한 제어를 활성화합니다.
자세한 내용은 Using Roles를 참조하십시오. (WL #924)
캐릭터셋 지원
-
NO PAD콜레이션을 사용하는 유니코드 데이터의 경우, 멀티바이트 및 가변 길이 값의 정렬이 개선되었습니다:NO PAD콜레이션은utf8mb4_0900_ai_ci또는utf8mb4_ja_0900_as_cs와 같이 UCA 9.0.0 이상을 기반으로 하는 콜레이션입니다.- 성능 개선은 짧은 가중치 문자열을 가진 키 값, 즉 가중치 문자열이 허용된 전체 길이를 채우지 않는 문자열에서 가장 큽니다.
utf8mb4_0900_ai_ci콜레이션을 사용하는VARCHAR(10)컬럼의 경우, 값은 최대 160바이트를 사용할 수 있습니다. 문자열'a'는 가능한 160바이트 중 2바이트만 사용하며,'abcdefghij'보다 더 희소합니다. 그러나'abcdefghij'도 가능한 160바이트 중 20바이트만 사용하며, 예를 들어 가중치 문자열에 사용 가능한 전체 160바이트가 필요한 U+337F SQUARE CORPORATION(㍿) 10개로 이루어진 문자열보다 더 희소합니다.
(Bug #25750527, Bug #85546, WL #9554)
-
MySQL은 이제
utf8mb4유니코드 캐릭터셋에 대해 새 콜레이션utf8mb4_0900_as_ci를 지원합니다. 이 콜레이션은 액센트를 구분하고 대소문자를 구분하지 않습니다. 기본utf8mb4콜레이션(utf8mb4_0900_ai_ci)과 유사하지만, 기본 콜레이션은 액센트를 구분하지 않는다는 점이 다릅니다.MySQL은 이제
utf8mb4유니코드 캐릭터셋에 대해 새 일본어 콜레이션utf8mb4_ja_0900_as_cs_ks도 지원합니다. 이 콜레이션은 액센트를 구분하고 대소문자를 구분한다는 점에서utf8mb4_ja_0900_as_cs와 같지만,utf8mb4_ja_0900_as_cs_ks는 가나도 구분하며 가타카나 문자를 히라가나 문자와 구별합니다.utf8mb4_ja_0900_as_cs는 정렬에서 가타카나 문자와 히라가나 문자를 동일하게 취급합니다. 일본어 콜레이션이 필요하지만 가나 구분이 필요하지 않은 애플리케이션은 더 나은 정렬 성능을 위해utf8mb4_ja_0900_as_cs를 사용할 수 있습니다.utf8mb4_ja_0900_as_cs는 정렬에 세 개의 가중치 수준을 사용하며,utf8mb4_ja_0900_as_cs_ks는 네 개를 사용합니다.utf8mb4_ja_0900_as_cs_ks는_ks콜레이션 접미사를 사용하는 첫 번째 콜레이션입니다. 이 접미사가 없는 일본어 콜레이션은 가나를 구분하지 않습니다.자세한 내용은 유니코드 캐릭터셋을 참조하십시오. (WL #10480, WL #10818)
-
이러한 캐릭터셋 변경이 MySQL 클라이언트 지원에 적용되었습니다:
- 다음 클라이언트는
latin1대신utf8mb4를 기본 캐릭터셋으로 사용합니다: mysql, mysql_upgrade, mysqladmin, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlslap, mysqlshow, mysqltest. (이 변경은 Connection Character Sets and Collations에 설명된 것처럼 mysql, mysqladmin, mysqlcheck, mysqlimport,mysqlshow가 수행하는 캐릭터셋 자동 감지에는 영향을 주지 않습니다.) libmysqlclient라이브러리를 사용하여 생성된 클라이언트 연결은latin1대신utf8mb4를 기본 캐릭터셋으로 사용합니다.- mysqltest 프로그램은 캐릭터셋을 명시적으로 지정하기 위한
--default-character-set옵션을 지원합니다.
(WL #10353)
- 다음 클라이언트는
컴파일 관련 사항
-
성능: GCC에 대한 strict aliasing 최적화가 더 이상 비활성화되지 않으며, 이로 인해 MySQL 단일 스레드 성능이 소폭 향상됩니다. (WL #10344)
-
Linux: 이제 MySQL은 Alpine Linux에서 컴파일됩니다. (Bug #25945568, Bug #80322)
-
Solaris: Solaris에서 서버 빌드는 이제
std::atomic을 사용하므로,libstatomic에 대해 링크되어야 합니다. (Bug #25957991) -
이제 MySQL은 Visual Studio 2017을 사용하여 컴파일됩니다. (Bug #25788406)
-
서버 빌드에 필요한 Boost 라이브러리의 최소 버전은 이제 1.64.0입니다. (Bug #25772329, Bug #85593)
-
클라이언트 프로그램 개발과 관련하여 다음 변경 사항이 적용되었습니다:
- 클라이언트 프로그램은
<mysql.h>헤더 파일만#include하면 됩니다. 특히<my_config.h>는 필요하지 않아야 하며, 더 이상 설치되지 않습니다. my_init()함수는 더 이상libmysqlclient에서 내보내는 심볼 목록에 포함되지 않습니다. 이 함수는 다른 C API 초기화 함수에 의해 암시적으로 호출되므로 클라이언트 프로그램에서 명시적으로 호출할 필요가 없습니다.
(Bug #25732787)
- 클라이언트 프로그램은
-
Xcode IDE의 경우, 검색할 수 있도록 헤더 파일이 MySQL 프로젝트 소스에 추가됩니다. (Bug #25636986)
-
소스 코드 베이스를 정리하기 위한 작업이 수행되었으며, 여기에는 불필요한 CMake 검사 제거, 소스 파일에서 사용되지 않는 매크로 제거, 종속성 수를 줄이고 더 모듈식으로 만들기 위한 헤더 파일 재구성, 정의가 없는 함수 선언 제거, 로컬에서 작성된 함수를 업계 표준 라이브러리의 동등한 함수로 대체하는 작업이 포함됩니다.
컴포넌트 관련 사항
-
컴포넌트가 시스템 변수를 등록 및 등록 해제하고(
component_sys_variable_register,component_sys_variable_unregister) 상태 변수를 등록할 수 있도록 하는(status_variable_registration) 새 서비스를 사용할 수 있습니다. (WL #8020) -
컴포넌트와 플러그인이 로드 가능 함수를 등록 및 등록 해제할 수 있도록 하는 두 개의 새 서비스를 사용할 수 있습니다:
mysql_service_udf_registration및mysql_service_udf_registration_aggregate는 각각 스칼라 및 집계 로드 가능 함수에 대한 등록 서비스를 제공합니다. 이러한 서비스는 컴포넌트와 플러그인이CREATE FUNCTION및DROP FUNCTION문 없이 로드 가능 함수를 직접 관리할 수 있도록 합니다.이러한 서비스 또는
CREATE FUNCTION을 사용하여 등록된 로드 가능 함수는 새 Performance Schemauser_defined_functions테이블에 나열됩니다. The user_defined_functions Table을 참조하십시오. 이러한 로드 가능 함수는mysql.func시스템 테이블에는 나열되지 않으므로, 설치된 로드 가능 함수를 확인하려면user_defined_functions테이블을 사용하는 것이 좋습니다. (WL #8020) -
mysql_string문자열 조작 서비스가 플러그인 서비스에서 컴포넌트 서비스로 변환되었습니다: 컴포넌트에서 사용할 문자열 서비스 API 집합입니다. 비밀번호 검증 컴포넌트가 수정된 서비스 구현을 사용하도록 업데이트되었습니다. (WL #9503)
설정 관련 사항
-
이전에는
LOAD DATA작업에 대한LOCAL기능이 일부 컨텍스트에서 기본적으로 활성화되었습니다: MySQL 바이너리 배포판의 클라이언트 라이브러리는 클라이언트 측LOCAL기능이 활성화된 상태로 컴파일되었으며,local_infile시스템 변수는 서버 측에서 활성화되었습니다. 이제LOCAL기능은 모든 컨텍스트에서 기본적으로 비활성화됩니다. 클라이언트 프로그램은LOCAL을 활성화하도록 명시적으로 설정해야 하며, 서버는local_infile이 활성화된 상태로 실행되어야 합니다. Security Considerations for LOAD DATA LOCAL을 참조하십시오. (Bug #24511108) -
mysqld 시작 동작이 다음과 같이 수정되었습니다. 일반적으로 이러한 변경 사항은 mysqld_safe를 사용하지 않을 때 더 일관되거나 더 쉬운 서버 시작을 가능하게 합니다.
-
서버 실행 파일은 시작 시 자신의 전체 경로 이름을 확인하고, 자신이 위치한 디렉터리의 상위 디렉터리를 기본
basedir값으로 사용합니다. 이는 다시 서버가 오류 메시지를 포함하는share디렉터리와 같은 서버 관련 정보를 검색할 때 해당basedir를 사용할 수 있게 합니다. -
오류 로그 출력을
--log-error옵션 값으로 리디렉션할 수 없는 경우, 오류 출력이 손실될 수 있었습니다. 이제 이러한 가능성이 낮아졌습니다. -
서버가
--daemonize옵션을 사용하여 시작되고 tty 장치에 연결되어 있지 않은 경우, 명시적인 로깅 옵션이 없으면 오류 출력을 기본 로그 파일로 보내기 위해 기본 오류 로깅 옵션--log-error=""가 사용됩니다. 이전에는 이러한 상황에서 오류가 발생할 수 있었습니다. -
-D및-I옵션은 이제 각각--daemonize및--initialize의 동의어입니다.(Bug #20398088, Bug #75343, WL #10441)
-
-
MySQL은 이제 서버 재시작 후에도 유지되는 설정 변경을 런타임에 수행하기 위해
SET문 문법의SET PERSIST_ONLY변형을 지원합니다.SET PERSIST와 마찬가지로,SET PERSIST_ONLY는 변수 설정을 데이터 디렉터리의mysqld-auto.cnf라는 옵션 파일에 기록합니다. 그러나PERSIST와 달리PERSIST_ONLY는 런타임 전역 시스템 변수 값을 수정하지 않습니다. 이로 인해PERSIST_ONLY는 서버 시작 시에만 설정할 수 있는 읽기 전용 시스템 변수를 설정하는 데 적합합니다. 자세한 내용은 Using Option Files 및 SET Syntax for Variable Assignment를 참조하십시오.SET PERSIST_ONLY를 사용하려면 시스템 변수를 유지하는 데 필요한SYSTEM_VARIABLES_ADMIN권한에 더해 새로운PERSIST_RO_VARIABLES_ADMIN권한이 필요합니다. (WL #9787)
데이터 딕셔너리 관련 사항
-
column_stats시스템 테이블이 제거되고column_statistics데이터 딕셔너리 테이블로 대체되었습니다. (WL #8943) -
version데이터 딕셔너리 테이블의 이름이dd_properties로 변경되었습니다.동적 플러그인이 생성한
INFORMATION_SCHEMA테이블의 메타데이터는 이제 데이터 딕셔너리에 기록되며INFORMATION_SCHEMATABLES테이블을 통해 볼 수 있습니다.다음 테이블은 더 이상
INFORMATION_SCHEMA에서 보이지 않습니다:SHOW_STATISTICS,SHOW_STATISTICS_DYNAMIC,STATISTICS_BASE,STATISTICS_DYNAMIC,TABLES_DYNAMIC. 이러한 테이블은 서버의 내부 사용을 위한 것이므로 사용자 영향은 최소입니다. (WL #9495) -
InnoDB스토리지 엔진은 이제 자체 스토리지 엔진별 데이터 딕셔너리 대신 MySQL 데이터 딕셔너리를 사용합니다. 데이터 딕셔너리에 대한 자세한 내용은 MySQL Data Dictionary를 참조하십시오.다음 목록은 이 변경의 주요 영향을 간략히 설명합니다:
-
업그레이드 및 다운그레이드 영향:
- MySQL 5.7에서 MySQL 8.0으로 업그레이드하려면 Upgrading MySQL에 설명된 업그레이드 절차를 수행해야 합니다.
- MySQL 8.0에서 MySQL 5.7로 다운그레이드하는 것은 논리적 다운그레이드 방법(mysqldump 다운그레이드)을 사용하는 경우에만 지원됩니다. 인플레이스 다운그레이드는 지원되지 않습니다.
-
transportable tablespace 기능을 사용하여 테이블스페이스를 내보내고 가져오는 것과 관련된 메타데이터 업데이트는 이제
InnoDB데이터 딕셔너리 테이블 대신 전역 데이터 딕셔너리 테이블에서 수행됩니다. -
InnoDB인메모리 메타데이터는 이제 전역 데이터 딕셔너리 객체에서 인스턴스화됩니다. 이 메타데이터는 이전에는InnoDB시스템 테이블에서 읽었습니다. -
테이블스페이스 암호화와 투명한 페이지 압축을 나타내는 테이블 옵션은 이제 전역 데이터 딕셔너리에서 검색됩니다.
-
InnoDBFULLTEXT인덱스에 대한 데이터 딕셔너리 지원이 추가되었습니다. 보조 인덱스 테이블 이름은 소문자로 변경되었습니다. -
DDL 작업 중 생성되거나 수정되는
InnoDB메타데이터는 이제 전역 데이터 딕셔너리에 기록됩니다.
(WL #9461, WL #9537, WL #9534, WL #9531, WL #9530, WL #9525, WL #9357)
-
-
mysql시스템 테이블과 데이터 딕셔너리 테이블은 이제 MySQL 데이터 디렉터리에 있는mysql.ibd라는 단일InnoDB테이블스페이스 파일에 생성됩니다. 이전에는 이러한 테이블이mysql데이터베이스 디렉터리의 개별InnoDB테이블스페이스 파일에 생성되었습니다. 관련 변경 사항은 다음을 포함합니다:-
빠르게 변경되는
InnoDB메타데이터를 저장하는InnoDB데이터 딕셔너리 버퍼 테이블은innodb_dynamic_metadata로 이름이 변경되었고,InnoDB시스템 테이블스페이스에서 데이터 딕셔너리 테이블스페이스로 이동되었습니다. -
Undo 테이블스페이스 메타데이터는 이제 데이터 딕셔너리 테이블스페이스에 있습니다.
-
임시 테이블스페이스 메타데이터는 이제 데이터 딕셔너리 테이블스페이스에 있습니다.
-
mysql테이블스페이스,InnoDB시스템 테이블스페이스(innodb_system) 또는 일반 테이블스페이스에 생성된 테이블의 테이블 정의에는 이제TABLESPACE속성이 포함됩니다. 이 변경에는 다음과 같은 영향이 있습니다:- 앞서 언급한 테이블스페이스 중 하나에 있는 테이블의 정의를 기반으로 빈 테이블을 생성하기 위해
CREATE TEMPORY TABLE... LIKE를 사용할 수 없습니다. 이러한 테이블스페이스는 임시 테이블을 지원하지 않기 때문입니다. CREATE TABLE... LIKE는 원본 테이블의TABLESPACE속성을 보존하며,innodb_file_per_table설정과 관계없이 정의된 테이블스페이스에 새 테이블을 생성합니다. 이는 일시적인 regression입니다.
자세한 정보와 우회 방법은 CREATE TABLE... LIKE Statement 및 CREATE TEMPORARY TABLE Statement를 참조하십시오.
- 앞서 언급한 테이블스페이스 중 하나에 있는 테이블의 정의를 기반으로 빈 테이블을 생성하기 위해
(WL #9532)
-
사용 중단 및 제거 관련 사항
-
mysql 클라이언트는 기본적으로 서버로 전송되는 문에서 주석을 제거하며, 이 동작은
--skip-comments(주석 제거) 및--comments(주석 보존)를 사용하여 제어됩니다.주석 제거는 이제 사용 중단되었습니다. 이 기능과 이를 제어하는 옵션은 향후 MySQL 버전에서 제거됩니다. (WL #10944)
-
explicit_defaults_for_timestamp시스템 변수는 이제 기본적으로 활성화되며(이전에는 기본적으로 비활성화됨), 이를 비활성화하면 경고가 발생합니다. 이는TIMESTAMP컬럼의 기본값 및NULL값 처리에 대한 비표준(및 사용 중단된) 동작이 이제 기본적으로 비활성화됨을 의미합니다. (WL #9687) -
테이블 및 컬럼 참조에 대한 이러한 사용 중단된 구문 구성에 대한 지원이 제거되었으며, 이제 이를 사용하면 오류가 발생합니다. 이러한 구성의 인스턴스는 선행 마침표를 제거하도록 변경해야 합니다.
.col_name.tbl_name.tbl_name.col_name
(WL #8662)
-
Unix에서 MyISAM 테이블에 심볼릭 링크 사용에 설명된 심볼릭 링크 지원과 이를 제어하는
--symbolic-links옵션은 이제 사용 중단되었으며 향후 MySQL 버전에서 제거됩니다. 또한 이 옵션은 이제 기본적으로 비활성화됩니다. 관련have_symlink시스템 변수도 사용 중단되었으며 향후 MySQL 버전에서 제거됩니다. (WL #8392)
SQL 함수 및 연산자 관련 사항
-
MySQL은 이제 쿼리의 각 로우에 대해 해당 로우와 관련된 로우를 사용하여 계산을 수행하는 윈도우 함수를 지원합니다. 여기에는
RANK(),LAG(),NTILE()같은 함수가 포함됩니다. 또한 대부분의 기존 집계 함수도 이제 윈도우 함수로 사용할 수 있습니다. 예를 들어SUM()및AVG()가 있습니다. 자세한 내용은 Window Functions를 참조하십시오.다음 각 단어는 이제 예약어이며, 식별자 따옴표 처리 없이 식별자로 사용할 수 없습니다:
CUME_DIST,DENSE_RANK,FIRST_VALUE,GROUPS,LAG,LAST_VALUE,LEAD,NTH_VALUE,NTILE,OVER,PERCENT_RANK,RANK,ROW_NUMBER,WINDOW.(WL #9236, WL #9603, WL #9727)
로깅 관련 사항
-
호환되지 않는 변경: 다음 오류 로깅 변경 사항이 적용되었습니다:
-
서버가 설정된 오류 메시지 파일(
lc_messages_dir및lc_messages시스템 변수를 사용하여 지정됨)을 찾을 수 없는 경우에 대해 더 관대하게 동작합니다. 이전에는 서버가 문제를 나타내는 메시지를 오류 로그에 기록한 다음, 시작 프로세스를 중단하고 종료했습니다. 이제 서버는 메시지를 기록하지만, 시작을 계속하고 내장된 영어 메시지를 기본값으로 사용합니다. 이는 서버가 오류 로그에 기록하고 클라이언트로 보내는 메시지에 적용됩니다. Setting the Error Message Language를 참조하십시오. -
오류 로깅이 MySQL 컴포넌트 아키텍처를 사용하도록 다시 작성되었습니다. 기존 오류 로깅은 내장 컴포넌트를 사용하여 구현되며, 시스템 로그를 사용하는 로깅은 로드 가능한 컴포넌트로 구현됩니다. 또한 로드 가능한 JSON 형식 로그 싱크를 사용할 수 있습니다. 활성화할 로그 컴포넌트를 제어하려면
log_error_services시스템 변수를 사용하십시오. 자세한 내용은 The Error Log를 참조하십시오. -
비호환성: 시스템 로그에 대한 로깅을 활성화하려면
log_sink_syseventlog로그 컴포넌트를 로드하고log_error_services값에 나열해야 합니다(Error Logging to the System Log 참조). 이는 시스템 로그에 대한 로깅이 Windows에서 기본적으로 활성화되고, 모든 플랫폼에서 컴포넌트 로드가 필요하지 않은 MySQL 5.7 및 이전 버전과 다릅니다.이 설정 변경의 결과로, 시스템 로그에 대한 로깅을 제어하는 데 이전에 사용되던
log_syslog시스템 변수는 더 이상 사용되지 않으며 해당 값의 변경은 효과가 없습니다.log_syslog는 이제 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다.
(WL #9323, WL #9342, WL #9343, WL #9344)
-
Optimizer 관련 사항
-
MySQL은 이제 테이블 컬럼 값에 대한 히스토그램 통계 관리를 활성화합니다:
ANALYZE TABLE문은 컬럼 히스토그램 통계를 생성하고 제거하기 위한UPDATE HISTOGRAM및DROP HISTOGRAM절을 지원합니다.- 서버는 히스토그램 정보를
column_statistics데이터 딕셔너리 테이블에 저장합니다. 히스토그램은INFORMATION_SCHEMA.COLUMN_STATISTICS테이블을 사용하여 볼 수 있습니다. histogram_generation_max_mem_size시스템 변수는 히스토그램 생성에 사용할 수 있는 메모리 양을 제어합니다.- Performance Schema에는 히스토그램 생성을 위해 수행되는 메모리 할당을 모니터링하기 위한
memory/sql/histograms계측기가 있습니다. - mysqldump 및
mysqlpump에는 덤프 파일이 다시 로드될 때 덤프된 테이블에 대한 히스토그램 통계를 생성하도록ANALYZE TABLE문을 출력에 추가하는--column-statistics옵션이 있습니다.
자세한 내용은 ANALYZE TABLE Statement, Optimizer Statistics, 및 The INFORMATION_SCHEMA COLUMN_STATISTICS Table을 참조하십시오. (WL #8943)
패키징 관련 사항
- mysqladmin은 InnoDB Cluster에 필요하므로 Docker/Minimal 패키지에 추가되었습니다. (Bug #25998285)
- Windows의 경우, MSI 설치 관리자 패키지는 이제 필요한 Visual Studio redistributable package에 대한 검사를 포함하며, 해당 패키지가 없으면 사용자에게 설치를 요청하는 메시지를 생성합니다. (Bug #25658832)
- Debian/Ubuntu 패키지는 이제 systemd를 사용하는 여러 MySQL 인스턴스를 지원합니다. Managing MySQL Server with systemd를 참조하십시오. (Bug #24559588, Bug #82785)
파서 관련 사항
ALTER TABLE에 대한 파서 규칙은 컨텍스트에 독립적이도록 리팩터링되었으며, 유지보수성과 확장성을 개선했습니다. 그 결과로 이전에 허용되던 일부 문서화되지 않은 문법 변형은 더 이상 허용되지 않습니다. 예를 들어, 컬럼 이름을 테이블 이름으로 한정하거나 현재 데이터베이스 및 테이블 이름으로 한정한CREATE TABLE문이 허용되었으며, 컬럼 이름만 허용되는 특정ALTER TABLE문도 그러했습니다. 이러한 문은 이제 오류를 생성합니다. (WL #8657)
Performance Schema 관련 사항
-
Performance Schema
threads테이블에는 이제 리소스 그룹 레이블을 나타내는RESOURCE_GROUP컬럼이 포함됩니다. (WL #8881) -
Performance Schema는 이제 버전 관리를 지원하며, 해당 테이블의 현재 정의를 내부적으로 유지합니다. 시작 시 서버는 지원하는 Performance Schema 버전을 데이터 딕셔너리에 저장된 Performance Schema 버전과 비교합니다. 버전이 다르면 서버는 이전 Performance Schema 테이블을 모두 삭제하고 현재 정의를 사용하여 다시 생성합니다. 이 변경의 결과는 다음과 같습니다:
- MySQL 업그레이드의 경우 Performance Schema 테이블에 대한 변경 사항을 반영하기 위해 더 이상 mysql_upgrade를 실행할 필요가 없습니다. 해당 테이블은 서버 시작 시 필요에 따라 자동으로 다시 생성되기 때문입니다.
mysql_system_tables.sql지원 스크립트는 더 이상 Performance Schema 테이블 생성을 위한 SQL 문을 포함하지 않습니다. 이러한 테이블 정의는 내부적으로 유지되기 때문입니다.
동적 Performance Schema 테이블 조작을 지원하기 위해
pfs_table_service라는 새 컴포넌트 서비스가 이제 제공됩니다. (WL #7900, WL #8879) -
Performance Schema 기본 계측 설정이 변경되었습니다:
transaction계측기와events_transactions_current및events_transactions_history컨슈머는 이제 기본적으로 활성화됩니다. Performance Schema Transaction Tables를 참조하십시오.- 모든
memory/%메모리 계측기는 이제 기본적으로 활성화됩니다. Memory Summary Tables를 참조하십시오. wait/lock/metadata/sql/mdl메타데이터 잠금 계측기는 이제 기본적으로 활성화됩니다. The metadata_locks Table을 참조하십시오.
(WL #9625, WL #9628, WL #9629)
플러그인 관련 사항
-
호환되지 않는 변경: Group Replication 및 X Plugin과 같은 플러그인은 이제 이 릴리스에서 추가된
mysql.session계정을 사용합니다.mysql.session계정이 포함되지 않았던 이전 릴리스에서 업그레이드하는 경우, 계정이 생성되도록 mysql_upgrade를 실행해야 합니다. mysql_upgrade를 실행하지 않으면 플러그인은 There was an error when trying to access the server with user: mysql.session@localhost. Make sure the user is present in the server and that mysql_upgrade was run after a server update. 오류 메시지와 함께 시작하지 못합니다.mysqlxsys와 같이 이전에 이 목적으로 사용되던 사용자 계정은 더 이상 생성되지 않습니다. (Bug #26042764)참조: 다음도 참조하십시오: Bug #24311527, Bug #25642343, Bug #25750822, Bug #25103980, Bug #83841.
보안 관련 사항
-
MySQL Commercial Server에 연결된 OpenSSL 라이브러리가 버전 1.0.2l로 업데이트되었습니다. 새 OpenSSL 버전에서 수정된 문제는 http://www.openssl.org/news/vulnerabilities.html에 설명되어 있습니다.
이 변경 사항은 대신 yaSSL 라이브러리를 사용하는 Oracle 제작 MySQL Server의 MySQL Community 빌드에는 영향을 주지 않습니다. (Bug #26160962)
-
이전에는 모든 사용자가
XA RECOVER문을 실행하여 미해결 상태의 prepared XA 트랜잭션에 대한 XID 값을 발견할 수 있었으며, 이로 인해 XA 트랜잭션을 시작한 사용자가 아닌 다른 사용자가 해당 XA 트랜잭션을 커밋하거나 롤백할 가능성이 있었습니다. 이제XA RECOVER는 새XA_RECOVER_ADMIN권한을 가진 사용자에게만 허용되며, 이 권한은 필요로 하는 관리 사용자에게만 부여될 것으로 예상됩니다. 예를 들어 XA 애플리케이션이 크래시되어 애플리케이션이 시작한 미해결 트랜잭션을 찾아 롤백해야 하는 경우, 해당 XA 애플리케이션의 관리자에게 이 경우가 해당할 수 있습니다. 이 권한 요구 사항은 XA 트랜잭션을 시작한 사용자가 해당 XID를 알고 있으므로 XA 트랜잭션의 일반적인 커밋 또는 롤백에는 영향을 주지 않습니다.MySQL 업그레이드의 경우, mysql_upgrade는 이미
XA_RECOVER_ADMIN을 가진 계정이 발견되지 않는 한SUPER권한을 가진 사용자에게XA_RECOVER_ADMIN을 부여합니다. (Bug #17188129, WL #7194)
공간 데이터 지원
-
geometry 관계를 테스트하는 다음 공간 함수에 대해 인수 적합성 검사가 개선되었습니다:
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(). 자세한 내용은 객체 형태를 사용하는 공간 관계 함수 및 최소 경계 사각형을 사용하는 공간 관계 함수를 참조하십시오.이 작업의 결과로, 두 인수가 모두 하나의 차원성을 가진 기하를 포함하는 경우, 즉 공간 관계 함수에 전달된
GeometryCollection인수(또는 하나의GeometryCollection과 다른 타입의 기하)를MultiPoint,MultiLineString또는MultiPolygon으로 축소할 수 있는 경우에 대해 공간 관계 함수의 성능이 향상되었습니다. 이러한 경우에는 더 복잡한 일반GeometryCollection을 피할 수 있습니다. (Bug #22285402, Bug #79406, WL #8685)
테스트 스위트 관련 사항
-
mysql-test-run.pl의
--do-test-list옵션은 한 줄에 하나씩 테스트가 포함된 파일에 대한 인수를 받습니다. 이제 파일의 라인은 다음 형식 중 어느 것이든 허용됩니다:test_name test_name.test suite_name.test_name suite_name.test_name.test path/to/test/file(Bug #25700362)
-
이제 mysql-test-run.pl 및 mysqltest는 허용되는 테스트 케이스 및 결과 파일 이름에 대해 더 엄격합니다. 이름은 영숫자 문자(
A-Z,a-z,0-9), 대시(-) 또는 밑줄(_)로만 구성되어야 하며, 대시나 밑줄로 시작할 수 없습니다. 규칙을 따르지 않는 파일 이름에 대해서는 오류가 발생합니다. (Bug #25487471) -
mysql-test-run.pl의
--xml-report옵션에 다음 변경 사항이 적용되었습니다:<failure>태그는 재시도 시도에서 실패한 모든 테스트를 식별합니다.- 건너뛴 테스트와 비활성화된 테스트에 대해 별도의 통계와 필드가 포함됩니다.
- out-of-source 빌드에서 절대 경로가 지정되지 않은 경우 XML 보고서는 빌드 디렉터리에 생성됩니다.
- 조합 실행의 경우
variation이라는 필드가<testcase>태그에 포함됩니다. - 한 스위트에 속하는 모든 테스트의 결과는 단일
<testsuite>태그 내에 집계됩니다. - 실패와 관련된 정보는 태그 내의 다른 세부 정보와 함께
message라는 속성에 간략한 이유로 보고됩니다.
(Bug #25349924)
-
이제 mysql-test-run.pl은 다음 효과가 있는
--report-unstable-tests옵션을 지원합니다:- 적어도 하나의 재시도 시도를 사용하여 통과한 모든 테스트를 요약의 “불안정한 테스트”라는 별도 범주로 보고합니다.
- 모든 실패가 불안정한 테스트로 인한 것인 경우, mysql-test-run.pl은 경고를 생성하지만 성공적으로 종료됩니다.
--xml-report옵션도 지정된 경우, 불안정한 테스트를 보고하기 위한 새 XML 태그를 추가합니다.
(Bug #24473420, Bug #25984429)
-
mysqltest는 이제 숫자 값을 반올림할 소수 자릿수를 나타내는 0부터 16까지의 인수 값을 받는
replace_numeric_round명령을 지원합니다. 이는 정밀도 차이로 인해 플랫폼 간에 약간 다른 결과가 얻어지는 테스트에서 결과 내용 불일치 오류를 방지하는 데 사용할 수 있습니다. 패치를 제공한 Daniel Black에게 감사드립니다. (Bug #23280117, Bug #81399) -
mysql-test-run.pl은 이제
testname-client.opt파일을 찾습니다. 이 파일은testname-master.opt파일과 유사하지만 테스트별 클라이언트 옵션을 지정하는 데 사용됩니다. (Bug #17084918)
X 플러그인 관련 사항
- X Plugin은 이제 만료된 SSL 인증서를 올바르게 처리합니다. (Bug #25835833)
grouping_criteria표현식을 파생 쿼리로 이동하여GROUP BY및HAVING같은 절의 출력을 개선했습니다. (Bug #25549637, Bug #24497007)- X Plugin 설치 중 Firewall 허용 목록에 빈 규칙이 생성되고 있었습니다. (Bug #24488234)
추가되거나 변경된 기능
-
호환되지 않는 변경 사항; InnoDB:
ADD PARTITION,DROP PARTITION,COALESCE PARTITION,REORGANIZE PARTITION, 및REBUILD PARTITIONALTER TABLE옵션은 이제 네이티브 파티셔닝 in-place API에서 지원되며ALGORITHM={COPY|INPLACE}및LOCK절과 함께 사용할 수 있습니다.이전에
ALGORITHM및LOCK절을 지원했던EXCHANGE PARTITION은 MySQL 데이터 딕셔너리와의 호환성을 위해 새 서버 계층 API에서 수행됩니다. 파티션 및 테이블 교환은 네이티브 파티션 핸들러에서 내부적으로 수행됩니다.ALGORITHM=INPLACE를 사용하는DROP PARTITION은 파티션에 저장된 데이터를 삭제하고 파티션을 삭제합니다. 그러나ALGORITHM=COPY또는old_alter_table=ON을 사용하는DROP PARTITION은 파티셔닝된 테이블을 다시 빌드하고, 삭제된 파티션의 데이터를 호환되는PARTITION... VALUES정의가 있는 다른 파티션으로 이동하려고 시도합니다. 다른 파티션으로 이동할 수 없는 데이터는 삭제됩니다. (WL #9559) -
InnoDB: 이제
InnoDB는 복구 중에 redo 로그 적용이 필요한 테이블스페이스를 식별하기 위해 테이블스페이스 맵 파일을 사용합니다. 이는 이전에 사용되던 redo 로그 테이블스페이스 검색에서 변경된 사항입니다.테이블스페이스 맵 파일이 손실되었거나 손상된 경우, 서버 중단 후 MySQL을 시작할 때
innodb_scan_directories시작 옵션을 사용하여 테이블스페이스 디렉터리를 지정할 수 있습니다.자세한 내용은 크래시 복구 중 테이블스페이스 검색을 참조하십시오. (Bug #24793413, WL #9499)
-
InnoDB: 이전 릴리스에서
InnoDB는 테이블을 생성하거나 변경할 때 해당 속성이 자동으로 무시되더라도CREATE TABLE또는ALTER TABLE문에 지정된ROW_FORMAT및KEY_BLOCK_SIZE속성을 저장했습니다. 이러한 경우SHOW CREATE TABLE및SHOW TABLE STATUS가 보고하는Create_options컬럼은 테이블의 실제 속성 대신 지정된ROW_FORMAT및KEY_BLOCK_SIZE속성을 표시했습니다. 이제InnoDB는 테이블의 실제ROW_FORMAT및KEY_BLOCK_SIZE속성을 저장하고 보고합니다. (WL #9525) -
Replication: 이전 버전에서는
STOP GROUP_REPLICATION을 실행하면 플러그인은 중지되었지만 서버는 여전히 트랜잭션을 수락했습니다. 이는 트랜잭션이 그룹으로 전송되지 않았음을 의미했습니다.STOP GROUP_REPLICATION을 더 안전하게 만들기 위해, 이제STOP GROUP_REPLICATION을 실행하는 즉시super_read_only가ON으로 설정되어 트랜잭션이 수락되지 않도록 보장합니다. (Bug #25495067, Bug #84795, WL #10611, WL #10960) -
Replication: 네트워크 파티션이 있고 멤버가 소수 측에 있을 때 해당 멤버에 대한 모든 쿼리가 블록되었습니다. 이 상황을 개선하기 위해, 소수 측의 멤버가 그룹을 떠나기 전에 다수 측의 멤버와 다시 접촉할 때까지 기다리는 시간을 설정할 수 있게 하는
group_replication_unreachable_majority_timeout변수가 추가되었습니다. (Bug #25473794) -
Replication:
group_replication_transaction_size_limit변수가 추가되어, 대규모 트랜잭션이 실패를 유발하는 상황으로부터 그룹을 보호할 수 있게 되었습니다. (Bug #84785, Bug #25510757) -
Replication: MySQL 5.0보다 이전 버전에서 생성된 바이너리 로그 파일에 대한 지원이 제거되었으며, 바이너리 로그 Version 1 및 Version 3 형식은 더 이상 슬레이브 또는 mysqlbinlog에서 지원되지 않습니다. (WL #9219)
-
Replication: Performance Schema
replication_group_members및replication_group_member_stats테이블이 Group Replication을 위한 추가 모니터링 정보를 제공하도록 확장되었습니다. 이제replication_group_members에는 멤버 역할 및 지정된 멤버에서 실행 중인 MySQL 버전에 대한 정보가 포함됩니다. 이제replication_group_member_stats에는 그룹의 모든 멤버, applier 및 로컬 큐, 그리고 롤백된 트랜잭션에 대한 정보가 포함됩니다. (WL #10380) -
Replication: 디스크 공간을 기다릴 때 receiver 스레드가 더 이상 다른 스레드의 활동을 차단하지 않도록 개선되었습니다. 이로써 복제 모니터링이 개선되어, receiver 스레드가 디스크 공간을 기다리는 경우 이를 올바르게 보고하도록 보장합니다. receiver 스레드가 활동을 계속할 수 있도록 디스크 공간을 확보할 수 없는 경우, 대부분의 경우 부작용 없이 강제로 중지할 수 있습니다. (WL #10406)
-
Replication: 트랜잭션 길이를 바이트 단위로 저장하는 새 트랜잭션 길이 필드가
Gtid_log_event에 추가되었습니다. (WL #10493) -
Replication: 다음 변수는 기본적으로 복제가 가능한 한 견고하고 효율적이도록 하기 위해 기본값이 변경되었습니다:
-
master_info_repository=TABLE및relay_log_info_repository=TABLE은 복제 저장소 정보가 InnoDB 테이블에 저장되도록 하여, 예기치 않은 중단에 대해 복제가 복원력을 갖도록 합니다. -
transaction_write_set_extraction=XXHASH64은 write set 해시를 생성하기 위한 최적의 방법을 활성화합니다. -
slave_rows_search_algorithms='INDEX_SCAN,HASH_SCAN'은 테이블에 Primary Key 또는 Primary Key Equivalent(null이 아닌 고유 세컨더리 인덱스)가 없을 때 반복적인 테이블 스캔을 피하기 위해 해시 테이블 사용을 활성화합니다 -
expire_logs_days=30은 30일보다 오래된 사용되지 않는 바이너리 로그가 제거되도록 하여, 스토리지 공간이 효율적으로 사용되도록 보장합니다.(WL #10474, WL #10476, WL #10477, WL #10478)
-
-
Replication: Group Replication 플러그인은 이제 관련 이벤트가 발생했음을 다른 서버 컴포넌트에 알립니다. 플러그인은 서비스 레지스트리에 등록된 리스너에 정보를 제공하고 이벤트가 발생했음을 알립니다. 그러면 다른 플러그인을 포함한 이러한 리스너가 이 이벤트에 반응할 수 있습니다. 이러한 이벤트에는 뷰 변경, 복구 상태 업데이트, 네트워크 파티셔닝, Primary 선출이 포함됩니다. (WL #10412)
-
Group Replication: 단일 Primary 모드에서 새 Primary 선출을 제어할 수 있게 하는
group_replication_member_weight변수가 추가되었습니다. 이전 버전에서는 Primary 선출이 멤버의 UUID를 기반으로 했으며, 장애 조치 이벤트에서 가장 낮은 UUID가 새 Primary로 선출되었습니다. 이 변수를 사용하여 멤버에 숫자 가중치를 할당하면, 예를 들어 Primary의 예정된 유지보수 중이거나 특정 하드웨어가 우선되도록 보장해야 하는 경우에 특정 멤버가 선출되도록 할 수 있습니다. (WL #10433, WL #10959) -
Group Replication: Group Replication에 영향을 주는 다음 시스템 변수가 이 릴리스에서 추가되었습니다:
-
group_replication_flow_control_release_percent이 변수들을 사용하면 개별 그룹 멤버의 흐름 제어를 미세 조정하여, 해당 멤버가 그룹에서 수행하는 작업에 따라 할당량을 조정할 수 있습니다. (WL #9838)
-
JSON:
JSON_EXTRACT()및JSON_REMOVE()를 포함하여 많은 MySQL JSON 함수와 함께 사용되는 XPath 표현식에서 범위에 대한 지원이 추가되었습니다. 이러한 범위는start to end문법을 사용하여 지정되며, 여기서start및end는 각각 JSON 배열(항상 0부터 번호가 매겨짐)의 요소 범위에 대한 첫 번째 인덱스와 마지막 인덱스입니다. 예를 들어,$[1 to 3]은 여기 표시된 것처럼 두 번째, 세 번째, 네 번째 요소를 포함합니다:mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]'); +----------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]') | +----------------------------------------------+ | [2, 3, 4] | +----------------------------------------------+ 1 row in set (0.00 sec)이 작업은 또한 이러한 표현식에서
last키워드에 대한 지원을 제공하며, 이를 사용하여 다음과 같이 현재 배열에서 마지막(가장 오른쪽) 요소의 인덱스를 나타낼 수 있습니다:mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]'); +--------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]') | +--------------------------------------------+ | 5 | +--------------------------------------------+ 1 row in set (0.00 sec)배열 끝에 상대적인 인덱스도 여기 표시된 것처럼 지원됩니다:
mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]'); +--------------------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]') | +--------------------------------------------------------+ | [1, 2, 3] | +--------------------------------------------------------+ 1 row in set (0.00 sec)자세한 정보와 예시는 JSON 값 검색 및 수정을 참조하십시오. (Bug #79052, Bug #22285926, WL #9831)
-
JSON: Optimizer는 이제
JSON_SET(),JSON_REPLACE()또는JSON_REMOVE()를 사용할 때 JSON 문서의 부분(인플레이스) 업데이트를 지원합니다. (이전에는JSON컬럼 값의 모든 업데이트가 이전 문서를 완전히 제거하고 그 자리에 새 문서를 쓰는 방식으로 수행되었습니다.) 일반적으로 이 최적화는 대체 값의 크기가 컬럼의 원래 값보다 작거나 같고, 원래 값에 새 요소가 추가되지 않는 경우 수행될 수 있습니다. 이 최적화는UPDATE tbl SET json_col = json_val형식의 컬럼 값에 대한 단순 대체에는 수행될 수 없습니다.JSON 데이터 타입은 업데이트가 이 방식으로 최적화되기 위한 요구 사항에 대한 자세한 정보를 제공합니다.
이 작업에는 MySQL Server에 두 개의 JSON 유틸리티 함수인
JSON_STORAGE_SIZE()와JSON_STORAGE_FREE()를 추가하는 것이 포함됩니다.JSON_STORAGE_SIZE()는 JSON 문서가 테이블의 컬럼 값, 사용자 변수의 값 또는 JSON 리터럴로 제공되는지 여부와 관계없이 JSON 문서의 바이너리 표현을 저장하는 데 사용되는 바이트 수를 반환합니다.JSON컬럼의 경우, 이는 컬럼에 삽입된 당시의 JSON 문서를 저장하는 데 사용된 공간이며, 그 이후 해당 문서에 수행되었을 수 있는 모든 부분 업데이트 이전의 공간입니다.JSON_STORAGE_FREE()는 컬럼의 가장 최근 부분 업데이트로 인해 해제된 JSON 컬럼 값의 바이너리 표현 내 바이트 수를 표시합니다. JSON 문서를 저장하는 사용자 변수에 대해JSON_STORAGE_FREE()는 항상 0을 반환하며, 인수가 JSON 리터럴인 경우에도 0을 반환합니다.JSON 값에 대해 동작하는 다른 많은 MySQL 함수와 마찬가지로, 이러한 각 함수도 JSON 문서로 성공적으로 파싱될 수 있는 문자열을 허용합니다. 자세한 정보와 예시는 JSON Utility Functions를 참조하십시오. (WL #9192, WL #8963, WL #10570)
-
RPM
.spec파일은 이제 유닛 테스트 실행에 대한 지원을 포함합니다. (Bug #25814143, Bug #85743) -
mysql 클라이언트는 이제 16진수 표기법(
0xvalue)을 사용하여 바이너리 데이터를 표시하게 하는--binary-as-hex옵션을 지원합니다. 패치를 제공해 주신 Daniël van Eeden에게 감사드립니다. (Bug #25340722, Bug #84391) -
SHOW TABLES문은 이제 실패한ALTER TABLE문에 의해 생성된 숨겨진 테이블을 문 출력에 나열하게 하는 선택적EXTENDED키워드를 지원합니다. (이러한 임시 테이블은#sql로 시작하는 이름을 가집니다.) 자세한 내용은 SHOW TABLES Statement를 참조하십시오. (Bug #24786075, Bug #83241) -
직렬화된 딕셔너리 정보(SDI) 파일은 이제 대문자 대신 소문자 확장자(
.sdi)를 가집니다. (WL #7069) -
TempTable스토리지 엔진은 인메모리 내부 임시 테이블의 기본 엔진으로MEMORY스토리지 엔진을 대체합니다.TempTable스토리지 엔진은VARCHAR및VARBINARY컬럼에 효율적인 스토리지를 제공합니다.internal_tmp_mem_storage_engine세션 변수는 인메모리 내부 임시 테이블의 스토리지 엔진을 정의합니다. 허용되는 값은TempTable(기본값) 및MEMORY입니다.temptable_max_ram설정 옵션은TempTable스토리지 엔진이 디스크에 데이터 저장을 시작하기 전에 점유할 수 있는 최대 메모리 양을 정의합니다. 기본값은 1073741824바이트(1GiB)입니다.memory/temptable/physical_ram및memory/temptable/physical_diskPerformance Schema 계측기를 사용하여TempTable메모리 할당 및 디스크 스토리지를 모니터링할 수 있습니다. (WL #8117) -
MySQL 8.0.2 릴리스에는 undo 관련 변경 사항이 여러 가지 도입되었습니다:
-
이제
innodb_undo_tablespaces설정 옵션을 사용하여 런타임에 또는 서버가 다시 시작될 때 undo 테이블스페이스 수를 수정할 수 있습니다. 이전에는 undo 테이블스페이스 수를 MySQL 인스턴스를 초기화할 때만 설정할 수 있었으며 이후에는 변경할 수 없었습니다. 이 변경으로 데이터베이스가 커짐에 따라 undo 테이블스페이스와 롤백 세그먼트를 추가할 수 있습니다. -
innodb_undo_log_truncate는 기본적으로 활성화됩니다. 활성화된 경우innodb_max_undo_log_size에서 정의한 임계값을 초과하는 모든 undo 테이블스페이스가 잘라내기 대상으로 표시됩니다. Truncating Undo Tablespaces를 참조하십시오. -
innodb_undo_tablespaces기본값이 0에서 2로 변경되었으며, 이는 기본적으로 롤백 세그먼트가InnoDB시스템 테이블스페이스 대신 두 개의 별도 undo 테이블스페이스에 생성됨을 의미합니다. undo 로그의 잘라내기를 허용하려면 최소 두 개의 undo 테이블스페이스가 필요합니다.innodb_undo_tablespaces를 0으로 설정하는 것은 더 이상 사용되지 않으며 향후 MySQL 버전에서 지원되지 않습니다. -
undo 테이블스페이스 파일에 사용되는 명명 규칙이
undoNNN에서undo_NNN으로 변경됩니다. 여기서NNN은 undo 공간 번호입니다. -
innodb_rollback_segments설정 옵션은 undo 테이블스페이스당 롤백 세그먼트 수를 정의합니다. 이전에는innodb_rollback_segments가 MySQL 인스턴스의 전체 롤백 세그먼트 수를 지정하는 전역 설정이었습니다. 이 변경으로 동시 트랜잭션에 사용할 수 있는 롤백 세그먼트 수가 증가합니다. 롤백 세그먼트가 많아지면 동시 트랜잭션이 undo 로그에 별도의 롤백 세그먼트를 사용할 가능성이 높아져 리소스 경합이 줄어듭니다. -
innodb_undo_logs설정 옵션이 제거되었습니다.innodb_rollback_segments설정 옵션이 동일한 기능을 수행하므로 대신 사용해야 합니다. -
Innodb_available_undo_logs상태 변수가 제거되었습니다. 테이블스페이스당 사용 가능한 롤백 세그먼트 수는SHOW VARIABLES LIKE 'innodb_rollback_segments';를 사용하여 조회할 수 있습니다.
(WL #9507, WL #10498, WL #10499, WL #10322)
-
-
SHOW COLUMNS및SHOW INDEX문은 이제 선택적EXTENDED키워드를 지원하며, 이 키워드를 사용하면 문 출력에 MySQL이 내부적으로 사용하고 사용자가 접근할 수 없는 숨겨진 컬럼 및 인덱스에 대한 정보가 포함됩니다. 자세한 내용은 SHOW COLUMNS Statement 및 SHOW INDEX Statement를 참조하십시오. (WL #9570)
수정된 버그
-
InnoDB:
information_schema_stats가latest로 설정된 상태에서INFORMATION_SCHEMA.TABLES에 대해 실행된 쿼리가 더 느리게 수행되었습니다. (Bug #26197113) -
InnoDB:
DATA DIRECTORY절을 지정한ALTER TABLE... ADD PARTITION작업이 테이블의TABLESPACE속성을 무시하지 못했습니다. (Bug #26113652) -
InnoDB:
foreign_key_checks가 비활성화된 경우, 외래 키 제약 조건이 있는 자식 테이블이 부모 테이블보다 먼저 생성될 수 있으며, 이로 인해 부모 테이블이 해당 제약 조건을 인식하지 못하므로 외래 키 제약 조건 실패가 발생할 수 있습니다. 이제 테이블이 생성될 때 해당 테이블의 외래 키 제약 조건을 로드하고 자식 테이블을 확인하는 호출이 있습니다. (Bug #25976199) -
InnoDB: 전체 텍스트 인덱스가 있는 테이블을 최적화하는 동안 파싱 오류가 발생했습니다. (Bug #25914332)
-
InnoDB: Microsoft Visual C++ 2015를 사용하여 Windows에서 MySQL을 컴파일하거나 GCC 4.2.1 또는 Apple LLVM version 8.0.0 (clang-800.0.38)을 사용하여 macOS 10.12.4에서 MySQL을 컴파일하면 경고가 반환되었습니다. (Bug #25910531)
-
InnoDB: 디버그 빌드에서 doublewrite 페이지를 생성하는 동안 시스템 테이블스페이스 파일(
ibdata1)의 공간이 부족해지면 bootstrap 중에 assertion이 발생했습니다. (Bug #25872368) -
InnoDB: 잘못된 잠금 순서로 인해
InnoDB가 auto-increment 카운터 값을 디스크에 유지하려고 할 때 deadlock이 발생했습니다. (Bug #25833228) -
InnoDB: 딕셔너리 테이블 객체 데이터에 액세스하기 위한 내부 메서드가 가상 컬럼을 고려하지 않았습니다. (Bug #25822154)
참조: 이 문제는 다음 버그의 regression입니다: Bug #23748128.
-
InnoDB: 가상 인덱스 레코드에 있는 가상 컬럼 필드의 길이가 예상된 템플릿 컬럼 길이보다 짧았습니다. (Bug #25793677)
-
InnoDB: 디버그 빌드에서
--innodb-fast-shutdown=0옵션으로 서버를 종료하면 assertion이 발생했습니다. (Bug #25756224) -
InnoDB: ibd2sdi 유틸리티가 지원되지 않는 파일 타입에서 실행될 때 종료되었습니다. (Bug #25738491)
-
InnoDB:
InnoDB는 파티션된 테이블을 열 때 압축 알고리즘을 설정하지 않았습니다. (Bug #25685868) -
InnoDB: 인플레이스
ALTER TABLE작업이 암호화 타입을 설정하지 못해,FLUSH TABLES... FOR EXPORT작업에서 어설션이 발생했습니다. (Bug #25672779) -
InnoDB: 파일 닫기를 등록하는 동안 유지되던 래치로 인해 중단 상태가 발생했습니다. (Bug #25658467)
-
InnoDB: 복구 중에
innodb_force_recovery설정이 0보다 큰 경우 준비된 트랜잭션이 롤백되었습니다. (Bug #25651042) -
InnoDB: 기본 키가 정의되지 않은 경우, NOT NULL
TEXT필드에 8자 접두사를 가진 고유 키를 정의하는CREATE TABLE작업에서 어설션이 발생할 수 있었습니다. (Bug #25647413) -
InnoDB: 전체 텍스트 검색 보조 테이블에 대한
InnoDB시스템 테이블 업데이트와 결합된 데이터 딕셔너리 테이블 업데이트에서 잠금 관련 어설션이 발생했습니다. (Bug #25610353) -
InnoDB: 서버가 테이블을 재빌드하는 작업에 불필요하게 메모리를 할당했습니다. (Bug #25573565, Bug #85043)
-
InnoDB: 존재하지 않는 페이지에 대한 임의 읽기를 시뮬레이션하도록 의도된 테스트 관련 코드에서 유효하지 않은 어설션이 발생했습니다. (Bug #25479538)
참조: 이 문제는 다음의 회귀입니다: Bug #25053705.
-
InnoDB:
foreign_key_checks가 비활성화된 상태에서, 존재하지 않는 외래 키를 참조하는 테이블에 대해 작업이 수행될 때InnoDB가 오류 로그에 메시지를 잘못 출력했습니다. (Bug #25365223) -
InnoDB: file-per-table 테이블스페이스에서
TRUNCATE TABLE작업 중에, 버퍼 풀에서 더티 페이지를 제거하기 전에 딕셔너리 작업 잠금이 해제되어 래치 순서 위반이 발생했습니다. (Bug #25357789) -
InnoDB: 실패한 온라인
ALTER TABLE.. ADD INDEX작업 후에DROP TABLE또는TRUNCATE TABLE작업이 어설션을 발생시킬 수 있었습니다. 인덱스 루트 페이지가 너무 이르게 삭제되었습니다. (Bug #25357789) -
InnoDB: 인덱스 병합 Optimizer 스위치를 사용할 때,
SELECT COUNT(*)작업이 때때로 0을 반환했습니다. 파티셔닝 코드가 인덱스에서 읽은 컬럼에 대해 컬럼 복사 대신 잘못memcpy를 수행하여, 잘못된 레코드가 복사되었습니다. (Bug #25332330, Bug #81031) -
InnoDB: 테이블을 다른 스키마로 이동한
RENAME TABLE작업 후에,InnoDB는 재시작 시 테이블스페이스 데이터 파일을 찾을 수 없음을 나타내는 오류를 반환했습니다.InnoDB가RENAME TABLE작업 중에INNODB_SYS_DATAFILES데이터 딕셔너리 테이블을 업데이트하지 못했습니다. (Bug #25189192, Bug #84038) -
InnoDB: 가상 컬럼을 포함하는 테이블을 다시 빌드하는
ALTER TABLE작업 중에InnoDB가 동시 삽입 로그 레코드를 적용하지 못했습니다. (Bug #24961167) -
InnoDB:
InnoDB는 가상 컬럼 검증 문제로 인해 인플레이스ALTER TABLE작업에 대한 동시 삭제 로그를 적용하지 못했습니다. (Bug #24960450) -
Partitioning:
ALTER TABLE... OPTIMIZE PARTITION문을 실행한 후, 테이블에서 사용한 테이블스페이스의 이름이 보존되지 않았고, 이후 해당 테이블에 접근하면 결국 서버가 실패했습니다. (Bug #25512556) -
Replication: 인덱스가 있는 파티셔닝된 테이블을 복제할 때,
slave_rows_search_algorithms설정의 일부로HASH_SCAN이 지정된 복제 슬레이브에서 슬레이브 I/O 스레드가 때때로HA_ERR_KEY_NOT_FOUND오류와 함께 중지되었습니다. (Bug #26137159) -
Replication:
SET GTID_NEXT문 뒤에 오는USE문이 때때로 효과가 없었습니다. (Bug #26128931) -
Replication: 만료 시간이 설정된 바이너리 로그 파일에서 FLUSH LOGS 또는 PURGE LOGS BEFORE 명령을 사용하고 해당 바이너리 로그 파일이 사용 중일 때 오해의 소지가 있는 경고가 발생했습니다. 이 경고는 파일이 사용 중인 것과 관련되어 있었으며, 만료 시간에 아직 도달하지 않았더라도 제거 시도가 수행되었음을 암시했습니다. 이제 MySQL은 먼저 바이너리 로그 파일의 만료 시간을 확인한 다음, 그 후에야 파일이 사용 중인지 확인합니다. 따라서 제거될 만큼 오래되었고 사용 중인 바이너리 로그 파일에 대해서만 경고가 발생합니다. (Bug #25973525)
-
Replication: 이제 복제 그룹의 온라인 업그레이드를 수행할 수 있도록, 그룹에 서로 다른 서버 버전을 실행하는 멤버를 포함할 수 있습니다. 서로 다른 버전의 멤버를 한 그룹에 조합하는 규칙은 다음과 같습니다:
- 8.0 멤버가 있는 그룹에는 5.7 멤버를 추가할 수 없습니다
- 5.7 멤버가 있는 그룹에는 8.0 멤버를 추가할 수 있지만, 해당 멤버는 읽기 전용 모드로 유지됩니다. 그룹에 여러 서버 버전이 포함되어 있는 동안 이 멤버에 쓰기 작업을 수행하는 것은 위험하므로 피해야 합니다.
단일-프라이머리 그룹에서 현재 프라이머리가 그룹을 떠나고 새 프라이머리를 선출해야 하는 경우, 먼저 더 낮은 버전의 멤버 중에서 프라이머리를 선택합니다. 더 낮은 버전의 멤버가 없으면, 더 새로운 버전의 멤버 중에서 프라이머리를 선택합니다. (Bug #25876807)
-
Replication: 이제 XA 트랜잭션이 두 부분으로 준비되고 커밋되므로, statement-based 복제와 관련된 문제가 식별되었습니다. 마스터에서 커밋된 두 XA 트랜잭션이 슬레이브에서 반대 순서로 준비되는 경우, 안전하게 해결할 수 없는 잠금 의존성이 발생할 수 있습니다. 이 문제는 row-based 복제에는 존재하지 않습니다.
따라서 이제 XA 트랜잭션은 statement-based 복제에 안전하지 않은 것으로 간주됩니다.
-
binlog_format = STATEMENT인 경우 XA 트랜잭션 내부의 DML 문에 대해 경고가 발생하며, 슬레이브에서 데드락으로 인해 복제가 실패할 수 있습니다.binlog_format = MIXED인 경우 XA 트랜잭션 내부의 DML 문은 row-based replication을 사용하여 기록됩니다.binlog_format = ROW인 경우 XA 트랜잭션 내부의 DML 문은 이전과 같이 기록됩니다.
(Bug #25786490, Bug #85639)
-
Replication: 이제 Performance Schema가 비활성화되어도 다음 Performance Schema 복제 테이블은 계속 채워집니다:
-
replication_applier_status_by_coordinator예외는 복제 테이블
replication_connection_status,replication_applier_status_by_coordinator,replication_applier_status_by_worker의 로컬 타이밍 정보(트랜잭션의 시작 및 종료 타임스탬프)입니다. 이 정보는 Performance Schema가 비활성화된 경우 수집되지 않습니다. (Bug #25694813) -
Replication: RPM에서 설치한 후 MySQL 서버를 처음 시작할 때 passwword validation 플러그인이 기본적으로 활성화됩니다(RPM 설치에만 해당). 이때 바이너리 로깅이 이미 활성화되어 있으면, 플러그인 활성화가 바이너리 로그에 기록되어서는 안 되는데도 해당 활성화가 기록되었습니다. (Bug #25672750)
-
Replication: XA 트랜잭션을 수행하는 데 사용되는
XA START,XA END,XA COMMIT,XA ROLLBACK문이 관련 데이터베이스를 지정한replicate-do-db필터의 카운터를 증가시키고 있었습니다. 이 문들에 대해서는 더 이상 카운터가 증가하지 않습니다. (Bug #25669344) -
Replication: MySQL 8.0 서버는 MySQL 5.7 서버가 포함된 복제 그룹에 참여할 수 없었으며, 복제 그룹의 MySQL 5.7 서버를 MySQL 8.0으로 업그레이드할 수 없었습니다. (Bug #25477979)
-
Replication: MySQL 5.7 서버의 mysqlbinlog 출력이 MySQL 8.0 서버에 적용되었을 때, MySQL 8.0 서버는
original_commit_timestamp에 대해 자체 타임스탬프를 생성했습니다. 이 수정은original_commit_timestamp의 값이 타임스탬프를 알 수 없음을 의미하는 0으로 올바르게 설정되도록 합니다. (Bug #25316086) -
Replication: 서버가
--log-bin옵션으로 시작된 경우, 잘못된 구조를 가진 하나의 Performance Schema 테이블이 발견되면 이후에 확인된 모든 Performance Schema 테이블도 잘못된 것으로 표시되었습니다. (Bug #25041396) -
Replication: 인터리브된 트랜잭션은 트랜잭션 격리 수준이
REPEATABLE-READ로 설정된 경우 슬레이브 applier에서 때때로 데드락을 일으킬 수 있었습니다. (Bug #25040331) -
Replication:
slave_skip_errors시스템 변수는 3000보다 큰 오류 번호를 허용하지 않았습니다. 패치를 제공해 준 Tsubasa Tanaka에게 감사드립니다. (Bug #24748639, Bug #83184) -
Replication:
ER_TRANSACTION_ROLLBACK_DURING_COMMIT의 SQL state는HY00이었으며, 이는 일반적인 값이고 롤백에는 적합하지 않습니다. SQL state가 40000으로 수정되었습니다. (Bug #24658431) -
Replication: mysqlbinlog는
--raw옵션으로 호출된 경우 프로세스가 종료될 때까지 출력 파일을 플러시하지 않습니다. 그러나--stop-never옵션도 함께 사용하여 호출된 경우 프로세스가 종료되지 않으므로, 출력 파일에 아무것도 기록되지 않았습니다. 이제 출력은 각 이벤트 이후 플러시됩니다. (Bug #24609402) -
Replication: mysqlbinlog의 메모리 누수가 수정되었습니다. 이 누수는 fake rotate 이벤트를 처리할 때, 또는
--raw를 사용하고 대상 로그 파일을 생성할 수 없을 때 발생했습니다. 이 누수는 원격 서버의 이벤트를 처리할 때만 발생했습니다. 이 버그 수정에 기여한 Laurynas Biveinis에게 감사드립니다. (Bug #24323288, Bug #82283) -
Replication:
MASTER_AUTO_POSITION=0이고 두 복제 스레드가 모두 중지되었으며CHANGE MASTER TO MASTER_DELAY=N을 사용하여 applier delay가 변경된 경우, 슬레이브 서버는 아직 적용되지 않은 이벤트를 잃을 수 있었습니다. (Bug #23203678, Bug #81232)참조: 다음도 참조하십시오: Bug #25340185, Bug #84375.
-
Replication: 대형 GCS 메시지 전송에 매우 오래 걸려 송신자가 종료된 것처럼 보일 수 있었습니다. (Bug #22671846)
-
Replication: 멀티스레드 슬레이브는 해당 크기보다 큰 트랜잭션을 처리해야 할 가능성이 있는 경우
slave_pending_jobs_size_max를 사용하여 작은 큐 크기로 설정할 수 없었습니다.slave_pending_jobs_size_max보다 큰 모든 패킷은slave_max_allowed_packet에서 설정한 제한보다 작더라도 ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX 오류와 함께 거부되었습니다.이 수정으로
slave_pending_jobs_size_max는 하드 제한이 아니라 소프트 제한이 됩니다. 패킷 크기가slave_pending_jobs_size_max를 초과하지만slave_max_allowed_packet보다 작은 경우, 트랜잭션은 모든 슬레이브 워커의 큐가 빌 때까지 보류된 다음 처리됩니다. 이후의 모든 트랜잭션은 대형 트랜잭션이 완료될 때까지 보류됩니다. 따라서 슬레이브 워커의 큐 크기를 제한하면서도 간헐적인 더 큰 트랜잭션을 계속 허용할 수 있습니다. (Bug #21280753, Bug #77406) -
Replication: 복제를 중단시킨 incident 이벤트가 GTID와 함께 바이너리 로그에 기록되지 않았으므로,
SET gtid_next=value를 사용하여 해당 이벤트를 건너뛸 수 없었습니다. 대신 relay 로그 파일과 relay 로그 위치를 직접 설정해야 했습니다. 이는 autopositioning이 활성화된 경우 먼저 이를 비활성화한 다음, relay 로그 파일과 위치를 설정하고, 마지막으로 autopositioning을 다시 활성화해야 했음을 의미했습니다.이제 이러한 경우 MySQL은 incident 이벤트를 statement 캐시에 기록하므로, flush 전에 해당 이벤트에 대해 GTID가 생성되어 기록되고, 슬레이브 applier가 그 변경 사항을 처리합니다. 그러면 사용자는 SQL 문
SET gtid_next=value를 사용하고, 이어서BEGIN및COMMIT을 사용하여 해당 이벤트를 건너뛸 수 있습니다. (Bug #19594845) -
복제:
CHANGE REPLICATION FILTER를 사용하여 빈 필터 규칙을 설정하면 UBSan으로 테스트를 실행할 때 문제가 발생했습니다. (Bug #85405, Bug #25702297) -
복제: receiver 스레드가 이벤트를 큐에 넣는 동안 릴레이 로그에 대한 잠금을 보유하고 있으면,
SHOW SLAVE STATUS또는SHOW RELAYLOG EVENTS를 실행하는 클라이언트가 차단되었습니다. (Bug #85084, Bug #25584734) -
복제: Performance Schema
replication_applier_status_by_worker테이블의 인덱스는 단일 스레드 복제에서만 올바르게 작동했습니다. 이는 인덱싱이 worker의 존재 여부와 관계없이 전적으로 SQL 스레드 ID에만 의존했기 때문입니다. 이제 이러한 경우 슬레이브에서 멀티스레딩이 활성화되면 인덱스가 worker 스레드 ID도 고려합니다. (Bug #84646, Bug #25444610) -
Replication: 특정 경우에 마스터가 바이너리 로그에 원래 값보다 더 작을 수 있는
last_committed값을 쓸 수 있었습니다. 이로 인해 슬레이브가 병렬로 실행되어서는 안 되는 트랜잭션을 병렬로 실행하여 불일치 또는 기타 오류가 발생할 수 있었습니다. (Bug #84471, Bug #25379659) -
Replication:
group_replication_ip_whitelist=AUTOMATIC을 사용할 때 사설 네트워크의 IP는 자동으로 허용되지만, 일부 클래스 C IP 주소가 올바르게 허용되지 않았습니다. (Bug #84329, Bug #25503458) -
Replication: 예상 오류 번호와 실제 오류 번호 간에 차이가 있을 때 복제 적용자 스레드는 Error 3002
ER_INCONSISTENT_ERROR를 반환합니다. 이제slave_skip_errors에 3002를 사용하여 이 오류를 무시할 수 있습니다. (Bug #83186, Bug #24753281) -
Replication: mysqldump의 덤프를 사용하여 데이터를 로드한 경우, MySQL은 재시작 후 GTID 위치를 잃었습니다.
이 문제가 발생하지 않도록, 이제
mysql.gtid_executed테이블은mysqldump가 만든 덤프에서 자동으로 제외됩니다. (Bug #82848, Bug #24590891)참조: 다음도 참조하십시오: Bug #87455, Bug #26643180.
-
Replication: 열린 임시 테이블이 있을 때 오류를 발생시키지 않고
binlog_format을 설정할 수 있었습니다. (Bug #82467, Bug #24411680) -
Replication: 다중 소스 복제에서 한 채널의 릴레이 로그 손상으로 인해 서버 재시작 중 정상 채널이 초기화되지 않았습니다. 또한
--skip-slave-start=false로 실행된 경우, 서버는 정상 상태인 모든 채널에 대해 슬레이브 스레드를 시작했어야 했음에도 불구하고, 정상 상태인 해당 채널에 대해서도 슬레이브 스레드 시작에 실패했습니다.이제 다른 채널의 오류와 관계없이, 서버는 정상 상태인 채널을 생성하고 초기화하려고 시도하며,
--skip-slave-start가 비활성화된 경우 정상 채널에 대해 슬레이브 스레드를 시작합니다. 이 수정의 일부로, 모든 채널에서 동작하도록 의도된START SLAVE및STOP SLAVE도 수정되어, 채널 중 비정상 채널을 발견하더라도 모든 정상 채널에서 계속 실행됩니다. (Bug #82209, Bug #24285104) -
Replication: SQL 스레드는 부분 트랜잭션을 GTID skip할 수 없었습니다. (Bug #81119, Bug #25800025)
-
Replication:
FLUSH LOGS가 초기화되지 않은 로그 파일에Rotate_log_event를 기록할 수 있었습니다. (Bug #80368, Bug #22732184)참조: 다음도 참조하십시오: Bug #23531998, Bug #81734.
-
Group Replication: 시작 후
binlog_checksum이NONE일 때, Group Replication이 시작되고 오류가 발생하면 서버가RECOVERING상태로 남아 종료할 수 없었습니다. (Bug #25793366, Bug #85667) -
Group Replication: 서로 다른 복제 그룹의 멤버 간에 순환 비동기 복제가 구현된 Group Replication 설정에서, 뷰 변경 로그 이벤트가 매번 새로 생성된 GTID와 함께 그룹 간에 반복적으로 복제되었습니다. 이 수정으로 뷰 변경 로그 이벤트는 해당 이벤트가 발생한 명명된 복제 그룹 외부에서 무시되며, 새 GTID를 절대 생성하지 않습니다. (Bug #25674926)
참조: 다음도 참조하십시오: Bug #26049695, Bug #25928854, Bug #25721175.
-
Group Replication: 단일 프라이머리 Group Replication이 비동기 복제와 결합된 설정에서, 예를 들어 서버
S1및S2가 그룹을 구성하고S2및S3가 마스터와 슬레이브로 기능하는 경우,S2와 같은 세컨더리가 트랜잭션을 허용한 다음 그룹에 진입할 수 있었습니다. 이 수정은 세컨더리가 단일 프라이머리 그룹에 속할 때 비동기 복제 채널을 생성하지 못하게 하고, 비동기 복제가 실행 중인 동안 Group Replication이 시작되지 못하게 합니다. (Bug #25574200, Bug #85047)참조: 함께 참조하십시오: Bug #86325, Bug #26078602.
-
Group Replication:
super_read_only시스템 변수가 활성화된 경우 Group Replication이 시작되지 않았습니다. (Bug #25481287, Bug #84733) -
Group Replication: 멤버가 그룹에 조인하지 못한 경우, 해당 멤버가 중지되지 않고 트랜잭션을 계속 허용했습니다. 이를 방지하려면
my.cfg파일에서 멤버가super_read_only=1을 사용하도록 설정하십시오. 이제 Group Replication은 성공적으로 시작될 때 이 설정을 확인하고super_read_only=0을 설정합니다. 이렇게 하면 그룹에 성공적으로 조인하지 못한 멤버가 트랜잭션을 허용할 수 없도록 보장됩니다. (Bug #25474736, Bug #84728) -
Group Replication:
root계정이 없는 경우 Group Replication 플러그인의 로드와 초기화가 실패했습니다. (Bug #24311527)참조: 다음도 참조하십시오: Bug #25750822, Bug #25103980, Bug #83841.
-
Group Replication: 그룹 복제를 사용하는 서버를 재시작한 후
SHOW SLAVE STATUS FOR CHANNEL 'group_replication_recovery'를 실행하면 계획되지 않은 종료가 발생했습니다. (Bug #85739, Bug #25813258) -
Group Replication: 기존
GTID_NEXT트랜잭션에 서버가 충돌하는 GTID를 할당했을 때, Group Replication은 동일한 GTID를 가진 두 트랜잭션을 감지하면 assert를 생성했습니다. 이는 Group Replication이 충돌 감지 후에 GTID를 생성하며, 이 시점이 비동기 복제의 경우보다 늦기 때문이었습니다. 트랜잭션이 커밋되면 서버는 해당 GTID가 이미 사용되었다는 경고를 발생시키고, 트랜잭션은 롤백됩니다. (Bug #84153, Bug #25232042) -
Microsoft Windows: Windows에서
Docs/INFO_SRC파일에build-date항목이 누락되었습니다. (Bug #25799855) -
JSON: 이 함수의 결과가 JSON 컨텍스트에서 사용된 경우,
NULLIF()가 디버그 빌드에서 assertion 오류와 함께 실패했습니다. 이제 이 결과를 JSON 값으로 안전하게 사용할 수 있습니다.이 수정에는 이 오류를 처리할 때
DBUG_ABORT()대신DBUG_ASSERT()를 사용하는 내용이 포함되며,DBUG_ABORT()는 일부 플랫폼에서 디버깅 문제를 일으켰습니다. (Bug #25818544)참조: 다음도 참조하십시오: Bug #21383497, Bug #21383530.
-
JSON: 내부
Json_array는 이제 요소를 저장하기 위해Prealloced_array대신std::vector를 사용하며, 이를 통해 요소에 필요한 힙 공간의 양이 줄어듭니다. (Bug #85877, Bug #25867454) -
한 문자열 비교 피연산자의 캐릭터셋이 다른 피연산자의 캐릭터셋의 상위 집합인 경우, “더 작은” 캐릭터셋을 가진 피연산자를 “더 큰” 캐릭터셋으로 변환하여 허용되어야 하는 일부 비교가 허용되지 않았습니다.
utf8mb4와utf32는 다른 모든 인코딩의 상위 집합으로 간주됩니다. (Bug #27897053, Bug #25642319, Bug #85224) -
RPM 패키지의
mysqld_pre_systemd스크립트는 옵션 파일에서 오류 로그 설정이log-error로 지정된 경우에는 찾았지만, 둘 다 허용됨에도log_error로 지정된 경우에는 찾지 못했습니다. (Bug #26148391, Bug #86466) -
ALTER TABLE... ADD PARTITION문이 서버 종료를 일으킬 수 있었습니다. (Bug #26132947) -
SET PERSIST는 X Plugin 시스템 변수에 대해 작동하지 않았습니다. (Bug #26115672) -
REFERENCES권한 검사가 일부 경우에 잘못된 데이터베이스를 사용할 수 있었습니다. (Bug #26106655) -
gtid_mode시스템 변수가.cnf옵션 파일 또는 명령줄에서 설정되지 않은 상태에서,SET PERSIST또는SET GLOBAL을 사용하여gtid_mode를ON_PERMISSIVE로 설정한 후 서버가 다시 시작되지 않았습니다. (Bug #26085712) -
prepared statement 실행 중에 버퍼의 너무 많은 바이트가 읽힐 수 있었습니다. (Bug #26042934, Bug #85937)
-
--initialize옵션을 사용하여 서버가 시작될 때 동적 권한이 로드되지 않았습니다. (Bug #26005645) -
Linux: MySQL 8.0용 일반 Linux 빌드는 이제 호스트 시스템에서 Non-Uniform Memory Access (NUMA)를 지원합니다. 이 빌드를 사용하는 시스템에는
libnuma가 설치되어 있어야 합니다. 자세한 내용은 Installing MySQL on Unix/Linux Using Generic Binaries를 참조하십시오. (Bug #26005558) -
Debian 클라이언트 패키지에는 akonadi-backend-mysql 패키지와의 충돌에 대한 정보가 누락되어 있었습니다. (Bug #26002288)
-
mysqldump가
USE문에서 데이터베이스 이름을 잘못 쓸 수 있었습니다. (Bug #25998635) -
mysql_stmt_close()C API 함수가 호출된 경우, 나중에mysql_stmt_error(),mysql_stmt_errno()또는mysql_stmt_sqlstate()가 호출되면 접근될 수 있는 메모리를 해제했습니다.mysql_stmt_close()호출 후 오류 정보를 얻으려면 대신mysql_error(),mysql_errno()또는mysql_sqlstate()를 호출하십시오. (Bug #25988681) -
MySQL 5.7에서 MySQL 8.0으로 업그레이드할 때, 64자 길이 제한을 초과하는 테이블 이름으로 인해 데이터 딕셔너리 생성 중 실패했습니다. (Bug #25973237, Bug #86120)
-
다음 상황에서 쿼리가 잘못 캐시되어 잘못된 쿼리 결과로 이어질 수 있었습니다:
InnoDB테이블, 로우가 삽입되고 있지만 아직 커밋되지 않음, 쿼리가 파생 테이블에서 해당 테이블을 베이스 테이블로 사용함, Optimizer가 파생 테이블을 구체화하도록 선택함. (Bug #25943038, Bug #86047) -
mysqld가 AddressSanitizer를 활성화하여 컴파일되고
--basedir=로 호출된 경우(즉, 빈 옵션 값으로 호출된 경우) 잘못 동작했습니다. (Bug #25914296, Bug #85994) -
ST_LatFromGeohash(),ST_LongFromGeohash(),ST_PointFromGeohash()함수는CHAR컬럼에서 비롯된 데이터를 허용하지 않았습니다. (Bug #25912557, Bug #85981) -
여러 데이터 파일이 있는 테이블스페이스에서 데이터 파일을 삭제하려고 하면 중복 파일 이름 오류가 반환되었습니다. (Bug #25858461)
-
반환 값이 무시될 때 컴파일 경고를 생성하도록 데이터 딕셔너리 클라이언트 메서드 선언에 속성이 추가되었습니다. (Bug #25840927)
-
데이터 딕셔너리 클래스 계층 구조가 단순화되었습니다. (Bug #25835968, Bug #85811)
-
데이터 딕셔너리 객체 업데이트 함수(
Dictionary_client::update)가 동일한 객체에서 두 번 호출되지 못하도록 하던 제한이 제거되었습니다. (Bug #25833932, Bug #85800) -
Ubuntu 플랫폼에서, 스크립트를 실행하는 사용자에게 데이터 디렉터리 또는 PID 파일에 접근할 권한이 없는 경우 MySQL 서비스 스크립트가 올바르게 종료되지 않았습니다. (Bug #25825833)
-
INFORMATION_SCHEMA.CHARACTER_SETS.DESCRIPTION필드의 문자열 비교 쿼리가 대소문자를 구분했으며, 이는 이전 릴리스에서의 회귀입니다. (Bug #25824297) -
몇몇 유틸리티의 man 페이지가 Debian/Ubuntu 패키지에서 누락되었습니다. (Bug #25811814)
-
LOCK TABLES모드에서 실행되고,SERIALIZABLE격리 수준을 사용하며,autocommit이 비활성화된INFORMATION_SCHEMA뷰가 non-locking read를 사용하지 못했으며, 이로 인해 DDL 작업이 차단되거나 데드락이 발생할 수 있었습니다. (Bug #25811413) -
다른 데이터베이스에 같은 이름의 트리거가 존재하고 데이터베이스 이름이 대소문자만 다른 경우, 해당 트리거에서 테이블을 사용하면 테이블 잠금 실패가 발생할 수 있었습니다. (Bug #25807393)
-
.TRG파일에 트리거 정의에 대한created라인이 누락된 경우 in-place MySQL 업그레이드가 실패했습니다. (MySQL 5.7.2 이상에는created라인이 있으므로, 이 문제는 5.7에서 MySQL 8.0으로 업그레이드할 때 발생할 가능성이 낮습니다.) (Bug #25805260, Bug #85704) -
field-t단위 테스트가 AddressSanitizer를 활성화한 상태에서 실행되지 않았습니다. 패치를 제공해 주신 Laurynas Biveinis에게 감사드립니다. (Bug #25803823, Bug #85678) -
Debian 클라이언트 패키지에 네이티브 패키지와의 충돌에 대한 정보가 누락되었습니다. (Bug #25799475)
-
INFORMATION_SCHEMA.TABLES테이블의CREATE_OPTIONS컬럼이binary콜레이션을 가지는 것으로 처리되어,UPPER()및LOWER()같은 함수가 의도한 결과를 내지 못했습니다. (Bug #25793429) -
DECIMAL컬럼이 있는 테이블을 가져온 후, 해당 테이블에 접근하면 assertion이 발생했습니다. (Bug #25792649) -
기본 캐릭터셋이
utf8mb4로 변경될 때 잘못된 컬럼 길이 계산으로 인해ALTER TABLE이 실패할 수 있었습니다. (Bug #25779239, Bug #85614) -
컴포넌트
deinit()메서드가 실패해도 컴포넌트가 여전히 언로드되었습니다. (Bug #25764325) -
저장 프로그램 실행은
DEFINER계정의 비밀번호가 만료된 경우, 해당 계정이 잠겨 있어 서버에 연결하는 데 사용할 수 없더라도 실패할 수 있었습니다. 이제DEFINER계정이 잠겨 있으면 만료된 비밀번호를 검사하지 않습니다. (Bug #25741966) -
임시 테이블에 대한
DISTINCT작업은 너무 작은 비교 키가 할당되어 잘못된 결과를 생성할 수 있었습니다. (Bug #25740550, Bug #85518) -
Optimizer 추적 출력에서
num_tmp_files는 실제로 파일 수를 나타내지 않았습니다. 이 항목은num_initial_chunks_spilled_to_disk로 이름이 변경되었으며, 병합이 발생하기 전의 청크 수를 나타냅니다. (Bug #25733784, Bug #85487) -
Perl 스크립트 시작 부분의
#!줄에 있는 Perl 경로가 FreeBSD 11에서/usr/local/bin/perl로 조정되었습니다. (Bug #25719975) -
IGNORE_SPACESQL 모드가 활성화된 경우, 문법 오류 메시지가 항상 줄 번호로 1행을 보고했습니다. (Bug #25717617) -
mysqldump가 덤프 출력에 기록된 SQL 문에서 특정 식별자를 올바르게 따옴표 처리하지 못했습니다. (Bug #25717383)
-
연결된 테이블스페이스 파일 없이 테이블스페이스를 삭제하면 테이블스페이스 딕셔너리 객체가 유효하지 않다는 오류와 함께 실패했습니다. (Bug #25717019)
-
서버의 클라이언트 사전 권한 부여에서 길이 인코딩 문자열에 대한 길이 검사가 누락되었습니다. (Bug #25714674)
-
디버그 빌드에서 NDB 스토리지 엔진을 사용할 때
CREATE TABLESPACE작업이 유효하지 않은 assertion을 발생시켰습니다. 길이가 0인 데이터 파일을 검사하는 검증 함수는 NDB 테이블스페이스에 적용되지 않았으며 제거되었습니다. (Bug #25700242) -
디버그 빌드에서
EXPORT_SET()작업은 일부 인자에 대해 assertion을 발생시킬 수 있었습니다. (Bug #25688192) -
디버그 빌드에서 Bug#59686에 대해 추가된 assertion이 너무 엄격하여 발생하지 않아야 할 때 발생할 수 있었습니다. (Bug #25685958)
참조: 다음도 참조하십시오: Bug #59686.
-
MySQL 8.0.1의 코드 리팩터링으로 인해 디버그 빌드에서 여러 assertion이 발생했습니다. (Bug #25669590, Bug #25669606, Bug #25669580, Bug #25688504)
참조: 이 문제는 다음의 회귀입니다: Bug #25221172, Bug #84103.
-
일부 double-precision 계산의 경우, 지수 부분을 계산할 때 오버플로가 발생할 수 있었습니다. (Bug #25664323, Bug #85290)
-
여러 컬럼에 정의된
FULLTEXT인덱스에 대해SHOW INDEX출력이 일관되지 않았습니다. (Bug #25659276) -
group commit 중에 스택이 소진된 것으로 잘못 보고되어 스택 오버플로로 이어질 수 있었습니다. (Bug #25656875)
-
in-place(바이너리) 업그레이드가 저장 루틴의 기본
character_set_client및character_set_connection변수를 변경할 수 있었으며, 이로 인해 루틴 동작이 달라질 수 있었습니다. (Bug #25633041) -
디버그 빌드의 경우, 파티셔닝 핸들러가
UPDATE문에서 생성 컬럼 표현식을 부적절하게 평가하여 assertion이 발생할 수 있었습니다. (Bug #25615803, Bug #85179) -
strict SQL 모드에서
ER_TRUNCATED_WRONG_VALUE오류가 경고에서 오류로 변환될 수 있었지만 이후 무시되어 assertion이 발생했습니다. (Bug #25586959, Bug #25586673) -
geometry 데이터 타입을 가진
NOT NULL컬럼이 포함된ARCHIVE테이블에서ALTER TABLE에 실패했습니다. 디버그 빌드의 경우 assertion이 발생했습니다. 비디버그 빌드의 경우 오류가 발생했습니다. (Bug #25582178, Bug #85059) -
디버그 빌드의 경우 뷰에서 사용하는 테이블에 대한 트리거의
DROP TRIGGER에 대해 assertion이 발생할 수 있었습니다. (Bug #25581925) -
MySQL 5.7에서 MySQL 8.0으로 업그레이드할 때 서버가 불필요한 파싱 경고를 오류 로그에 기록했습니다. 이제 이러한 메시지는 억제됩니다. (Bug #25518436, Bug #84889)
-
서버가 유효하지 않은 메모리에 액세스하려고 시도하다 비정상적으로 종료되었습니다. (Bug #25501659)
-
데이터 딕셔너리의
column_type_elements테이블에 있는name필드의 최대 길이는 멀티바이트 캐릭터셋 사용으로 인해 발생할 수 있는 긴ENUM및SET값을 수용하기 위해 255바이트에서 1020바이트로 확장되었습니다.멀티바이트 캐릭터셋을 사용할 때, 단일
ENUM또는SET요소는 데이터 딕셔너리의 컬럼 타입 정의에서 최대Mxw바이트를 차지하며, 여기서M은 요소 리터럴 길이이고w는 해당 캐릭터셋에서 최대 길이 문자를 위해 필요한 바이트 수입니다.이전 릴리스에서는 개별
ENUM또는SET요소의 최대 지원 길이가 해당 타입의 요소 수에 따라 달라졌습니다. 따라서 (Mxw) = 64K인 단일 요소가 있을 수도 있고, (Mxw) = 1인 64K개의 요소가 있을 수도 있었습니다.이제 개별
ENUM또는SET요소의 최대 지원 길이는 해당 타입의 요소 수와 관계없이M<= 255 및 (Mxw) <= 1020입니다. (Bug #25481355) -
TCP wrappers로
mysqld를 보호하고hosts.allow및hosts.deny파일을 IP 주소의 액세스를 제한하도록 설정한 경우, 해당 주소에서의 연결 시도로 인해 오류 로그에 너무 많은 메시지가 기록되었습니다. (Bug #25476479, Bug #84708) -
mysqlpump는 더 이상mysql시스템 데이터베이스의 덤프에slave_master_info및slave_relay_log_info테이블을 포함하지 않습니다. 이러한 테이블을 포함한 덤프 파일을 복원하면 복제 상태가 부적절하게 변경되어 문제가 발생했습니다. (Bug #25469190) -
MYSQL_OPT_SSL_MODE를 설정하기 위해mysql_options()를 호출하여 수행한 변경 사항은 이후의mysql_options()호출의 영향을 받을 수 있었습니다. 이제MYSQL_OPT_SSL_MODE설정은 이후의mysql_options()호출의 영향을 받지 않습니다. (Bug #25452210) -
DATA DIRECTORY또는INDEX DIRECTORY절이 있는CREATE TABLE문에서 경쟁 조건이 발생할 수 있었습니다. (Bug #25451091) -
AddressSanitizer가 활성화된 상태에서
keyring_file플러그인을 컴파일하면 One-Definition Rule 위반이 발생했습니다. (Bug #25448205) -
AFTER절을 사용하여DATETIME NOT NULL컬럼에 대해ALTER TABLE... MODIFY를 실행하면ER_INVALID_USE_OF_NULL오류가 발생했습니다. (Bug #25385334) -
range optimizer가 잘못된 쿼리 트리를 생성하여 서버 종료가 발생할 수 있었습니다. (Bug #25369742, Bug #25586531)
-
--datadir옵션이 상대 경로 이름으로 지정된 경우 mysqld가 서버를 시작하지 못했습니다. (Bug #25364806) -
연결이 끊긴 세션의 트랜잭션에 대한
XA PREPARE,XA ROLLBACK, 및XA COMMIT이 전역 커밋 잠금을 획득하지 않았으며,FLUSH TABLES WITH READ LOCK이 적용 중인 경우에도 바이너리 로그와InnoDBredo log를 수정했습니다. 이로 인해 백업 도구가 서버가 읽기 전용 상태라고 가정할 때 일관되지 않은 백업이 발생할 수 있었습니다. (Bug #25364178, Bug #84442) -
데이터 크기가
tmp_table_size시스템 변수의 값보다 큰 경우GROUP_CONCAT(DISTINCT)가 고유하지 않은 값을 반환했습니다. (Bug #25331425, Bug #84320) -
Bug #78777에 대한 수정은 Performance Schema가 활성화되었는지 여부에 따라 서로 다른 영향을 미쳤습니다. (Bug #25309017, Bug #84305)
참조: 이 문제는 다음의 회귀입니다: Bug #78777.
-
일부 중첩 쿼리의 집계 함수가 서버 종료를 일으킬 수 있었습니다. (Bug #25303711)
-
BIN_TO_UUID(),CONV()또는HEX()함수를 사용한 가상 생성 컬럼 표현식은 연결 캐릭터셋이 변경된 경우 문제를 일으킬 수 있었습니다. 이 컨텍스트에서는 이제 연결 캐릭터셋과 관계없이 이러한 함수에 대해 테이블 캐릭터셋이 사용됩니다. (Bug #25287633) -
read_only시스템 변수가 활성화된 경우Rewriter플러그인이 잠금을 적절히 수행하지 않았습니다. (Bug #25264253) -
read_only가 활성화된 상태에서, 특정 조건에서는SUPER사용자가 아닌 사용자가 비TEMPORARY테이블을 생성하는 것이 허용되었습니다. (Bug #25250768) -
기본값이
CURRENT_TIMESTAMP인TIMESTAMP또는DATETIME컬럼이 있는 테이블의 경우, 해당 테이블에BEFORE INSERT트리거가 있으면 컬럼이0000-00-00 00:00:00'으로 초기화될 수 있었습니다. (Bug #25209512, Bug #84077) -
Windows에서
SHOW PROCESSLIST출력의Time값이 시간이 지남에 따라 더 높게 드리프트되었습니다. (Bug #25101724, Bug #83019) -
서버 부트스트랩에서 create function이 확인되지 않은 표현식을 평가하려고 시도할 때 어설션이 발생했습니다. (Bug #24961932)
-
데이터 딕셔너리 캐시 조회 횟수가 줄었으며,
ALTER TABLE처리 중 서버 종료가 발생하는 경우 트리거 지속성을 보장하는 데 도움이 되도록ALTER TABLE의 트리거 처리가 개선되었습니다. (Bug #24930129, Bug #83473) -
기본 키와 서브쿼리를 사용한
InnoDB테이블에 대한 특정 쿼리는optimizer_switch시스템 변수의index_merge_intersection플래그가 활성화된 경우 잘못된 결과를 반환할 수 있었습니다. (Bug #24829050, Bug #79675) -
x86 머신에서
uint3korr()매크로가 의도한 3바이트 대신 4바이트의 데이터를 읽었습니다. (Bug #24807826, Bug #83264) -
memcached 플러그인의 fetch 작업 중 assertion이 발생했습니다. (Bug #24605783)
-
서브쿼리와
GROUP BY에UNION을 포함한 쿼리는 잘못된 결과를 반환할 수 있었습니다. (Bug #24595639) -
구문상 올바르지 않은 일부
CREATE INDEX문이 구문 오류가 아니라 서버 종료를 유발할 수 있었습니다. (Bug #24593992) -
innodb_table_stats또는innodb_index_stats테이블이mysql시스템 데이터베이스에 없으면 in-place MySQL 업그레이드가 실패했습니다. (이 문제는 MySQL 5.7에서 MySQL 8.0으로 업그레이드할 때는 발생하지 않아야 합니다. 해당 테이블이 MySQL 5.7에 있기 때문입니다.) (Bug #24557143) -
저장 프로그램 또는 prepared statement 컨텍스트에서 실행된
INSERT문에서,ON DUPLICATE KEY UPDATE절의VALUES부분이INSERT컬럼 목록의BLOB값을 참조하는 경우 잘못된 동작이 발생할 수 있었습니다. (Bug #24538207, Bug #25361251, Bug #25530880, Bug #25684790) -
Debian 패키지의 systemd 지원 스크립트에 데이터 디렉터리에 대한 하드코딩된 참조가 포함되어 있어,
--datadir를 사용하여 데이터 디렉터리를 변경하기 어려웠습니다. (Bug #24398446, Bug #82417) -
MySQL이 Clang을 사용한 macOS 10.10.5에서 컴파일되지 않았습니다. (Bug #24352163, Bug #82340)
-
REPLACE문이BLOB타입의 가상 생성 컬럼을 포함하는 테이블의 로우를 업데이트하려고 하면, 이후 DML 문이 잘못 동작할 수 있었습니다. (Bug #23573575) -
일부
PROXY권한 부여가 슬레이브에 복제되지 않아 잘못된 복제가 발생했습니다. (Bug #23289541, Bug #81424, Bug #23623115) -
단일 테이블
UPDATE또는DELETE문에 대한EXPLAIN이 서브쿼리를 최적화하여 제거하려고 시도하는 중에 어설션을 발생시킬 수 있었습니다. (Bug #23209903) -
mysqlxtest의 도움말 출력이 개선되었습니다. (Bug #23107137, Bug #81086)
-
AddressSanitizer가 활성화된 빌드의 경우,
ST_Simplify()함수가 이미 해제된 메모리를 사용하려고 시도할 수 있었습니다. (Bug #23023817) -
Clang을 사용하여
keyring_file플러그인을 컴파일할 때 발생하던 여러 경고를 제거하도록 컴파일러 플래그가 조정되었습니다. (Bug #22834591, Bug #80524) -
Event Scheduler를 활성화하면
ON COMPLETION NOT PRESERVE로 정의된 이벤트가 실행 시간이 지났기 때문에 삭제되는 경우, 해당 drop 이벤트가 바이너리 로그에 기록되지 않아 슬레이브가 이를 복제하지 못했으며, 나중에 같은 이름의 이벤트가 생성되면 복제 실패가 발생했습니다. (Bug #22150112) -
일부
CREATE TABLE... SELECT문에서ORDER BY절을 추가하면 컬럼 데이터 타입이 변경되거나, 디버그 빌드에서 어설션이 발생했습니다. (Bug #16833464) -
읽는 XML 파일에 들여쓰기 또는 보기 좋게 출력하기로 도입된 공백과 같이 매우 많은 공백이 포함된 경우
LOAD XML성능이 눈에 띄게 느려졌습니다. 이제 이러한 각 값에서 선행 공백을 모두 제거한 뒤 메모리로 읽습니다. (Bug #16212207)