계정 관리 관련 사항
-
호환되지 않는 변경:
mysql시스템 데이터베이스의 grant 테이블은 이제InnoDB(트랜잭션) 테이블입니다. 이전에는 이 테이블들이MyISAM(비트랜잭션) 테이블이었습니다. 이 변경은 다음 테이블에 적용됩니다:user,db,tables_priv,columns_priv,procs_priv,proxies_priv.grant 테이블 스토리지 엔진 변경은 계정 관리 구문의 동작에 수반되는 변경의 기반이 됩니다. 이전에는 여러 사용자를 명명하는 계정 관리 구문이 일부 사용자에 대해서는 성공하고 다른 사용자에 대해서는 실패할 수 있었습니다. 이제 각 구문은 트랜잭션 방식이며, 명명된 모든 사용자에 대해 성공하거나 오류가 발생하면 롤백되어 아무 효과도 없습니다. 구문이 성공하면 바이너리 로그에 기록되지만, 실패하면 기록되지 않습니다. 이 경우 롤백이 발생하고 변경 사항은 적용되지 않습니다. 앞의 동작은 다음 구문에 적용됩니다:
ALTER USER,CREATE ROLE,CREATE USER,DROP ROLE,DROP USER,GRANT,RENAME USER,REVOKE. (SET PASSWORD는 최대 한 명의 사용자에게만 적용되고 이미 사실상 트랜잭션 방식이므로 목록에 포함되지 않습니다.) 이러한 동작 변경의 부수 효과는 MySQL 5.7 마스터에서 부분적으로 완료된 계정 관리 구문이 MySQL 8.0 슬레이브에서 복제될 때 실패한다는 것입니다. 자세한 내용은 Atomic Data Definition Statement Support를 참조하십시오.이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 이러한 변경 사항을
mysql시스템 데이터베이스에 반영하려면 mysql_upgrade를 실행하고 서버를 다시 시작해야 합니다.MySQL이 이전 버전에서 업그레이드되었지만 grant 테이블이
MyISAM에서InnoDB로 업그레이드되지 않은 경우, 서버는 해당 테이블을 읽기 전용으로 간주하며 계정 관리 구문은 오류를 발생시킵니다.스토리지 엔진이
MyISAM에서InnoDB로 변경됨에 따라, 권한 부여 테이블에서ORDER BY없이SELECT를 수행하면 이전과 다른 로우 순서가 생성될 수 있습니다. 쿼리 결과에 특정 로우 정렬 특성이 필요하면ORDER BY절을 포함하십시오. (WL #7158, WL #9045) -
MySQL은 이제 이름이 지정된 권한 모음인 역할을 지원합니다. 역할을 사용하면 권한 집합을 계정에 할당할 수 있으며, 원하는 권한 할당을 개념화하고 이를 구현하는 데 모두 개별 권한 부여의 편리한 대안을 제공합니다:
- 역할을 생성하고 삭제할 수 있습니다.
- 역할에 권한을 부여하고 역할에서 권한을 회수할 수 있습니다.
- 역할을 사용자 계정에 부여하고 사용자 계정에서 회수할 수 있습니다.
- 계정의 활성 역할은 해당 계정에 부여된 역할 중에서 선택할 수 있으며, 해당 계정의 세션 중에 변경할 수 있습니다.
자세한 내용은 Using Roles를 참조하십시오.
이제
ROLE은 예약어이며 식별자 따옴표 처리 없이 식별자로 사용할 수 없습니다.(WL #988)
C API 관련 사항
libmysqlclient공유 라이브러리의 주 버전 번호가 MySQL 5.7에서 사용된 20에서 MySQL 8.0의 21로 증가했습니다. (Bug #77600, Bug #21363863)
캐릭터셋 지원
-
utf8mb4유니코드 캐릭터셋에는utf8mb4_0900_ai_ci라는 새 general 콜레이션이 있습니다.utf8mb4에는 또한 언어별 규칙이 적용 가능한 경우 우선한다는 점을 제외하고utf8mb4_0900_ai_ci와 유사한 특성을 가진 여러 새 언어별 콜레이션이 있습니다. 언어별 콜레이션은 다음 표에 표시된 것처럼 콜레이션 이름의 ISO 639-1 언어 코드로 표시됩니다. 두 경우에는 언어 코드에 변형을 나타내는 추가 항목이 있습니다(독일어 전화번호부 순서, 전통 스페인어).Table 5 utf8mb4 UCA 9.0.0 언어별 콜레이션
언어 콜레이션 크로아티아어 utf8mb4_hr_0900_ai_ci체코어 utf8mb4_cs_0900_ai_ci덴마크어 utf8mb4_da_0900_ai_ci에스페란토 utf8mb4_eo_0900_ai_ci에스토니아어 utf8mb4_et_0900_ai_ci독일어 전화번호부 순서 utf8mb4_de_pb_0900_ai_ci헝가리어 utf8mb4_hu_0900_ai_ci아이슬란드어 utf8mb4_is_0900_ai_ci라트비아어 utf8mb4_lv_0900_ai_ci리투아니아어 utf8mb4_lt_0900_ai_ci폴란드어 utf8mb4_pl_0900_ai_ci고전 라틴어 utf8mb4_la_0900_ai_ci루마니아어 utf8mb4_ro_0900_ai_ci슬로바키아어 utf8mb4_sk_0900_ai_ci슬로베니아어 utf8mb4_sl_0900_ai_ci현대 스페인어 utf8mb4_es_0900_ai_ci전통 스페인어 utf8mb4_es_trad_0900_ai_ci스웨덴어 utf8mb4_sv_0900_ai_ci터키어 utf8mb4_tr_0900_ai_ci베트남어 utf8mb4_vi_0900_ai_ciutf8mb4_0900_ai_ci는 또한 다음 표의 언어에 대해 accent-insensitive, case-insensitive 콜레이션으로 동작합니다.Table 6 utf8mb4_0900_ai_ci가 적합한 언어
언어 이름 언어 코드 독일어(사전 순서) de 영어 en 캐나다 프랑스어(locale fr_CA) fr 아일랜드 게일어 ga 인도네시아어 id 이탈리아어 it 룩셈부르크어 lb 말레이어 ms 네덜란드어 nl 포르투갈어 pt 스와힐리어 sw 줄루어 zu utf8mb4_da_0900_ai_ci는 또한 다음 표의 언어에 대해 accent-insensitive, case-insensitive 콜레이션으로 동작합니다.Table 7 utf8mb4_da_0900_ai_ci가 적합한 언어
언어 이름 언어 코드 노르웨이어 no 노르웨이어 보크몰 nb 노르웨이어 뉘노르스크 nn 비언어별
utf8mb4_0900_ai_ci및 언어별utf8mb4_LANG_0900_ai_ci유니코드 콜레이션은 각각 다음 특성을 가집니다:- 이 콜레이션은 Unicode Collation Algorithm (UCA) 9.0.0 및 Common Locale Data Repository (CLDR) v30을 기반으로 하며, 악센트 비구분이고 대소문자 비구분입니다. 이러한 특성은 콜레이션 이름의
_0900,_ai,_ci로 표시됩니다. 예외:utf8mb4_la_0900_ai_ci는 Classical Latin이 CLDR에 정의되어 있지 않기 때문에 CLDR을 기반으로 하지 않습니다. - 이 콜레이션은 [U+0, U+10FFFF] 범위의 모든 문자에 대해 작동합니다.
- 이 콜레이션이 언어별이 아닌 경우, 보조 문자를 포함한 모든 문자를 기본 순서(아래 설명)로 정렬합니다. 이 콜레이션이 언어별인 경우, 해당 언어의 문자는 언어별 규칙에 따라 올바르게 정렬하고, 해당 언어에 속하지 않는 문자는 기본 순서로 정렬합니다.
- 기본적으로 이 콜레이션은 DUCET 테이블(Default Unicode Collation Element Table)에 나열된 코드 포인트가 있는 문자를 해당 테이블에 할당된 가중치 값에 따라 정렬합니다. 이 콜레이션은 DUCET 테이블에 나열된 코드 포인트가 없는 문자를 UCA에 따라 구성된 암시적 가중치 값을 사용하여 정렬합니다.
- 비언어별 콜레이션의 경우 축약 시퀀스의 문자는 별도의 문자로 처리됩니다. 언어별 콜레이션의 경우 축약이 문자 정렬 순서를 변경할 수 있습니다.
자세한 내용은 Unicode Character Sets를 참조하십시오. (WL #9125, WL #9108, WL #9479)
- 이 콜레이션은 Unicode Collation Algorithm (UCA) 9.0.0 및 Common Locale Data Repository (CLDR) v30을 기반으로 하며, 악센트 비구분이고 대소문자 비구분입니다. 이러한 특성은 콜레이션 이름의
컴파일 관련 사항
-
Microsoft Windows: Windows에서 MySQL을 빌드할 때 툴체인은 이제 가능한 경우 64비트 도구를 우선 사용합니다(이전에는 32비트). 이렇게 하면 링크 속도가 빨라지고 32비트 링커의 제한된 주소 공간과 관련된 문제를 방지합니다. (Bug #80675, Bug #22900585)
-
CMake는 이제 GNU gold 링커를 사용할 수 있고 명시적으로 비활성화되지 않은 경우 빌드 프로세스가 해당 링커로 링크하도록 합니다. 이 링커 사용을 비활성화하려면
-DUSE_LD_GOLD=OFFCMake 옵션을 지정하십시오. (Bug #23759968, Bug #82163) -
WITH_EXTRA_CHARSETSCMake 옵션이 제거되었습니다. MySQL 빌드는 이제 기본적으로 모든 캐릭터셋으로 구성됩니다. 더 적은 캐릭터셋을 원하는 사용자는cmake/character_sets.cmake를 직접 편집하고 서버를 다시 컴파일할 수 있습니다. (Bug #80005, Bug #22552125) -
서버 빌드를 위한 Boost 라이브러리의 최소 버전은 이제 1.60.0입니다. (Bug #79380, Bug #22253921)
-
소스 코드 베이스를 정리하는 작업이 수행되었으며, 여기에는 다음이 포함됩니다: 불필요한 CMake 검사를 제거하고, 소스 파일에서 사용되지 않는 매크로를 제거하고, 의존성 수를 줄이고 더 모듈화되도록 헤더 파일을 재구성하고, 정의가 없는 함수 선언을 제거하고, 로컬로 작성된 함수를 업계 표준 라이브러리의 동등한 함수로 대체했습니다.
-
MySQL 소스 코드는 이제 C++11 기능을 허용하고 사용합니다. 지원되는 모든 플랫폼에서 양호한 수준의 C++11 지원을 활성화하기 위해, 이제 다음 최소 컴파일러 버전이 적용됩니다:
- GCC: 4.8 이상
- Clang: 3.4 이상(OS X의 Xcode 7)
- Solaris Studio: 12.4 이상(Solaris 클라이언트 빌드만 해당)
- Visual Studio: 2015
- CMake: Windows에서는 필요한 Visual Studio 버전으로 인해 필요한 CMake 버전이 3.2.3 이상이 됩니다
Solaris에서는
stlport라이브러리가 더 이상 사용되지 않습니다. 이로 인해SUNPRO_CXX_LIBRARYCMake 옵션은 쓸모없게 되었으므로 제거되었습니다. (WL #8896)
컴포넌트 관련 사항
-
MySQL Server에는 이제 서버 확장성을 개선하기 위한 컴포넌트 기반 인프라가 포함됩니다:
- 컴포넌트는 서버와 다른 컴포넌트에서 사용할 수 있는 서비스를 제공합니다. (서비스 사용과 관련하여, 서버는 다른 컴포넌트와 동등한 하나의 컴포넌트입니다.) 컴포넌트는 자신이 제공하는 서비스를 통해서만 서로 상호작용합니다.
INSTALL COMPONENT및UNINSTALL COMPONENT문은 런타임에 컴포넌트를 조작하기 위한 SQL 인터페이스를 제공합니다.- 로더 서비스는 설치된 컴포넌트를
mysql.component시스템 테이블에 등록하고, 이후 서버 재시작을 위해 시작 시퀀스 중에 등록된 컴포넌트를 설치합니다.
컴포넌트 인프라 및 해당 SQL 수준 인터페이스에 대한 일반 정보는 MySQL Components를 참조하십시오. 컴포넌트의 내부 구현에 대한 정보는 https://dev.mysql.com/doc/index-other.html에서 제공되는 MySQL Server Doxygen 문서를 참조하십시오. (WL #4102)
설정 관련 사항
-
호환되지 않는 변경; InnoDB: 이전에는
innodb_read_only시스템 변수를 활성화하면InnoDB스토리지에 대해서만 테이블 생성 및 삭제가 방지되었습니다. MySQL 8.0부터는innodb_read_only를 활성화하면 모든 스토리지 엔진에 대해 이러한 작업이 방지됩니다. 테이블 생성 및 삭제 작업은mysql시스템 데이터베이스의 데이터 딕셔너리 테이블을 수정하지만, 해당 테이블은InnoDB스토리지 엔진을 사용하며innodb_read_only가 활성화된 경우 수정할 수 없습니다. 동일한 원칙은 데이터 딕셔너리 테이블 수정을 필요로 하는 다른 테이블 작업과, 권한 부여 테이블 및func와plugin테이블처럼InnoDB스토리지 엔진을 사용하는mysql데이터베이스의 다른 테이블을 수정하는 작업에도 적용됩니다. (Bug #21611899) -
메모리 매핑된 트랜잭션 코디네이터에 대해 하드코딩된 8KB 메모리 페이지 크기는 페이지 크기가 훨씬 더 큰 ARM64 및 PowerPC 같은 플랫폼에는 너무 작았습니다. 이제 서버는 하드코딩된 값을 사용하는 대신 현재 플랫폼의 페이지 크기를 가져오기 위해 시스템 호출을 실행합니다.
--log-tc-size옵션에 대한 결과로, 최소값과 기본값은 이제 페이지 크기의 6배입니다. 또한 값은 페이지 크기의 배수여야 합니다. 패치를 제공해 주신 Alexey Kopytov에게 감사드립니다. (Bug #23014086, Bug #80818, Bug #26931470, Bug #87995) -
MySQL은 이제
SET문 구문의SET PERSIST변형을 지원하여, 런타임에 설정 변경을 수행하고 해당 변경이 서버 재시작 후에도 지속되도록 합니다.SET GLOBAL과 마찬가지로,SET PERSIST는 동적(런타임에 설정 가능)인 모든 글로벌 시스템 변수에 대해 허용됩니다. 이 문은 런타임 변수 값을 변경하지만, 또한 변수 설정을 데이터 디렉터리의mysqld-auto.cnf라는 옵션 파일에 기록합니다. 시작 시 서버는 다른 모든 옵션 파일 이후에 이 파일을 처리합니다. 자세한 내용은 Persisted System Variables를 참조하십시오.각 시스템 변수가 가장 최근에 어떻게 설정되었는지를 보여 주는 정보를 제공하기 위해, Performance Schema에는 이제 각 시스템 변수와 해당 변수가 값을 가져온 소스를 나열하는
variables_info테이블이 있습니다. Performance Schema variables_info Table을 참조하십시오.이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 이 변경 사항을 Performance Schema에 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다. (WL #8688)
데이터 딕셔너리 관련 사항
-
호환되지 않는 변경: MySQL Server는 이제 트랜잭션 테이블에 있는 데이터베이스 객체에 대한 정보를 포함하는 전역 데이터 딕셔너리를 통합합니다. 이전 MySQL 릴리스에서는 딕셔너리 데이터가 메타데이터 파일 및 비트랜잭션 시스템 테이블에 저장되었습니다.
데이터 딕셔너리가 활성화된 서버는 데이터 딕셔너리가 없는 서버와 비교하여 몇 가지 일반적인 운영상 차이를 수반합니다. Data Dictionary Usage Differences를 참조하십시오. 또한 MySQL 8.0으로 업그레이드하는 경우, 업그레이드 절차는 이전 MySQL 릴리스와 다소 다르며 특정 선행 조건을 확인하여 설치의 업그레이드 준비 상태를 검증해야 합니다. 자세한 내용은 Upgrading MySQL, 특히 Preparing Your Installation for Upgrade를 참조하십시오.
InnoDB는 MySQL 8.0.0 릴리스에서 계속 자체 데이터 딕셔너리를 사용합니다.다음 목록은 이 변경의 주요 영향을 간략히 설명합니다:
-
이전에 베이스 테이블 및 뷰와 연결되었던
.frm메타데이터 파일은 더 이상 존재하지 않습니다. 이전에.frm파일에 저장되었던 메타데이터는 이제 데이터 딕셔너리 테이블에 저장됩니다.마찬가지로, 이전에
.TRG및.TRN파일에 저장되었던 트리거 메타데이터는 데이터 딕셔너리 테이블에 저장되며, 해당 파일은 더 이상 존재하지 않습니다. -
.frm파일이 제거됨에 따라,.frm파일 구조가 부과하던 64KB 테이블 정의 크기 제한이 제거됩니다. -
.frm파일이 제거됨에 따라,INFORMATION_SCHEMA.TABLESVERSION필드는 이제 MySQL 5.7에서 사용된 마지막.frm파일 버전인10의 하드코딩된 값을 보고합니다. -
.frm파일이 제거됨에 따라,sync_frm시스템 변수가 제거됩니다. -
MySQL 데이터 딕셔너리를 제공하는 새로운 딕셔너리 객체 캐시는 이전에 접근한 데이터 딕셔너리 객체를 메모리에 저장하여 객체 재사용을 가능하게 하고 디스크 I/O를 최소화합니다. 가장 최근에 사용되지 않은 객체를 메모리에서 제거하기 위해 LRU 기반 제거 전략이 사용됩니다. 이 캐시는 서로 다른 객체 타입을 저장하는 여러 파티션으로 구성됩니다. 자세한 내용은 Dictionary Object Cache를 참조하십시오.
-
새로운 내부 데이터 딕셔너리 API를 통해 서버, 내부 스토리지 엔진 및 플러그인이 MySQL 데이터 딕셔너리에 접근하고 데이터를 저장할 수 있습니다. 스키마, 테이블스페이스, 테이블스페이스 파일, 테이블, 파티셔닝된 테이블, 테이블 파티션 데이터, 트리거, 저장 루틴, 이벤트, 테이블 객체, 뷰, 캐릭터셋 및 콜레이션을 처리하기 위한 내부 데이터 딕셔너리 API가 도입되었습니다.
이 변경으로
CREATE TRIGGER및DROP TRIGGER작업에 대한 데이터 딕셔너리 업데이트와 바이너리 로그 쓰기가 단일 원자적 트랜잭션으로 결합됩니다. -
데이터 딕셔너리 테이블은 보이지 않지만, 대부분의 경우 대신 쿼리할 수 있는 대응되는
INFORMATION_SCHEMA테이블이 있습니다. 이를 통해 애플리케이션 사용을 위한 안정적인INFORMATION_SCHEMA인터페이스를 유지하면서, 서버 개발이 진행됨에 따라 기반 데이터 딕셔너리 테이블을 변경할 수 있습니다.일부
INFORMATION_SCHEMA테이블은 데이터 딕셔너리 테이블에 대한 뷰로 완전히 다시 구현되었습니다:CHARACTER_SETS COLLATIONS COLLATION_CHARACTER_SET_APPLICABILITY COLUMNS KEY_COLUMN_USAGE SCHEMATA STATISTICS TABLES TABLE_CONSTRAINTS VIEWS해당 테이블에 대한 쿼리는 이제 다른 더 느린 수단이 아니라 데이터 딕셔너리 테이블에서 정보를 가져오기 때문에 더 효율적입니다. 특히, 데이터 딕셔너리 테이블에 대한 뷰인 각
INFORMATION_SCHEMA테이블에 대해 다음이 적용됩니다:- 서버는 더 이상
INFORMATION_SCHEMA테이블의 각 쿼리에 대해 임시 테이블을 생성할 필요가 없습니다. - 기반 데이터 딕셔너리 테이블이 이전에는 디렉터리 스캔(예: 데이터베이스 내에서 데이터베이스 이름 또는 테이블 이름을 열거하기 위한 경우) 또는 파일 열기 작업(예:
.frm파일에서 정보를 읽기 위한 경우)으로 얻었던 값을 저장하는 경우, 해당 값에 대한INFORMATION_SCHEMA쿼리는 이제 대신 테이블 조회를 사용합니다. (또한, 뷰가 아닌INFORMATION_SCHEMA테이블의 경우에도 데이터베이스 및 테이블 이름과 같은 값은 데이터 딕셔너리에서 조회하여 가져오며 디렉터리 또는 파일 스캔이 필요하지 않습니다.) - 기반 데이터 딕셔너리 테이블의 인덱스를 통해 Optimizer가 효율적인 쿼리 실행 계획을 구성할 수 있으며, 이는 쿼리마다 임시 테이블을 사용하여
INFORMATION_SCHEMA테이블을 처리했던 이전 구현에는 해당하지 않았습니다.
앞의 개선 사항은 데이터 딕셔너리 테이블에 대한 뷰인
INFORMATION_SCHEMA테이블에 대응하는 정보를 표시하는SHOW문에도 적용됩니다. 예를 들어,SHOW DATABASES는SCHEMATA테이블과 동일한 정보를 표시합니다.INFORMATION_SCHEMA쿼리가 테이블 통계를 검색하는 경우, 서버는 이제INFORMATION_SCHEMA테이블에 캐시된 통계를 사용하거나 스토리지 엔진에서 직접 최신 통계를 가져올 수 있습니다.information_schema_stats시스템 변수는 서버가 사용하는 통계 소스를 제어합니다.-
information_schema_stats가CACHED(기본값)인 경우, 서버는STATISTICS및TABLES테이블에 저장된 캐시된 통계를 사용합니다. -
information_schema_stats가LATEST인 경우, 서버는 스토리지 엔진에서 직접 통계를 가져옵니다. 이 경우 서버는STATISTICS및TABLES에 대한 쿼리를STATISTICS_DYNAMIC및TABLES_DYNAMIC테이블에 저장된 최신 통계에 대한 쿼리로 처리합니다.영향을 받는
INFORMATION_SCHEMA테이블 통계 컬럼은 다음을 포함합니다:STATISTICS.CARDINALITY TABLES.AUTO_INCREMENT TABLES.AVG_ROW_LENGTH TABLES.CHECKSUM TABLES.CHECK_TIME TABLES.CREATE_TIME TABLES.DATA_FREE TABLES.DATA_LENGTH TABLES.INDEX_LENGTH TABLES.MAX_DATA_LENGTH TABLES.TABLE_ROWS TABLES.UPDATE_TIME
자세한 내용은 Optimizing INFORMATION_SCHEMA Queries를 참조하십시오.
- 서버는 더 이상
-
foreign_keys및foreign_key_column_usage테이블은 이제 외래 키 정보를 저장합니다. 외래 키 정보를 가져오는 표준 SQL 방식은INFORMATION_SCHEMAREFERENTIAL_CONSTRAINTS및KEY_COLUMN_USAGE테이블을 사용하는 것입니다. 이러한 테이블은 이제foreign_keys,foreign_key_column_usage및 기타 데이터 딕셔너리 테이블에 대한 뷰로 구현됩니다.일부 외래 키 오류에 대해, 서버는 이제 더 적절하고 더 많은 정보를 제공하는 오류 메시지를 생성합니다.
비호환성: 이전에는 MySQL이 64자를 초과하는 외래 키 이름을 지원했습니다.
foreign_keys및foreign_key_column_usage테이블에 저장되는 외래 키 이름은 SQL 표준에 따라 최대 64자이므로, 더 긴 외래 키 이름은 더 이상 허용되지 않습니다.-
데이터 딕셔너리는 데이터베이스 객체에 대한 정보를 제공하므로, 서버는 더 이상 데이터베이스를 찾기 위해 데이터 디렉터리의 디렉터리 이름을 검사하지 않습니다. 따라서
--ignore-db-dir옵션과ignore_db_dirs시스템 변수는 불필요해졌으며 제거되었습니다. 이에 따라 시스템 설정과 애플리케이션 프로그램을 업데이트하십시오. -
이전에는
CREATE TEMPORARY TABLE을 사용하여 존재하지 않는 데이터베이스의 이름으로 테이블 이름을 한정함으로써 존재하지 않는 데이터베이스에 테이블을 생성할 수 있었습니다. 이는 더 이상 허용되지 않습니다. -
시스템 테이블 변경 사항:
-
많은 시스템 테이블이
MyISAM(비트랜잭션) 테이블에서InnoDB(트랜잭션) 테이블로 변환되었습니다. 예를 들어, 이 릴리스 노트의 다른 곳에서 설명한 것처럼 grant 테이블은 이제InnoDB테이블입니다. 다른 예시는 다음과 같습니다. -
mysql시스템 데이터베이스에서 로드 가능한 함수 정보를 저장하는func테이블은 이제InnoDB(트랜잭션) 테이블입니다. 이전에는MyISAM(비트랜잭션) 테이블이었습니다.이 변경의 결과로,
CREATE FUNCTION및DROP FUNCTION문은 로드 가능한 함수에 사용되는 경우에도 암시적 커밋을 발생시킵니다(암시적 커밋을 발생시키는 문 참조). 이전에는 저장 함수에 사용될 때 암시적 커밋을 발생시켰지만, 로드 가능한 함수에 대해서는 그렇지 않았습니다. -
이전에는 저장 루틴 및 이벤트에 대한 정보가
mysql시스템 데이터베이스의proc및event테이블에 저장되었습니다. 이러한 테이블은 더 이상 사용되지 않습니다. 대신 저장 루틴 및 이벤트에 대한 정보는mysql시스템 데이터베이스의routines,events,parameters데이터 딕셔너리 테이블에 저장됩니다. 이전 테이블은MyISAM(비트랜잭션) 스토리지 엔진을 사용했습니다. 새 테이블은InnoDB(트랜잭션) 엔진을 사용합니다.이전에는 잘못된 문자가 포함된 저장 루틴을 생성하면 경고가 발생했습니다. 이제는 오류가 발생합니다.
-
시스템 테이블(예: 시간대 또는 로그 테이블)에 대한 접근을 비시스템 테이블에 대한 접근과 구분할 수 있도록, 서버는
System lock및Opening tables스레드 상태 대신Locking system tables및Opening system tables스레드 상태를 사용합니다. General Thread States를 참조하십시오.
-
-
InnoDB변경 사항:- 지속
InnoDB테이블스페이스에는 이제 직렬화된 형식의 딕셔너리 객체 데이터인 Serialized Dictionary Information (SDI)을 위한 트랜잭션 스토리지가 포함됩니다. 앞에서 언급한.frm및 트리거 메타데이터 파일이 사라지는 것과 함께,.SDI파일이 나타나는 것을 볼 수 있습니다. 이러한 파일은 직렬화된 딕셔너리 정보 파일입니다. SDI 트랜잭션 스토리지는 아직 완전히 구현되지 않은 진행 중인 기능을 위해 예약되어 있습니다. - 새 명령줄 유틸리티인 ibd2sdi는 지속
InnoDB테이블스페이스에서 직렬화된 딕셔너리 정보(SDI)를 추출하는 데 사용됩니다. 이 릴리스의 지속InnoDB테이블스페이스에는 SDI 데이터가 없습니다. ibd2sdi 유틸리티는 향후 사용을 위해 예약되어 있습니다. InnoDB시작 코드는 MySQL 데이터 딕셔너리 기능과 관련된 MySQL 초기화 변경 사항을 지원하도록 리팩터링되었습니다.
- 지속
-
업그레이드 및 다운그레이드 관련 영향:
- MySQL 5.7에서 MySQL 8.0으로 업그레이드하려면 Upgrading MySQL에 설명된 업그레이드 절차를 수행해야 합니다.
- MySQL 8.0에서 MySQL 5.7로 다운그레이드하는 것은 논리적 다운그레이드 방법(mysqldump 다운그레이드)을 사용하는 경우에만 지원됩니다. 인플레이스 다운그레이드는 지원되지 않습니다.
(Bug #80481, Bug #22811659, WL #6378, WL #6383, WL #7896, WL #6384, WL #7897, WL #6388, WL #7898, WL #7284, WL #7630, WL #7836, WL #6390, WL #6382, WL #6389, WL #6387, WL #6385, WL #7053, WL #7158, WL #8980, WL #8150, WL #7488, WL #7066, WL #6929, WL #6391, WL #6392, WL #6599)
-
데이터 타입 관련 사항
-
비트 함수 및 연산자는
BIT_COUNT(),BIT_AND(),BIT_OR(),BIT_XOR(),&,|,^,~,<<, 및>>로 구성됩니다. MySQL 8.0 이전에는 비트 함수 및 연산자가BIGINT(64비트 정수) 인수를 요구하고BIGINT값을 반환했으므로, 최대 범위가 64비트였습니다.BIGINT가 아닌 인수는 연산을 수행하기 전에BIGINT로 변환되었으며 잘림이 발생할 수 있었습니다. 이제 비트 함수 및 연산자는 바이너리 문자열 타입 인수(BINARY,VARBINARY, 및BLOB타입)를 허용하고 같은 타입의 값을 반환하므로, 64비트보다 큰 인수를 받고 반환 값을 생성할 수 있습니다. 비바이너리 문자열 인수는 이전과 같이BIGINT로 변환되어 그에 따라 처리됩니다.비트 함수 및 연산자에 대해 바이너리 문자열 인수를 허용하면 더 큰 값을 조작하기 쉬워질 뿐만 아니라, UUID 및 IPv6 값과 같은 특정 타입의 데이터에 대해 이전에는 쉽게 수행할 수 없었던 비트 연산을 수행하기도 쉬워집니다. 예시는 Bit Functions and Operators를 참조하십시오.
이 동작 변경의 한 가지 영향은 바이너리 문자열 인수에 대한 비트 연산이 MySQL 8.0에서 5.7과 다른 결과를 생성할 수 있다는 점입니다. MySQL 5.7과 8.0 사이의 잠재적 비호환성에 대해 MySQL 5.7에서 준비하는 방법에 대한 정보는 MySQL 5.7 Reference Manual의 Bit Functions and Operators를 참조하십시오. (WL #8699)
사용 중단 및 제거 관련 사항
-
중요한 변경; InnoDB: 다음
InnoDB파일 형식 설정 옵션은 MySQL 5.7.7에서 deprecated 되었으며 이제 제거되었습니다:innodb_file_formatinnodb_file_format_checkinnodb_file_format_maxinnodb_large_prefix
파일 형식 설정 옵션은 MySQL 5.1의 이전
InnoDB버전과 호환되는 테이블을 생성하는 데 필요했습니다. 이제 MySQL 5.1이 제품 수명 주기의 끝에 도달했으므로, 이러한 옵션은 더 이상 필요하지 않습니다.FILE_FORMAT컬럼은INNODB_SYS_TABLES및INNODB_SYS_TABLESPACESInformation Schema 테이블에서 제거되었습니다. (WL #7704) -
InnoDB:
innodb_stats_sample_pages시스템 변수가 제거되었습니다.innodb_stats_sample_pages는 MySQL 5.6.3에서 deprecated 되었으며innodb_stats_transient_sample_pages로 대체되었습니다. (WL #8903) -
InnoDB:
innodb_locks_unsafe_for_binlog시스템 변수가 제거되었습니다.innodb_locks_unsafe_for_binlog는 MySQL 5.6.3에서 deprecated 되었습니다.READ COMMITTED격리 수준은 유사한 기능을 제공합니다. (WL #8894) -
InnoDB: XA 트랜잭션에서 2단계 커밋 지원을 활성화하는
innodb_support_xa시스템 변수가 제거되었습니다. MySQL 5.7.10부터 XA 트랜잭션에서 2단계 커밋에 대한InnoDB지원은 항상 활성화됩니다. (WL #8843) -
Deprecated된 mysql_install_db 프로그램이 MySQL 배포판에서 제거되었습니다. 데이터 디렉터리 초기화는 대신
--initialize또는--initialize-insecure옵션과 함께 mysqld를 호출하여 수행해야 합니다. 또한 mysql_install_db에서 사용하던 mysqld의 Deprecated된--bootstrap옵션이 제거되었으며, mysql_install_db의 설치 위치를 제어하던INSTALL_SCRIPTDIRCMake옵션이 제거되었습니다.이전에는 버전 1 테스트 스위트 코드가 MySQL 소스 배포판의
mysql-test/lib/v1디렉터리에 있었습니다. 이 코드는 mysql_install_db를 사용했으며 제거되었습니다.MYSQL_INSTALL_DB환경 변수와MTR_VERSION환경 변수 값 1은 더 이상 지원되지 않습니다. (WL #9071) -
mysql_plugin 유틸리티가 제거되었습니다. 대안으로는
--plugin-load또는--plugin-load-add옵션을 사용하여 서버 시작 시 플러그인을 로드하거나,INSTALL PLUGIN문을 사용하여 런타임에 로드하는 방법이 있습니다. (WL #8927) -
Deprecated된
mysql_shutdown()C API 함수와 해당COM_SHUTDOWN클라이언트/서버 프로토콜 명령이 제거되었습니다. 대신mysql_query()를 사용하여SHUTDOWN문을 실행하십시오. (WL #9014)
Doxygen 관련 사항
-
MySQL 소스 코드는 내부 문서화에 Doxygen을 사용하도록 업데이트되었습니다. 이 작업은 진행 중입니다. 새 MySQL 버전이 배포됨에 따라 Doxygen 문서는 업데이트되며, 최신 버전은 항상 https://dev.mysql.com/doc/index-other.html에서 사용할 수 있습니다.
또한 Generating MySQL Doxygen Documentation Content의 지침을 사용하여 MySQL 소스 배포판에서 Doxygen 콘텐츠를 로컬로 생성할 수도 있습니다. (WL #8493)
Optimizer 관련 사항
-
InnoDB: 스토리지 엔진 인터페이스는 이제 Optimizer가 여러 로우를 읽을 것으로 예상하는 스캔에 사용할 레코드 버퍼의 크기에 대한 정보를 제공할 수 있게 합니다. 버퍼 크기는 예상 크기에 따라 달라질 수 있습니다.
InnoDB는 이 가변 크기 버퍼링 기능을 사용하여 로우 프리페칭을 활용하고, 래칭 및 B-tree 탐색의 오버헤드를 줄입니다. 이전에는InnoDB가 작은 고정 크기 버퍼를 사용했습니다. (WL #7093) -
Optimizer는 이제 파생 테이블 또는 뷰를 외부 쿼리 블록에 병합할지, 아니면 내부 임시 테이블을 사용하여 구체화할지를 지정하기 위한 테이블 수준
MERGE및NO_MERGE힌트를 지원합니다. 예:SELECT /*+ MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt; SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt;자세한 내용은 Optimizer Hints를 참조하십시오. (Bug #79554, Bug #22328100, WL #9307)
-
MySQL은 이제 보이지 않는 인덱스를 지원합니다. 보이지 않는 인덱스는 Optimizer가 전혀 사용하지 않지만, 그 외에는 일반적으로 유지됩니다. 인덱스는 기본적으로 보이는 상태입니다. 보이지 않는 인덱스를 사용하면 해당 인덱스가 필요한 것으로 판명될 경우 되돌려야 하는 파괴적인 변경을 수행하지 않고도, 인덱스 제거가 쿼리 성능에 미치는 영향을 테스트할 수 있습니다. 이 기능은 기본 키가 아닌 인덱스에 대해
InnoDB테이블에 적용됩니다.새 인덱스에 대해 인덱스가 보이지 않는지 여부를 명시적으로 제어하려면
CREATE TABLE,CREATE INDEX또는ALTER TABLE의 인덱스 정의 일부로VISIBLE또는INVISIBLE키워드를 사용하십시오. 기존 인덱스의 보이지 않음 상태를 변경하려면ALTER TABLE... ALTER INDEX작업에VISIBLE또는INVISIBLE키워드를 사용하십시오. 자세한 내용은 Invisible Indexes를 참조하십시오. (WL #8697) -
mysql시스템 데이터베이스에는 이제 컬럼 값에 대한 통계를 저장하도록 설계된column_stats테이블이 포함됩니다. 자세한 내용은 Optimizer Statistics를 참조하십시오. (WL #8706)
패키징 관련 사항
-
이전 MySQL 시리즈의 Development Milestone 릴리스는 development milestone
N을 나타내기 위해-mN접미사를 사용하여 번호가 지정되었습니다. MySQL 8.0에서는 development 릴리스가-dmr접미사를 사용합니다. 예를 들어, 이 MySQL 릴리스는8.0.0-dmr로 번호가 지정되었습니다. (Bug #80408, Bug #22748154) -
이 릴리스 노트의 다른 곳에서 설명한 C++11 기능 사용의 결과로, 다음 패키징 변경이 적용되었습니다:
- Red Hat Enterprise Linux 5 및 Oracle Linux 5 RPM에 대한 지원이 중단되었습니다
- Generic binary tarball 빌드가 Red Hat Enterprise Linux 6으로 이동되었습니다
(WL #8896)
Parser 관련 사항
-
비호환 변경:
SELECT및UNION에 대한 Parser 규칙이 더 일관되도록(동일한SELECT문법이 이러한 각 컨텍스트에서 균일하게 적용됩니다) 그리고 중복을 줄이도록 리팩터링되었습니다. 이 작업으로 인해 사용자에게 보이는 여러 효과가 발생했으며, 특정 구문을 다시 작성해야 할 수 있습니다:-
NATURAL JOIN은 표준 SQL을 준수하여 선택적INNER키워드(NATURAL INNER JOIN)를 허용합니다. -
괄호가 없는 right-deep 조인이 표준 SQL을 준수하여 허용됩니다(예:
... JOIN... JOIN... ON... ON). -
이제
STRAIGHT_JOIN은 다른 내부 조인과 유사하게USING절을 허용합니다. -
Parser는 쿼리 표현식 주위의 괄호를 허용합니다. 예를 들어
(SELECT... UNION SELECT...)가 허용됩니다. -
Parser는
SQL_CACHE및SQL_NO_CACHE쿼리 수정자의 문서화된 허용 배치 위치를 더 잘 따릅니다. -
이전에는 서브쿼리에서만 허용되었던
UNION의 왼쪽 중첩이 이제 최상위 구문에서도 허용됩니다. 예를 들어 이제 이 구문은 유효한 것으로 허용됩니다:(SELECT 1 UNION SELECT 1) UNION SELECT 1; -
잠금 절(
FOR UPDATE,LOCK IN SHARE MODE)은 비-UNION쿼리에서만 허용됩니다. 이는 잠금 절을 포함하는SELECT구문에 괄호를 사용해야 함을 의미합니다. 이 구문은 더 이상 유효한 것으로 허용되지 않습니다:SELECT 1 FOR UPDATE UNION SELECT 1 FOR UPDATE;대신, 구문을 다음과 같이 작성하십시오:
(SELECT 1 FOR UPDATE) UNION (SELECT 1 FOR UPDATE);
(Bug #11746363, Bug #25734, WL #8083, WL #8907)
-
-
CREATE TABLE에 대한 Parser 규칙이 컨텍스트에 독립적이도록, 그리고 유지 관리성과 확장성을 개선하도록 리팩터링되었습니다. 이 작업으로 인해 사용자에게 보이는 여러 효과가 발생했습니다:- 생성 컬럼의 경우
NOT NULL NULL을 포함하면NOT NULL속성을 포함하는 컬럼이 되었으며, 이는 비생성 컬럼과 달랐습니다. 이제 이러한 정의는 최종 속성NULL을 사용하며, 그 결과 nullable 컬럼이 됩니다(비생성 컬럼과 일관됩니다). CREATE TEMPORARY TABLE은 더 이상TEMPORARY의 여러 인스턴스를 허용하지 않습니다.- 이전에는
PARSE_GCOL_EXPR가 키워드였으며 저장 프로그램에서 레이블로 사용할 수 없었습니다. 이제 더 이상 키워드가 아니며 레이블로 사용할 수 있습니다. - 일부 문법 오류에 대한 메시지는 구문 내 오류 위치와 관련하여 더 정밀해졌습니다.
(WL #7840, WL #8067, WL #8433, WL #8434, WL #8345)
- 생성 컬럼의 경우
Performance Schema 관련 사항
-
비호환 변경: Performance Schema는 이제 서버 오류(및 경고)를 계측하고, 일련의 요약 테이블을 통해 이에 대한 통계 정보를 노출합니다:
error계측기는 오류 정보가 수집되는지 여부를 제어합니다(기본적으로 활성화됨).- 여러 테이블은 다양한 방식으로 요약된 오류 정보를 포함합니다:
events_errors_summary_global_by_error,events_errors_summary_by_account_by_error,events_errors_summary_by_host_by_error,events_errors_summary_by_thread_by_error,events_errors_summary_by_user_by_error. performance_schema_error_size시스템 변수는 계측되는 오류의 수를 제어합니다.
자세한 내용은 Error Summary Tables를 참조하십시오
이전 버전에서 이 MySQL 릴리스로 업그레이드하는 경우, 이러한 변경 사항을
performance_schema데이터베이스에 반영하려면 mysql_upgrade를 실행하고 서버를 재시작해야 합니다.앞선 변경 사항의 결과로 두 개의 서버 오류 심볼 이름이 변경되었습니다:
ER_CANT_SET_ENFORCE_GTID_CONSISTENCY_ON_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS는 이제ER_CANT_ENFORCE_GTID_CONSISTENCY_WITH_ONGOING_GTID_VIOLATING_TX이고,ER_SET_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS는 이제ER_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TX입니다.또한 여러 서버 오류 코드는 더 이상 서버에서 사용되지 않는 것으로 확인되어 obsolete로 제거되었습니다. 이러한 오류 중 하나라도 구체적으로 테스트하는 애플리케이션은 업데이트해야 합니다:
ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE ER_BINLOG_ROW_RBR_TO_SBR ER_BINLOG_ROW_WRONG_TABLE_DEF ER_CANT_ACTIVATE_LOG ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION ER_CANT_CREATE_FEDERATED_TABLE ER_CANT_CREATE_SROUTINE ER_CANT_DELETE_FILE ER_CANT_GET_WD ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF ER_CANT_SET_WD ER_CANT_WRITE_LOCK_LOG_TABLE ER_CREATE_DB_WITH_READ_LOCK ER_CYCLIC_REFERENCE ER_DB_DROP_DELETE ER_DELAYED_NOT_SUPPORTED ER_DIFF_GROUPS_PROC ER_DISK_FULL ER_DROP_DB_WITH_READ_LOCK ER_DROP_USER ER_DUMP_NOT_IMPLEMENTED ER_ERROR_DURING_CHECKPOINT ER_ERROR_ON_CLOSE ER_EVENTS_DB_ERROR ER_EVENT_CANNOT_DELETE ER_EVENT_CANT_ALTER ER_EVENT_COMPILE_ERROR ER_EVENT_DATA_TOO_LONG ER_EVENT_DROP_FAILED ER_EVENT_MODIFY_QUEUE_ERROR ER_EVENT_NEITHER_M_EXPR_NOR_M_AT ER_EVENT_OPEN_TABLE_FAILED ER_EVENT_STORE_FAILED ER_EXEC_STMT_WITH_OPEN_CURSOR ER_FAILED_ROUTINE_BREAK_BINLOG ER_FLUSH_MASTER_BINLOG_CLOSED ER_FORM_NOT_FOUND ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED ER_FRM_UNKNOWN_TYPE ER_GOT_SIGNAL ER_GRANT_PLUGIN_USER_EXISTS ER_GTID_MODE_REQUIRES_BINLOG ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST ER_HASHCHK ER_INDEX_REBUILD ER_INNODB_NO_FT_USES_PARSER ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR ER_LOAD_DATA_INVALID_COLUMN_UNUSED ER_LOGGING_PROHIBIT_CHANGING_OF ER_MALFORMED_DEFINER ER_MASTER_KEY_ROTATION_ERROR_BY_SE ER_NDB_CANT_SWITCH_BINLOG_FORMAT ER_NEVER_USED ER_NISAMCHK ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR ER_NO_FILE_MAPPING ER_NO_GROUP_FOR_PROC ER_NO_RAID_COMPILED ER_NO_SUCH_KEY_VALUE ER_NO_SUCH_PARTITION__UNUSED ER_OBSOLETE_CANNOT_LOAD_FROM_TABLE ER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED ER_ORDER_WITH_PROC ER_PARTITION_SUBPARTITION_ERROR ER_PARTITION_SUBPART_MIX_ERROR ER_PART_STATE_ERROR ER_PASSWD_LENGTH ER_QUERY_ON_MASTER ER_RBR_NOT_AVAILABLE ER_SKIPPING_LOGGED_TRANSACTION ER_SLAVE_CHANNEL_DELETE ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT ER_SLAVE_MUST_STOP ER_SLAVE_WAS_NOT_RUNNING ER_SLAVE_WAS_RUNNING ER_SP_GOTO_IN_HNDLR ER_SP_PROC_TABLE_CORRUPT ER_SQL_MODE_NO_EFFECT ER_SR_INVALID_CREATION_CTX ER_TABLE_NEEDS_UPG_PART ER_TOO_MUCH_AUTO_TIMESTAMP_COLS ER_UNEXPECTED_EOF ER_UNION_TABLES_IN_DIFFERENT_DIR ER_UNSUPPORTED_BY_REPLICATION_THREAD ER_UNUSED1 ER_UNUSED2 ER_UNUSED3 ER_UNUSED4 ER_UNUSED5 ER_UNUSED6 ER_VIEW_SELECT_DERIVED_UNUSED ER_WRONG_MAGIC ER_WSAS_FAILED(WL #8058)
-
이전에는 Performance Schema
events_statements_current테이블의DIGEST및DIGEST_TEXT컬럼이 명령문 실행이 끝난 후에만 채워졌습니다. 이제 해당 컬럼은 파싱 직후와 명령문 실행이 시작되기 전에 채워집니다. 이를 통해 모니터링 애플리케이션은 명령문 실행 중에 명령문 다이제스트 정보에 액세스할 수 있습니다. (Bug #23336542) -
이전에는 Performance Schema 최적화가 모니터링 데이터 수집에 수반되는 오버헤드를 줄이는 데 중점을 두었습니다. 이러한 이전 작업을 보완하여, 이제 해당 데이터를 가져오는 Performance Schema 쿼리에 대해서도 오버헤드가 줄어듭니다. 이는 대부분의 Performance Schema 테이블에 인덱스를 추가함으로써 달성되며, 이를 통해 optimizer는 전체 테이블 스캔 이외의 실행 계획에 액세스할 수 있습니다. 이러한 인덱스는 해당 테이블을 사용하는
sys스키마 뷰와 같은 관련 객체의 성능도 향상시킵니다. 자세한 내용은 Performance Schema 쿼리 최적화를 참조하십시오. (WL #6616) -
setup_actorsPerformance Schema 테이블의ROLE컬럼 크기가 16자에서 32자로 증가했습니다. (WL #9262)
보안 관련 사항
-
validate_password_check_user_name시스템 변수는 이제 비활성화되는 대신 기본적으로 활성화됩니다. 이는validate_password플러그인이 활성화되어 있을 때, 이제 기본적으로 현재 세션 사용자 이름과 일치하는 비밀번호를 거부함을 의미합니다. (WL #9480) -
클라이언트 측
--ssl및--ssl-verify-server-cert옵션이 제거되었습니다.--ssl=1또는--enable-ssl대신--ssl-mode=REQUIRED를 사용하십시오.--ssl=0,--skip-ssl또는--disable-ssl대신--ssl-mode=DISABLED를 사용하십시오.--ssl-verify-server-cert옵션 대신--ssl-mode=VERIFY_IDENTITY를 사용하십시오. (서버 측--ssl옵션은 변경되지 않습니다.)C API의 경우,
mysql_options()에 대한MYSQL_OPT_SSL_ENFORCE및MYSQL_OPT_SSL_VERIFY_SERVER_CERT옵션은 클라이언트 측--ssl및--ssl-verify-server-cert옵션에 해당하며 제거되었습니다. 대신 옵션 값으로SSL_MODE_REQUIRED또는SSL_MODE_VERIFY_IDENTITY를 사용하는MYSQL_OPT_SSL_MODE를 사용하십시오. (WL #9091)
공간 데이터 지원
-
Well-Known Text (WKT) 값의 가져오기 및 내보내기를 위한 공간 함수가 OpenGIS
'GEOMETRYCOLLECTION EMPTY'표준 문법이 아니라 MySQL'GEOMETRYCOLLECTION()'비표준 문법을 사용했습니다. 이제 가져오기에서는 두 문법을 모두 인식하며, 내보내기에서는 표준 문법을 사용합니다. WKT 값에서 Geometry 값을 생성하는 함수를 참조하십시오. (Bug #23632147, Bug #81964) -
ST_X()및ST_Y()공간 함수는 이제 각각 X 또는 Y 좌표 값을 지정하는 선택적 두 번째 인수를 허용합니다. 두 인수를 사용하는 경우, 함수 결과는 첫 번째 인수의 포인트 값에서 해당 좌표가 수정된 값입니다. 또한 단일 인수를 사용하는ST_X()및ST_Y()는 이제 더 엄격해져서, 인수가 유효한 geometry이지만 포인트가 아닌 경우NULL을 반환하는 대신ER_UNEXPECTED_GEOMETRY_TYPE에러를 생성합니다. 자세한 내용은 포인트 속성 함수를 참조하십시오. (WL #8606) -
ST_SRID()공간 함수는 이제 SRID 값을 지정하는 선택적 두 번째 인수를 허용합니다. 두 인수를 사용하는 경우, 함수 결과는 두 번째 인수에 따라 SRID가 수정된 첫 번째 인수의 geometry 값입니다. 자세한 내용은 일반 Geometry 속성 함수를 참조하십시오. (WL #8543) -
MySQL은 이제 공간 데이터에 사용하기 위해 SRID 0 이외의 공간 참조 시스템에 대한 정보를 저장합니다. 이 정보는
st_spatial_reference_systems데이터 딕셔너리 테이블에 저장되며 EPSG Dataset 8.7을 기반으로 합니다. 공간 참조 시스템에 대한 정보는 Spatial Reference System Support를 참조하십시오.이전에는
ST_IsValid(),ST_MakeEnvelope(),ST_Validate()함수가 SRID 0인 지오메트리 인수를 요구했습니다. 이제 이 함수들은 투영 공간 참조 시스템에 대한 SRID가 있는 지오메트리 인수를 허용합니다. (WL #8579) -
MySQL 5.7에서는 여러 이름으로 사용할 수 있던 여러 공간 함수가 공간 함수 네임스페이스를 더 일관성 있게 만드는 방향으로 나아가기 위해 deprecated되었으며, 목표는 각 공간 함수 이름이 정확한 연산을 수행하는 경우
ST_로 시작하고, 최소 경계 사각형을 기반으로 하는 연산을 수행하는 경우MBR로 시작하도록 하는 것이었습니다. deprecated된 함수는 이제 제거되어, 대응하는ST_및MBR함수만 남았습니다:- 다음 함수는
MBR이름을 위해 제거되었습니다:Contains(),Disjoint(),Equals(),Intersects(),Overlaps(),Within(). - 다음 함수는
ST_이름을 위해 제거되었습니다:Area(),AsBinary(),AsText(),AsWKB(),AsWKT(),Buffer(),Centroid(),ConvexHull(),Crosses(),Dimension(),Distance(),EndPoint(),Envelope(),ExteriorRing(),GeomCollFromText(),GeomCollFromWKB(),GeomFromText(),GeomFromWKB(),GeometryCollectionFromText(),GeometryCollectionFromWKB(),GeometryFromText(),GeometryFromWKB(),GeometryN(),GeometryType(),InteriorRingN(),IsClosed(),IsEmpty(),IsSimple(),LineFromText(),LineFromWKB(),LineStringFromText(),LineStringFromWKB(),MLineFromText(),MLineFromWKB(),MPointFromText(),MPointFromWKB(),MPolyFromText(),MPolyFromWKB(),MultiLineStringFromText(),MultiLineStringFromWKB(),MultiPointFromText(),MultiPointFromWKB(),MultiPolygonFromText(),MultiPolygonFromWKB(),NumGeometries(),NumInteriorRings(),NumPoints(),PointFromText(),PointFromWKB(),PointN(),PolyFromText(),PolyFromWKB(),PolygonFromText(),PolygonFromWKB(),SRID(),StartPoint(),Touches(),X(),Y(). GLength()는ST_Length()를 위해 제거되었습니다.
(WL #8157)
- 다음 함수는
테스트 스위트 관련 사항
-
mysql-test-run.pl은 이제
--do-suite옵션을 지원합니다. 이 옵션은--do-test와 유사하지만 실행할 테스트의 전체 스위트를 지정할 수 있습니다. (Bug #24350345) -
mysqltest
rmdir명령은 제거할 디렉터리에 파일이나 디렉터리가 하나라도 포함되어 있으면 실패합니다. 디렉터리와 그 내용(있는 경우)의 재귀적 제거를 가능하게 하기 위해, mysqltest는 이제force-rmdir명령을 지원합니다. (Bug #24316799) -
두 가지 새로운 테스트 스위트 옵션을 통해 테스트 케이스를 더 쉽게 디버그할 수 있습니다:
- mysql-test-run.pl은 옵션을 mysqltest에 전달할 수 있게 하는
--mysqltest=options옵션을 지원합니다. - mysqltest는 실행된 프로그램의 출력을 즉시
stdout에 출력하게 하는--trace-exec옵션을 지원합니다.
mysql-test-run.pl은 이제
MTR_CTEST_TIMEOUT환경 변수를 인식합니다. 이 변수가 설정되면, 값은 ctest 유닛 테스트 명령에 전달할 초 단위 제한 시간입니다. (Bug #21821049, Bug #21278845) - mysql-test-run.pl은 옵션을 mysqltest에 전달할 수 있게 하는
-
MySQL 테스트 스위트의 테스트 케이스에서, 이전에는 서버 오류에 대해서만
--error명령에 심볼릭 오류 이름을 사용할 수 있었습니다. 이제 클라이언트 오류에 대해서도 이 작업이 가능합니다. 예를 들면 다음과 같습니다:--error CR_SERVER_GONE_ERROR(Bug #21048973, Bug #76972)
-
mysqltest 프로그램에는 이제 소스 디렉터리에서 대상 디렉터리로 패턴과 일치하는 모든 파일을 복사하는
copy_files_wildcard명령이 있습니다. https://dev.mysql.com/doc/index-other.html에서 제공되는 MySQL Server Doxygen 문서를 참조하십시오. (Bug #82111, Bug #23743035)
X 플러그인 관련 사항
Protobuf디코더 클래스는 중첩 객체 수를 50개(기본값)로 제한했습니다. (Bug #23707238, Bug #82025)list_objects문은 테이블을 컬렉션으로 잘못 보고했습니다. (Bug #23631240)create_collection문은 primary key 대신'_id'컬럼에 unique key 인덱스가 있는 컬렉션 테이블을 생성했습니다. (Bug #23284569)
추가되거나 변경된 기능
-
호환되지 않는 변경; 파티셔닝: MySQL 서버에서 일반 파티셔닝 핸들러가 제거되었습니다. 이 변경의 일부로, mysqld는 더 이상
--partition및--skip-partition옵션을 지원하지 않으며, 서버는 더 이상-DWITH_PARTITION_STORAGE_ENGINE을 사용하여 빌드할 수 없습니다. 또한partition은 더 이상SHOW PLUGINS의 출력에 표시되지 않거나,INFORMATION_SCHEMA.PLUGINS테이블에 표시되지 않습니다.지정된 테이블의 파티셔닝을 지원하려면, 이제 해당 테이블에 사용되는 스토리지 엔진이 자체 (“네이티브”) 파티셔닝 핸들러를 제공해야 합니다.
InnoDB는 네이티브 파티셔닝 핸들러를 포함하는 MySQL 8.0에서 지원되는 유일한 스토리지 엔진입니다. 다른 스토리지 엔진을 사용하여 MySQL 8.0에서 파티셔닝된 테이블을 생성하려는 시도는 실패합니다. (MySQL NDB Cluster에서 사용하는NDB스토리지 엔진도 자체 파티셔닝 핸들러를 제공하지만, 현재 MySQL 8.0에서는 지원되지 않습니다.)업그레이드에 미치는 영향.
InnoDB가 아닌 스토리지 엔진(예:MyISAM)을 사용하는 파티셔닝된 테이블을 MySQL 5.7(또는 이전 버전)에서 MySQL 8.0으로 직접 업그레이드하는 것은 지원되지 않습니다. 이러한 테이블을 MySQL 8.0과 호환되도록 업그레이드하는 옵션은 두 가지이며, 여기에 나열되어 있습니다:-
테이블의 파티셔닝을 제거하십시오.
ALTER TABLE... REMOVE PARTITIONING문을 실행하여 데이터 손실 없이 이 작업을 수행할 수 있습니다. -
ALTER TABLE... ENGINE=INNODB를 사용하여 테이블에 사용되는 스토리지 엔진을InnoDB로 변경하십시오. 이렇게 하면 테이블의 파티셔닝은 그대로 유지됩니다. 서버를 MySQL 8.0으로 업그레이드하기 전에, 파티셔닝된 모든 비-InnoDB테이블에 대해 이러한 작업 중 적어도 하나를 수행해야 합니다. 그렇지 않으면 업그레이드 후 이러한 테이블을 사용할 수 없습니다.MyISAM테이블을InnoDB로 변환하는 방법에 대한 자세한 내용은 Converting Tables from MyISAM to InnoDB를 참조하십시오.
MySQL 5.7 또는 그 이전 버전에서 mysqldump를 사용하여 생성한 덤프 파일에서 MySQL 8.0 서버로 데이터베이스를 가져올 때도 이와 유사한 상황이 발생합니다. 이는 그러한 지원이 없는 스토리지 엔진을 사용하는 파티셔닝된 테이블을 생성하게 되는 테이블 생성문이 MySQL 8.0에서 오류와 함께 실패하기 때문입니다. 이러한 이유로 덤프 파일에서 파티셔닝된 테이블을 생성하는 모든 문이 지원되지 않는 스토리지 엔진도 함께 지정하지 않도록 해야 합니다.
InnoDB가 아닌STORAGE ENGINE옵션 값을 사용하는CREATE TABLE문에서 파티셔닝에 대한 모든 참조를 제거하거나, 스토리지 엔진을InnoDB로 지정하거나(InnoDB가 기본값으로 사용되도록 허용하거나) 하여 이를 수행할 수 있습니다.자세한 내용은 Partitioning Limitations Relating to Storage Engines를 참조하십시오. (WL #8971, WL #9457)
-
-
InnoDB:
innodb_buffer_pool_debug옵션은 버퍼 풀이 1GB보다 작은 크기일 때 여러 버퍼 풀 인스턴스를 허용하며,innodb_buffer_pool_instances에 적용되는 1GB 최소 버퍼 풀 크기 제약 조건을 무시합니다. (Bug #24287290) -
InnoDB: 새로운 동적 설정 옵션인
innodb_deadlock_detect를 사용하여 데드락 감지를 비활성화할 수 있습니다. 높은 동시성 시스템에서는 많은 스레드가 같은 잠금을 기다릴 때 데드락 감지가 속도 저하를 일으킬 수 있습니다. 경우에 따라 데드락 감지를 비활성화하고 데드락이 발생했을 때 트랜잭션 롤백에innodb_lock_wait_timeout설정을 사용하는 것이 더 효율적일 수 있습니다. (Bug #23477773, WL #9383) -
InnoDB:
libinnodb_zipdecompress.a라이브러리는 외부 도구가page_zip_decompress_low()함수를 사용하여InnoDB페이지를 압축 해제할 수 있도록 합니다. (Bug #21405300, Bug #77664) -
InnoDB: 일부 워크로드에서 발생할 수 있는 경합을 해결하기 위해 버퍼 풀 뮤텍스가 제거되고 여러 리스트 및 해시 보호 뮤텍스로 대체되었습니다. 또한 여러 버퍼 풀 관련 변수는 더 이상 버퍼 풀 뮤텍스 보호가 필요하지 않습니다. 패치를 제공한 Yasufumi Kinoshita와 Laurynas Biveinis에게 감사드립니다. (Bug #20381905, Bug #75534, WL #8423)
-
InnoDB:
InnoDB는 이제ALTER TABLE ALGORITHM=COPY작업 중 10000 로우마다 발생하던 중간 커밋을 피합니다. 중간 커밋의 목적은 중단된ALTER TABLE ALGORITHM=COPY작업의 경우 복구 속도를 높이는 것이었습니다.ALTER TABLE ALGORITHM=COPY작업이 중단되면, 이제 undo 로그가 롤백되기 전에 DDL 로그 복구 중 새 커밋되지 않은 테이블이 삭제되므로 커밋되지 않은 테이블에 대한 시간이 많이 소요되는 데이터 롤백을 피합니다. 이제ALTER TABLE ALGORITHM=COPY작업에 대해서는IGNORE절이나 롤백 기능이 필요한 다른 요소가 없는 한 undo 로깅이 억제됩니다.변경 중인 테이블에 전문 인덱스가 있는 경우,
ALTER TABLE ALGORITHM=COPY작업이 새 커밋되지 않은 테이블에 로우를 삽입할 때 전문 데이터가 전문 보조 테이블에 삽입됩니다. 이전에는 전문 데이터가 트랜잭션 커밋 시에만 처리되었습니다. (Bug #17479594) -
InnoDB: 동일한 테이블에서 여러 purge 스레드가 로우를 purge하여 발생할 수 있는 읽기-쓰기 잠금 경합을 줄이기 위해, 이제 undo 레코드는 테이블 ID별로 그룹화되어 서로 다른 purge 스레드에 할당됩니다. (WL #9387)
-
InnoDB: 이제
InnoDB코드는 스레드 관리를 위해 C++std::thread라이브러리를 사용합니다. (WL #9359) -
InnoDB: 압축 및 비압축
BLOB데이터에 대한 작업을 위한 내부 C++ 인터페이스를 제공하도록BLOB코드가 리팩터링되었습니다. (WL #8985, WL #9141) -
InnoDB: 이제
InnoDBmemcached 플러그인은 여러get작업(단일 memcached 쿼리에서 여러 키/값 쌍 가져오기) 및 범위 쿼리를 지원합니다. InnoDB memcached Multiple get and Range Query Support를 참조하십시오. (WL #6650) -
InnoDB: 인덱스 트리 손상이 발생하면
InnoDB는 손상 플래그를 redo 로그에 기록하며, 이로 인해 손상 플래그는 크래시 세이프가 됩니다. 또한InnoDB는 각 체크포인트에서 인메모리 손상 플래그 데이터를 엔진 전용 시스템 테이블에 기록합니다. 복구 중에InnoDB는 두 위치 모두에서 손상 플래그를 읽고 결과를 병합한 뒤 인메모리 테이블 및 인덱스 객체를 손상된 것으로 표시합니다. (WL #7816) -
InnoDB: MySQL 데이터 디렉터리 외부에 테이블스페이스 데이터 파일을 생성할 때
InnoDB는 더 이상.isl파일(InnoDB심볼릭 링크 파일)을 생성하지 않습니다.이 변경으로 인해 서버가 오프라인 상태일 때
.isl파일을 수동으로 수정하여 원격 테이블스페이스를 이동하는 것은 지원되지 않습니다. (WL #6416) -
InnoDB:
InnoDB는 더 이상 압축된 임시 테이블을 지원하지 않습니다.innodb_strict_mode가 활성화된 경우(기본값),CREATE TEMPORARY TABLE은ROW_FORMAT=COMPRESSED또는KEY_BLOCK_SIZE가 지정되면 오류를 반환합니다.innodb_strict_mode가 비활성화된 경우, 경고가 발생하고 임시 테이블은 압축되지 않은 로우 형식을 사용하여 생성됩니다.이 변경으로 모든 임시 테이블은 공유 임시 테이블스페이스인
ibtmp1에 생성됩니다.PER_TABLE_TABLESPACE및IS_COMPRESSED컬럼은INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO에서 제거되었습니다. (WL #7899) -
InnoDB: 새
INFORMATION_SCHEMA.INNODB_CACHED_INDEXES테이블은 각 인덱스에 대해InnoDB버퍼 풀에 캐시된 인덱스 페이지 수를 보고합니다. (WL #7170) -
InnoDB:
innodb_checksums시스템 변수가 제거되었습니다.innodb_checksums는 MySQL 5.6.3에서innodb_checksum_algorithm으로 대체되었습니다. (WL #8893) -
InnoDB:
InnoDB시작 코드가 리팩터링되었습니다. (WL #7488) -
InnoDB:
innodb_flush_method의 기본값은 더 이상NULL이 아닙니다. Unix 계열 시스템에서 기본값은fsync입니다. Windows 시스템에서 기본값은unbuffered입니다.Windows에서
innodb_flush_method설정은 더 이상innodb_use_native_aio설정에 영향을 주지 않습니다. 이제 Windows에서innodb_flush_method에 가능한 설정은unbuffered(버퍼링되지 않은 I/O) 및normal(버퍼링된 I/O) 두 가지입니다. 이 변경으로 버퍼링된 I/O와 함께 비동기 I/O를 활성화할 수 있으며, 이는 새로운 조합(innodb_use_native_aio=ON및innodb_flush_method=normal)입니다.async_unbuffered설정이 제거되었습니다.이제
innodb_flush_method및innodb_change_buffering설정 옵션을 숫자 값으로 설정할 수 있습니다. (WL #7488) -
InnoDB:
InnoDB는 더 이상 MySQL 데이터 디렉터리 외부에 file-per-table 테이블스페이스 데이터 파일을 생성할 때.isl파일(InnoDB Symbolic Link 파일)을 생성하지 않습니다. 이제InnoDB는 원격 테이블스페이스 데이터 파일을 찾는 데 redo 로그를 사용합니다..isl파일을 수정하여 MySQL 데이터 디렉터리 외부에 생성된 file-per-table 테이블스페이스 데이터 파일을 오프라인으로 재배치하는 것은 더 이상 지원되지 않습니다. (WL #6416) -
InnoDB: 현재 최대 자동 증가 카운터 값은 이제 값이 변경될 때마다 redo 로그에 기록되고, 각 체크포인트에서 엔진 전용 시스템 테이블에 저장됩니다. 이러한 변경으로 현재 최대 자동 증가 카운터 값이 서버 재시작 후에도 유지됩니다. 추가로:
- 서버 재시작은 더 이상
AUTO_INCREMENT = N테이블 옵션의 효과를 취소하지 않습니다. 자동 증가 카운터를 특정 값으로 초기화하거나 자동 증가 카운터 값을 더 큰 값으로 변경하면, 새 값은 서버 재시작 후에도 유지됩니다. ROLLBACK작업 직후 서버를 재시작해도 더 이상 롤백된 트랜잭션에 할당되었던 자동 증가 값이 재사용되지 않습니다.- 예를 들어
UPDATE작업에서AUTO_INCREMENT컬럼 값을 현재 최대 자동 증가 값보다 큰 값으로 수정하면, 새 값이 유지되고, 이후INSERT작업은 새롭고 더 큰 값부터 자동 증가 값을 할당합니다.
자세한 내용은 AUTO_INCREMENT Handling in InnoDB 및 InnoDB AUTO_INCREMENT Counter Initialization을 참조하십시오. (Bug #199, Bug #13726455, WL #6204)
- 서버 재시작은 더 이상
-
Replication: CHANGE MASTER TO 문이 에러 로그(
mysqld.log)에 기록되는 방식에 두 가지 개선 사항이 있습니다:- 이전에는 옵션 지정(예:
MASTER_USER =및MASTER_PASSWORD =) 사이에 쉼표가 들어가지 않았으므로, 복사하여 붙여넣는 방식으로 해당 문을 사용하려는 사용자는 쉼표를 수동으로 삽입해야 했습니다. 이제 해당 문이 에러 로그에 기록될 때 쉼표가 삽입됩니다. MASTER_PASSWORD값의 자리 표시자로 리터럴 “”이 삽입될 때 이제 따옴표가 사용되지 않으므로, 복사하여 붙여넣기 전에 리터럴을 실제 비밀번호로 바꾸는 것을 잊은 사용자는 다른 문제가 발생하는 대신 즉시 문법 에러를 받습니다.
(Bug #18194384)
- 이전에는 옵션 지정(예:
-
Replication:
gtid_executed가 비어 있는지 여부와 관계없이gtid_purged에 GTID를 추가할 수 있으므로, 이제 GTID 기반 복제 서버의 백업을 복원할 수 있습니다. 이를 통해 기존 GTID 정보와 바이너리 로그를 잃지 않고 GTID 기반 복제 서버의 백업을 복원할 수 있습니다. 추가할 GTID는 백업을 수행한 시점에gtid_executed에 존재했던 GTID입니다.SET GTID_PURGED의 문법이 확장되어SET GTID_PURGED ="+gtid_set"이 기존gtid_purgedGTID 세트에gtid_set을 추가합니다. (WL #6591) -
Replication: 로우 기반 복제의 진행 상황을 표시하기 위해 새로운 Performance Schema stage가 추가되었습니다. 이러한 stage를 사용하여 로우 기반 복제에서 느린 작업의 진행 상황을 확인할 수 있습니다. 또한 변경 사항이 어느 데이터베이스에 적용되고 있는지 확인할 수 있습니다. 이는 로우 기반 복제 문제 해결에 도움이 되며 성능 튜닝을 위한 더 많은 정보를 제공합니다. 자세한 내용은 Monitoring Row-based Replication을 참조하십시오. (WL #7364)
-
JSON: 이 릴리스에서는 MySQL에 저장된
JSON문서와 함께 사용할 수 있도록, 때때로 인라인 경로 연산자라고도 하는 unquoting 추출 연산자->>가 추가되었습니다. 새 연산자는->연산자와 유사하지만, 값의 JSON unquoting도 수행합니다. JSON 컬럼mycol과 JSON 경로 표현식mypath에 대해, 다음 세 표현식은 동등합니다:JSON_UNQUOTE(JSON_EXTRACT(mycol, "$.mypath"))JSON_UNQUOTE(mycol->"$.mypath")mycol->>"$.mypath"
->>연산자는JSON_UNQUOTE(JSON_EXTRACT())가 허용되는 모든 SQL 문에서 사용할 수 있습니다. 여기에는SELECT목록,WHERE및HAVING절,ORDER BY및GROUP BY절이 포함되지만 이에 국한되지는 않습니다.자세한 내용은 Functions That Search JSON Values 및 JSON Path Syntax를 참조하십시오. (Bug #78736, Bug #21980346, WL #9124)
-
더 정확한 추정치를 생성하기 위해,
MEMORY스토리지 엔진은 이제 정수 산술이 아니라 부동소수점 산술을 사용하여 인덱스 통계(키당 레코드 추정치)를 계산합니다. (Bug #23024059) -
새로운 CMake 옵션인
INSTALL_STATIC_LIBRARIES는 정적 라이브러리 설치 여부에 대한 제어를 가능하게 합니다. 기본값은ON입니다.OFF로 설정하면 다음 라이브러리가 설치되지 않습니다:libmysqlclient.a,libmysqld.a,libmysqlservices.a. (Bug #22891432) -
내부
mysql_prepare_create_table()서버 함수는 코드 유지보수성과 명확성을 개선하기 위해 리팩터링되었습니다. 이 코드 개정으로 인해CREATE TABLE및ALTER TABLE에 대해 다음과 같은 사소한 동작 변경이 발생합니다:-
NULL컬럼을 기반으로 두 번째 기본 키를 생성하려는 시도는 이제ER_PRIMARY_CANT_HAVE_NULL오류가 아니라ER_MULTIPLE_PRI_KEY오류를 생성합니다. -
생성 컬럼을 기반으로 두 번째 기본 키를 생성하려는 시도는 이제
ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN오류가 아니라ER_MULTIPLE_PRI_KEY오류를 생성합니다. -
JSON컬럼에 전체 텍스트 키를 생성하려는 시도는 이제ER_BAD_FT_COLUMN오류가 아니라ER_JSON_USED_AS_KEY오류를 생성합니다. -
키를 지원하지 않는 스토리지 엔진(예:
EXAMPLE)에서 키를 생성하려는 시도는 이제ER_TOO_MANY_KEY_PARTS오류가 아니라ER_TOO_MANY_KEYS오류를 생성합니다.(Bug #22884886)
-
-
이전에는 임베디드 서버인
libmysqld에 대해 Performance Schema가 빌드되지 않았습니다. 이로 인해show_compatibility_56=OFF와 함께SHOW STATUS및SHOW VARIABLES문을 사용할 수 없었습니다. 그 설정에서는 해당 문이 Performance Schema 테이블에서 결과를 가져오기 때문입니다. 이제libmysqld의 경우 필요한 Performance Schema 테이블이 빌드되므로(수집되는 계측은 없음), 이러한SHOW문이show_compatibility_56=OFF와 함께 지원될 수 있습니다. (Bug #22809694) -
JSON_CONTAINS(),JSON_SEARCH()및 기타 MySQL JSON 함수에서 사용하는 여러 내부 함수는 JSON 객체를 검사할 때 키, 값 또는 둘 모두의 로컬 복사본을 과도하게 많이 생성했습니다. 이러한 복사는 많은 경우 제거되었거나 줄어들었습니다. 또한 이러한 함수 중 일부에서 사용하는 임시 객체의 수명이 줄어들었습니다. 이러한 변경으로 인해 이러한 JSON 함수 및 관련 JSON 함수는 이전보다 더 효율적으로 수행되고, 필요한 리소스도 더 적어질 것입니다. (Bug #22602142) -
시스템 lz4 및 openssl zlib 명령을 사용할 수 있으면 lz4_decompress 및 zlib_decompress 유틸리티는 불필요합니다. 두 가지 변경으로 해당 유틸리티가 빌드되지 않도록 할 수 있습니다: 새
WITH_LZ4CMake 옵션이system으로 설정되면 lz4_decompress가 빌드되거나 설치되지 않습니다.WITH_ZLIBCMake 옵션이system으로 설정되면 zlib_decompress가 빌드되거나 설치되지 않습니다. (Bug #22329851) -
MySQL 문자열 라이브러리의 소스 파일이 C(
.c접미사)에서 C++(.cc접미사)로 변환되었습니다. 이를 통해 라이브러리 코드에서 더 엄격한 컴파일 검사와 C++ 기능 사용이 가능해집니다. (Bug #22124719) -
mysys라이브러리의 소스 코드는 이제 더 엄격한 컴파일 검사를 활용하고 C++ 기능 사용을 허용하기 위해 C가 아닌 C++를 사용합니다. (Bug #21881278) -
성능 향상 및 다른 플랫폼과의 더 나은 호환성을 위해 OS X의
my_sync()는 이제F_FULLSYNC플래그와 함께fcntl()을 사용하는 대신fsync()를 사용합니다. (Bug #20742269) -
새 CMake 옵션인
WITH_TSAN은 이를 지원하는 컴파일러에서 ThreadSanitizer를 활성화할 수 있게 합니다. (Bug #80409, Bug #23171902) -
이전에 단일 mutex로 보호되던 전역 연결 목록이 8개 부분으로 파티셔닝되었으며, 각 부분은 자체 mutex 인스턴스로 보호됩니다. 그 결과 연결 처리의 오버헤드가 감소하고 성능이 향상됩니다. 이 변경이 모니터링 목적에 대해 가지는 의미는 Performance Schema가 이제
LOCK_thd_listmutex,LOCK_thd_removemutex,COND_thd_listcondition variable 각각에 대해 8개의 서로 다른 인스턴스를 노출한다는 것입니다. (WL #9250) -
MySQL은 이제 UUID 값을 조작하고 더 쉽게 다룰 수 있도록 하는 함수를 제공합니다:
-
UUID_TO_BIN()및BIN_TO_UUID()는 문자열 및 바이너리 형식의 UUID 값(각각 16진수 문자 및VARBINARY(16)로 표현됨) 간에 변환합니다. 이를 통해 문자열 UUID 값을 더 적은 저장 공간을 사용하는 바이너리 값으로 변환할 수 있습니다. 바이너리로 변환된 UUID 값은 향상된 인덱싱 효율성을 허용하는 방식으로 표현될 수 있습니다. -
IS_UUID()는 인수가 유효한 문자열 형식 UUID 값인지 여부를 나타내기 위해 1 또는 0을 반환합니다.자세한 내용은 기타 함수를 참조하십시오. (WL #8920)
-
-
서버는 이제 이전 서버 실행에서 남은 임시 테이블을 정리하기 위해 스토리지 엔진에 의존합니다.
InnoDB는 재시작 시 임시 테이블스페이스를 폐기하여 이를 수행합니다.MyISAM및 기타 유사한 스토리지 엔진은 여전히 특정 이름 패턴을 가진 이러한 엔진에 속한 파일을 찾아 남은 테이블을 감지하기 위해 임시 디렉터리를 스캔하는 방식에 의존합니다. (WL #7784) -
서버는 더 이상 특수 문자가 포함된 pre-MySQL 5.1 데이터베이스 이름을
#mysql50#접두사를 추가한 5.1 형식으로 변환하지 않습니다. 이러한 변환이 더 이상 수행되지 않으므로 mysqlcheck의--fix-db-names및--fix-table-names옵션,ALTER DATABASE문의UPGRADE DATA DIRECTORY NAME절, 그리고Com_alter_db_upgrade상태 변수가 제거되었습니다.업그레이드는 한 메이저 버전에서 다른 메이저 버전으로만 지원되므로(예: 5.0에서 5.1로, 또는 5.1에서 5.5로), 이전 5.0 데이터베이스 이름을 현재 MySQL 버전으로 변환해야 할 필요성은 거의 남아 있지 않습니다. 우회 방법으로, 더 최근 릴리스로 업그레이드하기 전에 MySQL 5.0 설치를 MySQL 5.1로 업그레이드하십시오. (WL #8186)
수정된 버그
-
호환되지 않는 변경: 공간 값의 연결은 별 의미가 없으므로, 이제
CONCAT()및CONCAT_WS()함수는 공간 인수에 대해 오류를 생성합니다. (Bug #22893669) -
중요한 변경; JSON: 이제
JSON함수(예:JSON_EXTRACT())와 함께 사용할 때 빈 문자열 값을 키로 사용할 수 있습니다. 이러한 경우에는 따옴표로 묶어야 합니다. (Bug #79643, Bug #22366102) -
NDB Cluster: 이전에는 서버가
NDB없이 빌드된 경우에도mysql.ndb_binlog_index테이블이 생성되었습니다. 이제 이 테이블은 서버가NDB와 함께 빌드된 경우에만 생성됩니다. (Bug #22874872) -
InnoDB; Microsoft Windows: 지정되지 않은 블록 크기로 인해 클러스터 페이지 크기가 8K 이상인 Windows NTFS에서
INFORMATION_SCHEMA.TABLESPACES테이블이 비어 있었습니다. (Bug #23598872) -
InnoDB; Microsoft Windows: Visual Studio 2015 Update 2로
InnoDB를 컴파일하면 경고가 반환되었습니다. (Bug #23056963) -
InnoDB: 외래 키 제약 조건을 추가하는
ALTER TABLE... ALGORITHM=COPY작업은 10000개의 로우가 복사된 후 발생한 중간 커밋으로 인해 실패했습니다. 중간 커밋은 외래 키 검사 플래그를 재설정하여 작업이 실패하게 했습니다. 더 이상 중간 커밋이 발생하지 않습니다. (Bug #28662255, Bug #92471)참조: 다음도 참조하십시오: Bug #17479594.
-
InnoDB: CPU에 대한 정보를 가져오는 데 사용되는
ut_cpuid()함수에서 불필요한 검사가 제거되었습니다. (Bug #24405292) -
InnoDB: 삭제된 테이블스페이스에 대한 비동기 읽기 작업에서 오류가 발생했습니다. (Bug #24388498)
-
InnoDB:
dict_col_t접근자가InnoDB코드에 추가되었습니다. (Bug #24363566) -
InnoDB:
InnoDB코드의dict_col함수가 접근자로 대체되었습니다. (Bug #24361098) -
InnoDB:
InnoDB코드의dict_index_t함수가 접근자로 대체되었습니다. (Bug #24361023) -
InnoDB: 예약된 adaptive hash index 검색 래치를 확인하고 해제하던 불필요한 코드가 제거되었습니다. (Bug #24300175)
-
InnoDB: 32비트 운영 체제에서 4G보다 큰 시스템 테이블스페이스 데이터 파일 크기는 오버플로우 조건을 초래할 수 있었습니다. (Bug #23753625)
-
InnoDB: 테이블 객체 데이터에 접근하기 위한 내부 메서드가
dict_table_t에 추가되었습니다. (Bug #23748128) -
InnoDB: 업그레이드 중 기존 테이블스페이스와의
space_id충돌을 피하기 위해 첫 번째 undo 테이블스페이스가space_id1을 사용해야 한다는 제한이 제거되었습니다. 이제 첫 번째 undo 테이블스페이스는 1이 아닌space_id를 사용할 수 있습니다. undo 테이블스페이스의space_id값은 여전히 연속된 순서로 할당됩니다. (Bug #23517560) -
InnoDB: 테이블의 인덱스를 반복하기 위한 내부 접근자 함수가 접근자 메서드로 대체되었습니다. 사용되지 않는 코드가 제거되었습니다. (Bug #23336108)
-
InnoDB: 이전에는 SQL 스크립트로 생성되던
mysql.innodb_index_stats및mysql.innodb_table_stats테이블 정의가 이제 하드 코딩됩니다. 그 결과dict_table_schema_check함수는 더 이상 필요하지 않으며 제거되었습니다. (Bug #23336079) -
InnoDB:
ut_snprint함수가 C++11snprintf함수로 대체되었습니다. (Bug #23329353) -
InnoDB: 일관성을 위해
InnoDB코드의ulint인스턴스가space_id_t및page_no_t데이터 타입으로 대체되었습니다. (Bug #23297169) -
InnoDB:
InnoDB코드에서 boost::atomic 사용이 std::atomic으로 대체되었습니다. (Bug #23280649) -
InnoDB: MySQL 바이너리가 NUMA 기능과 함께 빌드되지 않았습니다. (Bug #23259754)
-
InnoDB:
UNIV_NONINL및UNIV_MUST_NOT_INLINE에 대한 참조가 제거되었습니다.UNIV_NONINL이 정의된 경우에만 필요했던fut0fut.cc및ut0byte.cc파일도 제거되었습니다. (Bug #23150562) -
InnoDB:
mutex_own()매핑은 Clang 또는 최신 GCC 컴파일러로 컴파일할 때 경고를 발생시켰습니다. (Bug #23090278) -
InnoDB:
InnoDB메모리 할당 이벤트 데이터를 확인하기 위해 Performance Schema를 쿼리하면 값이 0으로 잘못 보고되었습니다. (Bug #23020280) -
InnoDB:
DBUG_OFF컴파일 시점 플래그가UNIV_DEBUG플래그로 대체되었습니다. 오류 로그 출력을 개선하기 위해,ut_dbg_assertion_failed()는 이제sql_print_error()를 사용하여 파일 이름, 라인 번호, 메시지를 한 줄에 표시합니다. 스레드 ID는 그 다음 줄에 표시됩니다. (Bug #22996442, Bug #23028144) -
InnoDB:
SHOW ENGINE INNODB STATUS출력에 음수인 대기당 spin rounds 값이 표시되었습니다. 패치를 제공해 준 Laurynas Biveinis에게 감사드립니다. (Bug #22844987, Bug #79703) -
InnoDB:
innodb_disable_resize_buffer_pool_debug옵션이 제거되었습니다. 이 변경에 대한 패치는 코드 변수도 제거하고buf_pool_resize()함수를 단순화했습니다. (Bug #22755053) -
InnoDB: 전역 카운터(
ut_rnd_ulint_counter)가 멀티 코어 시스템에서 확장 가능하도록 스레드 로컬 카운터로 변경되었습니다. (Bug #22733635, Bug #80354) -
InnoDB: 성공적인
ALTER TABLE... ALGORITHM=COPY작업 후, 클러스터형 인덱스 레코드의 이전 버전을 빌드하는 동안 어설션이 발생했습니다. (Bug #22707367) -
InnoDB: 가상 인덱스가 있는 테이블의 카운터를 업데이트한 DML 작업이
row_parse_int()에서 어설션을 발생시켰습니다. (Bug #22650195) -
InnoDB: libevent 2.0으로 컴파일된 경우
InnoDBmemcached 플러그인이 로드되지 않았습니다. (Bug #22646919) -
InnoDB: 정수 기반
rec_per_key값에 대한 사용되지 않는 계산이InnoDB에서 제거되었습니다. 정수 기반rec_per_key정보는 이전 릴리스에서 부동 소수점 인덱스 통계로 대체되었습니다. (Bug #22625348) -
InnoDB: 느린 종료 시, 백그라운드 롤백 스레드가 종료되기 전에 purge 스레드 종료가 시작되어 어설션 실패가 발생했습니다. (Bug #22561332)
-
InnoDB: 해제되지 않은 힙으로 인해
row_vers_old_has_index_entry()에서 블록이 손실되었습니다. (Bug #22543834, Bug #79973) -
InnoDB: 전송 가능한 테이블스페이스 디버그 테스트에서 경합 조건으로 인한 어설션이 발생했습니다. (Bug #22453668)
-
InnoDB: undo 테이블스페이스가 누락되어 서버가 시작되지 않았습니다. (Bug #22452992)
-
InnoDB: 복구 프로세스에 의해 도입된 버퍼링된 undo 테이블스페이스 변경으로 인해 undo 테이블스페이스를 닫으려고 시도하는 동안
InnoDB복구에서 어설션이 발생했습니다. (Bug #22361764) -
InnoDB: memcached가 참조하는 메모리의 재할당에서 어설션이 발생했습니다. (Bug #22304250, Bug #79500)
-
InnoDB: C++11로
InnoDB를 빌드하면 “register” 지원 중단 경고가 반환되었습니다. 지원 중단된 “register” 키워드가 제거된 후에도 “register” 지원 중단 경고 처리가 코드에 남아 있었습니다. 또한, 사용되지 않는yyset_extra()선언이 제거되었습니다. (Bug #22292704) -
InnoDB: 파티셔닝된 테이블에 대한
SHOW CREATE TABLE출력이 테이블 파티션의 테이블스페이스 할당 정보를 정확하게 표시하지 않았습니다. (Bug #22245554) -
InnoDB:
ALTER TABLE...TRUNCATE PARTITION작업이 테이블의KEY_BLOCK_SIZE속성을 무시하고 대신 기본값을 사용했으며, 이 값은innodb_page_size값의 절반입니다. (Bug #22186558, Bug #79223) -
InnoDB: innochecksum의 메모리 누수가 수정되었습니다. (Bug #22179518)
-
InnoDB:
INNODB_CACHED_INDEXES테이블에SPACE_ID컬럼이 추가되었습니다.INDEX_ID값은 더 이상 전역 고유 식별자가 아닙니다. (Bug #22172026) -
InnoDB: 가상 컬럼에 대한 purge 스레드 open table 콜백에서 예기치 않은 데이터 딕셔너리 테이블 래치로 인해 어설션이 발생했습니다. 임시 해결 방법으로, 가상 생성 컬럼에 대해 purge가 일시적으로 비활성화됩니다. 이 임시 해결 방법은 가상 컬럼의 인덱스에 대해 purge되지 않은 삭제 표시 레코드로 인해 b-tree 확장을 유발할 수 있습니다. (Bug #22153217)
-
InnoDB:
foreign_key_checks가 비활성화된 경우 full-text 인덱스와 외래 키 제약 조건이 있는 테이블 생성이 실패했습니다. (Bug #22094601, Bug #78955)참조: 이 문제는 다음의 회귀입니다: Bug #16845421.
-
InnoDB:
ha_innobase::m_primary_key필드가 제거되었습니다. 이 필드는 중복되었습니다. 부울 조건자TABLE_SHARE::is_missing_primary_key()가 추가되었습니다. (Bug #21928734, Bug #78662) -
InnoDB: 초기화되지 않은 페이지를 로드하려고 시도한 버퍼 풀 로드 작업으로 인해 Valgrind 실패가 발생했습니다. (Bug #21747906)
-
InnoDB:
InnoDBmemcached 플러그인에 의해 도입된 사용되지 않는 함수가 제거되었습니다. (Bug #21625760) -
InnoDB:
innodb_buffer_pool_size설정 옵션에서 사용되는 내부 전역 변수가 제거되었습니다. (Bug #21512749) -
InnoDB: 버퍼 풀 크기 조정 작업 중
InnoDBpage cleaner 스레드에서 assertion이 발생했습니다. (Bug #21473497) -
InnoDB: 두 번째 버퍼가 추가되어 동시 로그 버퍼 쓰기와 플러시가 가능해짐에 따라 로그 버퍼 경합이 줄었습니다. 로그 버퍼 플러시를 보호하기 위해 새 mutex가 추가되었습니다. 패치를 제공해 주신 Zhai Weixiang에게 감사드립니다. (Bug #21352937, Bug #77094)
-
InnoDB: 사용되지 않는
InnoDB및libsql함수와 변수가 제거되었으며, 가능한 경우 전역 심볼이 static 키워드로 변환되었습니다. (Bug #21153166, Bug #21141390, Bug #77146, Bug #21178589) -
InnoDB: full-text 인덱스 구현, 데이터 딕셔너리 업데이트, persistent statistics 업데이트에 사용되는 내부 SQL parser에서 사용되지 않는 여러 사전 정의 함수가 제거되었습니다. (Bug #21126390, Bug #77111)
-
InnoDB: 이제
SysTablespace::parse_units()함수는 메가바이트 수 대신 파일의 페이지 수를 반환합니다.SysTablespace::normalize_size()함수가 제거되었습니다.SysTablespace::parse_params()의 오류 메시지가 수정되었습니다. (Bug #21040199, Bug #76949) -
InnoDB: 영구 테이블의 경우,
InnoDB인덱스의 내부 고유 식별자(index_id)가 이제 테이블스페이스 식별자(space_id,index_id)를 포함합니다. 이 변경으로 인덱스 식별자가InnoDB인스턴스 수준뿐만 아니라 테이블스페이스 수준에서도 고유해지며, 인덱스 식별자 할당과 관련된 향후 작업을 지원합니다. (Bug #20737524, Bug #76392) -
InnoDB:
mtr0mtr.cc에서 중복 함수가 제거되었고,ReleaseBlocks함수의 이름이AddDirtyBlocksToFlushList로 변경되었습니다. (Bug #20735882, Bug #76343) -
InnoDB: innochecksum과 관련된 코드가 정리되고 재구성되었습니다. 체크섬 기능은 이제
buf0checksum.cc에 위치합니다. (Bug #20518099) -
InnoDB:
__attribute__((nonnull))가InnoDB코드에서 제거되었습니다. 이 속성은 더 이상InnoDB코딩 지침에서 허용되지 않습니다. (Bug #20468234) -
InnoDB: 외부
BLOB필드 참조를 처리하고 조작하기 위한 논리적 인터페이스를 제공하도록 새 struct가 추가되었습니다. (Bug #18195972) -
InnoDB:
TRUNCATE TABLE이 이제DROP TABLE및CREATE TABLE에 매핑됩니다. 이 변경에는 다음과 같은 영향이 있습니다:-
대형 버퍼 풀과 활성화된
innodb_adaptive_hash_index가 있는 시스템에서, 이전에는TRUNCATE TABLE작업이 테이블의 adaptive hash index 항목을 제거할 때 발생하는 LRU 스캔 때문에 일시적인 시스템 성능 저하를 일으켰습니다.TRUNCATE TABLE을DROP TABLE및CREATE TABLE에 다시 매핑하면 문제가 되는 LRU 스캔을 피할 수 있습니다. -
TRUNCATE TABLE은 일시적으로 원자적이지 않습니다.TRUNCATE TABLE작업 중 서버 종료가 발생하면 테이블이 삭제되고InnoDBSYS_FOREIGN및SYS_FOREIGN_COLS시스템 테이블에 고아 외래 키 제약 조건이 남을 수 있습니다. -
InnoDBmemcached 플러그인flush_all명령은TRUNCATE TABLE대신DELETE를 호출합니다.DELETE는 삭제된 각 로우에 대해 undo-logging, delete-marking, 그리고 최종적으로 purge를 포함하므로FLUSH TABLES보다 오버헤드 비용이 더 높습니다. -
file-per-table 테이블스페이스의 내부 truncate table 작업에 대해 발생하던 로그 체크포인트가 로그 플러시로 대체되었습니다.
(Bug #16834993, Bug #68184, Bug #16207919, WL #6795)
-
-
InnoDB:
InnoDB는 조각 페이지에 사용되는 익스텐트의 대부분 페이지를 낭비했습니다. (Bug #16204823, Bug #67963) -
Partitioning: 일부 경우에는 모든 파티션이 이미 파싱 시점에 프루닝된 뒤 최적화 중 파티션 프루닝이 두 번째로 시도되는 문제로 인해 assert가 발생했습니다. (Bug #23194259)
-
Partitioning: 테이블 이름과 임의의 파티션 이름의 결합 길이가 61자를 초과하는 파티션된 테이블은 mysqldump를 사용하여 생성된 백업에서 가져올 수 없었습니다. 테이블이 서브파티셔닝도 사용하는 경우에는 테이블 이름, 임의의 파티션 이름, 그리고 이 파티션의 임의의 서브파티션 이름의 결합 길이가 57자를 초과하면 동일한 문제가 트리거되었습니다.
이는 내부
mysql.innodb_table_stats테이블이 테이블 이름을 저장하는 데 사용되는 컬럼에 대해 최대 64자만 허용했기 때문입니다. 하지만 InnoDB는 파티션된 또는 서브파티션된 테이블에 대해 각 파티션 또는 서브파티션마다innodb_table_stats에 로우를 저장하며, 여기서 테이블 이름을 나타내는 데 실제로 사용되는 값은 각각table_name#P#partition_name또는table_name#P#partition_name#SP#subpartition_name패턴을 따릅니다. 이 문제는 이러한 속성의 최대 결합 길이에#P#및#SP#를 더한 길이(199자)를 수용하도록innodb_table_stats의 정의를 변경하여 수정되었습니다. (Bug #72061, Bug #18416479) -
Replication:
Slave_worker::write_info()에서DBUG_ENTER()는 인수로 “Slave_worker::write_info” 대신 “Master_info::write_info”를 사용했습니다. 이 수정은 해당 인수를 바로잡습니다. 패치를 제공해 주신 Stewart Smith에게 감사드립니다. (Bug #21658067, Bug #78133) -
Replication: 멀티스레드 슬레이브와 함께
START SLAVE UNTIL position문을 사용할 때 사용할 수 있었던 유일한UNTIL절은SQL_BEFORE_GTIDS였습니다. 이제 멀티스레드 슬레이브는START SLAVE UNTIL MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_position및START SLAVE UNTIL RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_position문과 호환됩니다. (Bug #75843, Bug #20513547) -
Microsoft Windows: Windows에서 여러 스레드에서 전역
log_syslog시스템 변수를 설정하면 서버 종료가 발생할 수 있었습니다. (Bug #22180046) -
Solaris: 클라이언트 라이브러리가
Cstd라이브러리를 사용하여 Solaris에서 빌드되지 않았습니다. (Bug #24353920, Bug #82347) -
JSON:
CHECKSUM TABLE은JSON값 자체가 아니라 값의 메모리 주소를 사용하여 체크섬을 계산했으며, 이로 인해 체크섬이 달라졌습니다. 이제 이러한 경우 계산은 해당 값의 주소가 아니라 실제JSON값을 기반으로 합니다. (Bug #23535703) -
JSON:
JSON매개변수를 기대하는 저장 프로시저에NULL을 전달하면 디버그 빌드에서 어설션 실패가 발생했습니다. (Bug #23209914) -
JSON:
JSON경로 인수의 파싱은 NULL 경로와 문법적으로 유효하지 않은 경로를 구분하지 못했습니다.이제 이러한 경로의 파싱이 유효한 non-NULL 경로, NULL 경로, 유효하지 않은 경로를 명확히 구분하도록 변경되었습니다. (Bug #22816576)
-
JSON: 디버그 빌드에서 서버가
JSON객체를 보관하기 위해 임시 테이블을 생성할 때 어설션이 발생할 수 있었습니다. (Bug #22782948) -
JSON: 오류를 발생시킨
JSON함수를 실행한 쿼리가 서버 종료를 유발할 수 있었습니다. (Bug #22253965) -
존재하지 않는 데이터베이스의 일부가 되도록 테이블 이름을 변경하는 작업은 실패했지만(정상 동작), Unknown 오류 메시지가 표시되었습니다. 이제 적절한 오류 메시지가 생성되며, 이는 데이터 딕셔너리 구현의 일부로 수정되었습니다. (Bug #25167507, Bug #84000)
-
FreeBSD에서 세그멘테이션 폴트가 발생한 경우, 서버가 스택 추적을 생성하지 않았습니다. (Bug #24566529, Bug #23575445, Bug #81827)
-
macOS에서 Clang을 사용하여 컴파일된 빌드에 대해, GCC의 경우와 마찬가지로 이제 스택 추적 디맹글링이 수행됩니다. (Bug #23606094, Bug #81908)
-
libevent가 필요하지 않은 경우에도 macOS에서 빌드되었습니다. (Bug #23228287, Bug #81311) -
JSON값을 반환하는 함수가 저장 프로시저의CASE문의 일부로 호출되는 경우 서버 종료를 유발할 수 있었습니다. (Bug #23212765) -
이전에는 Performance Schema에서 사용된 전체 메모리에 대해
SHOW ENGINE PERFORMANCE_SCHEMA STATUS와SELECT * FROM performance_schema.memory_summary_global_by_event_name이 서로 다른 값을 보고했습니다.memory/performance_schema/scalable_buffer로 계측되는 확장 가능한 버퍼 페이지용 메모리가SHOW ENGINE STATUS출력에서 누락되었습니다. 이제 해당 문에는 누락된 메모리가 포함되며,(pfs_buffer_scalable_container).memory로 표시됩니다. (Bug #23104498) -
GCC의
-fexpensive-optimizations옵션으로 인해 ARM64 및 PowerPC 빌드가 다른 플랫폼과 약간 다르게 부동 소수점 연산을 계산했습니다. 이 옵션은-O2및 더 높은 최적화 레벨에 의해 활성화되었습니다. 이제 이 옵션은 이로 인해 부정적인 영향을 받는 플랫폼에서 비활성화됩니다. (Bug #23046775) -
ALTER TABLE... OPTIMIZE PARTITION과 같은 관리 작업이 실패한 후, lock-tables 모드에서 Performance Schema에서 선택하면 중단될 수 있었습니다. (Bug #23044286) -
AddressSanitizer가 활성화된 빌드에서
CAST(... AS BINARY)가 서버 종료를 일으킬 수 있었습니다. (Bug #22900560) -
일부 공간 함수가 오류 메시지에서 다른 공간 함수 이름을 사용하여 보고되었습니다. (Bug #22883056, Bug #80627)
-
최적화 모드에서 Clang을 사용할 때
my_strtod_int()함수에 대한 Valgrind 경고를 수정했습니다. (Bug #22839888) -
소수점 이하 64자리 값을 대상으로 하는 정밀 수학 연산이 0 결과를 생성할 수 있었습니다. (Bug #22828692)
-
ST_GeomFromGeoJSON()가 유효한 인수를 사용해도 오류를 반환할 수 있었습니다. (Bug #22804853) -
STRICT_TRANS_TABLESSQL 모드가 활성화된 디버그 빌드에서 롤백할 수 없는 변경을 수행한 후 이어서ER_NO_DEFAULT_FOR_FIELD오류를 생성한INSERT또는REPLACE문이 어설션을 발생시킬 수 있었습니다. (Bug #22635253) -
Optimizer에 원본과 대상이 겹치는지 확인하지 않는
memcpy()호출이 포함되어 있었습니다. (Bug #22537196) -
디버그 빌드에서
JSON값에 접근한 서브쿼리 결과에 대한 오류 검사가 누락되어 어설션이 발생할 수 있었습니다. (Bug #22522073) -
CREATE TABLE... SELECT문을 준비한 다음 테이블을 플러시하여 테이블을 닫고 준비된 문을 실행하면 서버 종료가 발생할 수 있었습니다. (Bug #22393309) -
조인의 일부인 파생 테이블의 select 목록에서 매개변수를 사용한 준비된 문이 서버 종료를 일으킬 수 있었습니다. (Bug #22392374, Bug #24380263)
-
일부 grant 테이블은 MySQL 5.7.8에서 최대 사용자 이름 길이가 16자에서 32자로 증가한 것을 고려하지 않았습니다. (Bug #22379607, Bug #79680)
-
생성된 컬럼 표현식을 재평가하면 이전에 해제된 메모리에 접근하고 서버가 종료될 수 있었습니다. (Bug #22346120)
-
대상 인덱스 값이 로우 버퍼에 성공적으로 저장되지 않은 상태에서 인덱스를 검색하는
HANDLERread 문은 서버 종료를 유발할 수 있었습니다. (Bug #22321965) -
NULL값에 대한 숫자에서ZEROFILL로의 변환을 부적절하게 처리하면 서버 종료로 이어질 수 있었습니다. (Bug #22281205) -
SET문에서 변수를 설정하기 위해 로우 생성자를 포함하는 서브쿼리를 사용하면 서버 종료가 발생할 수 있었습니다. (Bug #22276843) -
SQL 모드에
ALLOW_INVALID_DATES가 포함되지 않은 경우,invalid_date IN (subquery)를 포함하고 서브쿼리 구체화로 처리된 쿼리는 서버 종료를 유발할 수 있었습니다. (Bug #22262843) -
임베디드 서버의 경우, 유효하지 않은 인수에 대한 검사 뒤의 코드가 누락되거나 올바르지 않은 인수로 호출되었으며, 이는 부적절한 종료로 이어질 수 있었습니다. (Bug #22262706)
-
OS X에서
vio_io_wait()는select()를 사용하여 파일 디스크립터 수가 1024개로 제한되었습니다. 이제 이 제한을 피하기 위해 대신 kqueue 이벤트 알림이 사용됩니다. FreeBSD도 kqueue를 사용하도록 변경되었습니다. (Bug #22244911) -
저장 루틴 로딩에 기본 데이터베이스를 임시로 변경하는 작업이 포함되고 원래 기본 데이터베이스를 복원하는 중 오류가 발생하면 메모리 누수가 발생할 수 있었습니다. (Bug #22179795)
-
CMake 설정은
-Wno-xxx대신-Wxxx컴파일러 옵션을 검사하도록 조정되었습니다. 이는 후자가 GCC에서 false positive를 생성하기 때문입니다. (Bug #21881753) -
INFORMATION_SCHEMA.EVENTS.LAST_EXECUTED와mysql.event.last_executed의 값 사이에 불일치가 있을 수 있었습니다. 더 이상 이러한 문제가 발생하지 않습니다. 이벤트 정보는 보이지 않는mysql.events데이터 딕셔너리 테이블에 저장되므로,INFORMATION_SCHEMA.EVENTS가 이벤트 메타데이터에 대한 유일한 인터페이스가 됩니다. (Bug #21374010) -
뷰가 뷰 정의의 제한을 평가하기 전에 사용자 정의 함수 또는 SQL 함수를 평가할 수 있었습니다. (Bug #20933307)
-
-DENABLE_DTRACE=ON을 사용할 때 CMake가 동작하는 DTrace 설치가 있는지 확인하지 않았습니다. 이제 이를 확인하고, DTrace를 찾을 수 없으면 중단합니다. (Bug #20671056) -
SHOW CREATE USER가 예상치 못한 결과를 반환했습니다. (Bug #20625566) -
--log-error옵션에 상대 경로 이름이 지정된 경우, mysqld가stdout및stderr를 잘못된 위치로 보낼 수 있었습니다. (Bug #20609063) -
LEAST()및GREATEST()의 평가가 datetime 및 문자열 리터럴에 대해 너무 작은 정렬 버퍼를 사용할 수 있었으며, 이로 인해 어설션이 발생했습니다. (Bug #20565160) -
MySQL 8.0에서 새로 추가된 오류에 대한 오류 번호 범위는 3500부터 시작하도록 지정되었습니다. (Bug #20538173)
-
Debian 패키징은
my.cnf에서sql_mode시스템 변수를 설정하지 않도록 업데이트되었습니다. (Bug #20535729) -
PAD_CHAR_TO_FULL_LENGTHSQL 모드가 활성화된 경우,mysql.event시스템 테이블에서 이벤트를 로드하는 작업이 실패할 수 있었습니다. (Bug #20073523, Bug #74947) -
중복 레코드를 처리하기 위해
REPLACE또는IGNORE키워드를 사용하는INSERT및LOAD DATA와 같은 문장이 후속 작업에 영향을 줄 수 있었습니다. (Bug #20017428) -
소스 테이블의 non-
BIT데이터가 대상 테이블의BIT컬럼으로 선택되는CREATE TABLE... SELECT가 서버 종료를 유발할 수 있었습니다. (Bug #19930894) -
MySQL이
-DMYSQL_MAINTAINER_MODE=1로 설정되고 clang/Xcode 6.0으로 컴파일될 때 OS X에서 컴파일이 실패했습니다. (Bug #19694515, Bug #74100) -
일반 쿼리 로그에 기록되기 전에 비밀번호를 필터링하도록 다시 작성된
CHANGE MASTER TO문에서MASTER_AUTO_POSITION절이 손실되었습니다. (Bug #19622609) -
SELECT절에서VALUES()함수를 사용하면 서버 종료가 발생할 수 있었습니다. (Bug #19601973) -
테이블 이름 변경 코드의 잠재적인 null-pointer 역참조 및 메모리 누수가 수정되었습니다. (Bug #18194270)
-
문자 컬럼과 집계 함수를 비교하기 위해
MATCH... AGAINST를 사용하면 서버 종료가 발생할 수 있었습니다. (Bug #17865492) -
Connections상태 변수, Performance Schemathreads및global_status테이블,SHOW PROCESSLIST문과 같은 다양한 정보 소스에서 연결 수에 대해 약간 다른 값이 보고될 수 있었습니다. (Bug #17666696) -
set operation과 외부 참조가 포함된 서브쿼리가 있는 쿼리는 서버 종료를 일으킬 수 있었습니다. (Bug #17270896)
-
유효하지 않은 사용자의 비밀번호를 변경하기 위해
GRANT를 사용하면 오류가 발생했지만,mysql.user시스템 테이블도 업데이트되었습니다. (Bug #17180985) -
공간 WKT 데이터의 Parser는
0.23과 같은 숫자는 허용했지만, 앞의 0이 없는 동등한 값인.23은 허용하지 않았습니다. 이제 두 형식이 모두 허용됩니다. (Bug #17167633) -
이전에는 클라이언트가 집계 크기가
performance_schema_session_connect_attrs_size시스템 변수의 값보다 큰 연결 속성 키/값 쌍을 전송하려고 하면, Performance Schema가 속성 데이터를 잘랐습니다. 또한log_warnings시스템 변수가 0보다 큰 경우 Performance Schema는 이 메시지를 오류 로그에 기록했습니다:[Warning] Connection attributes of length N were truncated이 메시지는 DBA가 문제가 있는 클라이언트를 확인하려고 할 때 도움이 되지 않았으므로, 연결 속성 처리에 몇 가지 변경 사항이 적용되었습니다:
-
과도한 데이터에 대해서는 연결 속성 잘림이 여전히 발생하지만, 로그 메시지가 더 유용한 정보를 제공합니다. 이 메시지에는 손실된 바이트 수, 연결 식별자, 클라이언트 사용자에 대한 정보가 포함됩니다. 추가 정보는 DBA가 속성 잘림이 발생한 클라이언트를 더 쉽게 식별할 수 있게 해야 합니다.
-
잘림이 발생하면, 속성 버퍼에 충분한 공간이 있는 경우 손실된 바이트 수를 나타내는 값을 가진
_truncated속성이 세션 속성에 추가됩니다. 이를 통해 Performance Schema는 연결 속성 테이블에서 연결별 잘림 정보를 노출할 수 있습니다. -
새 상태 변수
Performance_schema_session_connect_attrs_longest_seen는 서버가 확인한 64KB보다 작은 가장 긴 연결 속성 버퍼를 나타냅니다. 이 값이performance_schema_session_connect_attrs_size보다 크면 속성 잘림이 발생한 것이며, DBA는 후자의 값을 늘리거나, 또는 어떤 클라이언트가 많은 양의 속성 데이터를 전송하는지 조사할 수 있습니다.자세한 내용은 Performance Schema Connection Attribute Tables를 참조하십시오. (Bug #16576959)
-
-
데이터 딕셔너리 도입으로 여러
INFORMATION_SCHEMA문제를 해결할 수 있습니다:-
INFORMATION_SCHEMA.STATISTICS에 대한 쿼리는 select 목록의 컬럼 순서에 따라 다른 결과를 반환할 수 있었습니다. -
일부
INFORMATION_SCHEMA테이블에는 최적이 아닌 컬럼 타입과 크기가 있었습니다. 이제mysql시스템 데이터베이스의 데이터 딕셔너리 테이블에 대한 뷰가 된 이러한 테이블에는 더 적절한 컬럼 정의가 있습니다. -
데이터베이스 또는 파일 이름을 확인하기 위해 디렉터리 스캔을 초래했던
INFORMATION_SCHEMA테이블에 대한 쿼리는 더 이상 그렇게 하지 않고, 대신 데이터 딕셔너리에서 데이터베이스 및 테이블 이름을 읽습니다. -
테이블 메타데이터를 얻기 위해
.frm파일을 열었던INFORMATION_SCHEMA테이블에 대한 쿼리는 더 이상 그렇게 하지 않고, 대신 데이터 딕셔너리에서 이 정보를 읽습니다. -
INFORMATION_SCHEMA쿼리에서 데이터베이스 또는 테이블 이름을 비교할 때, 특정 콜레이션을 강제하기 위해COLLATE를 사용하는 것은INFORMATION_SCHEMA테이블 컬럼에 적용된 경우에만 작동했으며, 비교 값에 적용된 경우에는 작동하지 않았습니다.이러한 비교 수행에 대한 추가 정보는 Using Collation in INFORMATION_SCHEMA Searches를 참조하십시오.
(Bug #14017351, Bug #65121, Bug #17559183, Bug #70462, Bug #23259470, Bug #81347, Bug #20372562, Bug #75532, Bug #13878164, Bug #11756519, Bug #48445)
-
-
Windows에서 서버가 비정상적으로 종료되는 경우, 이전에는 서버가
module_name.dmp라는 이름의 미니덤프 파일을 생성했으며, 여기서module_name은 서버 실행 파일의 이름입니다. 이전 미니덤프 파일이 덮어써지는 것을 방지하기 위해, 이제 미니덤프 파일 이름에는 프로세스 ID가 포함되며module_name..piddmp형식을 가집니다. 예를 들어mysqld.exe.7296.dmp입니다. (Bug #12779463) -
INFORMATION_SCHEMA테이블에 대한 쿼리의 경우, 스키마 및 테이블 이름 비교는 기반 파일 시스템의 특성과lower_case_table_names시스템 변수 값에 따라 대소문자를 구분하거나 구분하지 않을 수 있었습니다. 또한COLLATE절이 무시되었기 때문에 비교 속성을 변경하기 위해COLLATE절을 제공해도 효과가 없었습니다. 이제COLLATE가 더 이상 무시되지 않고 원하는 비교 속성을 얻는 데 사용할 수 있도록 변경되었습니다. (Bug #11748044, Bug #34921) -
FLOOR(CEIL())은 큰BIGINT UNSIGNED인수를 잘랐습니다. (Bug #80873, Bug #23013359) -
JSON_MERGE()함수가 반환한 값을JSON_SET()을 사용하여 조작하면 때때로 잘못된 결과가 생성되었습니다. (Bug #80787, Bug #22961128) -
사용자 정의 변수를 사용하여 geometry 인수가 제공된 경우
ST_AsGeoJSON()가 실패했습니다. (Bug #80697, Bug #22912800) -
CAST(expr AS BINARY(N))은N의 일부 유효한 값에 대해 예기치 않게NULL을 반환했습니다. (Bug #80630, Bug #22885819) -
SRID 매개변수를 받는 Geometry import 함수는 경고나 오류 없이 이를 unsigned 32-bit integer로 캐스트했으므로, 음수 값이나 unsigned 32-bit integer 범위보다 큰 값은 범위 내의 숫자로 조용히 변환되었습니다. 이제 SRID를 매개변수로 받는 모든 geometry 함수는 해당 값이 unsigned 32-bit integer 범위 내에 있는지 확인하고, 그렇지 않으면
ER_DATA_OUT_OF_RANGE오류를 생성합니다. 이는 이전에 매개변수가 범위 내에 있는지 확인했지만 다른 오류 코드를 반환했던 GeoJSON 및 GeoHash 함수에도 적용됩니다. (Bug #80499, Bug #22819614) -
predicate 값을 저장하는 동안 rounding이 발생하면, range optimizer가
<및<=연산자에 대해 올바른 결과를 반환하지 않을 수 있었습니다. (Bug #80244, Bug #22661012) -
mf_iocacheunit test에 대해 누락된va_end()를 추가하고,my_end()를 호출하여 메모리 누수를 수정하며, 해당 테스트의 target을 추가했습니다. 이러한 변경 사항의 기반이 된 패치를 제공한 Daniel Black에게 감사드립니다. (Bug #80085, Bug #22578670) -
SELECT DISTINCT SUBSTR()는 큰 position 또는 length 인수에 대해 값을 중복으로 잘못 폐기할 수 있었습니다. 동일한 문제는LEFT()및RIGHT()에도 영향을 주었습니다. (Bug #80047, Bug #22565155) -
SUBSTRING_INDEX(str, delim, count)는 32비트보다 큰count값을 올바르게 처리하지 않았습니다. (Bug #79978, Bug #22545429) -
CONVERT()호출의 경우, literal string 인수가 실행 중 수정되어 잘못된 결과를 생성할 수 있었습니다. (Bug #79924, Bug #22531111) -
REPLACE('a', BINARY 'b', NULL)은NULL이 아니라'a'를 반환했습니다. (Bug #79912, Bug #22523836) -
트랜잭션 상태 추적은 이제 비표준 캐릭터셋과의 향상된 호환성을 위해 8비트에 안전하지 않은 함수를 사용하지 않습니다. (Bug #79905, Bug #22523383)
-
GREATEST()및LEAST()는 모든 정수 입력을 signed로 처리했습니다. (Bug #79902, Bug #22523685) -
일반 쿼리 로그의 행에서 타임스탬프와 스레드 ID 사이의 탭이 누락되었습니다. 패치를 제공한 Tsubasa Tanaka에게 감사드립니다. (Bug #79868, Bug #22508563)
-
unsigned 값과 음수 상한 사이의 일부 비교가 잘못된 결과를 반환할 수 있었습니다(예:
CAST(100 AS UNSIGNED) BETWEEN 1 AND -1). (Bug #79857, Bug #22501606) -
REPEAT()함수가SUBSTR()함수의 출력을 올바르게 처리하지 않았습니다. (Bug #79695, Bug #22391186) -
JSON_TYPE()함수는 이제 JSON으로 캐스트된BIT리터럴의 타입을BIT가 아니라BLOB로 표시합니다. (Bug #79308, Bug #22297987) -
-DWITH_UBSAN=ONCMake 옵션으로 MySQL을 설정하면 완전하게 작동하지 않는 서버가 생성되었습니다. (Bug #79238, Bug #22194071) -
MySQL 배포판에 포함된 헤더 파일인
sql_common.h는 MySQL 배포판에 포함되지 않은 헤더 파일인hash.h를 include했으므로 이에 의존했습니다. 이로 인해 컴파일 실패가 발생했습니다. 이 의존성을 제거하기 위해sql_common.h가 더 이상hash.h를 include하지 않도록 수정되었습니다. (Bug #79237, Bug #22187997, Bug #70672, Bug #17633467) -
최대 문 실행 시간을 확인하는 데 사용되는 타이머가 서버가
--help옵션으로 시작된 경우에도 초기화되었습니다.--help가 지정된 경우에는 더 이상 이 작업을 수행하지 않습니다. (Bug #79182, Bug #22172389) -
Optimizer가
IF(true, '2015-01-01', '2015-01-01') IS NOT NULL형식의 표현식을 제거하도록 최적화하려고 할 때 실패했습니다. (Bug #79114, Bug #22148586) -
unsigned decimal의 뺄셈은 음수 값을 반환할 수 있었지만,
UNSIGNED BINARY의 메타데이터 타입 정보를 사용했습니다. unsigned decimal 뺄셈의 뺄셈은 이제 unsigned integer와 동일한 방식으로 처리됩니다: 결과가 음수이면NO_UNSIGNED_SUBTRACTIONSQL 모드가 활성화된 경우를 제외하고ER_DATA_OUT_OF_RANGE오류를 생성합니다. (Bug #78914, Bug #22083757) -
264보다 큰 숫자에 대한
HEX()함수의 처리가 개선되었습니다. (Bug #78828, Bug #22297983)참조: 이 문제는 다음 버그의 회귀입니다: Bug #9854.
-
-Wstrict-prototypes로 컴파일할 때 경고를 피하기 위해 클라이언트 측 플러그인 deinitialization 함수 시그니처가int (*deinit)()에서int (*deinit)(void)로 변경되었습니다. (Bug #78177, Bug #21680094, Bug #81419, Bug #23282498) -
DATA DIRECTORY또는INDEX DIRECTORY테이블 옵션에 매우 길거나 잘못된 경로 이름이 지정된 경우CREATE TABLE이 잘못된 오류를 보고했습니다. 이제 이러한 경우에는ER_PATH_LENGTH또는ER_WRONG_VALUE가 보고됩니다. (Bug #76635, Bug #20857556) -
서버는 이제 다음 오류 코드에 대해 더 자세한 정보를 제공하는 메시지를 제공하려고 시도합니다:
ER_CANT_CREATE_DB,ER_CANT_CREATE_TABLE,ER_DB_DROP_RMDIR,ER_ERROR_DURING_COMMIT,ER_ERROR_DURING_ROLLBACK,ER_GET_ERRNO. (Bug #76298, Bug #20694494) -
XA 트랜잭션 준비 실패의 일부 사례에서, 불완전한 트랜잭션 정리가 assertion을 발생시킬 수 있었습니다. (Bug #75809, Bug #20488921)
-
mysqld가 유효하지 않은 소켓 파일 디스크립터를 닫으려고 시도할 수 있었습니다. 패치를 제공해 준 Zhai Weixiang에게 감사드립니다. (Bug #75778, Bug #20504513)
-
다음 형식의 문은 테이블 데이터를
latin1로 변환했지만, 테이블 기본 캐릭터셋도latin1로 변경하고utf8절을 무시했습니다:ALTER TABLE tbl_name CHARACTER SET utf8, CONVERT TO CHARACTER SET latin1;패치를 제공해 준 Daniel Black에게 감사드립니다. (Bug #75320, Bug #20279241)
-
mysqld.cc에서abort_loop변수는volatile로 한정되어 있었으며, 일부 플랫폼에서는 이로 인해 다른 코어에서 실행 중인 스레드에서 변경 사항이 즉시 보이지 않을 수 있었습니다. 패치를 제공해 준 Stewart Smith에게 감사드립니다. (Bug #74846, Bug #20134637) -
트리거에서 뷰를 생성하는 프로시저를 호출하거나,
RENAME TABLE을 실행하는 프로시저를 호출하는 함수를 생성하면, 특정 상황에서 assertion이 발생할 수 있었습니다. (Bug #74740, Bug #19988193, Bug #21198646) -
서버 측 프리페어드 스테이트먼트의 타임스탬프가 대응하는 비프리페어드 스테이트먼트의 타임스탬프보다 최대 1초 뒤처진 상태로 바이너리 로그에 기록될 수 있었으며, 이로 인해 마스터 서버와 슬레이브 서버 간에 시간 값 차이가 발생했습니다. (Bug #74550, Bug #19894382, Bug #25187670)
-
동적 스토리지 엔진 플러그인의 경우,
.frm파일에서 엔진을 잘못 확인했기 때문에DROP TABLE,TRUNCATE TABLE, 및RENAME TABLE이 작동하지 않았습니다. (Bug #74277, Bug #19902868) -
실행된 프리페어드 스테이트먼트는
?파라미터 마커가 데이터 값으로 대체되어 기록됩니다. 기록된 문자열을 구성하는 방식이 비효율적이었으며 개선되었습니다. (Bug #73056, Bug #20955496) -
플러그인이 문자열 타입의 스레드 변수에 값을 할당할 때 메모리 누수가 발생할 수 있었습니다. (Bug #71759, Bug #19917521)
-
뷰를 사용한 그룹화에서, 베이스 테이블에서 선택할 때는 발생하지 않던
ER_INVALID_GROUP_FUNC_USE오류(“Invalid use of group function”)가 발생할 수 있었습니다. (Bug #70220, Bug #17406425) -
여러
LIMIT절을 가진 쿼리가 항상 SQL 표준에 따라 해석되지는 않았습니다.예를 들어, 다음 각 쿼리는 이제 예상대로 두 개의 로우를 반환합니다:
SELECT * FROM t LIMIT 2; (SELECT * FROM t LIMIT 2) LIMIT 4; ((SELECT * FROM t LIMIT 2) LIMIT 4) LIMIT 3;이는 또한
FROM DUAL을 사용하는UNION서브셀렉트 관련 문제도 수정합니다. 예를 들어, 다음 쿼리는 오류를 발생시켰습니다:SELECT 'A' AS `x` FROM DUAL UNION SELECT 'B' FROM DUAL UNION SELECT 'C' FROM DUAL ORDER BY `x` ASC;(Bug #50510, Bug #74251, Bug #11758322, Bug #19774083)
-
스토리지 엔진에 의존하지 않도록 의도되었지만 실제로는 특정 엔진을 사용하던 테스트 케이스가 수정되었습니다. (WL #7264)