MySQL 8.0.17 릴리스 노트
MySQL 8.0.17 Community Server 릴리스 노트를 한국어로 번역하고, DBA가 참고해야 할 핵심 내용을 함께 정리하였습니다.
DBA를 위한 핵심 내용
MySQL 8.0.17은 Clone 플러그인, Group Replication 원격 클로닝, InnoDB JSON 다중 값 인덱스, redo log archiving, 대량 스캔 성능 개선처럼 8.0 운영 모델을 넓히는 기능이 많습니다. 동시에 데이터 타입·SQL 문법 사용 중단이 대거 들어와 애플리케이션 호환성 점검이 필요합니다. 공개 자료 기준으로 널리 보고된 단일 대형 회귀는 확인하지 못했지만, 후속 보안 데이터에서는 8.0.17 이하가 InnoDB 및 암호화 관련 취약점 영향 범위에 포함됩니다. (NVD MySQL 8.0.17 검색)
- Clone 플러그인이 도입되어 로컬/원격으로 InnoDB 데이터를 복제할 수 있고, 복제 좌표까지 함께 전달해 복제본 또는 Group Replication 멤버 프로비저닝 시간을 크게 줄일 수 있습니다.
BACKUP_ADMIN권한, 네트워크 대역폭, donor 부하, 암호화/keyring 구성을 사전에 검증해야 합니다. - Group Replication 분산 복구가 원격 클로닝을 사용할 수 있게 되어 신규 멤버 투입이 쉬워졌습니다. 다만 혼합 버전 그룹의 호환성 정책도 강화되므로 롤링 업그레이드 중 멀티 프라이머리 읽기/쓰기 상태 전환을 반드시 확인해야 합니다.
- InnoDB가 JSON 배열에 대한 다중 값 인덱스를 지원합니다. JSON 문서 내부 배열 검색을 인덱스로 가속할 수 있지만, 함수형 인덱스·
CAST(... ARRAY)기반이므로 쿼리 패턴, 카디널리티, DML 비용을 함께 평가해야 합니다. - InnoDB redo log archiving이 추가되어 백업 도구가 redo 생성 속도를 따라가지 못해 로그가 덮이는 위험을 줄입니다. 대용량 백업이나 고쓰기 워크로드에서 백업 일관성 확보에 중요한 변화입니다.
- 대규모 InnoDB 병렬 읽기 성능이 개선되고 파티션 병렬 스캔 지원이 보강되었습니다. 대형 테이블 스캔, 백업, 분석성 쿼리에서 I/O 패턴이 달라질 수 있어 업그레이드 전후 처리량과 스토리지 부하를 비교해야 합니다.
SQL_CALC_FOUND_ROWS/FOUND_ROWS(), 정수 표시 폭과ZEROFILL,FLOAT(M,D)/DOUBLE(M,D), 비표준&&/||/!, 문자열 타입의BINARY속성, 부동소수/DECIMALUNSIGNED, 부동소수AUTO_INCREMENT등이 사용 중단되었습니다. 스키마 생성 SQL, ORM 마이그레이션, 리포팅 쿼리를 선제 수정해야 합니다.
Audit Log 관련 사항
- 암호화된 MySQL Enterprise Audit 로그 파일에 대한 암호화 및 복호화 작업은 MySQL keyring에 저장된 비밀번호를 사용합니다. 이전에는 단일 비밀번호만 저장되었습니다. 새 비밀번호를 생성하면 이전 비밀번호에 접근할 수 없게 되어, MySQL Enterprise Audit가 이전 비밀번호로 암호화된 로그 파일을 읽을 수 없었습니다. MySQL Enterprise Audit는 이제 keyring에서 비밀번호 기록을 구현하며, 여기에는 비밀번호 보관 및 만료 기능이 포함됩니다. audit log 플러그인은 암호화된 각 로그 파일 이름에 해당 파일을 읽는 데 필요한 비밀번호의 ID를 포함합니다. keyring에서 이전에 보관된 비밀번호의 만료 및 제거를 활성화하기 위해, 새로운
audit_log_password_history_keep_days시스템 변수를 사용할 수 있습니다. Configuring Audit Logging Characteristics를 참조하십시오. (WL #11246)
C API 관련 사항
-
다음 C API 변경이 이루어졌습니다:
HOSTNAME_LENGTH가 60에서 255로 변경되었으며,include/mysql_com.h에서include/my_hostname.h로 이동되었습니다.USER_HOST_BUFF_SIZE가include/mysql_com.h에서sql/auth/auth_common.h로 이동되었습니다.
(Bug #29590300)
캐릭터셋 지원
-
utf8mb4캐릭터셋에는 새로운 바이너리 콜레이션인utf8mb4_0900_bin이 추가되었으며, 이는 기존utf8mb4_bin바이너리 콜레이션과 다음과 같이 다릅니다:- 콜레이션 가중치의 경우,
utf8mb4_bin은 코드 포인트를 사용하며 앞쪽에 0 바이트가 추가될 수 있는 반면,utf8mb4_0900_bin은utf8mb4인코딩 바이트를 사용합니다. 정렬 순서는 두 콜레이션 모두 동일하지만,utf8mb4_0900_bin의 정렬은 훨씬 더 빠릅니다. utf8mb4_bin의 패드 속성은PAD SPACE인 반면,utf8mb4_0900_bin의 경우NO PAD입니다. 따라서utf8mb4_0900_bin이 관련된 작업은 뒤쪽 공백을 추가하지 않으며, 뒤쪽 공백이 있는 문자열이 관련된 비교는 두 콜레이션에서 다를 수 있습니다.
자세한 내용은 유니코드 캐릭터셋을 참조하십시오. (WL #10354)
- 콜레이션 가중치의 경우,
컴포넌트 관련 사항
- 컴포넌트가 현재 스레드에 대한 핸들을 얻을 수 있도록 하는 새로운
mysql_current_thread_reader컴포넌트 서비스가 제공됩니다. 예를 들어 이 서비스는 컴포넌트가 해당 스레드 핸들을 다른 서비스에 전달하여 현재 세션의 속성에 접근할 수 있게 합니다. 이 서비스에 대한 정보는 https://dev.mysql.com/doc/index-other.html에서 제공되는 MySQL Server Doxygen 문서의 Component Subsystem 섹션을 참조하십시오. (WL #12727)
설정 관련 사항
-
mysys_ssl디렉터리의 소스 파일이mysys디렉터리로 이동되었으며,mysys_ssl라이브러리는 더 이상 빌드되지 않습니다. (Bug #29488066) -
MySQL 설정에는 이제 최소 CMake 버전 3.5.1이 필요합니다. (Bug #29337090)
-
MySQL 전반에서 허용되는 호스트 이름의 최대 길이가 이전 제한인 60자에서 255 ASCII 문자로 증가했습니다. 이는 예를 들어 데이터 딕셔너리,
mysql시스템 스키마, Performance Schema,INFORMATION_SCHEMA,sys스키마의 호스트 이름 관련 컬럼,CHANGE MASTER TO문의MASTER_HOST값,SHOW PROCESSLIST문 출력의Host컬럼, 계정 이름의 호스트 이름(계정 관리 문 및DEFINER속성에서 사용되는 것과 같은), 호스트 이름 관련 명령 옵션 및 시스템 변수에 적용됩니다.주의 사항:
-
허용되는 호스트 이름 길이 증가는 호스트 이름 컬럼에 인덱스가 있는 테이블에 영향을 줄 수 있습니다. 예를 들어 호스트 이름을 인덱싱하는
mysql시스템 스키마의 테이블은 이제 더 긴 인덱스 값을 수용하기 위해 명시적인DYNAMIC의ROW_FORMAT속성을 가집니다. -
파일 이름 값을 가지는 일부 설정 값은 서버 호스트 이름을 기반으로 구성될 수 있습니다. 허용되는 값은 기반 운영 체제에 의해 제한되며, 운영 체제는 255자 호스트 이름을 포함할 만큼 충분히 긴 파일 이름을 허용하지 않을 수 있습니다. 이는
general_log_file,log_error,pid_file,relay_log,slow_query_log_file시스템 변수와 해당 옵션에 영향을 줍니다. 호스트 이름 기반 값이 OS에 비해 너무 길면 명시적으로 더 짧은 값을 제공해야 합니다. -
서버가 이제 255자 호스트 이름을 지원하지만,
--ssl-mode=VERIFY_IDENTITY옵션을 사용하여 설정된 서버 연결은 OpenSSL에서 지원하는 최대 호스트 이름 길이에 의해 제한됩니다. 호스트 이름 일치는 SSL 인증서의 두 필드와 관련되며, 해당 필드의 최대 길이는 다음과 같습니다: Common Name: 최대 길이 64; Subject Alternative Name: RFC#1034에 따른 최대 길이.호스트 이름이 최대 60자라고 예상하는 애플리케이션은 이 변경 사항을 고려하도록 조정해야 합니다. (Bug #13548245, Bug #63814, Bug #27925782, Bug #90601, Bug #27955121, Bug #29584642, Bug #29602081, Bug #94907, WL #12571)
-
Debugging 관련 사항
-
MySQL 서버는 mutex와 같은 수많은 내부 locking primitive를 사용하는 multithreaded 애플리케이션입니다. lock-acquisition deadlock을 감지하고 runtime 실행에 이러한 deadlock이 없음을 강제할 수 있도록, MySQL은 이제 LOCK_ORDER 도구를 지원합니다. 이를 통해 서버 설계의 일부로 lock-order dependency graph를 정의하고, 서버 runtime 검사로 lock acquisition이 acyclic인지 및 실행 경로가 해당 그래프를 준수하는지 확인할 수 있습니다. LOCK_ORDER 지원에는 다음이 포함됩니다:
- 서버 lock-order dependency graph를 정의하는
lock_order_dependencies.txt파일. - MySQL이 LOCK_ORDER 도구와 함께 빌드되는지 여부를 설정하는
WITH_LOCK_ORDERCMake 옵션. - 서버 실행 중 LOCK_ORDER 도구 동작을 설정하는 시스템 변수 집합.
- 테스트 케이스 실행 중 LOCK_ORDER 도구를 활성화할지 여부를 제어하는 mysql-test-run.pl용
--lock-order옵션.
LOCK_ORDER 도구를 사용하려면 도구가 활성화된 상태로 소스에서 MySQL을 빌드해야 합니다. The LOCK_ORDER Tool을 참조하십시오. 이는 프로덕션 사용이 아니라 서버 디버깅을 위한 것입니다.
- 서버 lock-order dependency graph를 정의하는
사용 중단 및 제거 관련 사항
-
X DevAPI:
Collection객체의 경우, 다음 메서드는 사용 중단되었으며 향후 릴리스에서 제거될 예정입니다:Collection.find().where()Collection.modify().where()Collection.remove().where()
.where()메서드에 의존하는 모든Collection코드는 업데이트해야 하며,.where()메서드의 표현식은 적절한.find(),.remove(),.modify()메서드에 직접 제공해야 합니다. (WL #12902) -
이전 업그레이드 중 mysql_upgrade 프로그램이 생성한
mysql_upgrade_info파일은 mysql_upgrade 프로그램을 실행한 운영 체제 사용자만 수정할 수 있었으며, 이로 인해 업그레이드 오류가 발생했습니다. 이제 오류 대신 경고가 발생하므로 업그레이드 작업을 계속 진행할 수 있습니다.mysql_upgrade_info파일은 사용 중단되었으며 향후 MySQL 버전에서 제거될 예정입니다. (Bug #29702060, Bug #95165) -
FLOAT및DOUBLE타입 컬럼(및 모든 동의어)에 대한 자릿수를 지정하는FLOAT(M,D)및DOUBLE(M,D)문법은 표준이 아닌 MySQL 확장입니다. 이 문법은 사용 중단되었으며 이에 대한 지원은 향후 MySQL 버전에서 제거될 예정입니다. (Bug #25328973, Bug #84363, WL #12575) -
문자열 데이터 타입의 경우,
BINARY속성은 컬럼 캐릭터셋(또는 컬럼 캐릭터셋이 지정되지 않은 경우 테이블 기본 캐릭터셋)의 바이너리(_bin) 콜레이션을 지정하는 축약형인 표준이 아닌 MySQL 확장입니다. MySQL 8.0에서는utf8mb4캐릭터셋에 여러_bin콜레이션이 있기 때문에BINARY의 이러한 표준이 아닌 사용은 모호하므로,BINARY속성은 사용 중단되었으며 이에 대한 지원은 향후 MySQL 버전에서 제거될 예정입니다. 애플리케이션은 대신 명시적인_bin콜레이션을 사용하도록 조정해야 합니다.데이터 타입 또는 캐릭터셋을 지정하기 위한
BINARY사용은 변경되지 않습니다. (WL #13068) -
표준 SQL
AND,OR,NOT연산자의 동의어인 비표준 C 스타일&&,||,!연산자는 각각 사용 중단되며, 이에 대한 지원은 향후 MySQL 버전에서 제거됩니다. 비표준 연산자를 사용하는 애플리케이션은 표준 연산자를 사용하도록 조정해야 합니다.PIPES_AS_CONCATSQL 모드가 활성화되어 있지 않은 한||사용은 사용 중단됩니다. 해당 경우에는||가 SQL 표준 문자열 연결 연산자를 의미합니다).(WL #13070)
-
숫자 데이터 타입에 대한
ZEROFILL속성은 사용 중단되며, 정수 데이터 타입에 대한 표시 너비 속성도 마찬가지입니다. 정수 데이터 타입에 대한ZEROFILL및 표시 너비 지원은 향후 MySQL 버전에서 제거됩니다. 이러한 속성의 효과를 생성하는 대체 방법 사용을 고려하십시오. 예를 들어, 애플리케이션은LPAD()함수를 사용하여 원하는 너비까지 숫자를 0으로 채우거나, 서식이 지정된 숫자를CHAR컬럼에 저장할 수 있습니다. (WL #13127) -
FLOAT,DOUBLE,DECIMAL타입(및 모든 동의어)의 컬럼에 대한UNSIGNED속성은 사용 중단되며, 이에 대한 지원은 향후 MySQL 버전에서 제거됩니다. 이러한 컬럼에는 대신 간단한CHECK제약 조건 사용을 고려하십시오. (WL #12391) -
FLOAT및DOUBLE타입의 컬럼(및 모든 동의어)에 대한AUTO_INCREMENT지원은 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 이러한 컬럼에서AUTO_INCREMENT속성을 제거하거나, 정수 타입으로 변환하는 것을 고려하십시오. (WL #12595) -
SQL_CALC_FOUND_ROWS쿼리 수정자와 함께 제공되는FOUND_ROWS()함수는 이제 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 대체 방법으로,LIMIT을 사용하여 쿼리를 실행한 다음, 추가 로우가 있는지 확인하기 위해COUNT(*)를 사용하고LIMIT은 사용하지 않는 두 번째 쿼리를 실행하는 것을 고려하십시오. 예를 들어, 다음 쿼리 대신:SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10; SELECT FOUND_ROWS();대신 다음 쿼리를 사용하십시오:
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10; SELECT COUNT(*) WHERE id > 100;COUNT(*)는 특정 최적화의 대상입니다.SQL_CALC_FOUND_ROWS는 일부 최적화가 비활성화되도록 합니다. (WL #12615)
설치 관련 사항
- 서버 시작 시 자동 업그레이드는 완료하는 데 시간이 걸릴 수 있습니다. systemd 환경에서 더 나은 상태 알림을 위해, 이제 서버는 업그레이드가 시작되고 종료될 때 시스템 알림 소켓으로 메시지를 전송합니다. (상태는 server mysqld status로 모니터링할 수 있습니다.) (Bug #29493201)
Keyring 관련 사항
-
keyring_aws플러그인은 최신 AWS Encryption SDK를 사용하도록 업데이트되었으며, OpenSSL 1.1과 함께 작동하도록 업데이트되었습니다.keyring_aws_region변수는 새 SDK에서 지원하는 추가 AWS 리전을 지원합니다. 지원되는 AWS 리전 목록은 변수 설명을 참조하십시오. (WL #12886)
패키징 관련 사항
-
mysql-community-serverLinux 패키지의 다운로드 크기와 디스크 사용 공간을 줄이기 위해, 디버그 바이너리와 플러그인이 다음 플랫폼에 대해 별도 패키지로 이동되었습니다:- EL8, Fedora: 디버그 바이너리와 관련 플러그인이 포함된
mysql-community-server패키지는 이제 디버그 바이너리 또는 플러그인이 없는mysql-community-server패키지와 디버그 바이너리 및 플러그인이 포함된mysql-community-server-debug패키지로 분리되었습니다. - Debian: 디버그 바이너리와 관련 플러그인이 포함된
mysql-community-server패키지는 이제 디버그 바이너리 또는 플러그인이 없는mysql-community-server패키지, 디버그 바이너리가 포함된mysql-community-server-debug패키지, 디버그 플러그인이 포함된mysql-community-test-debug패키지로 분리되었습니다.
모든 경우에 디버그 패키지는 해당
mysql-community-server패키지에 종속됩니다. (Bug #29769061, Bug #28647754, Bug #92415, Bug #29702765, Bug #95169, Bug #29681301) - EL8, Fedora: 디버그 바이너리와 관련 플러그인이 포함된
Performance Schema 관련 사항
- 컴파일 시점의 Performance Schema 버전 검사가 서버 버전과의 비호환성을 방지하도록 개선되었습니다. (Bug #29550156)
- 이전에는 priority read/write lock에 대해
rwlock이라는 이름으로 지정된 RWLOCK용 Performance Schema instrumentation이 plain lock과 priority lock을 구분하지 못했으며, 수행된 unlock 작업의 종류에 대한 정보를 수집하지 않았습니다. 이제 priority read/write lock은prlock이라는 이름으로 지정되므로, 이에 대한 이벤트는wait/synch/prlock으로 시작합니다. 또한 unlock 작업에 대한 정보가 제공됩니다. (Bug #29270712)
플러그인 관련 사항
-
모든 플러그인이
--early-plugin-load옵션을 사용하여 서버 시작 시퀀스에서 “early”로 로드되는 경우(즉,InnoDB가 초기화되기 전) 제대로 동작할 수 있는 것은 아닙니다. 그러나InnoDB는 암호화된 테이블에서 동작하기 위해 keyring 백엔드 플러그인을 필요로 합니다. 플러그인이 early로 로드될 수 있는지 여부를 서버에 표시할 수 있도록, 플러그인 descriptor에서 사용할 수 있는 새로운PLUGIN_OPT_ALLOW_EARLY플래그가 제공됩니다. Server Plugin Library and Plugin Descriptors를 참조하십시오. MySQL 배포판에 포함된 Keyring 플러그인은 이제InnoDB가 이를 필요로 하므로PLUGIN_OPT_ALLOW_EARLY플래그가 활성화되어 있지만, 이 플래그는 keyring 플러그인으로 제한되지 않습니다. 서버 시작 시퀀스의 early 단계에서 성공적으로 초기화될 수 있는 다른 플러그인에도 설정할 수 있습니다.이 플래그는
--plugin-load또는--plugin-load-add옵션을 사용하여 서버 시작 시 플러그인을 로드할 수 있는지 여부나,INSTALL PLUGIN문을 사용하여 런타임에 플러그인을 로드할 수 있는지 여부에는 영향을 주지 않습니다.8.0.17 이전 MySQL 배포판을 사용하여 컴파일된 모든 플러그인에는 이 플래그가 설정되어 있지 않습니다. 이러한 플러그인을 8.0.17 이전 서버에 로드할 때는 문제가 되지 않지만,
--early-plugin-load를 사용하여 8.0.17 이전 MySQL 배포판으로 컴파일된 플러그인 바이너리를 8.0.17 이상 서버에 로드하려는 시도는 실패합니다. 플러그인은 MySQL 8.0.17 이상에 맞춰 다시 컴파일해야 합니다. (Bug #29040456, Bug #93550, WL #12935)
보안 관련 사항
- OpenSSL 라이브러리가 번들로 제공되는 플랫폼의 경우, MySQL Server에 링크된 OpenSSL 라이브러리가 버전 1.0.2s로 업데이트되었습니다. 새 OpenSSL 버전에서 수정된 문제는 https://www.openssl.org/news/cl102.txt 및 https://www.openssl.org/news/vulnerabilities.html에 설명되어 있습니다. (Bug #29881152)
X 플러그인 관련 사항
- MySQL 8.0.16의 회귀로 인해
createIndex()메서드가 배정밀도 값을 지정하기 위한DOUBLE(M,D)문법을 지원하지 않았습니다. (Bug #29748841) - octet으로 인코딩된 인수를 포함하는 메시지에 대한 X Protocol의 처리가 문자열 배열과 같은 비스칼라 데이터를 지원하도록 수정되었습니다. (Bug #29721046)
- SSL 연결(
--ssl-mode=VERIFY_IDENTITY)에 대해 호스트 이름 신원 확인이 활성 상태인 경우, X Protocol은 서버 Certificate Authority (CA) 인증서의 Subject Alternative Names (SANs)와 일치하는 항목을 확인하지 않았습니다. 이로 인해 인증서의 Common Name 값이 아니라 SAN으로 지정된 유효한 호스트 이름을 사용했기 때문에 연결 요청이 불필요하게 거부될 수 있었습니다. (Bug #29691694) - X Plugin에서 prepared statement를 사용할 때, modify 또는 find 작업에서
IN또는NOT IN을 사용하면 잘못된 JSON이 생성되어 오류가 발생했습니다. (Bug #29259501) - Windows에서 X Plugin은 불필요하거나 정보가 충분하지 않은 일부 메시지를 로그에 기록했습니다. 해당 메시지는 적절하게 제거되거나 개선되었습니다. (Bug #27839153)
- X Plugin의 SQL 함수 목록이 오래된 상태였으며, 새 함수를 추가하고 더 이상 사용할 수 없는 함수를 제거하도록 업데이트되었습니다. (Bug #26574971)
추가되거나 변경된 기능
-
InnoDB; JSON:
InnoDB는 이제JSON배열에 대한 다중 값 인덱스를 지원합니다. 다중 값 인덱스는 여러 인덱스 레코드가 동일한 데이터 레코드를 가리킬 수 있는 인덱스입니다. 이는{"user":"Bob","zipcode":[94477,94536]}와 같은JSON문서를 인덱싱할 때 유용할 수 있으며, 이 문서에서 모든 우편번호를 검색하려는 경우 문서의 각 우편번호에 대해 두 개의 인덱스 레코드가 필요합니다. 다음과 같은CREATE INDEX문을 사용하여zipcode배열에 이러한 인덱스를 생성할 수 있습니다:CREATE INDEX zips ON t1( (CAST(data->'$.zipcode' AS UNSIGNED ARRAY)) )실질적으로 이는
CAST()함수를 사용하는 함수형 인덱스이며, 이 함수는 JSON 배열을 SQL 데이터 타입 배열로 캐스팅할 수 있도록ARRAY키워드로 확장되었습니다. 이 표현식은 유효한 JSON 표현식이어야 하며, 효과를 가지려면 JSON 문서의 배열을 가리켜야 합니다.CAST()에서 지원하는 모든 타입 지정자는BINARY및JSON을 제외하고 사용할 수 있습니다.CAST()함수의 이러한 사용은InnoDB에서만 지원되며,JSON배열에 대한 다중 값 인덱스를 생성하는 경우에만 지원됩니다.이 작업의 일부로, MySQL은 여기에서 설명하는 것처럼
JSON문서 작업을 위한 새 함수JSON_OVERLAPS()와 새MEMBER OF()연산자를 추가합니다:-
JSON_OVERLAPS()는 두JSON문서를 비교합니다. 두 문서에 공통 키-값 쌍 또는 배열 요소가 포함되어 있으면 이 함수는 TRUE(1)를 반환하고, 그렇지 않으면 FALSE(0)를 반환합니다. 두 값이 모두 스칼라이면 이 함수는 단순한 동등성 검사를 수행합니다. 한 인수가 JSON 배열이고 다른 인수가 스칼라이면, 해당 스칼라는 배열 요소로 처리됩니다. 따라서JSON_OVERLAPS()는 모든 키-값 쌍 또는 배열 요소가 두JSON문서 모두에 존재하는지 여부를 나타내는JSON_CONTAINS()의 보완 기능으로 동작합니다. -
MEMBER OF()는 첫 번째 피연산자(스칼라 또는 JSON 문서)가 두 번째 피연산자로 전달된 JSON 배열의 멤버인지 테스트하며, 멤버이면 TRUE(1)를 반환하고 멤버가 아니면 FALSE(0)를 반환합니다. 피연산자의 타입 변환은 수행되지 않습니다.MySQL 옵티마이저는 적합한 모든 쿼리, 즉
WHERE절에서 JSON 컬럼 내의 배열에 대해JSON_CONTAINS(),JSON_OVERLAPS()또는MEMBER OF()중 하나를 사용하는 쿼리에 대해 다중 값 인덱스를 자동으로 사용합니다. 지정된 쿼리에 대해EXPLAIN의 출력을 확인하여 이러한 인덱스가 실제로 사용되는지 확인할 수 있습니다.
Multi-Valued Indexes는 예제를 포함하여 다중 값 인덱스에 대한 더 자세한 정보를 제공합니다. 사용 예제를 포함한
JSON_OVERLAPS()및MEMBER OF()에 대한 자세한 내용은 Functions That Search JSON Values를 참조하십시오.ARRAY및MEMBER는 이제 예약어이며, 식별자 따옴표 처리 없이는 식별자로 사용할 수 없습니다.(WL #8955, WL #8763)
-
-
Group Replication: 이제 분산 복구 중 참여하는 멤버로 상태를 전송하기 위해 원격 클로닝 작업을 사용할 수 있습니다. 원격 클로닝 작업을 사용하면 사전에 그룹의 데이터를 서버로 수동 전송하지 않고도 새 멤버를 그룹에 추가할 수 있습니다. 이 기능을 사용하려면 도너와 참여하는 멤버에 Clone 플러그인을 설치하고, 분산 복구용 복제 사용자에게
BACKUP_ADMIN권한을 부여하고, 새group_replication_clone_threshold시스템 변수를 적절한 수준으로 설정해야 합니다. 필요한 Clone 플러그인 설정은 이제 수행되며, 원격 클로닝 작업은 이제 자동으로 처리됩니다. 클로닝이 완료되고 참여하는 멤버가 다시 시작되면, 원격 클로닝 작업이 진행되는 동안 그룹이 적용한 모든 트랜잭션은 분산 복구를 완료하기 위해 도너의 바이너리 로그에서 참여하는 멤버로 복제를 통해 전송됩니다. (WL #12827) -
Microsoft Windows: 이제 새 경고 메시지는 Windows에서 MySQL named pipe를 사용하여 생성된 연결이 named pipe에서 커넥터가 요청할 수 있는 권한을 제한했음을 DBA에게 알려 줍니다.
이전에는
named_pipe_full_access_group시스템 변수가 기본적으로 기본 제공 WindowsEveryone그룹(SID S-1-1-0)에 매핑되는 값으로 설정되었습니다. 그러나 이 그룹은 적합하지 않으며, MySQL named pipe에서 더 적은 권한을 요청할 수 없는 커넥터에 대해 그 멤버십을 제한하는 그룹으로 대체해야 합니다.새로운 경고는
named_pipe_full_access_group에 할당된 문자열 값이'*everyone*'(또는 Windows 시스템 언어의 동등한 값)이고 명명된 파이프가 활성화된 경우 시작 시 오류 로그에 기록됩니다. 또한 시스템 변수가 런타임에Everyone그룹으로 재설정되면 경고가 오류 로그에 기록되고 클라이언트에 발생합니다. (WL #12670) -
JSON: MySQL은 이제
JSON_SCHEMA_VALID()및JSON_SCHEMA_VALIDATION_REPORT()두 함수를 사용한 JSON 스키마 검증을 지원하며, 두 함수 모두 JSON Schema 명세의 Draft 4를 준수하는 JSON 스키마에 대해 JSON 문서를 검증합니다.JSON_SCHEMA_VALID()는 문서가 스키마에 대해 검증되면 true를 반환하고, 그렇지 않으면 false를 반환합니다.JSON_SCHEMA_VALIDATION_REPORT()는 검증 결과에 대한 자세한 정보를 포함하는 JSON 문서를 반환합니다.이 두 함수 모두에 대해 다음 문장이 적용됩니다:
required속성이 지원됩니다.- 정규 표현식이 지원됩니다(유효하지 않은 표현식은 조용히 무시됩니다).
- 스키마의 외부 리소스 및
$ref키워드는 지원되지 않습니다.
예제를 포함한 자세한 내용은 JSON Schema Validation Functions을 참조하십시오. (WL #11999, WL #13005)
-
time_zone세션 변수는 이제SET_VAROptimizer 힌트를 사용하여 힌트로 지정할 수 있습니다. (Bug #29776464) -
libmysqlclient.soC 클라이언트 라이브러리의 마이너 버전이 1(21.0에서 21.1)로 증가되어 새 심볼이 추가되었음을 나타냅니다. 이는 MySQL 8.0.16 릴리스의 누락 사항을 수정하기 위해 수행되었습니다. 호환성 관련 우려를 해결하기 위해 모든 심볼의 버전은 변경되지 않았습니다. 즉, 라이브러리의 파일명은libmysqlclient.so.21.1.17이지만, 라이브러리 내부의 모든 심볼은 21_0으로 태그됩니다(8.0.16 릴리스에서 변경되지 않음). (Bug #29584073, Bug #29642146) -
MySQL 소스 코드의 주석 및 메시지 수정에 기여한 Josh Braden, Daniël van Eeden, Simon Mudd, Zhou Mengkang에게 감사드립니다. (Bug #29403708, Bug #94464, Bug #29428435, Bug #94527, Bug #29262200, Bug #94049, Bug #29468128, Bug #94625)
-
이제 mysql 클라이언트 프로그램은 사용 가능한 경우
os_user및os_sudouser연결 속성을 전송하여, 각각 프로그램을 실행 중인 운영 체제 사용자의 이름과SUDO_USER환경 변수의 값을 나타냅니다. 연결 속성에 대한 일반 정보는 Performance Schema Connection Attribute Tables를 참조하십시오. 이 기능의 기반이 된 기여를 제공한 Daniël van Eeden에게 감사드립니다. (Bug #29210935, Bug #93916, WL #12955) -
이제 Optimizer는
NOT IN (subquery),NOT EXISTS (subquery),IN (subquery) IS NOT TRUE또는EXISTS (subquery) IS NOT TRUE를 가진WHERE조건을 내부적으로 antijoin으로 변환하여 서브쿼리를 제거합니다. 이는 기존IS NULL(Not exists) 외부 조인 최적화와 유사합니다. 자세한 내용은 EXPLAIN Extra Information을 참조하십시오.또한 이제
IN (subquery) IS TRUE또는EXISTS (subquery) IS TRUE를 가진WHERE조건이나,SELECT * FROM t1 LEFT JOIN t2 ON t2.x IN (SELECT * FROM t3)와 같이IN조건이 왼쪽 조인에 속하는 경우에 semijoin materialization을 사용할 수 있습니다. Optimizing IN and EXISTS Subquery Predicates with Semijoin Transformations를 참조하십시오.또한 이 작업의 결과로 MySQL은 이제
(x IS TRUE) IS FALSE형식의 조건을x IS NOT TRUE로 단순화할 수 있으며, 이는 원래 작성된 조건보다 더 빠르게 테스트하고 더 쉽게 최적화할 수 있습니다. (Bug #29027883, WL #4245) -
SHOW CREATE USER출력의IDENTIFIED WITH절에 표시되는 비밀번호 해시 값에는 터미널 표시 및 기타 환경에 부정적인 영향을 주는 출력 불가능한 문자가 포함될 수 있습니다. 새로운print_identified_with_as_hex시스템 변수를 활성화하면SHOW CREATE USER가 이러한 해시 값을 일반 문자열 리터럴이 아니라 16진수 문자열로 표시합니다. 출력 불가능한 문자를 포함하지 않는 해시 값은 이 변수가 활성화된 경우에도 여전히 일반 문자열 리터럴로 표시됩니다. 이 변경 사항과의 호환성을 위해CREATE USER및ALTER USER는 이제 일반 문자열 리터럴 또는 16진수 문자열로 지정된 해시 값을 모두 허용합니다. (Bug #28053446, Bug #90947, WL #12803) -
MySQL 8.0에서
lower_case_table_names변수는 MySQL 서버가 초기화될 때만 설정할 수 있습니다. APT를 사용하여 수행되는 Debian 및 Ubuntu의 MySQL 서버 설치는 MySQL 서버를 대신 초기화하므로,lower_case_table_names를 활성화할 기회가 없었습니다. 이 문제를 우회하기 위해 이제 APT를 사용하여 MySQL을 설치하기 전에debconf-set-selection유틸리티를 사용하여lower_case_table_names(lower_case_table_names=1설정)을 활성화할 수 있습니다.APT를 사용하여 MySQL을 설치하기 전에
lower_case_table_names를 활성화하려면 다음 명령을 실행하십시오:shell> sudo debconf-set-selections <<< "mysql-server mysql-server/lowercase-table-names select Enabled(Bug #27948395, Bug #90695)
-
이제 서버는 시작 시 SSL 서버 인증서를 더 잘 검사하고, 문제를 발견하면 오류 로그에 경고를 기록합니다. (Bug #25945005)
-
SELECT... INTO OUTFILE또는SELECT... INTO DUMPFILE을 사용하여 생성되는 파일의 umask가 0666에서 0640으로 변경되었습니다.LOAD_FILE()함수는 더 이상 파일이 모든 사용자가 읽을 수 있어야 한다고 요구하지 않고, 서버가 읽을 수 있기만 하면 됩니다. (Bug #24513720) -
mysqldump 옵션
--set-gtid-purged는SET @@GLOBAL.gtid_purged문이 mysqldump 출력에 추가되는지 여부를 제어합니다. 이 문은 덤프 파일이 다시 로드되는 서버에서gtid_purged의 값을 업데이트하여, 소스 서버의gtid_executed시스템 변수에서 가져온 GTID 집합을 추가합니다. 이제 새로운 선택 항목--set-gtid-purged=COMMENTED를 사용할 수 있습니다. 이 값이 설정되면, 백업 중인 서버에서 GTID가 활성화된 경우SET @@GLOBAL.gtid_purged가 출력에 추가되지만(gtid_executed가 비어 있지 않은 한), 주석 처리됩니다. 이는gtid_executed의 값을 출력에서 사용할 수 있지만, 덤프 파일이 다시 로드될 때 자동으로 수행되는 작업은 없다는 의미입니다.COMMENTED를 사용하면gtid_executed집합의 사용을 수동으로 또는 자동화를 통해 제어할 수 있습니다. 예를 들어, 이미 서로 다른 활성 데이터베이스가 있는 다른 서버로 데이터를 마이그레이션하는 경우 이 방식을 선호할 수 있습니다. 이 기여에 대해 Facebook에 감사드립니다. (Bug #94332, Bug #29357665, WL #12959) -
MySQL은 이제
CAST()또는CONVERT()함수 중 하나를 사용하여DOUBLE,FLOAT,REAL로의 명시적 캐스트를 지원합니다. 자세한 내용은 Cast Functions and Operators를 참조하십시오. (Bug #30524, Bug #11747058, WL #529) -
InnoDB는 이제 redo log 아카이빙을 지원합니다. redo log 레코드를 복사하는 백업 유틸리티는 백업 작업이 진행 중일 때 redo log 생성 속도를 따라가지 못하는 경우가 있으며, 이로 인해 해당 레코드가 덮어써져 redo log 레코드가 손실될 수 있습니다. redo log 아카이빙 기능은 redo log 레코드를 아카이브 파일에 순차적으로 기록하여 이 문제를 해결합니다. 백업 유틸리티는 필요에 따라 아카이브 파일에서 redo log 레코드를 복사할 수 있으므로, 데이터 손실 가능성을 방지합니다.자세한 내용은 Redo Log Archiving을 참조하십시오. (WL #12009, WL #12329, WL #12348)
-
JSON데이터에 대한 추가 인덱싱 옵션을 제공하기 위해,InnoDB는 이제 다중 값 인덱스를 지원합니다. 다중 값 인덱스는 값 배열을 포함하는 컬럼에 정의된 보조 인덱스입니다. (WL #8763) -
MySQL은 이제
InnoDB데이터를 로컬로 또는 원격 MySQL 서버 인스턴스에서 클론할 수 있는 clone 플러그인을 제공합니다. 로컬 클론 작업은 MySQL 인스턴스가 실행되는 동일한 서버 또는 노드에 클론된 데이터를 저장합니다. 원격 클론 작업은 donor MySQL 서버 인스턴스에서 클론 작업이 시작된 recipient 서버 또는 노드로 네트워크를 통해 클론된 데이터를 전송합니다.clone 플러그인은 복제를 지원합니다. 클론 작업은 데이터 클론 외에도 donor에서 복제 좌표를 추출하고 전송하여 recipient에 적용하며, 이를 통해 clone 플러그인을 Group Replication 멤버 및 복제 슬레이브 프로비저닝에 사용할 수 있습니다. 프로비저닝에 clone 플러그인을 사용하는 것은 많은 수의 트랜잭션을 복제하는 것보다 훨씬 빠르고 효율적입니다. Group Replication 멤버는 clone 플러그인을 복구의 대체 방법으로 사용하도록 설정할 수도 있으므로, 멤버는 seed 멤버에서 그룹 데이터를 검색하는 가장 효율적인 방법을 자동으로 선택합니다.
자세한 내용은 The Clone Plugin 및 Cloning for Distributed Recovery를 참조하십시오. (WL #9209, WL #9210, WL #9211, WL #9212, WL #11636, WL #9682)
-
이제 그룹 내 멤버 버전에 대한 호환성 정책은 멤버의 MySQL 릴리스 버전을 고려합니다. 이전에는 마이너 버전만 고려되었습니다. 릴리스 버전을 사용하면 Group Replication이 그룹 재구성 및 업그레이드 절차 중 혼합 버전 그룹에 대해 복제 안전성을 더 잘 유지할 수 있습니다.
호환성 정책은 멤버가 처음으로 또는 업그레이드 후에 그룹에 조인할 때, 상태 전송을 위한 도너가 선택될 때, 그리고 프라이머리 멤버 선출이 수행될 때 적용됩니다. MySQL 8.0.16 이하를 실행하는 멤버는 이러한 상황에서 메이저 버전만 고려합니다. 프라이머리 멤버 선출의 경우 모든 멤버가 동일한 결정에 도달하도록, MySQL 8.0.17 이상을 실행하는 멤버는 그룹에 더 낮은 릴리스를 실행하는 멤버가 있으면 해당 멤버와 일치하도록 정책을 조정합니다.
여러 MySQL Server 버전을 실행하는 멤버가 온라인 상태인 멀티 프라이머리 모드 그룹에서는, 예를 들어 롤링 온라인 업그레이드 절차 중에 Group Replication이 이제 릴리스를 실행하는 멤버의 읽기-쓰기 및 읽기 전용 상태를 자동으로 관리합니다. 멤버가 그룹을 떠나면 이제 가장 낮은 버전을 실행하는 멤버가 자동으로 읽기-쓰기 모드로 설정됩니다. 단일 프라이머리 모드에서 실행 중이던 혼합 버전 그룹을 멀티 프라이머리 모드로 실행하도록 변경할 때는
group_replication_switch_to_multi_primary_mode()함수를 사용하며, 멤버는 MySQL 서버 버전에 따라 자동으로 읽기-쓰기 또는 읽기 전용 모드로 설정됩니다.이러한 개선된 호환성 정책은 하나의 패치 버전에서 다른 패치 버전으로 온라인 업그레이드 절차를 수행하는 동안 그룹 멤버의 동작에 영향을 주며, 이전에 하나의 메이저 버전에서 다른 메이저 버전으로 업그레이드하는 동안의 동작이 영향을 받았던 방식과 같습니다. 멀티 프라이머리 모드 그룹의 경우 업그레이드 절차 중 읽기-쓰기 모드인 멤버 수가 줄어듭니다. 업그레이드가 그 외에는 완료되면 이제 해당 멤버의 읽기-쓰기 상태가 자동으로 처리됩니다. 단일 프라이머리 모드 그룹의 경우 프라이머리가 계속 프라이머리로 유지되게 하려면 마지막에 업그레이드해야 합니다. (WL #12826)
-
트랜잭션 중에 바이너리 로그 트랜잭션 및 명령문 캐시에 보관되는 데이터는 캐시를 저장하는 메모리 버퍼에서 암호화되지 않은 형식으로 존재합니다. 메모리 버퍼에서 사용 가능한 공간을 초과하면 데이터는 디스크의 임시 파일에 기록됩니다. MySQL 8.0.17부터 서버에서 바이너리 로그 암호화(
binlog_encryption=ON)가 활성 상태이면, 바이너리 로그 캐시에 사용되는 임시 파일이 이제 스트림 암호화를 위해 AES-CTR(AES Counter mode)을 사용하여 암호화됩니다. 임시 파일은 휘발성이며 단일 프로세스에 연결되어 있으므로, 무작위로 생성된 파일 암호와 초기화 벡터를 사용하는 단일 계층 암호화로 암호화되며, 이 파일 암호와 초기화 벡터는 메모리에만 존재하고 디스크나 keyring에 저장되지 않습니다. 각 트랜잭션이 커밋된 후 바이너리 로그 캐시는 재설정됩니다: 메모리 버퍼가 지워지고, 바이너리 로그 캐시를 보관하는 데 사용된 임시 파일이 잘리며, 다음 트랜잭션에 사용할 새 파일 암호와 초기화 벡터가 무작위로 생성됩니다. 이 재설정은 정상 종료 또는 예기치 않은 중단 이후 서버가 다시 시작될 때도 수행됩니다. (WL #12079) -
불완전한 SQL 술어는
WHERE value형식을 가지며, 여기서value는 컬럼 이름 또는 상수 표현식이고 비교 연산자는 사용되지 않습니다. MySQL은 이제 컨텍스트화 단계에서 이 유형의 모든 술어를 내부적으로WHERE value <> 0으로 다시 작성하므로, 쿼리 리졸버, 쿼리 옵티마이저, 쿼리 실행기는 완전한 술어만 처리하면 됩니다. 이 변경의 주된 가시적 효과는 Boolean 값의 경우EXPLAIN출력이 이제1및0이 아니라true및false를 표시한다는 점입니다. (WL #12358) -
대규모 데이터 세트에 대한
InnoDB병렬 읽기 스레드 성능은 읽기 스레드 활용 개선, 병렬 스캔 중 발생하는 프리페치 활동에 대한 읽기 스레드 I/O 감소, 파티션 병렬 스캔 지원을 통해 개선되었습니다.병렬 읽기 스레드 기능은
innodb_parallel_read_threads변수로 제어됩니다. 최대 설정값은 이제 256이며, 이는 모든 클라이언트 연결에 대한 총 스레드 수입니다. 스레드 한도에 도달하면 연결은 단일 스레드 사용으로 폴백합니다. (WL #12978) -
mysqlbinlog는 이제 클라이언트/서버 프로토콜에서 압축을 활성화하기 위해
--compress(또는-C) 옵션을 지원합니다. (WL #2726)
수정된 버그
-
NDB Cluster: 포함된 compile_cluster 빌드 스크립트를 사용한 NDB Cluster 컴파일 시간이 MySQL Cluster 실행에 반드시 필요하지 않은 소프트웨어 컴포넌트에 대한 옵션을 제거하여 개선되었습니다. (Bug #29355872)
-
NDB Cluster:
ALTER TABLE ALGORITHM=INPLACE를 사용하여NDB테이블의 컬럼 속성(예:COLUMN_FORMAT)을 변경하려는 시도는 거부되었으며, 이는 올바른 동작이지만 오해의 소지가 있는 오류 메시지를 발생시켰습니다. (Bug #28929906, Bug #27645777) -
InnoDB: 로우 수 계산을 실행 중인 프로세스를 kill하려고 할 때 실패가 발생했습니다. (Bug #29939617)
-
InnoDB: MySQL 8.0.14에서 도입된 회귀로 인해, 대소문자를 구분하는 파일 시스템에서 MySQL 5.7 또는 MySQL 8.0.14 이전 MySQL 8.0 릴리스에서 MySQL 8.0.16으로 인플레이스 업그레이드할 때 파티션된 테이블과
lower_case_table_names=1이 있는 인스턴스에서 실패했습니다. 이 실패는 파티션된 테이블 파일 이름과 관련된 대소문자 불일치 문제로 인해 발생했습니다. 이 회귀를 도입한 수정 사항은 되돌려졌으며, 이로 인해 MySQL 5.7 또는 MySQL 8.0.14 이전 MySQL 8.0 릴리스에서 MySQL 8.0.17로의 업그레이드가 정상적으로 작동할 수 있습니다. 그러나 이 회귀는 MySQL 8.0.14, 8.0.15, 8.0.16 릴리스에는 여전히 존재합니다.대소문자를 구분하는 파일 시스템에서 MySQL 8.0.14, 8.0.15 또는 8.0.16에서 MySQL 8.0.17로 인플레이스 업그레이드하는 경우, 파티션된 테이블이 있고
lower_case_table_names=1이면 바이너리 또는 패키지를 MySQL 8.0.17로 업그레이드한 후 서버를 시작할 때 다음 오류와 함께 실패합니다:Upgrading from server version version_number with partitioned tables and lower_case_table_names == 1 on a case sensitive file system may cause issues, and is therefore prohibited. To upgrade anyway, restart the new server version with the command line option 'upgrade=FORCE'. When upgrade is completed, please execute 'RENAME TABLE part_table_name TO new_table_name; RENAME TABLE new_table_name TO part_table_name;' for each of the partitioned tables. Please see the documentation for further information.MySQL 8.0.17로 업그레이드할 때 이 오류가 발생하면, 다음 우회 방법을 수행하십시오:
-
업그레이드 작업이 진행되도록 강제하려면
--upgrade=FORCE로 서버를 다시 시작하십시오. -
소문자 파티션 이름 구분 기호
(#p#또는#sp#)가 있는 파티션된 테이블 파일 이름을 식별하십시오:SELECT FILE_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME LIKE '%#p#%' OR FILE_NAME LIKE '%#sp#%'; -
식별된 각 파일에 대해, 연결된 테이블을 임시 이름을 사용하여 이름 변경한 다음, 테이블 이름을 원래 이름으로 다시 변경하십시오.
mysql> RENAME TABLE table_name TO temporary_table_name; mysql> RENAME TABLE temporary_table_name TO table_name; -
소문자 파티션 이름 구분 기호가 있는 파티션된 테이블 파일 이름이 없는지 확인하십시오(빈 결과 집합이 반환되어야 합니다).
mysql> SELECT FILE_NAME FROM INFORMATION_SCHEMA.FILES -> WHERE FILE_NAME LIKE '%#p#%' OR FILE_NAME LIKE '%#sp#%'; Empty set (0.00 sec) -
이름이 변경된 각 테이블에서
ANALYZE TABLE을 실행하여mysql.innodb_index_stats및mysql.innodb_table_stats테이블의 Optimizer 통계를 업데이트하십시오.
MySQL 8.0.14, 8.0.15 및 8.0.16 릴리스에 여전히 존재하는 회귀 때문에,
lower_case_table_names=1인 대소문자 구분 파일 시스템에서 MySQL 8.0.14, 8.0.15 또는 8.0.16의 파티션된 테이블을 MySQL 8.0.17로 임포트하는 것은 지원되지 않습니다. 이를 시도하면 “Tablespace is missing for table” 오류가 발생합니다. (Bug #29823032, Bug #29917793, Bug #95834)참조: 이 문제는 다음의 회귀입니다: Bug #26925260.
-
-
InnoDB: lock-wait 함수(
lock_wait_suspend_thread()및lock_wait_table_release_slot())로 인해 발생한lock_sysmutex 경합이 감소했습니다. (Bug #29814339) -
InnoDB: 세그먼트가 예약한 페이지 수를 결정하는
fseg_n_reserved_pages_low()함수가 세그먼트 inode에서 읽은 결과를 검증하지 않았습니다. (Bug #29761998) -
InnoDB: 서로 다른 latching 스키마를 사용할 수 있도록, 트랜잭션 롤백 목록(
hit_list) 생성이 잠금 획득 호출(lock_rec_lock호출)과 분리되었습니다. (Bug #29753800) -
InnoDB: Performance Schema consumer를 비활성화하면
ALTER TABLESPACE... ENCRYPTION작업에서 assertion이 발생했습니다. (Bug #29646974, Bug #95005) -
InnoDB: MySQL 8.0에서 사용되지 않는
.frm파일에 대한 참조를 제거하도록 오류 메시지가 수정되었습니다. (Bug #29639655) -
InnoDB: undo 테이블스페이스가 완전히 초기화되고 암호화 플래그가 설정되기 전에, 백그라운드 스레드가 undo 테이블스페이스의 암호화 상태를 확인할 수 있었습니다. (Bug #29600309)
-
InnoDB: 직렬화된 딕셔너리 정보(SDI) 테이블 이름을 파싱할 때 테이블 이름 파싱 함수 호출이 false를 반환했으며, 해당 이름은 데이터베이스 이름을 포함하도록 형식화되어 있지 않았습니다. 데이터베이스 이름을 보관하는 버퍼가 초기화되지 않은 상태로 남아 Valgrind 오류가 발생했습니다. (Bug #29550527)
-
InnoDB: 동적 메타데이터 로깅을 위해 mini-transaction (mtr) 로그 버퍼에 예약된 공간이 충분하지 않았습니다. (Bug #29524260)
-
InnoDB: Contention-Aware Transaction Scheduling (CATS) 구현의 부정확성으로 인해 MySQL의 UBSan 빌드에서 signed integer overflow 오류가 발생했습니다. (Bug #29508517, Bug #91959)
-
InnoDB: rw-lock 구현의 메모리 배리어가 충분하지 않아 ARM에서 데드락이 발생했습니다.
기여해 주신 Arm Technology의 Yibo Cai에게 감사드립니다. (Bug #29508001, Bug #94699)
-
InnoDB: undo 테이블스페이스 암호화를 활성화한 후
INFORMATION_SCHEMA.INNODB_TABLESPACESENCRYPTION컬럼이 업데이트되지 않았습니다. (Bug #29492911, Bug #94665) -
InnoDB: 슬래시 문자(/)가 포함된 스키마 또는 테이블 이름을 잘못 파싱하여 재배치된 테이블에 액세스할 수 없었으며, 서버는 이를 디렉터리 구분자로 잘못 해석했습니다. (Bug #29492113)
-
InnoDB:
InnoDBmemcached 소스 코드에 다양한 수정 및 개정이 적용되었습니다. (Bug #29485891) -
InnoDB: 전역 접근을 활성화하기 위해,
innodb_directories변수의 값은 이제 정적 변수 대신 전역 변수로 내부에 저장됩니다. (Bug #29471990) -
InnoDB: 디버그 빌드에서
thd_innodb_tmpdir()함수가 NULL 인수를 허용하지 않았습니다. (Bug #29471846) -
InnoDB: 파일 공간 할당 코드의 빼기 연산이 결과를 부호 없는 변수로 잘못 저장하여, assertion 실패를 발생시켰습니다. (Bug #29466680)
-
InnoDB: 기본 undo 테이블스페이스를 이동하거나 삭제하고 새
innodb_undo_directory값으로 서버를 재시작한 후, MySQL은 새 위치에 undo 테이블스페이스를 다시 생성했지만 데이터 딕셔너리의 undo 디렉터리 경로를 업데이트하지 못했습니다. (Bug #29461900) -
InnoDB: 복구 중 트랜잭션을 롤백하는 동안 이전에 해제된 LOB 페이지에 접근했습니다. (Bug #29440408)
-
InnoDB: 읽을 페이지가 없을 때 복구 중 페이지를 버퍼 풀로 읽어 들이기 위한 요청이 발행되었습니다. 불필요한 읽기 요청을 피하기 위해 검사가 추가되었습니다. (Bug #29440208)
-
InnoDB: MySQL 8.0.14에서 도입된 회귀로 인해
lower_case_table_names=1이 설정된 MySQL 인스턴스에서 파티션된 테이블을 생성할 때 “Invalid (old?) table or database name” 오류가 발생했습니다. 회귀를 유발한 변경 사항은 되돌려졌습니다. (Bug #29426720, Bug #94519)참조: 이 문제는 다음의 회귀입니다: Bug #26925260.
-
InnoDB: 이름에 하이픈이 있는 데이터베이스에서 MySQL 5.6으로 생성된
FULLTEXT인덱스 테이블이 MySQL 5.7에서 MySQL 8.0으로 업그레이드한 후 시작 실패를 유발했습니다.FULLTEXT보조 테이블에 대한 테이블스페이스 파일 경로가 데이터 딕셔너리에서 발견되지 않았으며, 데이터베이스 이름의 하이픈이 이후 생성된 파일 경로에서 올바르게 처리되지 않았습니다. (Bug #29411899, Bug #94431) -
InnoDB: redo 로그가 논리적으로 비어 있지 않고 단일 블록으로 구성되어 있으며, insert buffer merge가 새 redo 레코드를 생성한 후 새 레코드를 디스크에 플러시할 수 있기 전에 복구 중 서버가 종료되는 경우 데이터 손실이 발생할 가능성이 있었습니다. (Bug #29411832, Bug #94448)
-
InnoDB: Windows에서 경로와 파일 이름이
MAX_PATH제한을 초과하는 테이블스페이스를 생성하려고 할 때InnoDB가 알 수 없는 일반 오류를 반환했습니다. 이제InnoDB는 더 의미 있는 오류를 반환합니다. (Bug #29341634) -
InnoDB: 다른 디렉터리로 이동된 후 undo 테이블스페이스 파일을 찾을 수 없었습니다. (Bug #29328158)
-
InnoDB: 서버가
innodb_buffer_pool_size=default설정으로 시작하지 못했습니다. 기본값이 종속 시스템 변수 설정과의 호환성을 확인하지 않았습니다. (Bug #29267814, Bug #94065) -
InnoDB:
CREATE TABLESPACE... ADD DATAFILE절은 더 이상 순환 디렉터리 참조를 허용하지 않습니다. 예를 들어, 다음 문장의 순환 디렉터리 참조(/../)는 허용되지 않습니다:CREATE TABLESPACE ts1 ADD DATAFILE ts1.ibd 'any_directory/../ts1.ibd';이 제한에는 Linux에서 예외가 있으며, 앞의 디렉터리가 symbolic link인 경우 순환 디렉터리 참조가 허용됩니다. 예를 들어, 위 예의 데이터 파일 경로는
any_directory가 symbolic link인 경우 허용됩니다. (데이터 파일 경로가 '../'로 시작하는 것은 여전히 허용됩니다.)업그레이드 문제를 방지하려면 MySQL 8.0.17 이상으로 업그레이드하기 전에 테이블스페이스 데이터 파일 경로에서 모든 순환 디렉터리 참조를 제거하십시오. 테이블스페이스 경로를 검사하려면
INFORMATION_SCHEMA.INNODB_DATAFILES테이블을 쿼리하십시오. (Bug #29157265) -
InnoDB: MySQL 서버가 실행 중인 동안 시스템 시간을 수동으로 변경하면 page cleaner 스레드 지연이 발생했습니다. (Bug #29138644, Bug #93708)
-
InnoDB:
UPDATE문은 오류가 발생할 때 semi-consistent read를 항상 올바르게 비활성화하지 않았으며, 이로 인해 debug 모드에서 assertion 오류가 발생할 수 있었습니다. (Bug #29047894) -
InnoDB: 삭제된 로우를 purge할 때, 잠금 상속을 관리하는 로직이 활성 트랜잭션의 제약 조건 검사를 충족하기 위해 상속되어야 하는 잠금 유형을 올바르게 결정하지 않았습니다. (Bug #29004362)
-
InnoDB:
LOCK TABLES모드에서 prepared statement를 실행할 때 암시적으로 열린 데이터 딕셔너리 테이블에 불필요한 read lock이 수행되었습니다. (Bug #28875646) -
InnoDB: 로그 적용 중
OPTIMIZE TABLE작업 후,InnoDB는 가상 컬럼 인덱스 업데이트를 확인하기 전에 가상 컬럼을 채우지 않았습니다. (Bug #28834208) -
InnoDB: 클러스터형 인덱스에서 데이터를 복사하는 작업이 잘못 수행되어, 공간 인덱스가 클러스터형 인덱스에 대한 오래된 포인터가 있는 공간 로우를 사용하게 되었습니다. (Bug #28758961)
-
InnoDB: 생성된 가상
BLOB컬럼과 관련된INSERT작업으로 인해 보조 인덱스가 잘못된 값으로 업데이트되었습니다. (Bug #28652826) -
InnoDB:
SET PERSIST_ONLY = default를 사용하여innodb_data_file_path및innodb_temp_data_file_path를 설정하면 변수 값이 잘못 NULL로 설정되었습니다. (Bug #28590014) -
InnoDB:
CREATE TABLE... REPLACE SELECT작업에서lock_rec_get_rec_not_gap(lock)어설션 실패가 발생했습니다. 이 작업은REPLACE작업이 요청되었음을 나타내는 플래그를 트랜잭션 객체에 설정했지만, 종속 뷰를 업데이트하기 전에 해당 플래그를 지우지 않았으며, 이로 인해 이후의INSERT작업이REPLACE작업으로 해석되어 잘못된 로우 잠금이 획득되었습니다. (Bug #28523025, Bug #92068) -
InnoDB:
super_read_only가 활성화된 상태에서 임시 테이블에 대해RENAME TABLE작업을 시도하면 오류를 반환하는 대신 assertion이 발생했습니다. (Bug #28490368, Bug #91975) -
InnoDB: 가상 인덱스 prefix 검색 중 초기화되지 않은 바이트를 읽어 Valgrind 오류가 보고되었습니다. (Bug #28184025)
-
InnoDB: 크기가 2GB보다 큰 시스템 테이블스페이스를 생성하려고 할 때
InnoDB초기화가 실패했습니다. (Bug #27538464) -
InnoDB: 데이터가 동기화될 때 획득한 full-text 캐시 잠금이 full-text 캐시 크기가 full-text 캐시 크기 제한을 초과한 경우 해제되지 않았습니다. (Bug #25289359)
-
InnoDB:
INNODB_METRICSmetadata_table_reference_count카운터가 음수 값을 보고했습니다. (Bug #20584149, Bug #75966) -
InnoDB: 동시 insert 작업을 수행하는 동안 서로 다른
auto_increment_increment값을 사용하는 클라이언트 세션으로 인해 중복 키 오류가 발생할 수 있었습니다. (Bug #15851528, Bug #67526)참조: 되돌린 패치: Bug #14049391, Bug #65225.
-
파티셔닝: 파티셔닝된 테이블의 경우,
ALTER TABLE문은 다음 조건에서 잘못된 쿼리 결과를 발생시킬 수 있었습니다:- 해당 문이
RENAME COLUMN을 직접 사용하거나DROP COLUMN/ADD COLUMN을 사용한 교체를 통해 컬럼을 이름 변경하여 서로 바꾸었습니다. - 서로 바뀐 컬럼이 파티셔닝 표현식에서 사용되었습니다.
- 변경이 파티션 간에 로우를 재분배하지 않는 in-place 작업으로 수행되었습니다.
이제 이러한 컬럼 이름 변경은 동일한
ALTER TABLE문이 다음 조건 중 하나를 충족하지 않는 한 금지됩니다:- 해당 문이 테이블을 비파티셔닝 테이블로 만듭니다.
- 해당 문이 테이블 파티셔닝 또는 파티셔닝 표현식을 다시 정의합니다(이는 로우를 재분배하는 테이블 재빌드를 발생시킵니다). 이를 통해 파티셔닝 표현식이 컬럼 이름 변경을 따르도록 업데이트되는 기존 시나리오를 지원할 수 있습니다.
- 빈 컬럼 목록과 함께
PARTITION BY KEY()를 사용하여 파티셔닝이 지정됩니다. 이는 컬럼 이름 변경을 추적하는 프라이머리 키를 사용하여 파티셔닝합니다.
(Bug #29541665, Bug #94792)
- 해당 문이
-
파티셔닝: 파티셔닝된 테이블에 서로 다른 로우 형식을 사용하는 파티션이 있을 때, 교환할 파티션이 파티셔닝되지 않은 테이블과 동일한 로우 형식을 사용하더라도
ALTER TABLE... EXCHANGE PARTITION이 Non matching attribute 'ROW_FORMAT' between partition and table 오류와 함께 실패했습니다. (Bug #28687608) -
Replication: 한 MySQL 서버 인스턴스에서 생성된 이벤트가 다른 인스턴스의 바이너리 로그에 기록될 때, 두 번째 서버는 첫 번째 서버가 자신과 동일한 수의 바이너리 로그 이벤트 타입을 지원한다고 암묵적으로 가정했습니다. 이것이 해당되지 않는 경우 이벤트 헤더가 잘못 처리되었습니다. 이 문제는 이제 수정되었습니다. 기여해 주신 Facebook에 감사드립니다. (Bug #29417234, Bug #94500)
-
Replication:
LOCK INSTANCE FOR BACKUP문을 사용하여 인스턴스 수준 백업 잠금을 획득한 다음STOP SLAVE문이 실행되면, SQL 스레드가 백업 잠금에서 대기하고STOP SLAVE문이 SQL 스레드가 현재 작업을 완료하기를 대기하는 데드락이 생성될 수 있었습니다. 이 상황을 방지하기 위해, 이제STOP SLAVE프로세스는 계속 진행하기 전에 백업 잠금을 획득하려고 시도하며, 잠금을 획득할 수 없으면 오류를 반환합니다. (Bug #29386503, Bug #93649) -
Replication: MySQL 8.0.13부터 복제 채널에 열린 임시 테이블이 있으면,
SET @@global.binlog_format또는SET @@persist.binlog_format을 사용하여 바이너리 로깅 형식을 변경할 수 없습니다. 이전에는 새 제한이 구현된 후 이 작업을 시도하면 잘못된 오류 메시지가 클라이언트에 반환되었습니다(열린 임시 테이블이 아니라 실행 중인 복제 채널 어플라이어를 문제로 참조했습니다). 이제 적절한 오류 메시지가 반환됩니다. (Bug #29370024, Bug #94340) -
Replication: format description event를 역직렬화할 때 바이너리 로그 체크섬이 잘못 처리되었습니다. (Bug #29355110)
-
Replication: 로우 기반 복제가 사용 중일 때, 복제 applier 스레드가 로우 변경 이벤트를 언패킹하면 모든 functional index의 인덱스 값이 “before” 이미지와 “after” 이미지 모두에 대해 계산되었습니다. “before” 이미지의 경우 해당 값은 필요하지 않았습니다. 따라서 로우 언패킹을 최적화하기 위해 before 이미지에 대한 이 계산이 제거되었습니다. (Bug #29304076)
-
Replication: 서버 재시작 후 마스터에서
MEMORY테이블이 암시적으로 삭제될 때, 마스터는 슬레이브도 해당 테이블을 비우도록 바이너리 로그에DELETE문을 기록합니다. 이제 생성된 이 이벤트에는DELETE문의 이유를 쉽게 식별할 수 있도록 바이너리 로그에 주석이 포함됩니다. 기여해 주신 Daniël van Eeden에게 감사드립니다. (Bug #29157796, Bug #93771) -
Replication:
SHOW BINLOG EVENTS FROM문에 잘못된 시작 오프셋이 제공된 경우, 첫 번째로 반환된 이벤트의 올바른 시작 위치 대신 잘못된 오프셋이 반환되었습니다. (Bug #29039732, Bug #93544) -
복제:
slave_rows_search_algorithms시스템 변수에INDEX_SCAN,HASH_SCAN값(MySQL 8.0의 기본값)이 설정되어 있고, 고유 키가 없어 해시 스캔이 사용되는 테이블의 동일한 로우에 대한 두 개의 업데이트가 업데이트 이벤트에 포함된 경우, 복제가 “record not found” 오류와 함께 중지될 수 있었습니다. 이 상황에서는 로우 변경으로 인해 해시 스캔이 두 번째 업데이트를 찾지 못했습니다. 이제 로우를 업데이트한 후 해시 스캔 작업은 해시 맵에서 업데이트된 로우를 검색하고, 추가 업데이트가 있으면 적용합니다.slave_rows_search_algorithms시스템 변수에TABLE_SCAN,HASH_SCAN값이 설정되어 검색에서 인덱스를 사용할 수 없는 경우, 위 상황에서 테이블에 고유 키가 있는지 여부와 관계없이 “record not found” 오류가 발생할 수 있습니다. 또한 이 설정에서는 고유 키가 있는 테이블에서 해시 스캔이 사용될 때, 순서에 의존하는 두 개의 로우 업데이트가 포함된 업데이트 이벤트의 경우 업데이트가 순서와 다르게 적용되어 복제가 중복 키 오류와 함께 중지될 수 있습니다. 이러한 문제를 방지하기 위해TABLE_SCAN,HASH_SCAN값을 사용하지 않아야 한다고 명시하도록 문서가 업데이트되었습니다. (Bug #28846386) -
Replication: 슬레이브에서 바이너리 로깅이 활성화된 경우, 슬레이브의
--replicate-same-server-id옵션과--log-slave-updates옵션의 조합은 서버가 순환 복제 토폴로지의 일부이면 복제에서 무한 루프를 발생시킬 수 있습니다. (MySQL 8.0에서는 바이너리 로깅이 기본적으로 활성화되며, 바이너리 로깅이 활성화된 경우 슬레이브 업데이트 로깅이 기본값입니다.) 그러나 전역 트랜잭션 식별자(GTID)를 사용하면 이미 적용된 트랜잭션의 실행을 건너뛰어 이 상황을 방지합니다. 따라서 이제gtid_mode=ON이 설정된 경우 이 옵션 조합에 대한 제한이 제거되었습니다. 다른 모든 GTID 모드에서는 이 옵션 조합으로 서버가 여전히 시작되지 않습니다. 서버가 시작된 후 문제 상황이 만들어지는 것을 방지하기 위한 안전장치로, 이제 이 옵션 조합이 설정된 실행 중인 서버에서는 GTID 모드를ON이 아닌 다른 값으로 변경할 수 없습니다. 기여해 주신 Facebook에 감사드립니다. (Bug #28782370, Bug #92754) -
Replication: 바이너리 로그의 쿼리 로그 이벤트에서
DROP TABLE및DELETE문 실행에 사용된 스레드 ID가 잘못 식별되거나 전혀 식별되지 않았습니다. 임시 테이블이 관련된 멀티스레드 복제 슬레이브에서는(임시 테이블은 세션별로 다르므로 올바른 스레드 ID가 필요합니다), 이러한 누락으로 인해 point-in-time recovery를 위해 mysqlbinlog를 사용하여 바이너리 로그를 재생할 때 오류가 발생했습니다. 이제 스레드 ID가 올바르게 설정됩니다. (Bug #28642318, Bug #92398) -
Replication: 트리거가 컬럼을 해당 기본값으로 설정하는
INSERT또는UPDATE문을 호출하고, 해당 컬럼의DEFAULT표현식이 비결정적인 경우, 문 기반 복제에서 트리거가 실행될 때 예상된 경고가 발생하지 않았습니다. 또한 바이너리 로깅 형식이MIXED인 경우, 비결정적 문은ROW에 사용되는 형식이 아니라STATEMENT에 사용되는 형식으로 기록되었습니다.트리거가 실행되도록 하는 문은 해석 시점에 트리거된 문 중 비결정적인 문이 있는지 확인합니다. 이 시점에는 트리거된 문이 파싱되었지만 해석되지는 않았으므로, 수행할 수 있는 유일한 검사는 트리거된 문이 비결정적 연산자를 직접 참조하는지 여부입니다. 비결정적 연산자가
DEFAULT표현식에서 사용되는 경우, 비결정성은 트리거된 문이 해석될 때까지 보이지 않으며, 이는 트리거가 실행될 때 발생합니다.로깅 형식을 결정할 때 추가 검사를 더하여 이 문제가 수정되었습니다. 이 검사에서는 하위 명령문 중 하나라도 비결정적
DEFAULT표현식이 있는 컬럼을 가진 테이블에 쓸 수 있으면 해당 명령문이 안전하지 않은 것으로 플래그 지정됩니다. 이 시점에는DEFAULT표현식이 하위 명령문에서 사용될지 아직 알 수 없으므로, 이 검사는 하위 명령문이 비결정적DEFAULT표현식이 있는 컬럼에 대해 명시적 값을 제공하는 경우에도 해당 명령문을 안전하지 않은 것으로 플래그 지정합니다. (Bug #28297486) -
Replication: 슬레이브 서버가 마스터 상태 및 연결 정보를 테이블(
master_info_repository=TABLE)에 기록할 때, 이는 MySQL 8.0의 기본값이며, 서버가 super read only 모드(super_read_only=ON)인 경우 종료 시mysql.slave_master_info테이블이 업데이트되지 않았습니다. 이때 오류 로그에는 오류가 기록되지 않았지만, 마스터 로그 파일 및 마스터 로그 위치 정보가 오래되어 서버 시작 후 복제가 실패했습니다. 종료 시 마스터 정보 로그를 업데이트하는 스레드는 이제 다른 복제 스레드와 마찬가지로 읽기 전용 검사에서 제외되므로, 서버가 super read only 모드인 경우에도 테이블을 업데이트할 수 있습니다. 종료 중인 슬레이브에 대한 오류 처리도 개선되어 슬레이브 상태 로그에 쓰는 데 실패하면 오류 로그에 오류가 기록됩니다. (Bug #27675107, Bug #89987) -
Replication: 복제 슬레이브가 잘못된 사용자 이름, 호스트 또는 포트를 사용하여 마스터에 연결하려고 하면, 연결 실패 이유를 지정하는 원래 오류 메시지가 일반 메시지로 덮어써졌습니다. 이제 이 문제는
SHOW SLAVE STATUS문의 출력과 Performance Schema 테이블replication_connection_status에서 수정되었습니다. (Bug #26580064) -
Group Replication: 대용량 Group Replication 메시지에 메시지 조각화가 사용 중일 때(MySQL 8.0.16부터 사용할 수 있으며 기본값입니다), XCom에서 가장 높은 노드 식별자를 가진 그룹 멤버가 보낸 조각화된 메시지가 부분적으로 전달되고, 이후 나머지 메시지 조각이 전달되기 전에 하나 이상의 멤버가 그룹을 떠나면, 메시지 재조립으로 인해 Group Replication이 작동을 중지했습니다. 멤버가 사라짐에 따라 원래 발신자의 노드 식별자는 그룹의 새 뷰에서 더 이상 유효하지 않게 되었습니다. 이 문제를 수정하기 위해, 이제 조각화된 메시지의 재조립은 뷰 변경 이전의 이전 상황을 반영하는 처음 전달된 조각의 전달 정보가 아니라, 뷰 변경 이후의 새 상황을 반영하는 마지막으로 전달된 조각의 전달 정보를 사용합니다. (Bug #29716639)
-
Group Replication: 그룹 멤버 수와 auto-increment 간격 사이의 불일치에 대해 발행되는 오류 메시지가
auto_increment_increment시스템 변수가 아니라group_replication_auto_increment_increment시스템 변수를 잘못 참조했습니다. Group Replication이 시작될 때auto_increment_increment의 값은group_replication_auto_increment_increment에 지정된 값으로 변경되지만, 이는auto_increment_increment와auto_increment_offset이 기본값을 가지는 경우에만 해당하며, MySQL 8.0부터는 multi-primary 모드에서만 해당합니다.auto_increment_increment의 값은 항상 오류 메시지에 대해 검사된 값이었으며, 이제 정확한 시스템 변수 이름을 제공하도록 수정되었습니다. (Bug #29542425) -
Group Replication:
MINIMAL옵션(--upgrade=MINIMAL)을 사용하는 MySQL Server 업그레이드 후에는 Group Replication을 시작할 수 없으며, 이 옵션은 이 기능이 의존하는 시스템 테이블을 업그레이드하지 않습니다. 이전에는 이 상황에서 서버가 Group Replication 시작을 무기한 기다렸습니다. 이제 대기 중인 스레드의 차단을 해제하고 예상된 오류ER_GRP_RPL_START_GRP_RPL_FAILED를 발생시켜 이를 올바르게 처리합니다. (Bug #29423358, Bug #94515) -
Group Replication: 그룹을 떠나는 멤버의 의심 처리 방식 변경으로 인해, 복구 실패와 뷰 변경 알림 사이의 순환 종속성 때문에 복구가 실패했습니다. 이제 오류로 인해 복구가 불가능해지면 Group Communication System은 이를 다음과 같이 처리합니다:
- 멤버가 그룹을 떠납니다
- 뷰 변경이 적용됩니다
- 복구 스레드가 종료됩니다.
(Bug #29417365, Bug #29628909)
-
Group Replication: Group Replication에서 참여하는 멤버는 그룹에 이미 동일한 버전의 멤버가 있더라도, 가장 높은 버전의 멤버를 포함한 다른 모든 멤버를 기준으로 검사했기 때문에 자신을 기존 복제 그룹과 호환되지 않는 것으로 잘못 식별할 수 있었습니다. 참여하는 멤버는 호환성 검사에 자신의 버전도 포함했습니다. 이제 참여하는 멤버는 기존 그룹 멤버 중 가장 낮은 버전의 멤버와만 자신을 비교하며, 자신의 버전은 계산에 포함하지 않습니다. (Bug #29390946, Bug #94429)
-
Group Replication: 온라인 그룹을 설정하는 함수가 실행 중 문제가 발생했을 때 때때로 오류를 반환하지 않았습니다. 이제 이러한 함수는 초기화를 시작하기 전에 Group Replication 플러그인이 중지 중인지도 검사합니다. (Bug #28978767, Bug #93372)
-
Group Replication: XCom 그룹 통신 엔진이 메모리 부족 오류를 적절한 방식으로 처리하지 않았습니다. 메시지의 페이로드 복사본을 만들기 위해 메모리를 할당할 수 없는 경우, 오류가 로그에 기록되었지만 메시지는 null 페이로드와 함께 그대로 전송되었습니다. 수신 멤버의 Group Communication System (GCS)은 메시지를 비어 있는 것으로 간주하여 폐기했으며, 수신 멤버의 XCom 인스턴스는 이 동작을 받아들이고 재시도하지 않아 결과적으로 메시지가 건너뛰어진 것과 같은 상태가 되었습니다. 이로 인해 수신 멤버의 GTID 세트가 그룹과 달라져 복제 오류가 발생했습니다. 이제 XCom은 메모리 부족 오류가 발생하면 정상적으로 종료되므로, 이러한 상황이 발생할 수 없습니다. (Bug #28702320)
-
macOS: DMG 패키지를 사용하여 수행한 macOS 설치의 경우, launchd 동작에 문제가 있었습니다:
- 이전에는 MySQL이 preference pane을 통해 부팅 시 시작되도록 설정된 경우
SHUTDOWN이 재시작을 일으켰습니다. 이는 mysqladmin shutdown 명령에도 영향을 주었습니다. 이제 이러한 방식으로 시작된 서버 종료가 올바르게 작동합니다. - 이전에는
RESTART가 작동하지 않았습니다. 이제 올바르게 작동합니다. - 이전에는 서버가 부팅 시 시작되도록 설정되지 않은 경우 예기치 않은 서버 종료가 자동 재시작을 일으키지 않았습니다. 이제 0이 아닌 종료 상태로 종료되면 부팅 시 시작 설정과 관계없이 재시작이 발생합니다.
(Bug #29789857)
- 이전에는 MySQL이 preference pane을 통해 부팅 시 시작되도록 설정된 경우
-
JSON:
MAX()및MIN()이JSON데이터를 반환하는 표현식에 사용될 때, 때때로 이러한 값을JSON값이 아니라 문자열로 비교하여 예기치 않은 결과가 발생했습니다. 이는JSON값이 숫자인 경우 특히 두드러졌습니다.이는 인덱스가 있는 임시 테이블을 사용할 때
GROUP BY가JSON값을 올바르게 비교하지 않았기 때문입니다. (Bug #28947381) -
JSON:
JSON_TABLE()은 저장 함수에서 실행될 때 Unknown database '' 오류를 반환했습니다.이 문제의 근본 원인은
JSON_TABLE()을 사용하는 select에서 테이블을 병합할 때 MySQL이 파생 테이블만 확인했다는 점이었습니다. 이로 인해JSON_TABLE()이 반환한 결과 테이블이 일반 테이블로 기록되었고, 따라서 쿼리를 실행하려고 할 때 서버가 이를 열지 못했습니다. 이제 MySQL은 추가할 테이블이 내부 테이블이 아닌지, 즉 파생 테이블,JSON_TABLE()결과 테이블 또는 재귀 공통 테이블 표현식에 대한 참조가 아닌지 확인합니다. (Bug #92976, Bug #28851656) -
GRANT문에 대한WITH ADMIN옵션이 때때로 올바르게 처리되지 않았습니다. (Bug #29900772) -
일부 외래 키 오류 메시지가 사용자에게
GRANT OPTION권한이 있는지 여부에 따라 달라질 수 있었습니다. (Bug #29868844) -
업그레이드 작업 중에 autocommit이 비활성화된 경우 도움말 테이블의 업그레이드가 실패했습니다. (Bug #29865428, Bug #95620)
-
업그레이드 중 작은
table_open_cache크기로 동작하는 동안 동적으로 할당된 딕셔너리 객체를 벡터로 가져오면 데이터 딕셔너리 테이블이 다시 열리면서, 수집된 객체를 잘못 해제하는 가비지 컬렉션 메커니즘이 트리거되었습니다. 이후 해제된 객체에 접근하려는 시도로 인해 세그멘테이션 폴트가 발생했습니다. (Bug #29823053) -
MySQL 5.7에서 8.0으로 업그레이드하는 경우, 업그레이드 프로세스가
mysql시스템 스키마의innodb_*_stats_backup57.ibd파일을 제거하기 전에 닫지 않아 이후 파일 시스템 작업에서 오류가 발생했습니다. (Bug #29791350) -
파일 시스템이 데이터 디렉터리 마운트 지점에 마운트되어 있고
lost+found파일 또는 디렉터리가 있는 경우 mysqld --initialize가 실패했습니다. 이제 데이터 디렉터리 초기화 중lost+found파일 또는 디렉터리가 무시됩니다. (Bug #29780434) -
MySQL 업그레이드가
SUPER권한을 가진 계정에AUDIT_ADMIN권한을 할당하지 않았습니다. (Bug #29770732) -
REGEXP_REPLACE()함수가 모든 경우에 빈 문자열을 올바르게 처리하지 않았습니다. (Bug #29763554) -
저장 프로그램 로컬 객체를 정렬하는 중 지나치게 엄격한 assertion이 발생할 수 있었습니다. (Bug #29759547, Bug #95062)
-
그룹의 통신 프로토콜 버전을 쿼리하는 데 사용되는
group_replication_get_communication_protocol()함수는 그룹 멤버 중 하나라도 RECOVERING 상태이면 실패했으며, 이는 불필요한 제한이었습니다. 이제 이 함수는 실행되는 멤버가 ONLINE 상태이고, 그룹의 과반수와 연결되어 있으면 사용할 수 있습니다. (Bug #29754967, Bug #95306) -
REPEAT()에 대한 일부 인수의 경우 최대 길이 계산이 항상 올바르게 처리되지는 않았습니다. (Bug #29739778) -
CHECK제약 조건이 있는 테이블에 대한UPDATE문이 제약 조건 적용에 실패할 수 있었습니다. (Bug #29706621, Bug #95189) -
RPM 또는 Debian 패키지에서 설치하는 경우, 데이터 디렉터리의
mysql_upgrade_info파일이 존재하지만root가 소유한 것으로 확인되면 이제 데이터 디렉터리와 동일한 소유자로 변경됩니다. 올바른 SELinux 파일 컨텍스트도 설정됩니다. (Bug #29704041) -
RPM 패키지에서 설치하면 권한이 잘못된 오류 로그가 생성될 수 있었습니다. (Bug #29702462)
-
group_replication_unreachable_majority_timeout설정에 도달하기 전에 그룹의 과반수와 접촉할 수 없었고, 이후group_replication_autorejoin_tries시스템 변수로 지정된 자동 재참여 시도 횟수를 성공적으로 재참여하지 못한 채 모두 소진한 복제 그룹 멤버가group_replication_exit_state_action시스템 변수로 지정된 동작을 수행하지 못하는 경우가 있었습니다. 해당 멤버는 현재 세션을 사용하여 동작을 수행하려고 시도하며, 이 작업이 실패하는 경우가 있었습니다. 이제 멤버는 종료 상태 동작을 수행하기 위해 서버에 연결하는 데 세션을 사용하기 전에 세션이 초기화되었는지 확인합니다. (Bug #29698754, Bug #95151) -
업그레이드를 수행할 때 데이터 딕셔너리 테이블을 업데이트하는 서버 측 SQL 문이 기본값이 아닌 콜레이션을 사용하여 업그레이드 실패가 발생했습니다. (Bug #29697670, Bug #95144)
-
--skip-grant-tables로 서버를 시작하고ROLES_GRAPHML()을 호출하면 서버가 종료될 수 있었습니다. (Bug #29681975) -
고정 길이 키를 사용할 때
SELECT DISTINCT가 모든 경우에 레코드를 올바르게 중복 제거하지 못했습니다. (Bug #29628699) -
비동기 C API 함수를 사용한 클라이언트 프로그램은 연결 실패 또는 너무 큰 패킷 수신과 같은 치명적 오류가 발생한 후 해제된 메모리에 접근할 수 있었습니다. (Bug #29596244)
-
ST_AsWKB()함수가 적절한 오류 검사를 수행하지 못할 수 있었습니다. (Bug #29594287) -
데이터 디렉터리 초기화가 실패한 경우, 서버가 해당 디렉터리를 직접 만들지 않았더라도 서버는 해당 디렉터리를 제거할 수 있음을 나타내는 메시지를 생성할 수 있었습니다. 이제 메시지는 서버가 만든 디렉터리 내 파일만 제거할 수 있음을 나타냅니다. (Bug #29594082, Bug #94880)
-
MySQL 8.0에서
keyring_encypted_file플러그인은 MySQL 5.7keyring_encypted_file플러그인이 만든 파일을 읽을 수 없었습니다. (Bug #29588345) -
Undefined Behavior Sanitizer가 활성화된 빌드에서
my_strtoll10_mb2()및val_decimal()에서 런타임 오류가 발생했습니다. (Bug #29585648, Bug #29594951) -
서버가 시작 시 grant 테이블 구조를 확인하는 동안 생성한 일부 진단 메시지가 경고가 아니라 오류로 기록되었습니다. (Bug #29558993)
-
comp_err 유틸리티가 초기화되지 않은 데이터를 읽을 수 있었습니다. (Bug #29550442)
-
audit log 암호화를 활성화하면 서버가 종료될 수 있었습니다. (Bug #29549327)
-
EL8에서 MariaDB에서 MySQL로 성공적으로 업그레이드할 수 있도록 RPM 패키지 obsoletes가 업데이트되었습니다. (Bug #29549127, Bug #29623146, Bug #29623201, Bug #29659212)
-
LEFT JOIN t ON column WHERE t.x=0 IS NOT TRUE형식의 조인에서 MySQL은 null-complemented 로우의NULL인수에 대해IS NOT TRUE를FALSE로 평가하고 이를 거부했습니다. 이로 인해 left join이 inner join으로 잘못 변환되어 결과에서 로우가 누락되었습니다. 같은 형식이지만WHERE조건에IS NOT FALSE가 있는 조인에도 동일한 문제가 영향을 주었습니다. (Bug #29540230) -
read_only시스템 변수가 활성화된 경우, 해당 값이 캐릭터셋 및 콜레이션 데이터 딕셔너리 테이블에 대한 업데이트에 부적절하게 적용되었습니다. (Bug #29533590, Bug #94769) -
함수
STATEMENT_DIGEST()및STATEMENT_DIGEST_TEXT()는 함수의 인수를 파싱하는 동안 인수의 캐릭터셋 대신character_set_client를 사용했습니다. (Bug #29526571) -
이제 서버는 데이터 딕셔너리 테이블이 변경될 때
INFORMATION_SCHEMA뷰가 다시 생성되도록 데이터 딕셔너리 업그레이드를 추적합니다. (Bug #29513265) -
STATEMENT_DIGEST()또는STATEMENT_DIGEST_TEXT()를 실행하면performance_schema.events_statements_summary_by_digest테이블의 데이터에 의도하지 않은 부작용이 발생할 수 있었습니다. (Bug #29512067) -
CREATE TABLE에 대한 구현은 seek 또는 write가 수행되지 않은 경우 테이블에 명확히 정의된 시작 커서를 제공하지 않았습니다. (Bug #29511318) -
테이블이
const최적화될 때, 조인의ON조건에 있는 모든 predicate term도const로 표시된 테이블에서 평가되어 해당 로우가ON조건에 적합한지 확인해야 합니다.Optimizer는 불가능한
ON조건을 가진 것으로 처리된 경우 테이블을const로 표시하지 못했으며, 이 경우 이 테이블에서 생성되는 로우는NULL확장 로우입니다.이 수정은 테이블에 대해
const_table플래그를 설정하고 로우를NULL로우로 표시합니다. 또한 불가능한 ON 조건을 가진 것으로 최적화된 테이블에 대한EXPLAIN출력을 변경하여, 다른const로우와 마찬가지로 이 로우에서 생성되는NULL값이 이제 rows 컬럼 값으로 전파됩니다. (Bug #29493830) -
optimizer_switch에firstmatch=on이 포함되지 않은 경우,IN서브쿼리를 포함하는 쿼리가 불필요한 로우를 반환할 수 있었습니다. (Bug #29493026) -
RPM 패키지가 운영 체제가 EL6인지 EL7인지 감지하는 기능이 일부 시스템에서 실패했습니다. (Bug #29492896)
-
데이터 딕셔너리의 스토리지 엔진 전용 데이터 필드에 저장된 키에 대한 SQL 계층 검증은 스토리지 엔진이 필요에 따라 새 키를 추가할 수 있도록 비활성화되었습니다. 이제 스토리지 엔진은 키 검증을 담당합니다. (Bug #29491593, Bug #94667)
-
NULL검사는 로우를 비교하는 일부 표현식에 대해 잘못된 결과를 반환했습니다. (Bug #29491083) -
ORDER BY및LIMIT를 포함하는 테이블 조인을 최적화할 때 Optimizer는 전체 조인의 fanout을 고려하여 첫 번째 테이블의 select limit를 수정했습니다. fanout은 각 테이블의filter_effect를 사용하여 계산되었으며, 이는 알 수 없는 값을 나타내도록COND_FILTER_STALE(-1)로 설정될 수 있습니다. 이 값은 Optimizer에서 실제로 검사되지 않았으며, 이로 인해 음수 fanout이 발생할 수 있었고 쿼리에 대한EXPLAIN출력에서 예상치 못한 로우 값 0으로 이어졌습니다.이제
COND_FILTER_STALE(filter_effect가 알 수 없음)를 명시적으로 검사하며, 이 값이 발견되면 fanout도 알 수 없는 것으로 간주하고, 따라서 첫 번째 테이블에서 선택할 로우 수는 전체 조인의 fanout에 의해 수정되지 않습니다. (Bug #29487181, Bug #29531472) -
LEAST()및GREATEST()함수에 대해, 이 함수 중 어느 하나에 대한 인수가 모두 signed 값이거나 모두 unsigned 값이라는 암묵적 가정이 있었습니다. (Bug #29467577) -
BIT_OR()함수의 일부 인수가 항상 올바르게 처리되지는 않았습니다. (Bug #29459549) -
디버그 빌드의 경우,
mysql.user시스템 테이블의user_attributes컬럼을 잘못 처리하면 서버 종료가 발생할 수 있었습니다. (Bug #29451897) -
MySQL Cluster 전용 Debian 디버그 패키지에 디버그 심볼에 대한 경로가 잘못 지정되어 있었습니다. (Bug #29446947)
-
Protobuf 3.7.0으로 빌드할 때 컴파일 실패가 발생했습니다. (Bug #29436791, Bug #94543)
-
Debian 및 Ubuntu에서 MySQL 패키지는 네이티브 MySQL 패키지에서 업그레이드한 후
mysql.service를 활성화하지 않았습니다. (Bug #29435592) -
서버는 오류가 발생했을 때 공유 메모리 연결을 올바르게 닫지 않았으며, 이로 인해 예상치 못한 서버 동작이 발생할 수 있었습니다. (Bug #29435426)
-
내부
JOIN_CACHE::join_record()메서드는 진입 시 상태를 저장하고 완료 시 적절한 플래그를 복원하여, 이 메서드가 작동한 모든 테이블을has_row및null_row플래그와 관련하여 동일한 상태로 유지하려고 했습니다.여기서 처리된 문제는 이러한 플래그가 복원된 후에 발생했으며, 이는 처리된 레코드를 복원하기 위해
restore_last_record()도 호출되었기 때문입니다. 이로 인해 저장된 상태를 기반으로 방금 복원된null_row플래그가 다시 설정될 수 있었습니다. 이 문제는 저장된 상태가 복원된 후가 아니라 그 전에restore_last_record()를 호출하고, 저장된 상태가 시작 시점에null_row플래그가 설정되지 않았음을 나타내는 경우reset_null_row()도 호출되도록 보장하여 수정되었습니다. (Bug #29435133) -
ADD COLUMN을 사용하는 일부ALTER TABLE문이 예상대로 수행되지 않았습니다. (Bug #29428288)참조: 이 문제는 다음 버그의 회귀입니다: Bug #28333657.
-
네이티브 방식으로 파티셔닝되지 않은 테이블이 발견되었을 때 MySQL 5.7에서 MySQL 8.0으로 업그레이드하는 중 잘못된 오류 메시지가 보고되었습니다. 이 오류 메시지는 MySQL 8.0에서 지원되지 않는
-DWITH_PARTITION_STORAGE_ENGINECMake 빌드 옵션을 참조했습니다. (Bug #29426632, Bug #94518) -
시작 시 서버가 영구 변수에 있는 사용자 및 호스트 이름의 길이를 적절히 확인하지 않았습니다. (Bug #29420141)
-
파서가 특정 다중 문장 쿼리에서 메모리를 누수할 수 있었습니다. (Bug #29419820)
-
RPM 패키지에서 EL8에 MySQL을 설치하면 설치된 MeCab 라이브러리와 충돌이 발생했습니다. (Bug #29413115)
-
FreeBSD에서 치명적 신호에 대해 덤프된 스택 추적이 올바르게 작동하지 않았습니다. (Bug #29408039)
-
optimizer_switch시스템 변수의 값에서derived_merge스위치가 비활성화된 경우,INFORMATION_SCHEMA.TABLES에서 베이스 테이블에 대해 검색된 정보가TABLE_COMMENT컬럼에 부적절한 정보를 표시했습니다. (Bug #29406053, Bug #94468) -
특정 경우에 하위 선택에서
ORDER BY를 사용하면 예상한 결과가 생성되지 않았습니다. (Bug #29402943) -
와일드카드를 사용하는
ROLLUP쿼리(그리고 특정 다른 와일드카드 쿼리도 가능성이 있음)가 어설션 오류를 발생시킬 수 있었습니다. (Bug #29396628) -
TRUE로 평가되는 상수를 가진IF함수 내부의 조건이 항상 올바르게 처리되지는 않았습니다. (Bug #29394833) -
전체 텍스트 검색과 관련된 MySQL 8.0.13의 코드 변경으로 인해 세그멘테이션 오류가 발생했습니다. (Bug #29393105)
-
mysqlpump는
--result-file에 대한 인수가 올바르게 열렸는지 확인하지 않았으며, 오류가 발생하면 예기치 않게 종료되었습니다. (Bug #29389828) -
조인이 없는 쿼리에서 초기화가 완료된 이후에야 배치 모드가 활성화되어,
OFFSET로우가 배치 모드 밖에서 읽혔습니다. 이로 인해 배치 모드에서 얻을 수 있는 성능 이점이 모두 상쇄되었습니다. (Bug #29373972) -
함수형 인덱스의 이름을 변경할 때, 서버가 중복 인덱스 이름이 발생할 가능성을 확인하지 않았습니다. (Bug #29360763)
-
시스템 변수 서비스가 일부 작업에 대해 입력 버퍼 크기를 확인하지 않았습니다. (Bug #29343505)
-
mysql시스템 스키마 덤프의 경우, mysqlpump가 특정 테이블을 계정 관리 문이 아니라 로우 단위로 덤프했습니다. (Bug #29343073) -
UNION서브쿼리에 함수형 인덱스를 생성하면 디버그 빌드에서 어설션이 발생했습니다. (Bug #29342245) -
AVG()에 대한 숫자가 아닌 인수가 항상 올바르게 처리되지는 않았습니다. (Bug #29321764) -
매우 많은 수의 컬럼이 있는 결과 집합으로 인해 클라이언트 프로그램이 사용 가능한 모든 메모리를 사용할 수 있었습니다. 이제 클라이언트 라이브러리는 결과 집합 메타데이터에 대해
max_allowed_packet바이트를 초과하여 할당하지 않으며, 이 제한을 초과하면 메모리 부족 오류를 반환합니다. 이 오류가 발생하면 치명적이며 클라이언트는 연결을 끊어야 합니다. (Bug #29316814) -
mysql_shutdown()호출은 서버와 클라이언트가 서로 다른 MySQL 시리즈에서 온 경우 반환 패킷 페이로드 오해석으로 인해 클라이언트가 종료되도록 할 수 있었습니다. (Bug #29315393) -
클라이언트 프로그램은 pre-MySQL 4.1 프로토콜을 사용하여 서버와 통신하는 경우 결과 집합 메타데이터를 읽는 동안 실패할 수 있었습니다. (Bug #29304864)
-
HANDLER문은 생성된 컬럼이 있는 테이블에서 항상 올바르게 작동하지 않았습니다. (Bug #29300049) -
클라이언트/서버 프로토콜의 세션 추적 정보가 잘못 처리될 수 있었습니다. (Bug #29297652)
-
libmysqlclientC 클라이언트 라이브러리를 사용하는 클라이언트 프로그램은 잘못된 형식의 세션 추적 정보가 포함된OK패킷을 수신하면 종료될 수 있었습니다. (Bug #29297620, Bug #29630735) -
PAD_CHAR_TO_FULL_LENGTHSQL 모드가 활성화된 경우, 경고나 오류가 보고되지 않은 채 비밀번호 변경이 실패했습니다. (Bug #29287785) -
keyring_aws플러그인의 로드 가능한 함수 초기화 코드는 플러그인이 초기화되었는지 제대로 확인하지 않았습니다. (Bug #29278153) -
스칼라 서브쿼리가 집계 함수 또는 윈도우 함수와 비교될 때 항상 올바르게 식별되고 처리되지는 않았습니다. (Bug #29276063)
-
Ubuntu 패키지는 초기화 스크립트에 대해 바이너리 로깅을 비활성화하지 않았습니다. (Bug #29263771)
-
내부 콜레이션 맵은 유효하지 않은 콜레이션 이름 사용으로 인해 손상될 수 있었습니다. (Bug #29258979)
-
인덱스된 표현식을 사용한 단일 테이블
UPDATE및DELETE문은 prepared statement로 실행될 때 서버가 종료되도록 할 수 있었습니다. (Bug #29257254) -
audit_log플러그인은UNINSTALL PLUGIN audit_log문을 로깅하지 않았습니다. (Bug #29248047) -
MySQL은 이제 즉시 링크 해제되는 임시 파일을 생성할 때 적용 가능한 경우마다
open(O_TMPFILE)을 사용합니다. 이는 이전보다 더 효율적이며 race condition이 발생할 작은 가능성을 방지합니다. 기여해 주신 Daniel Black에게 감사드립니다. (Bug #29215177, Bug #93937) -
audit_log필터링 작업에서 메모리 누수가 발생할 수 있었습니다. (Bug #29201747) -
GRANT OPTION권한이 일부 경우에 잘못 처리될 수 있었습니다. (Bug #29179334) -
이전에는
_또는%SQL 와일드카드 문자 중 하나가ESCAPE문자로 사용되는 경우LIKE비교가 올바르지 않을 수 있었습니다. 이제 이러한 문자를 사용할 수 있습니다. (Bug #29175461, Bug #93811) -
component_sys_variable서비스가 특정 시스템 변수를 읽지 못해 서버 종료가 발생할 수 있었습니다. (Bug #29162657) -
다중 테이블
UPDATE문은 업데이트할 로우를 결정할 때 잘못된 생성 컬럼 값을 검색할 수 있었습니다. (Bug #29154379) -
서버가 메모리 부족 조건을 유발하는 Performance Schema 매개변수와 함께 시작된 경우, 시작이 실패했습니다. (Bug #29140212, Bug #93726)
-
일관성과 표준 SQL 준수를 위해,
ISNULL()함수는 이제EXPLAIN문이 생성하는 경고에서IS NULL로 출력됩니다. (Bug #29119455) -
일부 보조 유니코드 문자가 잘못되어 유효하지 않은 것으로 경고 메시지와 함께 플래그될 수 있었습니다. (Bug #29110613, Bug #93626)
-
MySQL 5.7에서 8.0으로 업그레이드할 때,
root사용자에게 모든 동적 권한이 부여되지 않았습니다. (Bug #29043233) -
서브파티셔닝을 사용할 때, 테이블 직렬화된 딕셔너리 정보(SDI)가 어떤 테이블스페이스 파일에도 저장되지 않았습니다. (Bug #29020745, Bug #93499)
-
일부 Performance Schema 테이블을 삭제하기 위한 권한이 잘못 확인되었습니다. (Bug #29010031)
-
mysqldump가
SET NAMES utf8mb4및SET character_set_client = utf8mb4문을 버전별 주석 안에 감싸지 못했으며, 이로 인해 호환성 문제가 발생할 수 있었습니다. (Bug #29007506, Bug #93450) -
NULL로 정의된 하나 이상의 컬럼에 생성된 유니크 인덱스의 경우, Optimizer가 해당 인덱스를eq_ref로 사용하는 조인을 처리하지 못했습니다.이 수정의 일부로, 이제
NULL과의 비교를 잠재적 동등 일치로 취급하지 않도록 늦은NULL필터링도 수행됩니다. (Bug #28965762, Bug #29337233) -
디버그 빌드에서 예상 콜레이션과 실제 콜레이션이 다른 문자열 비교로 인해 어서션이 발생할 수 있었습니다. (Bug #28960901)
-
서버는 세미조인으로 변환되기 전에, 병합된 파생 테이블 또는 공통 테이블 표현식을 포함하고, 다시 그 내부에 인덱싱된 컬럼에 대한 외부 참조가 있는
WHERE절을 가진 서브쿼리를 올바르게 처리하지 못했습니다. (Bug #28955216) -
ORDER BY를 포함하는 파생 테이블을 사용한 쿼리가 항상 올바르게 처리되지는 않았습니다. (Bug #28942965) -
비활성 상태가
wait_timeout값을 초과하여 클라이언트가 종료될 때, 오류 로그에 기록되는 메시지가 명확하지 않았습니다. 이제 문제의 원인에 대해 더 구체적인ER_NET_WAIT_ERROR가 기록됩니다. 기여해 주신 Mattias Jonsson에게 감사드립니다. (Bug #28940167, Bug #93240) -
FLUSH PRIVILEGES를CREATE USER또는ALTER USER와 함께 동시에 실행하면 서버가 멈출 수 있었습니다. (Bug #28937018, Bug #93085) -
인덱스 접두사 값에 의존하는
CASE문 비교가 잘못된 결과를 생성할 수 있었습니다. (Bug #28934315, Bug #93215) -
정렬 제거 후 원래 비용 추정에서 고려되지 않았던 정렬을 보정하기 위해 쿼리 비용을 조정할 때 추정값이 때때로 너무 낮거나 음수가 될 수도 있었습니다.
정렬 비용은
Optimize_table_order::consider_plan()에서 총 비용에 추가되고, 정렬이 필요하지 않은 것으로 확인되면JOIN::optimize()에서 총 비용에서 차감됩니다.consider_plan()이 정렬이 필요하지 않다고 판단하면 정렬 비용을 총 비용에 추가하지 않지만, 여전히JOIN::sort_cost()에 정렬 비용을 기록하며, 이 값은 이전에 고려된 후보 실행 계획의 정렬 비용으로 설정됩니다. 이후JOIN::optimize()는JOIN객체에 연결된 정렬 비용이 있음을 확인했고, 또한 정렬이 필요하지 않다는 것도 확인하므로 해당 비용을 총 비용에서 차감했습니다. 정렬 비용이 선택된 실행 계획과 동일하지 않은 후보 실행 계획에서 왔기 때문에 추정값이 잘못되었습니다.수정 사항은 정렬 비용이 총 비용에 추가되지 않은 경우
consider_plan()이JOIN::sort_cost를 0으로 설정하게 하여,JOIN::optimize()에서 비용의 잘못된 조정이 수행되지 않도록 하는 것입니다. (Bug #28884359) -
일부 GIS 코드가 Visual Studio 2017 15.5.6에서 컴파일되지 않았습니다. (Bug #28861188)
참고: 이 문제는 다음 버그의 회귀입니다: Bug #28842878.
-
저장된 생성 컬럼 값과 가상 생성 컬럼의 인덱스가 이러한 생성 컬럼이 의존하는 컬럼을
ALTER TABLE에서RENAME COLUMN또는CHANGE COLUMN을 사용하여 서로 바꾼 후 올바르게 업데이트되지 않았습니다.생성 컬럼, 생성 기본값, 함수형 인덱스에 대한 베이스 컬럼 이름 변경은 이제 동일한
ALTER TABLE문이 다음 조건 중 하나를 충족하지 않는 한 금지됩니다:- 해당 문이 생성 컬럼, 생성 기본값 또는 함수형 인덱스를 제거합니다.
- 해당 문이 해당 의존 표현식을 업데이트합니다. 이를 통해 생성 표현식이 베이스 컬럼 이름 변경을 따르도록 업데이트되는 기존 시나리오를 지원할 수 있습니다.
생성 컬럼, 생성 기본값 또는 함수형 인덱스가 의존하는 컬럼 삭제에 대한 제한도 유사한 방식으로 완화되었습니다. (Bug #28772251, Bug #92727)
-
베이스 컬럼이 생성 컬럼에 의한 인덱스 전용 액세스에서 제외되지 않았습니다. (Bug #28652733)
참고: 함께 참조하십시오: Bug #29664369. 이 문제는 다음 버그의 회귀입니다: Bug #23169112.
-
SET PERSIST_ONLY는version_tokens_session시스템 변수를 올바르게 처리하지 못했습니다. (Bug #28542569) -
디버그 빌드의 경우,
CREATE TABLE문에 대한 부적절한 오류 검사로 인해 assertion이 발생할 수 있었습니다. (Bug #28490361, Bug #91976) -
MySQL 5.7은 참조된 컬럼의 일부가 hidden인 부모 키를 가진
InnoDB테이블의 외래 키를 지원했지만, MySQL 8.0은 이를 지원하지 않았습니다. MySQL 8.0은 이제 이 기능을 지원합니다. (Bug #28480149, Bug #91952) -
INSERT... ON DUPLICATE KEY UPDATE는 활성 역할에 의해 부여된 권한을 고려하지 않았습니다. (Bug #28395115) -
언로드된 컴포넌트의 경우, 시작 시
--loose-접두사와 함께 지정된 컴포넌트 옵션은 해당 컴포넌트가 나중에 런타임에 로드되더라도 처리되지 않았습니다. (Bug #28341329) -
클라이언트 프로그램에서 대화형으로 입력받은 긴 비밀번호는 null로 종료되지 않을 수 있었습니다. (Bug #28121400)
-
MySQL을 빌드할 때 CMake는 대상 디렉터리에 길이가 0인 tarball을 생성하여
Boost다운로드 프로세스를 시작하며, 이 tarball은 다운로드가 완료되면 제거됩니다. 다운로드가 중단되거나 시간 초과되면, 이 파일이 존재하여 CMake가 다음에 실행될 때 다운로드를 수행하려는 시도를 하지 못했습니다. 이제 길이가 0인 tarball이 있으면 다운로드가 시작되기 전에 제거됩니다. (Bug #28089173) -
스레드 프로세스 tick 시간이 허용되는 최대값을 초과하면 스레드 풀 그룹이 차단될 수 있었습니다. 이제 tick 시간은 더 큰 값을 허용하도록 더 큰 데이터 타입을 사용합니다. (Bug #28072609)
-
ALTER USER... IDENTIFIED WITH... BY에 대해 권한이 올바르게 검사되지 않았습니다. (Bug #27923149, Bug #29882299) -
MySQL은 OpenSSL session ticket을 지원하지 않지만, 이를 OpenSSL에 알리기 위해
SSL_OP_NO_TICKET플래그를 설정하지 않았습니다. 이제 이 플래그가 설정됩니다. (Bug #27655493) -
audit_null플러그인은 null 이벤트 레코드를 적절히 검사하지 않았습니다. (Bug #27638290) -
UpdateXML()는 특정 경우에 항상 메모리를 적절히 해제하지 않았습니다. (Bug #27312862) -
mysql.plugin시스템 테이블의name컬럼에 있는 빈 값으로 인해 시작 중에 서버가 종료되었습니다. (Bug #27302459) -
서버가
CACHE INDEX문에 대한 권한을 제대로 검사하지 않았습니다. (Bug #26173827) -
thread_pool플러그인이 활성화된 상태에서 Performance Schemastatus_by_thread테이블에 데이터가 포함되지 않았습니다. (Bug #25933891) -
GRANT OPTION권한이 데이터베이스 작업과 관련된 것으로 처리되었습니다. (Bug #25203933, Bug #34159579) -
ARCHIVE테이블에 대한REPAIR TABLE이 서버 종료를 초래할 수 있었습니다. (Bug #23304911) -
INSTALL PLUGIN문에 공유 라이브러리 이름의 유효하지 않은 UTF-8 문자가 포함된 경우, 서버가 중단되거나(debug 빌드에서는 assertion이 발생) 했습니다. (Bug #14653594, Bug #23080148, Bug #27167197) -
값이 테이블 컬럼에 비해 너무 큰 경우
mysql.slow_log시스템 테이블에 대한 로깅이 실패할 수 있었습니다. 이제 로깅은 최선 노력 방식으로 진행되어, 제공할 수 있는 정보를 기록합니다. 그렇지 않으면 로우가 폐기되고 오류 로그에 메시지가 기록됩니다. (Bug #11748692, Bug #37132) -
Windows 플랫폼에서
WHERE date_column LIKE 'year_value'를 사용하는 쿼리가 오류 1525 Incorrect DATE value와 함께 실패했습니다. (Bug #95780, Bug #29904751)참조: 이 문제는 다음 버그의 회귀입니다: Bug #29368521.
-
이전 문제에 대한 수정으로 인해
YEAR값이 unsigned로 처리되었지만, 이로 인해 뺄셈을 포함하는 계산 중에 발생할 수 있는 음수 값이 허용되지 않았으며, 이는 데이터 잘림 오류로 이어질 수 있었습니다. (Bug #95045, Bug #29668676)참조: 이 문제는 다음 버그의 회귀입니다: Bug #92209, Bug #28562930.
-
입력 로우가 0개인 집계가 있는 파생 테이블로 작업할 때, 집계 함수의 결과가 임시 테이블로 제대로 복사되지 않았습니다. 이로 인해 lateral join을 수행할 때와 같이 파생 테이블이 여러 번 평가되는 경우 잘못된 결과가 발생했습니다. (Bug #94721, Bug #29514504)
-
ORDER BY가 있는 윈도우에서 상속되었지만 프레임 명세가 없는 윈도우가 잘못된 결과를 생성했습니다. (Bug #94251, Bug #29328529) -
함수
REGEXP_REPLACE()및REGEXP_SUBSTR()가 반환하는 결과가 일치 항목을 검색한 표현식의 캐릭터셋 및 콜레이션이 아니라UTF-16을 사용했습니다. (Bug #94203, Bug #29308212) -
SUM(constant)를 사용하는UNION ALL쿼리가 대신SUM(column)을 사용하는 동일한 쿼리에 비해 매우 느리게 처리되었습니다. (Bug #93922, Bug #29227464) -
JSON_OBJECTAGG()는 윈도우에 키 기준 정렬이 없는 경우 중복 키가 있으면 비결정적이며, 이는 예상된 동작입니다. 그러나 더 이상 윈도우 프레임에 없는 키-값 쌍이 여전히 결과에 나타났습니다. (Bug #93822, Bug #29175262) -
서브셀렉트가 있는 쿼리에서
HAVING보다 먼저LIMIT이 적용되었습니다. (Bug #93214, Bug #28934388)참조: 이 문제는 다음의 회귀입니다: Bug #25466100.
-
TIMESTAMP컬럼에 대한GROUP BY를 포함하는 쿼리가 키 중복 항목(ER_DUP_ENTRY) 오류를 발생시켰습니다. 이 문제는 특정 시간대 설정을 사용하여TIMESTAMP값이 테이블에 삽입되고, 이후 시간대 설정이 변경된 뒤 이러한 값이 가져와질 때 발생했으며, 삽입된TIMESTAMP값 중 적어도 일부가 새 시간대에서 시간이 표준시에서 일광 절약 시간(DST)으로 변경되는 시간에 해당하여, 그 시간 동안 동일한TIMESTAMP값이 두 번 존재할 수 있는 경우였습니다. 이제 서버가 그렇지 않으면 DUPLICATE ENTRY FOR KEY 'group_key' 오류를 반환할 상황에서, 그룹화에TIMESTAMP컬럼이 포함되어 있으면 대신 Grouping on temporal is non-deterministic for time zones having DST. Please consider switching to UTC for this query. 오류를 발생시킵니다.또한 이 문제를 방지하는 데 도움이 되도록
explicit_defaults_for_timestamp를ON으로 설정하고, 서버 SQL 모드의 일부로MODE_NO_ZERO_IN_DATE,MODE_NO_ZERO_DATE또는MODE_INVALID_DATES중 하나 이상을 설정하는 것이 권장됩니다. (Bug #90398, Bug #27970159)