MySQL 8.0 Release Note

8.0.31 변경 사항 (2022-10-11 GA)

Estimated reading: 6 minutes 98 views

공식 문서: Changes in MySQL 8.0.31 (2022-10-11, General Availability)

감사 로그 관련 사항

audit_log_rotate() 함수는 감사 로그 파일의 로테이션을 단순화합니다. 이전에는 감사 로그 파일 로테이션을 위해 파일 이름을 수동으로 변경한 후, audit_log_flush = ON 설정을 통해 파일을 닫고 원래 이름으로 새로운 로그 파일을 여는 과정이 필요했습니다. audit_log_rotate() 함수는 현재 파일의 이름을 변경하고 새 파일을 생성하므로, 더 이상 감사 로그 파일을 수동으로 변경할 필요가 없습니다.
audit_log_flush 변수는 MySQL 8.0.31부터 사용 중단(deprecated)되었으며, 향후 MySQL 버전에서 지원이 제거될 예정입니다. (WL #15249)

컴파일 관련 사항

Microsoft Windows: 사용 중단(deprecated)된 C++ STL 기능을 사용하지 않음으로써, 그동안 발생하던 모든 C++ 사용 중단 경고 메세지를 발생하지 않도록 수정했습니다. (버그 #33985941)

내부 Performance Schema 함수 이름을 _utf8*에서 _utf8mb4*로 변경하였습니다. 이 함수들은 v8.0.11부터 utf8mb4를 사용해 왔습니다. (버그 #34351301)
참고: 관련 버그: 버그 #27407745.

LLVM 버그 #16404에서 설명된 LLVM/Clang 관련 정수 문제를 해결하기 위해 clang/ubsan에 대한 링커 플래그를 수정했습니다. (버그 #34311325)

향후 호환성을 위해 ‘utf8’ 대신 ‘utf8mb3’를 사용하는 문자 세트 및 콜레이션을 처리하도록 도우미 스크립트를 업데이트했습니다.
utf8mb3 문자 세트 및 콜레이션을 처리하는 데 사용된 함수 및 데이터 구조의 이름을 변경하여 utf8mb3 사용을 명확하게 했습니다. (버그 #34263480, 버그 #34025412)

CMake 코드를 정리하고 INFO_BIN 및 INFO_SRC를 단순화했습니다. (버그 #34139084)

컴포넌트 관련 사항

새로운 컴포넌트 서비스는 이제 서버 컴포넌트와 플러그인이 로컬 서버 내에서 쿼리할 수 있도록 합니다. 새로운 MySQL 명령 서비스는 libmysql의 C API 함수와 유사하지만, 클라이언트에 프로토콜 내부를 노출하지 않습니다. 이러한 서비스에 대한 정보는 MySQL Server Doxygen 문서(https://dev.mysql.com/doc/index-other.html)에서 확인할 수 있습니다. 검색 항목은 다음과 같습니다:

  • s_mysql_mysql_command_factory
  • s_mysql_mysql_command_options
  • s_mysql_mysql_command_query
  • s_mysql_mysql_command_query_result
  • s_mysql_mysql_command_field_info
  • s_mysql_mysql_command_error_info

(WL #14293)

사용 중단 및 제거 관련 사항

keyring_oci 플러그인은 더 이상 사용되지 않으며, 향후 MySQL 릴리스에서 제거될 수 있습니다. 대신, 키링 데이터를 저장하기 위해 component_keyring_oci 컴포넌트를 사용하는 것을 고려하십시오(자세한 내용은  Using the Oracle Cloud Infrastructure Vault Keyring Component 부분을 참조바랍니다). (WL #14943)

키링 관련 사항

MySQL Keyring은 이전에 Oracle Cloud Infrastructure Vault Keyring 키스토어 기능을 서버 플러그인을 사용하여 구현했지만, 이제는 MySQL 컴포넌트 인프라로 전환하고 있습니다. 새로운 키링 컴포넌트는 기존의 keyring_oci 플러그인과 유사하지만, 구성이 다르고 keyring_oci 플러그인을 사용하여 생성된 키를 유사한 설정 옵션을 사용하여 초기화할 때 접근할 수 있습니다. 구성 세부 사항은 Oracle Cloud Infrastructure Vault Keyring 컴포넌트 사용을 참조하십시오.
component_keyring_oci는 시작 시 --early-plugin-load 서버 옵션을 사용하여 로드되지 않으며, 시작 또는 런타임 중 시스템 변수를 사용하여 구성되지 않습니다:

  • 시작 시 서버는 매니페스트 파일을 사용하여 로드할 키링 컴포넌트를 결정하며, 로드된 컴포넌트는 초기화 시 자체 구성 파일을 참조합니다. 자세한 내용은 Keyring Component Installation부분을 참조하십시오.
  • 런타임 중에는 ALTER INSTANCE RELOAD KEYRING 명령어를 사용하여 구성 파일 변경 후 설치된 키링 컴포넌트를 재구성할 수 있습니다. 자세한 내용은 ALTER INSTANCE 명령어를 참조하십시오.

키링 컴포넌트가 설치된 경우, Performance Schema keyring_component_status 테이블에서 해당 상태 정보를 제공합니다. 자세한 내용은 keyring_component_status 테이블을 참조하십시오. (WL #14943)

옵티마이저 관련 사항

중요 변경 사항: MySQL 옵티마이저의 집합 연산 관리를 개선하여 다음과 같은 영향을 줍니다:

  • 괄호로 묶인 쿼리 표현식의 본문이 이제 UNION과 결합하여 중첩될 수 있습니다. 예를 들어, 아래 쿼리는 이전에는 ER_NOT_SUPPORTED_YET 오류로 거부되었으나, 이제는 허용됩니다:
( 
  (SELECT a, b, c FROM t ORDER BY a LIMIT 3) ORDER BY b LIMIT 2
) ORDER BY c LIMIT 1;
  • 괄호로 묶인 표현식의 본문을 병합할 때, MySQL은 SQL 표준에서 명시된 의미를 따르므로 상위의 외부 LIMIT이 내부의 더 낮은 LIMIT을 재정의할 수 없습니다. 즉, SELECT ... LIMIT 3 구문이 최대 세 행을 반환할 수 있습니다.
  • 이제 UNION DISTINCTUNION ALL을 임의로 조합하여 중첩할 수 있습니다.

모든 경우에서 최대 중첩 레벨은 63입니다. 이는 파서에 의해 수행된 간소화 또는 병합 후에 적용됩니다. 자세한 내용은 괄호로 묶인 쿼리 표현식을 참조하십시오. (버그 #103954, WL #11350)

파생 테이블에서 서브쿼리에서 사용할 수 없었던 JOIN 연산의 테이블을 가리키는 외부 참조가 잘못된 유효한 참조로 보고되던 문제가 해결되었습니다.
이와 관련된 문제로, INSERT 문장의 VALUES 절에 있는 파생 테이블에 대한 외부 참조가 유효하지 않은 것으로 인식되던 문제도 수정되었습니다. 이제 파생 테이블에 대한 이러한 참조는 VALUES 내에서 허용됩니다.
두 경우 모두에서, 외부 참조에 대해 올바른 이름 해석 컨텍스트를 사용하도록 하여 문제를 해결했습니다. (버그 #32678303, 버그 #34131822)

Performance Schema 관련 사항

Performance 및 sys 스키마는 이제 MySQL 8.0.28에서 도입된 글로벌 및 세션 메모리 한도의 메트릭을 노출합니다. Performance Schema 테이블에 다음 열이 추가되었습니다:

sys 스키마 STATEMENT_ANALYSISX$STATEMENT_ANALYSIS 뷰에도 다음 열이 추가되었습니다:

  • MAX_CONTROLLED_MEMORY
  • MAX_TOTAL_MEMORY

SETUP_INSTRUMENTS 테이블의 PROPERTIES 열에는 controlled_by_default 플래그가 추가되었습니다.
또한, 글로벌 메모리 인스트루먼트가 아닌 인스트루먼트를 제어된 메모리 인스트루먼트 집합에 추가하거나 제거하려면 SETUP_INSTRUMENTS 테이블의 FLAGS 열 값을 설정하십시오. 예:

      SQL> UPDATE PERFORMANCE_SCHEMA.SETUP_INTRUMENTS SET FLAGS="controlled" 
           WHERE NAME='memory/sql/NET::buff';

(WL #14432)

SQL 구문 관련 사항

이제 사용자 지정 JSON 값을 열 히스토그램에 설정할 수 있습니다. 이는 샘플링에서 중요한 값을 생략하는 경우에 유용할 수 있습니다. 이 기능을 통해 보조(복제본) MySQL 서버가 데이터를 샘플링하고 히스토그램을 작성하는 작업을 수행할 수 있으며, 이렇게 생성된 히스토그램은 주(소스) 서버에서 성능에 영향을 미치지 않고 사용할 수 있습니다.
이 기능은 ANALYZE TABLE ... UPDATE HISTOGRAM 명령의 확장을 통해 제공됩니다. 다음 명령어는 테이블 tbl_name의 열 col_name에 대해 히스토그램을 JSON 형식의 데이터로 설정합니다:

ANALYZE TABLE tbl_name 
  UPDATE HISTOGRAM ON col_name
  USING DATA 'json_data'

이후에 Information Schema의 COLUMN_STATISTICS 테이블에서 HISTOGRAM 열의 값을 확인할 수 있습니다.
자세한 내용과 예시는 히스토그램 통계 분석을 참조하십시오.
기여해주신 Kaiwang Chen에게 감사드립니다. (버그 #104040, 버그 #33012389, WL #15123)

이번 릴리스에서는 SQL 표준 INTERSECTEXCEPT 테이블 연산자를 지원합니다.
query_a INTERSECT query_b는 두 결과 집합에 모두 나타나는 행만 포함합니다.
query_a EXCEPT query_b는 _query_a_의 결과 집합에서 _query_b_의 결과에 포함되지 않은 행을 반환합니다.
INTERSECTEXCEPT는 모두 DISTINCTALL을 지원하며, 기본값은 DISTINCT입니다. (이것은 UNION과 동일합니다.)
INTERSECTEXCEPT 또는 UNION보다 먼저 그룹화되므로 TABLE r EXCEPT TABLE s INTERSECT TABLE tTABLE r EXCEPT (TABLE s INTERSECT TABLE t)로 평가됩니다.
자세한 내용과 예시는 INTERSECT 절EXCEPT 절을 참조하십시오. (버그 #1309, 버그 #31336, 버그 #11747209, 버그 #11744757, WL #349)

기능 추가 및 변경 사항

중요 변경 사항; 복제: Rewriter 플러그인은 SQL 쿼리를 재작성 규칙 테이블에 따라 재작성합니다. 이전에는 모든 쿼리가 권한과 상관없이 재작성되었으며, 복제 응용 프로그램 스레드, MySQL 서버 부트스트랩, 스토리지 엔진에 의해 수행되는 내부 시스템 쿼리도 포함되었습니다. 이번 MySQL 릴리스에서는 시스템 스레드에서 실행되거나 지정된 사용자의 쿼리를 재작성하지 않도록 플러그인이 재작성을 건너뛰는 메커니즘을 제공합니다.
이를 위해 새 권한 SKIP_QUERY_REWRITE를 구현하여, 쿼리가 재작성되지 않는 사용자를 지정합니다. 새로운 시스템 변수 rewriter_enabled_for_threads_without_privilege_checks는 권한 검사가 비활성화된 스레드의 재작성을 건너뛸지 여부를 제어합니다. 이러한 스레드에는 업그레이드 스레드, 초기화 스레드, PRIVILEGE_CHECKS_USERNULL인 복제 스레드가 포함됩니다. 이전 버전과의 호환성을 유지하기 위해 이 변수의 기본 설정은 ON이지만, 권장 설정은 OFF입니다.
SKIP_QUERY_REWRITErewriter_enabled_for_threads_without_privilege_checksRewriter 플러그인이 설치된 경우에만 사용할 수 있습니다.
자세한 내용은 Rewriter Query Rewrite Plugin을 참조하십시오. (WL #14527)

중요 변경 사항: OpenSSL 라이브러리가 번들로 제공되는 플랫폼에서는 MySQL 서버에 연결된 OpenSSL 라이브러리가 버전 1.1.1q로 업데이트되었습니다. OpenSSL 1.1.1q에서 수정된 문제에 대한 내용은 https://www.openssl.org/news/cl111.txthttps://www.openssl.org/news/vulnerabilities.html을 참조하십시오. (버그 #34414695)

InnoDB: 온라인 버퍼 풀 크기 조정 작업을 모니터링하기 위해 두 개의 새로운 상태 변수가 제공됩니다. Innodb_buffer_pool_resize_status_code 상태 변수는 온라인 버퍼 풀 크기 조정 작업의 단계를 나타내는 상태 코드를 보고합니다. Innodb_buffer_pool_resize_status_progress 상태 변수는 각 단계의 진행 상황을 백분율 값으로 보고합니다.
자세한 내용은 InnoDB 버퍼 풀 크기 구성을 참조하십시오. (WL #15175)

복제: 복제 필터링을 사용하는 경우, 복제본에서 더 이상 권한 검사 또는 필터링된 이벤트에 대한 require_row_format 검증과 관련된 복제 오류가 발생하지 않습니다. 이전에는 일부 권한이 필터 적용 전에 검사되었고, 다른 권한은 필터 적용 후에만 검사되었으나, 이번 릴리스에서는 모든 복제 필터가 적용된 후에 권한 검사를 연기합니다. 또한, 이전 릴리스에서는 require_row_format=1 검사가 수신 스레드와 응용 스레드 모두에서 수행되었으나, 이제는 응용 스레드에서만 필터를 평가하기 전에 이 검사를 수행합니다.
이를 통해 기존의 복제 필터를 사용하여 검증에 실패한 트랜잭션을 필터링할 수 있으며, 사용자에게 부여된 데이터베이스의 일부만 복제본에서 수락하도록 할 수 있습니다. 이는 관리 테이블에 대한 접근 권한이 없는 복제 사용자가 있는 온프레미스 또는 클라우드 서비스에서 MySQL Database Service로 마이그레이션하는 경우 유용할 수 있습니다.
권한 검사는 복제본에서 중요한 테이블을 업데이트하는 것을 방지합니다. require_row_format 검사는 안전하지 않은 작업의 복제를 방지하며, 이는 권한 검사와 함께 사용됩니다. 안전하지 않은 작업이 없음을 보장하면 세션 컨텍스트 초기화 및 정리 작업이 필요 없으며, 이러한 작업에 대한 권한을 부여할 필요도 없어집니다.
이 작업과 관련된 다른 동작 변경 사항은 다음과 같습니다:

  • require_row_format 검증을 위반하는 이벤트가 수신된 경우 더 이상 수신 스레드에서 오류가 발생하지 않으며, 복제 필터로 인해 필터링된 후 처리된 require_row_format 검증을 위반하는 이벤트에서도 응용 스레드에서 오류가 발생하지 않습니다.
  • 설정할 시스템 변수에 대한 권한 부족으로 인해 필터링된 Query 로그 이벤트에 대해 응용 스레드에서 더 이상 오류가 발생하지 않습니다:이는 해당 변수를 설정하고 응용 스레드가 이를 설정할 권한이 있는지 확인하는 작업이 필터링 후에만 수행되기 때문입니다. 이벤트가 필터링되면 응용 스레드는 변수를 설정하지 않으므로 설정할 권한이 있는지 여부를 확인할 필요가 없습니다.
  • Execute_load_query 이벤트를 처리하고 복제 필터로 인해 필터링되는 경우 더 이상 응용 스레드에서 권한 검사가 실패하지 않습니다. Append_block 또는 Begin_load_query 이벤트를 적용하고, 이후 Execute_load_query 이벤트를 처리한 후 필터링될 때도 마찬가지입니다.
  • Delete_file 이벤트에 대해서는 더 이상 권한 검사 또는 require_row_format 검사가 응용 스레드에서 실패하지 않습니다. 이러한 이벤트는 테이블명 또는 데이터베이스명을 포함하지 않으므로 필터링할 수 없습니다. Delete_file 이벤트는 데이터베이스 상태를 변경하지 않기 때문에 안전하다고 간주합니다.
  • Append_block 또는 Delete_file 이벤트를 처리할 때 PRIVILEGE_CHECKS_USER로 구성된 사용자 계정이 있고 해당 사용자가 FILE 권한이 없거나 require_row_format이 활성화된 경우 응용 스레드는 더 이상 파일 시스템에서 파일을 생성하거나 삭제하지 않습니다.
  • --replicate-rewrite-db로 수정된 복제 이벤트의 경우 권한 검사는 재작성된 데이터베이스에 적용됩니다.

자세한 내용은 서버가 복제 필터링 규칙을 평가하는 방법복제 중 복제본 오류를 참조하십시오. (버그 #33704306, 버그 #33733677, WL #15032)

새로운 Resource_group_supported 상태 변수가 서버가 리소스 그룹 기능을 지원하는지 여부를 나타내도록 추가되었습니다. (버그 #34264356)

시스템 curl 라이브러리가 아닌 curl을 포함하는 바이너리 패키지가 curl 7.85.0으로 업그레이드되었습니다. (버그 #34138733, 버그 #34614578)

새로운 thread_pool_transaction_delay 시스템 변수는 작업자 스레드가 새 트랜잭션을 실행하기 전에 대기할 시간을 밀리초 단위로 지정할 수 있습니다. 최대 값은 300,000ms(5분)입니다.
트랜잭션 지연은 병렬 트랜잭션이 리소스 경합으로 인해 다른 작업의 성능에 영향을 미치는 경우에 사용될 수 있습니다. 예를 들어, 병렬 트랜잭션이 인덱스 생성 또는 온라인 버퍼 풀 크기 조정 작업에 영향을 미치는 경우, 해당 작업이 실행되는 동안 리소스 경합을 줄이기 위해 트랜잭션 지연을 구성할 수 있습니다. (WL #15277)

새로운 thread_pool_query_threads_per_group 시스템 변수는 스레드 그룹에서 기본값인 하나의 쿼리 스레드보다 더 많은 쿼리 스레드를 늘릴 수 있습니다. 높은 동시성 스레드 풀 알고리즘(thread_pool_algorithm=1)을 사용하는 경우, 장기 실행 트랜잭션으로 인해 응답 시간이 느려지는 경우 이 값을 늘리는 것을 고려하십시오. 이 값은 thread_pool_max_transactions_limit 값을 초과할 수 없습니다. (WL #15330)

이전에는 MySQL Database Service에서만 사용할 수 있었던 스레드 풀 플러그인 기능이 이제 MySQL Enterprise Edition에서 사용할 수 있습니다.

  • thread_pool_max_transactions_limit 변수는 스레드 풀 플러그인이 허용하는 최대 트랜잭션 수를 정의합니다. 트랜잭션 한도를 정의하면 스레드가 커밋될 때까지 트랜잭션에 묶여 있어 높은 동시성에서 처리량이 안정화됩니다.
  • thread_pool_dedicated_listeners 변수는 각 스레드 그룹에서 그룹에 할당된 연결의 수신 문을 수신하는 전용 리스너 스레드를 지정합니다. 이 변수는 thread_pool_max_transactions_limit으로 정의된 트랜잭션 한도가 있을 때만 유용합니다. 각 스레드 그룹에 추가로 전용 리스너 스레드가 있으면 리소스 소비가 증가하고 스레드 풀 성능에 영향을 미칠 수 있습니다. 따라서 thread_pool_dedicated_listeners는 신중하게 사용해야 합니다.
  • TP_CONNECTION_ADMIN 권한은 사용자가 특권 연결로 서버에 접근할 수 있도록 합니다. thread_pool_max_transactions_limit으로 정의된 한도에 도달하면 새로운 연결은 서버에 접근할 수 없습니다. 특권 연결은 thread_pool_max_transactions_limit으로 정의된 한도를 무시하고 서버에 연결하여 트랜잭션 한도를 늘리거나, 한도를 제거하거나, 실행 중인 트랜잭션을 종료할 수 있습니다.

(WL #15293)

Performance Schema 테이블 replication_group_communication_information에 새로운 필드 WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE가 추가되어, 복제 그룹이 단일 합의 리더를 사용할 수 있는지 여부를 나타냅니다. 이는 group_replication_paxos_single_leader가 현재 쿼리된 멤버에서 OFF로 설정된 경우에도 적용됩니다. 이 필드는 그룹이 group_replication_paxos_single_leaderON으로 설정되어 시작되었고, 통신 프로토콜 버전이 MySQL 8.0.27 이상일 때 1로 설정됩니다. (WL #15203)

MySQL 서버의 오프라인 모드를 활성화하려면, 즉 offline_mode 시스템 변수 값을 ON으로 변경하려면 이제 SYSTEM_VARIABLES_ADMIN 권한 외에도 CONNECTION_ADMIN 권한이 필요합니다(또는 두 권한을 모두 포함하는 SUPER 권한이 필요합니다). CONNECTION_ADMIN 권한을 가진 사용자의 세션은 오프라인 모드가 활성화된 경우에도 연결이 유지되며, 해당 권한이 있는 사용자는 오프라인 서버 인스턴스에 새로 연결할 수 있습니다. 이 새로운 요구 사항은 관리자가 오프라인 모드를 활성화하여 자신을 실수로 차단하는 것을 방지합니다. (WL #13400)

읽기 전용 build_id 시스템 변수가 추가되었습니다. Linux 시스템에서는 컴파일 시 160비트 SHA1 서명이 생성되며, 이 값이 16진수 문자열로 변환되어 고유한 빌드 식별자를 제공합니다. 이 값은 서버 시작 시 서버 로그에 기록됩니다.
이 변수는 Linux 이외의 플랫폼에서는 지원되지 않습니다. (WL #15161)

Ubuntu 22.10 지원이 추가되었습니다.

버그 수정

비호환 변경: pfs_plugin_table 서비스가 이번 릴리스에서 제거되었습니다. MySQL 8.0.14 이후 사용 중단된 이 서비스는 더 이상 사용할 수 없습니다. 이 서비스를 사용하는 플러그인이나 컴포넌트는 pfs_plugin_table_v1pfs_plugin_column_*으로 업데이트해야 합니다. (버그 #34361827)

중요 변경 사항; 복제: --replicate-do-db 또는 --replicate-ignore-db를 사용할 때 기본 데이터베이스로 필터링된 쿼리 로그 이벤트에 XA START, XA END, XA COMMIT, XA ROLLBACK이 포함되었으나 XA PREPARE 또는 XA COMMIT ONE_PHASE는 포함되지 않았습니다. 이로 인해 다음과 같은 문제가 발생할 수 있습니다:

  • XA START 또는 XA END가 필터링된 경우, 트랜잭션의 첫 부분에서 XA 문 시퀀스가 무효화되어 복제본이 오류로 중지되었습니다.
  • XA START와 XA END가 유지되고 XA COMMIT 또는 XA ROLLBACK이 필터링된 경우, 복제본에서 트랜잭션이 무기한 준비 상태로 남을 수 있었습니다.

이러한 문제를 방지하기 위해 이제 --replicate-do-db 또는 --replica-ignore-db를 사용할 때 XA START, XA END, XA COMMIT, XA ROLLBACK 문을 더 이상 필터링하지 않습니다. (버그 #106201, 버그 #33764808)

InnoDB: ALGORITHM-INSTANT를 사용하여 추가 또는 삭제된 열의 행 버전을 지원하는 릴리스로 업그레이드한 후, 즉시 추가된 열과 널 허용 열이 있는 테이블에서 ADD COLUMN 작업이 실패했습니다. (버그 #34488482)

InnoDB: 동일한 ALTER TABLE 문에서 가상 열을 추가하고 다른 열을 삭제할 때 잘못된 디버그 단언 오류가 발생했습니다. (버그 #34467592)

InnoDB: 열을 삭제한 후, 삭제된 열의 이름으로 기존 열을 이름 변경한 후 열의 물리적 위치가 올바르게 설정되지 않았습니다. (버그 #34463089)

InnoDB: mtr_t::start()에서 감지된 Valgrind 오류가 수정되었습니다. (버그 #34327575)

InnoDB: 손상된 파티션 테이블에 대한 DDL 작업이 단언 실패를 발생시켰습니다. (버그 #34293555)

InnoDB: 히스토그램 샘플링 중 인덱스 블록 래치 순서 위반으로 인해 동시 삽입이 차단되고 교착 상태가 발생할 수 있었습니다. (버그 #34282448, 버그 #34174927, 버그 #107299)

InnoDB: 데이터 로드 작업 중에 ALTER TABLE 작업을 실행하면 단언 실패가 발생했습니다. (버그 #34267618)

InnoDB: Address Sanitizer(ASAN) 빌드에서 MySQL 서버 초기화 중 InnoDB 메모리 누수가 수정되었습니다. (버그 #34156050)

InnoDB: 복구 중 암호화된 undo 테이블스페이스 페이지와 관련된 테이블스페이스 개체에 필요한 암호화 키가 포함되지 않아 실패가 발생했습니다. (버그 #34148143)

InnoDB: 디버그 빌드에서 내림차순 b-tree 스캔 중 디버그 단언 실패가 발생했습니다. (버그 #34144951)

InnoDB: innodb_redo_log_consumer_advance() 함수가 잘못된 인수를 처리하지 못했습니다. (버그 #34052884)

InnoDB: ALGORITHM=INSTANT로 추가된 열이 해당 열을 추가한 DDL 작업 이전에 생성된 읽기 보기에서 표시되었습니다. (버그 #33937504)

InnoDB: 특정 테이블 ID를 가진 사용자가 생성한 테이블을 포함하는 MySQL 5.6 데이터 디렉터리를 사용하는 MySQL 인스턴스를 업그레이드하는 동안 오류가 발생했습니다. 해당 테이블 ID의 할당으로 인해 MySQL 5.7에서 MySQL 8.0으로 업그레이드할 때 충돌하는 데이터 사전 테이블 ID가 할당되었습니다.
Rahul Malik에게 감사의 말씀을 드립니다. (버그 #33919635)

InnoDB: 내재된 임시 테이블 페이지를 포함하는 버퍼 블록이 페이지 탐색 중에 재배치되어 단언 실패가 발생했습니다. (버그 #33715694)

InnoDB: 삭제된 테이블스페이스가 있는 테이블을 삭제할 때 단언 실패가 발생했습니다. (버그 #33232978)

InnoDB: 페이지 I/O 읽기 작업이 완료되지 않은 상태에서 종료 플러시 단계에 도달하면, I/O 읽기 후 변경 버퍼 병합이 완료되지 않은 페이지에서 단언 실패가 발생했습니다. (버그 #33192496)

InnoDB: dict_table_x_lock_indexes()에서 인덱스 래치 순서 위반으로 인해 단언 실패가 발생했습니다. (버그 #32912868)

InnoDB: 특정 경우 TRUNCATE TABLE 작업이 획득한 뮤텍스를 해제하지 못했습니다. (버그 #107858, 버그 #34380370)

InnoDB: 디버그 빌드에서 .cfg 파일이 없는 테이블스페이스를 가져올 때 단언 실패가 발생했습니다. (버그 #107517, 버그 #34307874)

InnoDB: trx_undo_prev_version_build() 함수에서 발생할 수 있는 메모리 누수가 수정되었습니다.
Alex Xing에게 감사의 말씀을 드립니다. (버그 #106952, 버그 #34051207)

InnoDB: 복구 중 공간 삭제 작업을 다시 수행하는 동안 디버그 단언 실패가 발생했습니다. (버그 #103482, 버그 #32819101)

InnoDB: InnoDB 시작 메시지에서 객체 풀 수를 지정하는 메시지가 버퍼 풀 인스턴스 수와 혼동을 피하기 위해 제거되었습니다. (버그 #80248, 버그 #22653060)

파티셔닝: ALTER TABLE 문이 테이블의 열 문자 집합을 변경하려고 할 때, 파티션 테이블이 예상대로 다시 파티셔닝되지 않았습니다. 이는 문자 집합 변경이 인플레이스에서 처리될 수 있는지 확인할 때, 해당 열이 테이블의 파티셔닝 표현식의 일부인지 고려하지 않았기 때문입니다. 이러한 변경이 테이블의 재파티셔닝을 유발할 수 있기 때문에, 인플레이스에서 수행될 수 없었습니다. 이제 문자 집합 변경이 계획될 때, 해당 변경이 파티셔닝 표현식의 일부인 열에 영향을 미치는지 확인합니다. 영향을 미치지 않으면 인플레이스에서 작업을 수행할 수 있습니다. (버그 #106884, 버그 #34031693)

복제: 복제 정보 처리에서 내부 오류가 수정되었습니다. (버그 #34214416)

복제: 단일 이벤트가 복제본의 테이블에서 동일한 행에 여러 업데이트를 발생시킬 때, 원본에 기본 키가 없으면 변경 사항을 적용할 수 없었습니다. 이제 복제본 테이블에 기본 키가 있어도 해시 기반 행 조회 알고리즘이 작동합니다. (버그 #34114296)

복제: 단일 문이 복제본의 여러 테이블에 대해 여러 쓰기 이벤트를 생성할 때, 복제본 테이블의 추가 자동 증가 열은 마지막으로 생성된 이벤트에 대해서만 정리되었습니다. 마지막 이벤트가 추가 자동 증가 열을 포함하지 않았을 경우, 전혀 정리되지 않았습니다. 이제 여러 쓰기 이벤트에 대해 항상 정리 프로세스가 수행됩니다. (버그 #34095290)

복제: group_replication_force_members 시스템 변수가 설정되어 있고, 보기 변경 대기 시간이 초과되었을 때 클라이언트에 잘못된 오류가 반환되었습니다. 오류와 관련된 오류 메시지가 업데이트되어 시스템 변수에 대해 제공된 값이 잘못되었음을 암시하지 않도록 수정되었습니다. (버그 #34091087)

복제: 성능 스키마 테이블 replication_applier_filters의 FILTER_RULE 열이 존재하지 않는 필터에 대해 잘못된 데이터를 표시했습니다. 이제 이 테이블은 이 경우 빈 문자열을 표시합니다. (버그 #33885484)

복제: 드물게 발생하는 플러시 또는 동기화 오류로 인해 서버가 바이너리 로그 끝점 업데이트를 파일과 파일 내 위치 모두에 대해 유효하지 않은 값을 사용하여 시도할 수 있었습니다.
이를 해결하기 위해, 내부 함수 update_binlog_end_pos(binlog_file, pos)는 파일과 위치 매개변수가 유효한 경우에만 호출됩니다. (버그 #33818238)

복제: 잘못된 GTID 로그 이벤트의 SID를 사용하는 작업이 가끔씩 정의되지 않은 동작으로 이어졌습니다.
이제 SID가 항상 초기화되도록 수정되었습니다. 잘못된 GTID 로그 이벤트에 속할 때도 마찬가지입니다. (버그 #33784022)

복제: 상태 변수(MAX_SIZE_LOG_EVENT_STATUS)의 최대 길이 계산이 올바르게 수행되지 않았습니다.
이 수정에서 해결된 문제는 다음과 같습니다:

  • sql_require_primary_keydefault_table_encryption에는 2바이트가 필요합니다(하나는 타입 ID, 하나는 변수).
  • time_zone의 최대 길이는 255로 계산되었으나, MAX_TIME_ZONE_NAME_LENGTH로 수정되었습니다.
  • 사용자 변수의 길이, binlog_accessed_db_names에 저장된 데이터베이스 ID 수, 마이크로초의 타입을 저장하는 데 각각 추가 바이트가 필요합니다.

또한 실제로 사용되지 않았던 master_data_written이 제거되었습니다. (버그 #33713071)

복제: 32비트 플랫폼에서 binlog_expire_logs_seconds2147483648(231) 이상으로 설정하면 지정된 시간이 경과하기 전에 모든 바이너리 로그가 제거되는 문제가 있었습니다. (버그 #33670457)

복제: 그룹 구성 변경이 진행 중일 때 새로운 멤버가 가입할 수 없습니다. 이 시나리오에서 발생하는 오류 메시지는 이제 기본 선출(primary election), 단일 기본 모드와 다중 기본 모드 간의 전환(swap), 또는 그룹 통신 프로토콜의 변경과 같은 진행 중인 작업을 명시합니다. (버그 #32766981)

복제: 바이너리 로그 송신 스레드가 하트비트가 활성화된 상태에서 업데이트를 기다리는 동안 가끔씩 업데이트 신호를 놓치기 때문에, 신호가 발행되고 스레드가 이를 인식할 때까지 변경 사항이 복제되지 않았습니다.
기여해주신 Facebook에 감사드립니다. (버그 #104491, 버그 #33176377)

그룹 복제: START REPLICASTOP REPLICA 명령어는 그룹 복제 적용 채널(group_replication_applier)에 대해 허용되었으나, 채널을 수동으로 중지하고 시작하면 복제 그룹의 온라인 멤버가 원격 트랜잭션을 커밋할 수 없게 될 수 있었습니다. 그룹 복제가 실행 중일 때는 더 이상 이 채널에 대해 해당 명령어를 사용할 수 없습니다. (버그 #34231291)

그룹 복제: 서버 인스턴스에서 그룹 복제를 시작했을 때, 비호환 구성과 같은 오류가 발생하여 멤버가 즉시 떠나면서 교착 상태가 발생할 수 있었습니다. 이제 서비스 레지스트리는 대체 프로세스를 통해 서비스를 등록하고 등록 취소하여 이러한 문제를 방지합니다. (버그 #34194893)

그룹 복제: InnoDB ClusterSet에서 커밋 순서 교착 상태가 발생한 후 재시도하는 동안, 그룹 복제가 트랜잭션 인증(certificate) 중에 트랜잭션의 GTID가 이미 사용되었다는 오류와 함께 트랜잭션을 롤백할 수 있었습니다. 이제 GTID가 서버 인스턴스와 그룹 모두에서 사용된 경우에만 오류가 반환됩니다. (버그 #34157846)

그룹 복제: 트랜잭션 커밋에 충돌이 없고 올바른 순서에 있는지 확인한 후, 그룹 복제는 커밋하는 세션에 응답을 보냅니다. 이벤트 스케줄러 스레드가 시작되었을 때, 그룹 복제가 커밋 세션을 찾을 수 없었고, 그로 인해 멤버가 ERROR 상태로 전환되어 그룹을 떠났습니다. 이벤트 스케줄러 스레드를 시작하는 데 사용된 데몬 스레드를 찾기 위해 커밋 세션을 찾는 절차가 확장되었습니다. 기여해주신 Lou Shuai에게 감사드립니다. (버그 #107635, 버그 #34312482)

동일한 연결에서 많은 저장 프로시저를 호출하면 서버가 점점 더 많은 가상 메모리를 소비하게 되었습니다. (버그 #35110491)

시스템 변수 replication_optimize_for_static_plugin_config가 활성화되어 반동기 복제(semi-synchronous replication)의 성능이 개선된 경우, RAPID 플러그인을 서버에서 사용할 수 없었습니다. 알림 처리 문제로 인해 발생한 이 문제가 수정되었습니다. (버그 #34549470)

많은 선행 0을 포함하는 문자열을 소수(decimal)로 변환할 때 잘못된 값으로 표시되어 반환된 값이 주어진 정밀도 및 스케일에 대한 최대 소수 값으로 표시되었습니다.
이러한 경우에 모든 선행 0을 변환 전에 단일 0으로 대체하여 이 문제를 수정했습니다. (버그 #34479194)

Windows의 WSAPoll 함수와 유닉스 계열 시스템의 poll() 함수 간의 차이로 인해, Windows의 스레드 풀 코드가 유효하지 않은 파일 디스크립터 또는 소켓을 I/O에 준비된 것으로 간주하게 되었습니다. (버그 #34478731)

MySQL 8.0.27 이상 버전의 인스턴스가 MySQL 8.0.26에서 실행 중인 복제 그룹에 가입하면, 멤버 작업 구성이 그룹의 나머지 구성과 일치하도록 mysql_start_failover_channels_if_primary 작업이 제거되었습니다. 그러나 인스턴스가 MySQL 8.0.27 이상으로 업그레이드되면, 해당 작업은 group_replication_reset_member_actions() 명령을 실행하지 않는 한 다시 설정되지 않았습니다. 가입하는 멤버는 이제 mysql_start_failover_channels_if_primary 작업이 사용 가능한지 확인하고, 사용 가능한 경우 이를 멤버 작업 구성에 추가합니다. (버그 #34464526)

쿼리의 SELECT 목록에 사용된 상수 표현식이 서버에서 항상 올바르게 처리되지 않았습니다. (버그 #34418412)

Json_table_column::fill_column()에서 누락된 오류 검사가 추가되었습니다. (버그 #34416304)

여러 인수를 수락하는 일부 문자열 함수가 모든 인수를 올바르게 처리하지 않았습니다. (버그 #34393009)

UNION 결과를 저장하는 임시 테이블에 대해 생성된 YEAR 유형의 열이 항상 올바른 길이를 보장하지 않았습니다. (버그 #34370933)

뷰(v1)가 다른 뷰(v2)에 액세스했을 때, v2가 다시 생성되면 SHOW COLUMNS FROM v1이 잘못된 뷰 오류를 보고했습니다. 이 문제는 사용자가 역할을 통한 전역 권한을 부여받았으나, 테이블 수준 권한이 부여되지 않았을 때만 발생할 수 있었습니다. 테이블 수준 권한이 없을 경우 전역 권한을 확인하는 방식으로 수정되었습니다. (버그 #34341533)

성능 스키마 테이블 replication_group_member_actions에 대한 쿼리가 스레드 간 충돌로 인해 실패할 수 있었습니다. 이제 이 문제가 수정되었습니다. (버그 #34337673)

상수 테이블을 읽을 때 항목 평가 후 누락된 오류 검사가 추가되었습니다. (버그 #34327798)

특정 경우에 유도 테이블을 다시 구문 분석하고 복제하는 작업이 항상 올바르게 처리되지 않았습니다. (버그 #34317258, 버그 #34408241)

여러 쿼리 블록이 있는 경우 집합 연산을 사용한 유도 테이블로 조건을 푸시하는 작업이 항상 올바르게 처리되지 않았습니다. (버그 #34306361)

RSA 키 생성 중 시작 실패로 인해 키가 비어 있거나 불완전하게 생성되는 문제가 발생했습니다. 이제 키는 오류 발생 시에도 안전하게 생성됩니다. (버그 #34274914)

두 문자열 값을 명시적으로 COLLATE 절을 사용하여 비교할 때, 두 값이 동일한 정렬 순서를 가져야 하며, 그렇지 않을 경우 비교는 거부되어야 합니다. 그러나 이 요구 사항이 항상 적용되지 않았습니다.
더 자세한 내용은 Expressions에서 정렬 순서(Coercibility) 강제 적용을 참조하십시오. (버그 #34274525)

바이너리 로그에서 읽은 CREATE USER 작업이 복제본 서버에서 예기치 않은 구문 오류로 인해 실행되지 않았습니다. (버그 #34178823)

정밀도 불일치로 인해 가끔씩 정수 값을 FLOAT로 변환하는 CAST 작업에서 문제가 발생할 수 있었습니다. SQL_BIG_RESULT 대신 SQL_SMALL_RESULT을 사용할 때 발생했습니다(자세한 내용은 SELECT을 참조하십시오).
SQL_BIG_RESULT의 경우, 값이 IEEE 32비트 부동 소수점 값의 고유한 정밀도에 따라 잘렸으며, 이는 올바른 동작입니다. SQL_SMALL_RESULT의 경우, 값이 임시 테이블로 복사되었을 때 원래 정수 값의 정밀도가 유지되었습니다. 이 테이블은 이중 정밀도 값만 지원했으며, 이러한 값이 나중에 클라이언트로 다시 복사되었습니다.
이 문제는 이러한 값을 임시 테이블로 복사할 때 부동 소수점 값의 유형을 구분하여, 이중 정밀도 값은 이중(double)으로, 단일 정밀도 값은 단일(float)로 저장되도록 함으로써 해결되었습니다. (버그 #34167787)

소스 코드의 대부분에서 codespell을 실행하고, 코드 주석에 보고된 맞춤법 오류를 수정했습니다. (버그 #34163323)

특정 경우에 내부 함수 포인터를 호출하기 전에 검사할 때 잘못된 포인터가 유효성 검사를 받았습니다. (버그 #34134738)

eq_ref 액세스 경로와 해당 반복기(iterator) 모두 정렬된 인덱스 스캔을 사용할지 여부를 결정하기 위해 use_order 멤버를 사용했습니다. 그러나 eq_ref는 최대 하나의 행만 반환하기 때문에, 정렬하는 것은 불필요합니다. 따라서, use_order는 여기서 목적이 없으며, 액세스 경로와 해당 반복기에서 제거되었습니다. (버그 #34122706)

ADD_GDB_INDEX CMake 옵션이 이제 유닛 테스트를 로드할 때도 작동하도록 개선되었습니다. (버그 #34117732)
참조: 버그 #29925009도 참조하십시오.

GNU ‘gold’ 링커 지원이 제거되었으며, 관련된 USE_LD_GOLD CMake 옵션도 제거되었습니다. (버그 #34094324)

MySQL 5.7 데이터 디렉토리에 수동으로 생성된 디렉토리(5.7에서 스키마 디렉토리로 처리됨)에 특수 문자가 있거나, #mysql50# 접두사를 사용하는 스키마와 테이블에 특수 문자가 포함된 경우 MySQL 8.0으로 업그레이드 후 DDL 작업이 실패할 수 있었습니다. MySQL 8.0에서는 특수 문자가 물음표(?) 문자로 대체되어 데이터 사전에 객체 이름이 추가되기 때문에, 이름 불일치로 인해 영향을 받는 객체에 대한 DDL 작업이 실패했습니다. 잘못된 스키마와 테이블 이름이 발견되면 업그레이드가 오류와 함께 중지됩니다.
MySQL 5.7에서 잘못된 스키마와 테이블 이름을 유효한 인코딩으로 업데이트하려면 mysqlcheck를 사용하여 수정할 수 있습니다. 잘못된 이름을 식별하려면 다음 명령을 실행하십시오:

mysqlcheck --check-upgrade --all-databases

잘못된 이름을 수정하려면 다음 명령을 실행하십시오:

mysqlcheck --fix-db-names --fix-table-names --all-databases

MySQL 5.7에서는 다음 SQL 구문을 사용하여 특수 문자가 있는 디렉토리 이름도 유효한 인코딩으로 업데이트할 수 있습니다:

ALTER DATABASE `directory_name` UPGRADE DATA DIRECTORY NAME;

(버그 #34066605)

null-safe equal operator([<=>])를 사용하는 조건이 이제 실행기에서 equijoin 조건으로 간주될 수 있습니다. 이러한 조건을 사용하는 조건자는 equijoin 조건자로 간주되지 않고, 조인을 평가한 후 추가로 평가할 조건자로 간주됩니다. (버그 #34063499)

MySQL Enterprise Encryption 컴포넌트를 OpenSSL 3과 함께 컴파일할 수 있도록 지원이 추가되었습니다. (버그 #34043029)

소스 코드에서 codespell을 실행하고 코드 주석에 보고된 맞춤법 오류를 수정했습니다. (버그 #34006439)

하나 이상의 인수가 시간 값일 때, GREATEST() 함수에 전달된 순서가 결과에 영향을 미칠 수 있었습니다. (버그 #33996054)

SELECT 쿼리가 중첩된 서브쿼리를 포함하는 유도 테이블에 대해 LEFT JOIN을 실행하고 IN 조건자를 사용한 WHERE 절의 일부로 사용될 때 잘못된 결과가 반환되었습니다. (버그 #33971286)

vio_ssl_write()ssl_handshake_loop() 함수에서 ERR_clear_error()를 호출하면 OpenSSL 3.0으로 컴파일할 때 오류가 발생했습니다. (버그 #33967647)

서버가 중첩된 뷰를 항상 예상대로 처리하지 않았습니다. (버그 #33876690)

mysqlpump가 쿼리 FROM 절에 의해 생성된 유도 테이블을 사용할 수 있는 올바른 권한을 부여받지 못해, 유도 테이블이 있는 경우 덤프 프로세스가 중지될 수 있었습니다. 이제 유도 테이블이 개별적으로 처리되며, 해당 테이블에 대한 권한이 설정됩니다. (버그 #33866103)

여러 AND, OR, XOR 조건을 포함하는 SELECT 쿼리를 하위 쿼리로 사용하는 저장 프로시저를 반복 실행하면 과도한 메모리 사용과 가상 메모리의 소진이 발생할 수 있었습니다. (버그 #33852530)

EXPLAIN ANALYZE는 쿼리 계획에서 각 반복기(iterator)의 예상 비용 및 경과 시간을 제공합니다. 이러한 숫자는 누적되는 것으로 예상되므로, 주어진 반복기의 비용(또는 시간)에는 해당 반복기가 의존하는 반복기의 비용이 포함됩니다. 예를 들어, t1 테이블을 스캔한 다음 t2에서 기본 키 조회를 사용하여 t1 테이블과 t2 테이블을 조인하는 데 필요한 예상 비용은 t1을 스캔하는 비용과 t2에서의 기본 키 조회의 카디널리티 조회 비용을 더한 값보다 적어서는 안 됩니다.
일부 쿼리에서 물질화 또는 임시 테이블을 포함하는 경우 이러한 숫자가 누적되지 않았습니다. 또한, UNION 연산의 결과를 물질화한 후, 임시(물질화된) 테이블에서 테이블 스캔을 수행할 때 비용 추정이 잘못되었습니다. (버그 #33834146, 버그 #34302461)

두 문자열 값을 비교할 때, 문자열의 순서에 따라 정렬 강제(coercion)가 달라졌습니다. 하나는 utf8mb4 문자 집합을 사용하고 다른 하나는 utf8mb3를 사용하는 경우, 왼쪽 피연산자가 utf8mb4일 때는 utf8mb4 정렬이 사용되었고, 왼쪽 피연산자가 utf8mb3일 때는 utf8mb3 정렬이 사용되었습니다.
문제의 근본 원인은 ASCII 문자열에 대한 강제 처리를 위해 사용된 특수 처리 방식에 있었습니다. 두 문자열이 모두 리터럴일 때, ASCII와 비ASCII 문자를 스캔하고, 이에 따라 레퍼토리 속성이 설정되었습니다. 이로 인해 한 문자열은 ASCII로 처리되는 반면, 다른 문자열은 그렇지 않게 되었습니다. utf8mb4 문자열이 ASCII로 간주되고 utf8mb3 문자열과 호환되는 경우, 비교 전에 잘못 변환되었습니다.
이 문제는 실제 문자열이 아닌 문자 집합에서 파생된 내부 MY_CS_PUREASCII 속성을 사용하여 해결되었습니다. 이를 통해 정렬 순서의 결정이 결정론적(deterministic)으로 이루어집니다. 이제 이러한 경우, 어느 문자열도 ASCII로 식별되지 않으며, 비교가 수행되기 전에 utf8mb3utf8mb4로 변환됩니다. (버그 #33801312)

connect_timeout 한도의 적용 범위가 전체 패킷 읽기로 확장되었습니다. (버그 #33723597)
참조: 버그 #34574013도 참조하십시오.

이벤트 스케줄러가 서버에서 자동으로 재시작되는지 확인하기 위한 새로운 유효성 검사가 추가되었습니다. (버그 #33711304)
참조: 버그 #33539082도 참조하십시오.

커서가 없는 상태에서 준비된 문을 실행하면, 이전 실행이 커서를 사용했을 경우 잘못된 결과를 반환할 수 있었습니다. 이 문제는 커서 사용 여부에 따라 사용할 두 개의 쿼리 결과 객체를 생성하고 저장하여 해결되었습니다. 객체는 필요할 때 생성되므로, 준비된 문이 커서 없이만 사용된 경우 커서 전용 쿼리 결과 객체는 생성되지 않습니다. (버그 #33535746)

매개변수가 있는 준비된 문이 행을 업데이트하지 못했을 수 있지만, 동일한 데이터로 동일한 문을 쿼리로 실행하면 행이 업데이트되었습니다. 이 문제는 매개변수에 기본 데이터 유형을 할당하여 해결되었습니다. 그러나 이 경우에는 데이터 유형 전파를 위한 컨텍스트가 없기 때문에 비효율적일 수 있으며, 암시적으로 문자열 유형이 부여됩니다. 이러한 경우 최선의 방법은 해당 매개변수 선언을 원하는 데이터 유형을 제공하는 CAST 절로 감싸는 것입니다. (버그 #33521861)

FEDERATED 스토리지 엔진을 사용하는 테이블에서 로컬 서버의 연속적인 쿼리 간의 지연이 원격 서버의 대기 시간 제한(wait_timeout 설정)을 초과했을 경우, 로컬 서버에서 패킷 오류가 반환되었습니다. 이제 로컬 서버가 원격 서버의 시간 초과 오류를 올바르게 처리하고, 다시 연결한 후 문을 다시 실행합니다. (버그 #33500956)

조인 최적화 중 발생할 수 있는 예기치 않은 조건을 처리했습니다. (버그 #31401468)
참조: 버그 #34350945도 참조하십시오.

SET @@character_set_client = @@character_set_system 실행 후, 옵티마이저 힌트가 올바르게 구문 분석되지 않았습니다. (버그 #107820, 버그 #34370403)

MyISAM 테이블의 열에서 boolean 모드로 전체 텍스트 검색을 수행하는 쿼리가, 열이 문자열 유형이 아닌 경우 디버그 빌드에서 어설션을 발생시켰습니다. 이는 MyISAM이 boolean 모드에서 인덱스가 없는 MATCH 열을 허용하며, 정수 열도 허용하기 때문입니다. 정수 열은 상수 전파(constant propagation)의 영향을 받습니다. MyISAM 외의 스토리지 엔진을 사용하는 테이블에 대한 쿼리는 이 문제의 영향을 받지 않았습니다.
이 문제는 열이 문자열 유형이 아닌 경우 MATCH 절에서 상수 전파를 비활성화하여 해결되었습니다. 이를 통해 해당 열에 열 참조만 포함되어 있다고 안전하게 가정할 수 있습니다. (버그 #107638, 버그 #34311472)

my_time.cc의 주석에서 오류를 수정했습니다. 기여해주신 Dimitry Kudryavtsev에게 감사드립니다. (버그 #107633, 버그 #34308417)

MySQL 8.0.24에서 연결 오류 처리의 변경 사항으로 인해, max_allowed_packet을 초과하는 등의 오류로 인해 mysql 클라이언트가 서버에서 연결이 끊어진 경우, 이후에 연결이 끊어졌음을 나타내는 오류가 재설정되지 않았습니다. 이후 쿼리에서 원래 오류가 반환되었고, mysql 클라이언트에서 연결이 끊어지는 오류가 없기 때문에 자동 재연결이 이루어지지 않았습니다. 이제 오류가 재설정되어 연결 끊김을 나타내고 클라이언트에서 재연결을 허용합니다. (버그 #107605, 버그 #34303841)

MySQL 8.0.29에서의 버그 수정 후, 암호가 옵션 파일에 제공된 경우, 로그인 시 -p 옵션이 지정되면 mysql 클라이언트에서 암호를 묻는 프롬프트가 표시되지 않았습니다. 이제 클라이언트는 항상 -p 옵션이 지정된 경우 암호를 묻는 프롬프트를 표시하며, 옵션 파일에서 채워진 대체 암호가 있더라도 지정된 암호를 사용합니다. (버그 #107205, 버그 #34134984)

암호화된 연결을 사용하지 않도록 하는 서버 옵션 --ssl=off에 대한 대체 옵션이 문서화된 대로 또는 사용 중단 경고에서 제공된 대로 작동하지 않았습니다. 이제 tls_version 시스템 변수를 빈 값(tls_version='')으로 설정하여 이 목적을 올바르게 수행할 수 있습니다. (버그 #106459, 버그 #33858646)

BIT 열에 대한 집계 쿼리가 비트 문자열로 서식화된 값을 반환했으나, 자동으로 BINARY 플래그가 추가되었습니다. 이제 새 유효성 검사가 BIT 결과에 대해 BINARY 플래그 설정을 건너뜁니다. (버그 #106241, 버그 #33781442)

SHOW SLAVE STATUSSHOW SLAVE HOSTSSHOW REPLICA STATUSSHOW REPLICA HOSTS 도입 이후 이전보다 더 많은 CPU를 사용했습니다. (버그 #105924, 버그 #33684069)

NO_SKIP_SCAN 힌트가 테이블 스킵 스캔에 사용되지 않을 특정 인덱스를 참조할 때, 다른 가능한 인덱스도 모두 무시되었으며, 그 결과 테이블의 모든 인덱스에 대해 스킵 스캔이 사용되지 않았습니다.
이는 NO_SKIP_SCAN 힌트가 모든 인덱스에 적용되지 않는 경우, 스킵 스캔을 위한 모든 가능한 키에 대해 처리가 수행되지 않았기 때문입니다. (버그 #104670, 버그 #33251616)

값 목록이 길어짐에 따라 WHERE column IN (list)을 사용하는 쿼리가 점점 더 많은 CPU 시간을 소비했습니다. (버그 #102037, 버그 #32311183)

Leave a Comment



이 문서 공유

8.0.31 변경 사항 (2022-10-11 GA)

링크 복사

CONTENTS