MySQL 8.0 Release Note

8.0.35 변경 사항 (2023-10-25 GA)

Estimated reading: 2 minutes 127 views

공식 문서: Changes in MySQL 8.0.35 (2023-10-25, General Availability)

감사 로그 관련 사항

MySQL Enterprise Audit의 삭제를 간소화하기 위해, 새로운 스크립트 audit_log_filter_uninstall.sql을 추가했습니다. MySQL Enterprise Audit부분도 참고바랍니다. (버그 #35611072)

인증 관련 사항

플러그형 FIDO 인증 방법은 비추천되었으며, 향후 MySQL 릴리스에서 제거될 수 있습니다. (WL #15006)

C API 관련 사항

MySQL 5.1이나 MySQL 5.0 등의 이전 배포판에는 플러그형 인증을 알리지 않는 서버가 포함되어 있었습니다. 플러그형 인증 방법을 사용하는 새로운 클라이언트가 이러한 오래된 서버 중 하나에 연결하려고 하면, 서버는 “bad handshake” 오류 메시지를 발생시켰습니다. 이번 수정으로 인해, 클라이언트 측 인증(특히 --default-auth 옵션)이 플러그형 인증을 지원하지 않는 서버를 포함한 모든 서버에서 적절하게 동작하도록 되었습니다. 또한, 서버가 플러그형 인증을 지원하지 않는 경우, 기본 인증 방법으로 caching_sha2_password 대신 mysql_native_password가 사용되도록 변경되었습니다. (버그 #90994, 버그 #28082093)

mysql_ssl_set() C API 함수는 비추천되었으며, 향후 MySQL 릴리스에서 제거될 수 있습니다. 모든 mysql_ssl_set() 파라미터에 동등한 mysql_options() TLS 옵션이 있습니다. (WL #11091)

컴파일 관련 사항

WITH_DEVELOPER_ENTITLEMENTS macOS CMake 옵션을 수정했습니다; 오타로 인해 활성화되지 않았습니다. (버그 #35374026)

Clang 12로 컴파일할 때 생성되는 문자열 연결 경고를 수정했습니다. (버그 #111614, 버그 #35549962)

WITH_ZLIB 기능을 더욱 개선했습니다.
기여해 주신 니콜라이 코스트리긴에게 감사드립니다.(버그 #111549, 버그 #35534309)

Protobuf 22에서는 Abseil 종속성이 추가되었기 때문에, Protobuf 22 이후 버전에서는 WITH_PROTOBUF=system을 사용한 빌드가 실패했습니다. (버그 #111469, 버그 #111623, 버그 #35546459, 버그 #35550389)

WITH_ZLIB="system"을 지정하여 빌드하면, ZLIB를 찾을 수 없어서 MySQL 빌드가 중단됩니다.
이 수정에 기여해 주신 Meng-Hsiu Chiang과 아마존팀에게 감사의 말씀을 전합니다. (버그 #111467, 버그 #35511210)
참고: 이 문제는 버그 #35057542의 회귀입니다.

EL7 aarch64 기반 플랫폼에서, MySQL 서버가 예기치 않게 중단되는 원인이었던 CPU 캐시 라인 크기를 가져올 때 0이 반환되는 문제를 수정했습니다. (버그 #110752, 버그 #35479763)
참고: 버그 #107081, 버그 #34095278도 참조하십시오.

C++ 표준화 위원회의 라이브러리 워킹 그룹은 최근 std::pair의 비교 연산자 정의 방법을 변경하는 문제(LWG-3865 Sorting a range of pairs)를 해결했습니다. 이번 수정으로 인해, 이 변경에 맞추어 sql/auth의 두 파일에서 사용되는 등가 연산자가 업데이트됩니다.
이는 Microsoft Visual Studio 팀의 제안을 기반으로 합니다. (버그 #110254, 버그 #35137978)

사용 중단 및 제거 관련 사항

복제: binlog_transaction_dependency_tracking 서버 시스템 변수는 현재 비추천 상태이며, MySQL의 향후 버전에서 제거될 수 있습니다. 이 변수의 값을 설정하거나 가져올 때, 동등한 시작 옵션 --binlog-transaction-dependency-tracking을 사용하는 경우와 마찬가지로, 경고가 발생하게 되었습니다. 이 변수(또는 옵션)에 의존하는 애플리케이션은 가능한 한 빨리 이를 대체하는 작업을 시작해야 합니다. 이 변수나 그 기능을 대체할 계획은 없으며, 필요도 없습니다. (WL #13964)

oldnew 서버 시스템 변수는 비추천되었으며, 이 변수들 중 하나를 설정하거나 읽을 때마다 경고가 발생하게 되었습니다. 이 변수들은 MySQL의 향후 버전에서 제거될 예정입니다. 이들에 의존하는 애플리케이션은 가능한 한 빨리 이러한 의존성에서 벗어나도록 해야 합니다. (WL #8609)

--character-set-client-handshake 서버 옵션은 원래 MySQL의 매우 오래된 버전에서 업그레이드할 때 사용하기 위한 것이었으나, 현재는 비추천 상태이며, 사용할 때마다 경고가 발생합니다. 이 옵션은 MySQL의 향후 버전에서 제거될 예정입니다. 이 옵션에 의존하는 애플리케이션은 가능한 한 빨리 이 옵션에서의 전환을 시작해야 합니다. (WL #13220)

이번 릴리스의 두 가지 변경 사항은 MySQL의 권한 설정에 영향을 미칩니다. 이 변경 사항 중 하나는 데이터베이스 권한 설정에 영향을 주며, 다른 하나는 권한 설정에 사용되는 호스트명과 관련이 있습니다. 이러한 변경 사항은 다음과 같습니다:

  1. 데이터베이스 수준 권한 설정: 데이터베이스 수준의 권한 설정에서 와일드카드로 문자 %_를 사용하는 것은 현재 비추천 상태이며, 이 와일드카드 기능은 향후 MySQL 릴리스에서 제거될 예정입니다. 이러한 문자는 partial_revokes 서버 시스템 변수의 값이 ON인 경우 항상 리터럴로 취급되므로, 항상 리터럴로 취급되는 것이 목적입니다.예를 들어, partial_revokesON으로 설정하면, GRANT SELECT ON db_.* TO user1에 의해 user1db_라는 이름의 데이터베이스 내의 테이블에서 선택할 수 있지만, db1, db2, dbx, dby 등의 데이터베이스의 테이블에서는 선택할 수 없습니다. 권한 설정의 데이터베이스명에서의 와일드카드 지원이 제거되면, 항상 이것이 적용된다고 가정해야 합니다.
  2. 권한 설정 내의 호스트명 %: 권한을 검사할 때 localhost의 동의어로 서버에서 %를 취급하는 것도 현재 비추천 상태이며, MySQL의 향후 버전에서 제거될 수 있습니다.
    현재, 'user1'@'%'에게 부여된 권한은 'user1'@'localhost'에게도 부여됩니다. 이 자동 할당은 현재 비추천입니다. 이 동작이 제거되면, 항상 localhost 호스트명을 사용하여 'user1'@'localhost'에게 명시적으로 권한을 부여해야 합니다.
주의
위의 어느 경우에도, 사용자 세션이나 로그에 경고나 오류는 표시되지 않습니다.
이는 해당 메시지가 너무 많이 생성되는 것을 방지하기 위함입니다.

(WL #14280, WL #15676)

INFORMATION_SCHEMA.PROCESSLIST는 비추천되었으며, 향후 MySQL 릴리스에서 제거될 수 있습니다. 따라서 이 테이블을 사용하는 SHOW PROCESSLIST의 구현도 비추천됩니다.
대신 SHOW PROCESSLIST의 Performance Schema 구현을 사용하는 것을 권장합니다. 따라서 performance_schema_show_processlist도 비추천되었으며, 향후 MySQL 릴리스에서 제거될 수 있습니다. (WL #15915)

[앞으로 information_schema의 processlist와 show processlist 명령을 제거할 것이니, performance_schema.processlist를 사용하도록 하라는 것. performance_schema_show_processlist 옵션이 없어진 다는 것은, 이 기능을 꺼버릴 수 없게 하기 위해서 그런 것으로 보임]

TLS_AES_128_CCM_8_SHA256 암호 스위트의 지원은 현재 비추천 상태이며, MySQL의 향후 버전에서 제거될 수 있습니다. 이를 tls_ciphersuites 또는 admin_tls_ciphersuites 시스템 변수를 사용하여 설정하려고 하면, 경고가 반환되게 되었습니다. 기본적으로 두 시스템 변수 모두 아래와 같은 암호 집합을 허용합니다:

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_AES_128_CCM_SHA256

이전에 지원되었던 몇몇 암호는 현재 비추천 상태이며, MySQL의 향후 버전에서 제거될 수 있습니다. ssl_cipher 또는 admin_ssl_cipher 시스템 변수를 사용하여 비추천된 암호가 지정된 경우, 경고가 발생하게 되었습니다. 다음 암호는 비추천 경고 없이 계속 지원됩니다:

  • ECDHE-ECDSA-AES128-GCM-SHA256
  • ECDHE-ECDSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES256-GCM-SHA384
  • ECDHE-ECDSA-CHACHA20-POLY1305
  • ECDHE-RSA-CHACHA20-POLY1305
  • ECDHE-ECDSA-AES256-CCM
  • ECDHE-ECDSA-AES128-CCM
  • DHE-RSA-AES128-GCM-SHA256
  • DHE-RSA-AES256-GCM-SHA384
  • DHE-RSA-AES256-CCM
  • DHE-RSA-AES128-CCM
  • DHE-RSA-CHACHA20-POLY1305

(WL #15800)

SQL 함수 및 연산자 관련 사항

STR_TO_DATE() 함수는 변환되는 문자열에 대해 완전한 범위 검사를 수행하지 않았기 때문에, “2021-11-31″과 같은 유효하지 않은 날짜를 생성하는 문자열을 전달할 수 있었습니다. (버그 #108782, 버그 #34704094)

패키징 관련 사항

Windows에서는 MSI 패키지 정의 파일이 Windows Installer XML(WiX) 툴셋 버전 4에서 동작하도록 업데이트되었습니다. 이전 버전의 툴셋은 더 이상 사용할 수 없음을 유의하십시오. (버그 #35613791)

번들된 libedit 라이브러리가 버전 20221030-3.1로 업그레이드되었습니다. (버그 #35489173)

보안 관련 사항

시스템의 curl 라이브러리에 링크하지 않고 curl을 포함하는 바이너리 패키지가 curl 8.4.0을 사용하도록 업그레이드되었습니다. curl 버전 8.4.0에서 수정된 중요한 문제에 대해서는 https://curl.se/docs/security.html을 참조하십시오. (버그 #35897778)
참고: 버그 #35709229도 참조하십시오.

추가 및 변경된 기능

호환되지 않는 변경 사항: 번들된 libfido2 라이브러리가 libfido2 v1.13.0으로 업그레이드되었습니다. 이 libfido2 버전은 OpenSSL 1.1.1 이상이 필요합니다. 즉, authentication_fido 인증 플러그인과 authentication_fido_client 인증 플러그인은 Enterprise Linux 6 및 7, Solaris 11, SLES 12 플랫폼에서 더 이상 사용할 수 없게 되었습니다. (버그 #35685515)

중요한 변경 사항: 그룹 복제: 이번 릴리스부터 그룹의 버전 요구 사항이 다음과 같이 완화되었습니다:

  • 버전 8.0.35 이상의 MySQL 8.0 릴리스를 실행하는 서버는 동일한 그룹에 참여할 수 있습니다.
  • 8.0.35보다 최신의 MySQL 8.0 릴리스를 실행하는 그룹 멤버는 이전 릴리스로 다운그레이드할 수 있습니다.

이 변경에도 불구하고, 프라이머리를 선택할 때 그룹 내에서 가장 낮은 MySQL 버전을 실행하는 노드가 프라이머리여야 한다는 요구 사항은 그대로 유지됩니다. 이는 자동으로 프라이머리가 선택되든, group_replication_set_as_primary()를 실행하든 관계없이 적용됩니다. (버그 #35397276)

중요한 변경 사항: OpenSSL 라이브러리가 번들된 플랫폼의 경우, MySQL 서버에 링크된 OpenSSL 라이브러리가 버전 3.0.10으로 업데이트되었습니다. OpenSSL 버전 3.0.10에서 수정된 문제는 https://www.openssl.org/news/cl30.txt에 설명되어 있습니다. (버그 #35702863, 버그 #35732474)

버그 수정

성능: records_in_range는 삽입 작업을 위해 과도한 수의 디스크 읽기를 수행했습니다.
기여해 주신 Facebook에 감사드립니다. (버그 #109595, 버그 #34976138)

InnoDB: FTS 파서 플러그인에서 단일 문자 토큰의 처리를 수정했습니다.
기여해 주신 샤오화 왕에게 감사드립니다. (버그 #35432973)

InnoDB: 윈도우 환경에서, innodb_flush_log_at_trx_commit=1으로 설정했을 때 조차 리두 로그 파일이 플러쉬되지 않습니다. (버그 #112078, 버그 #35713721)

InnoDB: ALTER TABLE EXCHANGE PARTITIONS 문으로 인해 발생할 수 있는 잠재적인 트랜잭션 롤백 문제를 수정했습니다. (버그 #110869, 버그 #35352168)
참고: 이 문제는 버그 #33700835의 회귀(regression)입니다.

InnoDB: 여러 열에 걸친 풀텍스트 인덱스를 생성할 때, 인덱스 생성이 “ERROR 1062 (23000): Duplicate entry ‘NULL-NULL’.”와 같은 오류로 실패할 수 있었습니다. (버그 #109242, 버그 #33542939, 버그 #34846823)

InnoDB: 엔진 상태 로그의 마지막에 감지된 데드락 섹션에는 스레드와 쿼리 정보를 합쳐 최대 1024자만 표시되었습니다. 출력되는 쿼리 문자열의 제한을 제거하여 수정했습니다. (버그 #80927, 버그 #23036096)

복제: 바이너리 로그 압축에 사용되는 메모리가 측정되지 않았습니다. (버그 #35290223)

복제: 트랜잭션 간의 종속성과 충돌을 감지하기 위해, MySQL 복제는 binlog_formatROW이고 transaction_write_set_extraction이 활성화되어 있는 경우(둘 다 기본값), NOT NULL인 키(정의된 기본 키, 그리고 NOT NULL인 유니크 키와 외래 키)에서 추출된 쓰기 세트를 항상 사용합니다. 여러 열로 구성되고 열 값의 접두사 부분만 사용하는 유니크 키의 경우(Column Prefix Key Parts 참고), 쓰기 세트가 적절하게 생성되지 않아 잘못된 중복 키 오류가 발생할 수 있었습니다. 이는 키 자체가 열의 접두사만 참조함에도 불구하고, 참조된 키 열의 전체 값이 쓰기 세트에 추가되는 사실 때문이었습니다. (버그 #111027, 버그 #35404584)

MySQL 8.0.23에서 이루어진 변경으로 인해, 이전에는 GROUP_CONCAT()NULL을 반환하던 경우가 있었지만, 이제는 NULL을 반환하지 않게 되었습니다. (버그 #35730982)
참고: 이 문제는 버그 #32053547의 회귀입니다.

쿼리의 WHERE 조건과 일치하는 행이 없는 경우, (PREPARE를 사용하여) 준비된 쿼리의 결과가 동일한 쿼리를 직접 실행한 경우의 결과와 달랐습니다. (버그 #35689804)

INTERSECT를 사용하는 일부 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #35504625)
참고: 버그 #35362424도 참조하십시오.

QUOTE() 함수가 예상한 NULL이 아닌 이진 데이터를 반환하는 경우가 있었습니다. (버그 #35499232)

이전에는 출력 성능이 낮고 서버 워크로드가 높으며, audit_log_strategy 시스템 변수의 쓰기 전략이 ASYNCHRONOUS 또는 PERFORMANCE인 경우, audit_log_rotate()를 수동으로 실행하면 함수가 응답하지 않는 것처럼 보일 수 있었습니다. (버그 #35397216)

QUOTE() 함수가 이전에 NULL이 허용되지 않는 것으로 해석되었음에도 불구하고 NULL을 반환하는 경우가 있었습니다. (버그 #35381715)
참고: 버그 #35145246, 버그 #35195181도 참조하십시오.

첫 번째 호출 후 올바르게 실행되지 않았던 스토어드 프로그램에 대한 MySQL 8.0.30의 이전 수정은 SET 문을 포함하는 경우를 다루지 않았습니다.
기여해 주신 하오 루에게 감사드립니다. (버그 #35328028)
참고: 이 문제는 버그 #33754993의 회귀입니다.

스토어드 함수의 문제는 열 간의 값을 복사할 때 사용되는 내부 함수를 개선하기 위해 이전에 수행된 작업에서 발생한 회귀로 밝혀졌습니다. (버그 #35150382)
참고: 이 문제는 버그 #32742537의 회귀입니다.

일부 캐시된 쿼리가 항상 올바르게 처리되지 않았습니다.
기여해 주신 니콜라스 오시에노와 아마존에게 감사드립니다. (버그 #35105404, 버그 #35511208)

커머셜 빌드에 번들된 Kerberos 라이브러리를 버전 1.21.2로 업데이트했습니다. (버그 #35001935)

트리거를 사용하는 테이블에 대한 일부 INSERT가 항상 올바르게 처리되지 않았습니다. (버그 #34920120)
참고: 버그 #35178672, 버그 #35195079도 참조하십시오.

FORMAT = JSON을 사용하는 일부 DESCRIBE 문이 항상 올바르게 처리되지 않았으며, 디버그 빌드에서 어설션이 발생할 수 있었습니다. (버그 #34909766)

여러 일반 테이블 식(CTE)을 사용하는 일부 복잡한 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #34900334)
참고: 이 문제는 버그 #34377854의 회귀입니다.

윈도우 함수를 사용하는 일부 쿼리가 올바르게 푸시다운되지 않았습니다. (버그 #34778435)

여러 일반 테이블 식(CTE)을 사용하는 일부 복잡한 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #112021, 버그 #35284734, 버그 #35694546)
참고: 버그 #111994, 버그 #35686058도 참조하십시오. 이 문제는 버그 #34377854의 회귀입니다.

Enterprise Linux의 경우, krb5-devel 빌드 요구 사항이 커머셜 빌드에서 모든 빌드로 변경되었습니다. (버그 #111596, 버그 #35546449)

고립된 SQL 객체를 확인할 때, CREATE ROLEDROP ROLE 문이 올바르게 처리되지 않았습니다. (버그 #111303, 버그 #35471453)

Clone_Snapshot::extend_and_flush_files()는 항상 OS_CLONE_DATA_FILE 타입의 파일을 생성합니다. 이 함수는 flush_redo()를 사용하여 REDO 로그 파일을 처리합니다. REDO 로그 파일의 타입은 OS_CLONE_LOG_FILE이어야 하며, os_file_set_size()에서 오류가 발생할 수 있습니다.
이 문제는 새로운 파일을 생성할 때 타입이 올바르게 설정되었는지 확인함으로써 수정되었습니다.
기여해 주신 텐센트에게 감사드립니다. (버그 #110569, 버그 #35240055)

잘못된 인덱스를 선택하여 하한 휴리스틱이 ORDER BY DESC에서 제대로 작동하지 않았습니다. (버그 #107626, 버그 #34306497)

Leave a Comment



이 문서 공유

8.0.35 변경 사항 (2023-10-25 GA)

링크 복사

CONTENTS