MySQL 8.0 Release Note

8.0.33 변경 사항 (2023-04-18 GA)

Estimated reading: 3 minutes 106 views

공식 문서: Changes in MySQL 8.0.33 (2023-04-18, General Availability)

감사 로그 관련 사항

MySQL Enterprise Audit는 이전에 필터 및 사용자 계정 데이터의 영구적인 저장소로 mysql 시스템 데이터베이스 내의 테이블을 사용했습니다. 유연성을 높이기 위해, 새로운 audit_log_database 서버 시스템 변수를 통해 서버 시작 시 글로벌 스키마 네임스페이스에서 다른 데이터베이스를 지정할 수 있게 되었습니다. mysql 시스템 데이터베이스는 테이블 스토리지의 기본 설정입니다. (WL#15500)

컴파일 관련 사항

Microsoft Windows: Visual Studio 2017 이후의 MSVC 코드 분석 지원이 추가되었습니다. 이를 통해 현재 디렉토리와 그 하위 디렉토리에서 이 분석을 활성화 또는 비활성화할 수 있는 새로운 MSVC_CPPCHECK(기본값은 OFF) CMake 옵션이 추가됩니다. (버그 #34828882)

MySQL이 GNU 컴파일러 또는 Clang으로 빌드될 때, curl 버전이 7.86보다 큰 경우 curl의 사용 중단 경고가 -Wno-error로 다운그레이드되었습니다. (버그 #35111625)

macOS에서, 필요한 경우 공유 시스템 라이브러리와 링크하기 위해 curl 인터페이스를 링크할 때 -framework CoreFoundation-framework SystemConfiguration을 추가했습니다. (버그 #35104962)

MY_INCLUDE_SYSTEM_DIRECTORIES 매크로를 라이브러리 인터페이스로 대체했습니다. (버그 #35018072, 버그 #35028089, 버그 #35072295)

대체 링커를 지원하도록 CMake 코드를 개선했습니다. (버그 #34963568)

사용 중단된 Docs/mysql.info 파일을 빌드 시스템에서 삭제했습니다. (버그 #34960126)

최상위 .clang-tidy 파일과 관련된 .clang.tidy 파일을 strings/ 디렉토리 및 mysys/ 디렉토리에 추가했습니다. 또한 compdb 지원을 활성화하여 헤더 파일의 clang-tidy 사용을 가능하게 했습니다. (버그 #34917075)

uca-dumpuctypedump와 같은 기능을 위해, 유지 관리되지 않거나 사용되지 않는 몇몇 C++ 소스 파일을 삭제했습니다. (버그 #34898978)

명령줄에서 컴파일할 때 GCC 및 Clang의 컬러링된 컴파일러 출력을 활성화하기 위한 CMake 빌드 옵션이 추가되었습니다. 활성화하려면 -DFORCE_COLORED_OUTPUT=1을 CMake에 전달합니다. (버그 #34897192)

Windows에서는 서드파티 라이브러리와 관련된 .dll 파일이 발견되면, 해당 .pdb 파일도 설치됩니다. (버그 #34863555)

Enterprise Linux 8 빌드 및 Enterprise Linux 9 빌드는 GCC 11 대신 GCC 12를 사용하도록 변경되었습니다. (버그 #34829151)

-static-libgcc -static-libstdc++을 사용하여 빌드할 경우, 필요에 따라 정적 라이브러리를 사용하여 번들된 protobuf도 빌드되도록 변경되었습니다.
기여해 주신 Alex Xing에게 감사드립니다. (버그 #110216, 버그 #35123848

컴포넌트 관련 사항

INSTALL COMPONENT에는 하나 이상의 컴포넌트를 설치하는 동안 컴포넌트 시스템 변수의 값을 설정하는 SET 절이 포함되도록 되었습니다. 새로운 절은 변수 값을 할당하는 다른 방법과 관련된 불편함과 제한을 완화합니다. 사용에 대한 정보는  INSTALL COMPONENT Statement 부분을 참고바랍니다. (WL #10916)

사용 중단 및 제거 관련 사항

사용자 정의 콜레이션(Adding a Collation to a Character Set 부분 참고)은 사용 중단되었습니다. 다음 중 하나에 의해 경고가 로그에 기록되도록 변경되었습니다:

  • SQL 문장에서 COLLATE 뒤에 사용자 정의 콜레이션 이름이 오는 경우
  • collation_server, collation_database, 또는 collation_connection의 값으로 사용자 정의 콜레이션 이름을 사용하는 경우

사용자 정의 콜레이션 지원은 MySQL의 향후 버전에서 삭제될 예정입니다. (WL #14277)

MySQL Enterprise 관련 사항

MySQL Enterprise Edition은 MySQL 8.0.13에서 도입된 플러그인 라이브러리에 기반하지 않고, 컴포넌트에 기반한 데이터 마스킹 기능 및 익명화 기능을 제공하게 되었습니다. 컴포넌트의 구현으로 인해, 사전 사전 관리할 수 있는 딕셔너리를 관리하기 위한 전용 권한이 제공되며, 다음과 같은 특정 유형의 목록이 확장됩니다:

  • Canada Social Insurance Number (캐나다 사회 보험 번호)
  • United Kingdom National Insurance Number (영국 국민 보험 번호)
  • International Bank Account Number (국제 은행 계좌 번호)
  • Universally Unique Identifier (UUID)

개선된 테이블 기반 딕셔너리 레지스트리는 플러그인이 사용하는 파일 기반 딕셔너리를 대체합니다. 기존의 플러그인 사용자는 새로운 MySQL Enterprise의 데이터 마스킹 컴포넌트 및 익명화 컴포넌트를 설치하기 전에 서버 측 플러그인을 제거하고, 해당 로드 가능한 기능을 삭제해야 합니다. (버그 #33851601, WL #12641)

Performance Schema 관련 사항

이번 릴리스에서는 Performance Schema Server Telemetry Traces 서비스가 추가되었습니다. 이는 SQL 문장의 유효 기간과 관련된 알림을 플러그인과 컴포넌트에 제공하는 인터페이스입니다.
이 인터페이스에 대한 자세한 내용은 MySQL 소스 코드 문서에서 서버 원격 분석 추적 서비스(Server telemetry traces service) 섹션을 참조하세요.
다음이 추가되었습니다:

  • 상태 변수 Telemetry_traces_supported. 서버 텔레메트리 트레이스가 지원되는지 여부를 나타냅니다. (불리언 값)
  • TELEMETRY_ACTIVE 열이 threads 테이블에 추가되었습니다: 스레드에 활성 텔레메트리 세션이 연결되어 있는지를 나타냅니다.

(WL #15059)

추가 및 변경된 기능

중요한 변경 사항: OpenSSL 라이브러리가 번들된 플랫폼의 경우, 링크된 MySQL 서버용 OpenSSL 라이브러리가 버전 1.1.1t로 업데이트되었습니다. OpenSSL 버전 1.1.1t에서 수정된 문제는  https://www.openssl.org/news/cl111.txt에서 확인할 수 있습니다. (버그 #35092429)

복제: MySQL 제품에서 사용되는 이전 용어를 변경하기 위한 진행 중인 작업의 일환으로, “master”, “slave”, “MTS”라는 용어가 MySQL 복제와 관련된 오류 메시지에서 각각 “source”, “replica”, “MTA”로 대체되었습니다. 이는 messages_to_clients.txtmessages_to_error_log.txt에 포함된 복제 관련 모든 오류 메시지를 포함합니다. 이번 변경 작업은 이 외의 다른 컨텍스트에서 사용되는 메시지에 대해서는 변경 작업을 수행하지 않습니다. (버그 #108422, 버그 #34594819, WL #14191)

복제: mysqlbinlog --start-position이 18446744073709551615까지의 값을 허용하도록 변경되었습니다. 단, --read-from-remote-server 또는 --read-from-remote-source 옵션도 사용되는 경우 최대값은 4294967295으로 제한됩니다. (버그 #77818, 버그 #21498994)

시스템의 curl 라이브러리에 링크하는 대신, curl을 포함하는 바이너리 패키지는 curl 7.88.1을 사용하도록 업그레이드되었습니다. (버그 #34828111)

생성된 열에서 DEFAULT(col_name)을 사용하여 명명된 열의 기본값을 지정하는 것이 허용되지 않으며, 이제 오류 메시지가 출력되도록 변경되었습니다. (버그 #34463652, 버그 #34369580)

새로운 TELEMETRY_LOG_ADMIN 권한이 추가되어 텔레메트리 로그 구성을 활성화할 수 있습니다. 이 권한은 MySQL HeatWave on AWS를 통해 독점적으로 배포되는 telemetry_log 플러그인에 의해 정의됩니다. (버그 #111395, 버그 #35494180)

성공적으로 실행된 문에 대한 Statement ID를 클라이언트에 반환하는 기능이 추가되었습니다. 이를 세션별로 활성화하려면, session_track_system_variables의 값에 statement_id를 추가하거나, session_track_system_variables을 특수 값 * (아스테리스크)로 설정하십시오. (WL #15418)

버그 수정

NDB Cluster: 동시 스키마 작업을 반복적으로 수행하는 동안 NDB 딕셔너리에서 테이블을 여는 과정에서 발생할 수 있는 일시적인 오류에 리트라이를 하지 않았습니다. (버그 #34843889)

NDB Cluster: 반복 중에, 순서가 지정된 인덱스 스캔은 동시 스캔되는 순서 지정된 인덱스 단편 내의 커서 위치를 유지합니다. 순서 지정된 인덱스 단편은 DML 트랜잭션을 커밋한 결과로 변경 및 조정됩니다. 이는 트리 내에서 스캔 커서를 이동해야 할 필요가 있을 수 있습니다. 쿼리 스레드를 설정하여(AutomaticThreadConfig를 1로 설정) 실행하면, 여러 스레드가 동일한 인덱스 단편 트리 구조에 접근할 수 있으며, 여러 스레드의 스캔이 커서를 동일한 구조에 위치시킬 수 있습니다.
현재 문제는 모든 스캔 커서가 인덱스 단편을 소유하는 LDM 스레드에 속한 DML 작업을 커밋할 때 스캔 커서를 이동하기 위한 로직이 예상대로 동작하지 않아 발생했습니다. 이는 이러한 단편이 쿼리 스레드에 속할 가능성을 고려하지 않았기 때문입니다. (버그 #33379702)
참고: 버그 #32257063도 참조하십시오.

InnoDB: innodb_doublewrite와 관련된 오류 메시지가 오류 로그로 이동되었습니다. (버그 #34883045, 버그 #109330)

InnoDB: 온라인 DDL 작업이 범위를 벗어난 메모리에 접근하는 것을 방지했습니다. (버그 #34750489, 버그 #108925)

InnoDB: ALTER TABLE ... AUTO_INCREMENTMAX + 1 미만으로 설정될 수 있었으며, MAX + 1으로 강제되지 않았습니다. (버그 #33419246, 버그 #105092)

InnoDB: 변수의 오버플로로 인해 Innodb_data_pending_fsyncs가 매우 높은 부정확한 값을 표시할 수 있었습니다. (버그 #30133150)

파티셔닝: 파티셔닝된 테이블에 대한 일부 IN() 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #34801284)
참고: 이 문제는 버그 #32311183의 회귀입니다.

파티셔닝: INDEX_MERGE 옵티마이저 힌트를 사용하는 쿼리가 모든 경우에 올바르게 처리되지 않았습니다. (버그 #34797257)

복제: XID에 널 바이트가 포함된 XA 트랜잭션을 복구할 수 없었습니다. (버그 #34918985)

복제: binlog_order_commits가 1로 설정된 경우, 임의의 두 트랜잭션과 커밋 단계의 임의의 하위 단계에서, 첫 번째로 바이너리 로그에 기록된 트랜잭션이 예상대로 항상 먼저 하위 단계를 실행하지 않았습니다. (버그 #34703698)

복제: 일부 바이너리 로그 이벤트가 항상 올바르게 처리되지 않았습니다. (버그 #34617506)

복제: 바이너리 로그 복구 프로세스가 가능한 모든 오류 상태를 보고하지 않았습니다. (버그 #33658850)

복제: CHANGE REPLICATION SOURCE TO SOURCE_CONNECTION_AUTO_FAILOVER=1 다음에, 페일오버로 인해 로그에 오해의 소지가 있는 경고가 다수 생성되었으며, 이는 실제로 그러한 페일오버가 예상 조건에서도 문제가 발생한 것으로 암시되었습니다. 이러한 로그 메시지는 적절히 업데이트되었습니다. (버그 #32135376)

복제: 트랜잭션이 실패하면, 부작용으로 복제 데이터 리포지토리와 관련된 추가적인 오류 메시지가 로그에 기록되었습니다. 이러한 경우, 실패한 트랜잭션의 문제나 그 원인과 직접적으로 관련 없는 오류 메시지를 숨깁니다. (버그 #19820134)

복제: binlog_order_commits를 OFF로 설정하면, 다음 바이너리 로그 파일의 Previous_gtids 이벤트에서 GTID가 손실될 수 있었습니다.
기여해 주신 예웨이 슈와 텐센 팀에 감사드립니다. (버그 #109485, 버그 #34930969)

복제: ER_RPL_REPLICA_ERROR_RUNNING_QUERY의 오류 메시지 텍스트에서 제안된 SQL 문을 수정했습니다.
기여해 주신 댄 맥콤스에게 감사드립니다. (버그 #109154, 버그 #34822612)

복제: 해시 스캔은 변경의 해시를 구축하고, 대상 테이블 또는 인덱스를 스캔하여 일치하는 변경을 현재 항목에 적용합니다. 구축 단계에서는 변경 전 이미지만 사용하고, 변경 후 이미지는 건너뜁니다. 경우에 따라 생성된 열이 (건너뛴) 변경 후 이미지에 대해 계산되어 복제 오류가 발생했습니다. 이는 해시 스캔과 같은 시크만 호출에서 생성된 열을 계산하지 않도록 수정되었습니다.
기여해 주신 디씨 후앙에게 감사드립니다. (버그 #107366, 버그 #34198907)

복제: 특정 드문 경우에, 한 세션에서 gtid_mode=OFF를 설정할 수 있었지만, 다른 세션은 이 두 번째 세션에서 사용자가 WAIT_FOR_EXECUTED_GTID_SET()을 발행한 후 첫 번째 세션의 다음 GTID 세트를 아직 기다리고 있었습니다. 이는 함수가 반환되기를 무한정 기다리는 두 번째 세션이 발생할 수 있게 했습니다. (버그 #99921, 버그 #31505993)

그룹 복제: 성능 스키마의 replication_group_communication_information 테이블과 replication_group_member_stats 테이블에 동시에 접근하면, 후속 그룹 복제 작업이 멈출 수 있었습니다. (버그 #34870181)

그룹 복제: 특정 사례에서, 그룹 복제 보조 노드가 릴레이 로그의 정리 중에 예기치 않게 종료되었습니다. (버그 #34397106)

그룹 복제: 그룹 복제 플러그인을 종료할 때, 관련 이벤트가 오류 로그에 보고되는 순서가 혼란을 초래할 수 있었습니다. 의문을 해소하기 위해, “Plugin group_replication reported: ‘Plugin ‘group_replication’ has been stopped.'”가 실제로 종료와 관련된 마지막 로그 메시지이며, 플러그인의 종료와 관련된 다른 모든 이벤트가 로그에 기록된 경우에만 작성되도록 변경되었습니다. (버그 #109345, 버그 #34887491)

Microsoft Windows: Windows 클라이언트 호스트에서 FIDO 장치를 찾을 수 없는 경우, 인증 프로세스 중 authentication_fido_client 플러그인이 응답을 중단했습니다. (버그 #34918044)

특정 사례에서, CONVERT(utf8mb3_column USING UTF16)이 오류 “Cannot convert string ‘\x–…’ from binary to utf16.”으로 거부되었습니다. (버그 #35129361)

문자열 타입의 열에서 두 개의 테이블을 조인하고, 한 테이블의 열에 임시 리터럴과 비교하는 추가적인 술어가 있는 경우, 상수 전파로 인해 문자열을 비교할 때 문자열 시맨틱이 아닌 임시 시맨틱을 사용하도록 조인 조건이 잘못 변경되었습니다. 이는 조인에서 잘못된 결과를 반환했습니다. (버그 #35115909)

프리페어드 스테이트먼트에서 mysql_reset_connection() C API 함수를 호출한 후 반환되는 오류 메시지는 함수 이름을 올바르게 식별하지 못했습니다. (버그 #35107280)

윈도우 함수 문제에 대한 이전 수정에서의 회귀를 수정했습니다.
기여해 주신 드미트리 레네브에게 감사드립니다. (버그 #35061924)
참고: 이 문제는 버그 #34572136의 회귀입니다.

트랜스폼 단계에서 서브쿼리를 변환할 때, 특정 쿼리 블록에 서브쿼리가 포함되어 있는지를 나타내는 내부 플래그(PROP_SUBQUERY)가 이후에 업데이트되지 않았습니다. (버그 #35060365)

클라이언트가 허용되지 않은 클라이언트 문자 집합(ucs2, utf16, utf16le, 또는 utf32)으로 문자 집합을 설정하면, 클라이언트가 인증 플러그인을 사용할 때 예기치 않은 동작이 발생할 수 있었습니다. (버그 #35054579)

평균 행 수가 1 미만인 경우, EXPLAIN ANALYZE는 0을 표시했습니다. 이를 수정하기 위해, EXPLAIN ANALYZEEXPLAIN FORMAT=TREE의 출력에서 0.001~999999.5 범위의 숫자가 소수점으로 포맷되도록 변경되었으며, 이 범위를 벗어난 숫자는 공학 표기법을 사용하여 출력됩니다 (예: 1.23e+9, 934e-6). 또한, 끝의 0은 출력되지 않으며, 1e-12 미만의 숫자는 0으로 출력됩니다.
이로 인해 숫자의 값에 관계없이 일관된 정밀도가 보장되고, 가독성이 향상되며, 반올림 오류가 최소화됩니다. (버그 #34990948)

NTILE() 함수가 모든 경우에 올바르게 작동하지 않았습니다. (버그 #34986665)

뷰의 일부 조인이 올바르게 실행되지 않았습니다. (버그 #34985359)

서브쿼리에 중복된 술어가 포함된 경우, 상관 스칼라 서브쿼리를 파생 테이블로 변환하면, InnoDB 테이블에서 잘못된 결과가 발생했습니다. 다음은 영향을 받을 수 있는 쿼리의 예입니다:

SELECT * FROM t1 
WHERE (
  SELECT t2.a FROM t2
  WHERE t2.a = t1.a AND t2.a = t1.a
    ) > 0;

(버그 #34973220)

SPACE() 함수로 인해 발생할 수 있는 sql/item_strfunc.cc의 어설션을 수정했습니다. (버그 #34962821)

LPAD() 또는 RPAD()에 길이 인수로 ROW_COUNT()를 사용하면 예상대로 동작하지 않았습니다. (버그 #34961236)

ORDER BY 절에 CASE 함수를 포함하는 윈도우 함수를 포함한 쿼리는 서버 종료로 이어질 수 있었습니다. (버그 #34933045)

이전 문제의 수정으로 인해, HAVING 절을 최적화할 때 디버그 빌드에서 어설션이 도입되었습니다. (버그 #34923792)
참고: 이 문제는 버그 #33725415의 회귀입니다.

mysqld_multi를 사용할 때, --password=*****--password 사용법을 숨기는 시스템은 --password--password-history--password-require-current 정의에도 일치했습니다. 그러나 대신 --password=를 명시적으로 확인하도록 변경되었습니다. (버그 #34918740)

일부 경우에 mysql_bind_param() C API 함수를 호출하면, 서버가 응답하지 않을 수 있었습니다. (버그 #34869076)

authentication_oci_client 플러그인은 엔트리 중 하나에 공백으로 구분된 등호 문자가 포함된 경우, 유효한 설정 파일을 열 수 없었습니다 (예: key_file = /home/user/.oci/oci_api_key.pem). 현재는 'key=value''key = value' 두 가지 엔트리 형식을 모두 지원합니다. (버그 #34864078)

INTERSECT 또는 EXCEPT 연산의 결과가 다른 테이블과 조인될 때, 잘못된 결과가 반환되었습니다. 이 문제는 DISTINCT 또는 ALL로 사용된 경우와 유사하게, 이러한 연산에 영향을 미쳤습니다. (버그 #34843764)

뷰 쿼리를 준비할 때, 해당 작업은 (데이터 딕셔너리에 저장된 문자 집합이 아닌) 시스템 문자 집합을 사용하여 유효하지 않은 문자열 오류를 보고했습니다. (버그 #34800905)

뷰를 포함하는 파생 테이블을 조작하는 프리페어드 스테이트먼트는 오류 후 테이블을 다시 열기 위한 코드 문제로 인해 예상치 못하게 종료될 수 있었습니다. (버그 #34798403)

디버그 빌드의 RANDOM_BYTES() 함수가 특정 경우에 발생시키는 어설션을 제거했습니다. (버그 #34781507)

영속화된 변수가 시작 시 설정되는 방식에 문제가 있어, 특정 변수가 영속화된 값으로 올바르게 설정되지 않았습니다. (버그 #34751419)

MAKETIME() 함수가 모든 경우에 올바르게 실행되지 않았습니다. (버그 #34745241)

여러 인수를 가진 일부 함수가 예상된 결과를 생성하지 않았습니다. (버그 #34741801)

테이블이 사용되고, 쿼리 블록 자체에 LIMIT 또는 ORDER BY가 없는 괄호로 묶인 쿼리 블록의 외부 ORDER BY에서 테이블 참조를 할 경우, 오류가 발생했습니다. (버그 #34704011)
참고: 이 문제는 버그 #103954, 버그 #32980249의 회귀입니다.

ON 절의 일부로 불가능한 조건을 가진 왼쪽 조인은 MySQL 5.7처럼 최적화되지 않았습니다. 따라서 MySQL 8.0에서는 쿼리가 불가능한 조건이 없는 경우보다 불가능한 조건이 있는 경우 더 빨리 실행되었습니다. 불가능한 조건을 포함하는 이러한 쿼리의 예는 SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1 AND 1=2입니다. (버그 #34668756)

사용자 정의 함수가 외부 쿼리 블록에 병합된 파생 테이블의 일부이거나 반조인으로 변환된 서브쿼리의 일부인 경우, 이 UDF가 결정론적인지 여부(또는 그렇지 않은지)에 대한 정보가 처리 중에 손실되었습니다. (버그 #34666531)

JSON 로그가 활성화되어 있고 감사 로그 필터 정의에서 이벤트 서브클래스가 지정된 경우, 로그에 기록된 이벤트의 끝에 빈 항목 ("" : { })이 추가되었습니다. (버그 #34659904)

일부 서브쿼리가 올바르게 실행되지 않았습니다. (버그 #34616553)

SELECT 쿼리의 asymmetric_encrypt() 컴포넌트 함수가 복호화할 NULL 필드에 도달한 후, 다른 비 NULL 암호화 필드에 대해 NULL 값을 반환할 수 있었습니다. (버그 #34598912)

감사 로그 플러그인을 언인스톨한 후, 서버가 정상적으로 종료되지 않는 경우가 있었습니다. (버그 #34594035)

특정 안티 조인이 서버에 의해 올바르게 처리되지 않았습니다. (버그 #34370673)
참고: 이 문제는 버그 #30573446의 회귀입니다.

MySQL 5.7 옵티마이저는 행을 필터링하기 위한 인덱스 선택이 두 가지(하나는 기본, 하나는 보조)일 때, 보조 인덱스의 범위 스캔이 더 많은 키 부분을 사용하기 때문에 보조 인덱스에서 범위 스캔을 선택합니다. 그러나 MySQL 8.0은 이 로직을 사용하지 않고, 대신 WHERE 절 필터링을 사용하여 기본 인덱스를 선택했습니다. LIMIT의 존재와 데이터 분포의 특성상 이러한 경우에 기본 키 사용은 적합하지 않습니다. 상수 제거로 인해 ORDER BY를 해결하는 과정에서 보조 인덱스가 고려되지 않았습니다. 이로 인해 동일한 쿼리에 대해 MySQL 5.7과 MySQL 8.0에서 쿼리 계획이 크게 달라졌습니다.
MySQL 8.0에서는 쿼리가 상수 최적화된 경우에만 ORDER BY 평가 중 인덱스의 상수 키 부분을 건너뛰어 이 문제를 해결했습니다. 이는 이 시점에서는 가능하지만 LIMIT 분석 중에는 불가능합니다. (버그 #34291261)

MySQL 데이터 딕셔너리는 실패한 se_private_id 값(찾을 수 없는 ID)의 조회를 캐시합니다. 이는 InnoDB가 이러한 ID를 재사용하지 않는다는 사실에 의존하여 InnoDB 특화 코드 실행을 가속화합니다. 그러나 이 가정은 NDB와 같이 이전에 이 캐시 사용을 하지 않음으로써 이 문제가 해결된 다른 스토리지 엔진에는 반드시 해당되지 않습니다.
우리는 NDB에 대해 이전에 수행된 수정을 확장하여, 테이블이 InnoDB 스토리지 엔진을 사용하는 경우에만 캐시 조회가 사용되도록 했습니다. (버그 #34145006)
참조: 버그 #33824058도 참조하십시오.

DENSE_RANK()를 사용한 일부 쿼리에서 예상치 못한 결과가 나타났습니다. WITH ROLLUP이 추가되었을 가능성이 있습니다. (버그 #34099408)

ROLLUP 처리를 재구현하기 위해 이전에 수행된 작업에 이어 sql/sql_tmp_table.cc에서 발생한 어설션을 수정했습니다. (버그 #33830659)
참고: 이 문제는 버그 #30969045의 회귀입니다.

테이블을 사용하지 않는 일부 CTE는 항상 올바르게 처리되지 않았습니다. (버그 #33725542)
참고: 이 문제는 버그 #27062031의 회귀입니다.

쿼리의 ORDER BY 목록에만 존재하는 윈도우 함수 호출의 윈도우 프레임에서 행에 접근할 때, 오류가 발생했습니다. (버그 #33069747)

ORDER BY 열과 함께 사용되는 PERCENT_RANK()가 올바른 결과를 반환하지 않았습니다. (버그 #33064174)
참고: 이 문제는 버그 #27484133의 회귀입니다.

--exclude-tables--include-tables mysqlpump 옵션은 뷰를 처리하지 않았습니다. (버그 #21303549)

MySQL systemd 서비스 유닛 설정을 After=network-online.target에서 Wants=network-online.target으로 변경하여, 설정된 모든 네트워크 장치가 이용 가능하고, 서비스가 시작되기 전에 IP 주소가 할당되도록 했습니다. (버그 #109996, 버그 #35068274)

AVG(...) OVER (ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)가 올바른 결과를 반환하지 않았습니다. (버그 #109725, 버그 #35013880)
참고: 이 문제는 버그 #108008, 버그 #34431996의 회귀입니다.

SELECT 1 FROM t1 WHERE NOT EXISTS (VALUES ROW(1), ROW(2)) 형식의 쿼리는 subquery_to_derived 옵티마이저 스위치가 활성화된 경우 디버그 빌드에서 어설션을 발생시켰습니다. (버그 #109723, 버그 #35014318)
참고: 버그 #108910, 버그 #34746261도 참조하십시오.

mysqlimport--delete 옵션과 함께 사용될 때, 예약어 테이블 이름을 이스케이프하지 않았습니다. (버그 #109711, 버그 #34999015)

파생 테이블에 푸시다운할 조건을 클론화할 때, 조건을 나타내는 문자열 내의 문자는 128(ASCII 서브셋) 미만의 값에 대해서만 올바르게 utfmb4로 변환되었고, ASCII 서브셋 외의 코드 포인트는 무효한 문자로 변환되었습니다. 이는 결과 문자열이 무효하게 만듭니다. UNION을 사용하지 않는 파생 테이블에서는, 이로 인해 파생 테이블의 열 이름이 ASCII 서브셋 외의 문자를 사용하고 WHERE 조건에서 사용될 때 문제가 발생했습니다. UNION을 사용한 파생 테이블에서는, ASCII 서브셋 외의 문자가 WHERE 조건에 존재할 때 문제가 발생했습니다.
이러한 경우 조건을 나타내는 문자열을 접속 문자 집합으로 초기화하여 문제를 해결했습니다. (버그 #109699, 버그 #34996488)

mysqldump 버전 8.0.32에서 --single-transaction을 사용하려면, RELOAD 또는 FLUSH_TABLES 권한 중 하나가 필요했습니다. 이 요구 사항은 gtid_mode=ON(기본값 OFF)과 --set-gtid-purged = ON|AUTO(기본값 AUTO) 모두에만 적용되도록 변경되었습니다. (버그 #109685, 버그 #109701, 버그 #34993824, 버그 #34998910, 버그 #35020512)
참고: 이 문제는 버그 #105761, 버그 #33630199의 회귀입니다.

sha256_scramble_generator.ccsha2_password_common.cc의 스크램블 생성기 알고리즘 내부 문서에 존재하는 여러 문제를 수정했습니다.
기여해 주신 니클라스 켈에게 감사드립니다. (버그 #109576, 버그 #34967141)

CREATE USER IF NOT EXISTS는 사용자가 이미 존재하고 비밀번호가 업데이트되지 않은 경우에도 비밀번호 이력 항목을 추가했습니다. 이로 인해 후속 ALTER USER 스테이트먼트가 거부되었습니다. (버그 #109415, 버그 #34906592)

eq_ref 접근을 사용하는 많은 조인은 이전 버전보다 잘 작동하지 않았습니다. 이 문제는 MySQL 8.0.29에서 처음 보고되었습니다. (버그 #109631, 버그 #34891365)

해시 외부 조인은 비패딩 정렬을 사용하는 10진수의 제로 또는 빈 문자열과 NULL을 잘못 일치시켜 잘못된 결과를 초래할 수 있었습니다. (버그 #109211, 버그 #34837464)
참고: 이 문제는 버그 #33794977의 회귀입니다.

ALTER INSTANCE RELOAD TLS에 의해 내부적으로 사용되는 객체는 리더의 수가 0에 도달할 때까지 해제되지 않았습니다. 이는 리더의 수가 상당히 빈번하게 0에 도달할 필요가 있다는 가정에 기반하고 있습니다. SSL 핸드셰이크 중에 유지되는 읽기 잠금은 일반적으로 네트워크 호출을 수반하는 고비용 작업이기 때문에, 클라이언트와 서버 간의 라운드 트립에 매우 오랜 시간이 걸릴 경우 잠금이 비교적 오랜 시간 유지되었습니다. 이는 이 객체의 값을 변경하고 충분한 수의 수신 SSL 연결이 이루어진 경우, 합리적인 시간 내에 리더의 수가 0에 도달하지 않을 수 있으며, 잠금이 해제될 때까지 스레드가 CPU를 100% 사용하여 잠금을 유지하게 됨을 의미합니다.
이 문제를 해결하기 위해, 이 객체에 대한 포인터를 새 값으로 설정한 후, 이전 객체를 해제하기 전에 대기를 추가했습니다.
기여해 주신 시니사 밀리보예빅에게 감사드립니다. (버그 #107567, 버그 #34284186)

mysqldump 또는 mysqlpump가 필드의 기본값을 UTF-8로 변환할 수 없었던 경우(예: 필드 타입이 BINARY이고 기본값이 유효한 UTF-8과 일치하지 않는 경우), 해당 작업으로 인해 임포트할 수 없는 결과가 생성되었습니다. 또한, --hex-blob 옵션을 사용해도 문제는 해결되지 않았습니다. 현재는 기본값을 시스템 문자 집합으로 변환합니다. 변환에 실패한 경우, 서버는 사람이 읽을 수 있도록 대신 16진수로 값을 전송합니다. (버그 #104840, 버그 #33322551)

C API(libmysqlclient) 클라이언트 라이브러리를 사용한 연결은 FUTURE 암호화 정책에서 실패할 수 있었습니다. (버그 #104778, 버그 #33316709)

공유된 매터리얼리제이션을 사용하는 공통 테이블 표현식의 임시 테이블을 클론화할 때, 클론화된 임시 테이블이 해시 중복 제거를 사용하고 있음에도 불구하고 표시되지 않아 잘못된 결과로 이어졌습니다. 클론화된 임시 테이블의 해시 필드를 올바르게 설정하고, 숨겨진 필드 수를 업데이트하여 이를 고려하도록 수정했습니다. (버그 #102251, 버그 #32383712)
참고: 버그 #103052, 버그 #32659629도 참조하십시오.

CREATE EVENTALTER EVENT는 (DO 절 이외에) 전달된 모든 값이 실제로 값을 검사하지 않고 스칼라로 해결된다고 가정했습니다. 이로 인해, 그러한 값이 실제로 행이 될 때 어설션이 발생했습니다.
이러한 항목을 해결할 때 열 수의 명시적 확인을 수행하고, 스칼라 값이 아닌 행을 생성하여 오류를 보고하도록 변경되었습니다. (버그 #57552, 버그 #11764690)

기본 필드가 상수인 뷰 참조는, 참조가 외부 조인의 내부 테이블의 일부인 경우, 상수로 표시되지 않았습니다. 조건을 파생 테이블에 푸시다운하면, 참조가 제거되고, 기본 필드만 클론화되어 상수가 되어 잘못된 결과로 이어졌습니다.
이 문제를 해결하기 위해, 조건에 사용된 테이블이 파생 테이블과 일치하는지 또는 상수 식인지 먼저 확인하는 체크를 추가하여, 이러한 조건을 파생 테이블에 푸시다운하지 않도록 했습니다. 이는 이러한 조건이 파생 테이블과 일치하거나 상수일 경우에만 실제로 조건을 푸시다운합니다. (버그 #34661, 버그 #11747971)

Leave a Comment



이 문서 공유

8.0.33 변경 사항 (2023-04-18 GA)

링크 복사

CONTENTS