8.0.35 변경 사항 (2023-10-25 GA)
공식 문서: 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)
old
및 new
서버 시스템 변수는 비추천되었으며, 이 변수들 중 하나를 설정하거나 읽을 때마다 경고가 발생하게 되었습니다. 이 변수들은 MySQL의 향후 버전에서 제거될 예정입니다. 이들에 의존하는 애플리케이션은 가능한 한 빨리 이러한 의존성에서 벗어나도록 해야 합니다. (WL #8609)
--character-set-client-handshake
서버 옵션은 원래 MySQL의 매우 오래된 버전에서 업그레이드할 때 사용하기 위한 것이었으나, 현재는 비추천 상태이며, 사용할 때마다 경고가 발생합니다. 이 옵션은 MySQL의 향후 버전에서 제거될 예정입니다. 이 옵션에 의존하는 애플리케이션은 가능한 한 빨리 이 옵션에서의 전환을 시작해야 합니다. (WL #13220)
이번 릴리스의 두 가지 변경 사항은 MySQL의 권한 설정에 영향을 미칩니다. 이 변경 사항 중 하나는 데이터베이스 권한 설정에 영향을 주며, 다른 하나는 권한 설정에 사용되는 호스트명과 관련이 있습니다. 이러한 변경 사항은 다음과 같습니다:
- 데이터베이스 수준 권한 설정: 데이터베이스 수준의 권한 설정에서 와일드카드로 문자
%
와_
를 사용하는 것은 현재 비추천 상태이며, 이 와일드카드 기능은 향후 MySQL 릴리스에서 제거될 예정입니다. 이러한 문자는partial_revokes
서버 시스템 변수의 값이ON
인 경우 항상 리터럴로 취급되므로, 항상 리터럴로 취급되는 것이 목적입니다.예를 들어,partial_revokes
를ON
으로 설정하면,GRANT SELECT ON db_.* TO user1
에 의해user1
은db_
라는 이름의 데이터베이스 내의 테이블에서 선택할 수 있지만,db1
,db2
,dbx
,dby
등의 데이터베이스의 테이블에서는 선택할 수 없습니다. 권한 설정의 데이터베이스명에서의 와일드카드 지원이 제거되면, 항상 이것이 적용된다고 가정해야 합니다. - 권한 설정 내의 호스트명
%
: 권한을 검사할 때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_format
이 ROW
이고 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 ROLE
및 DROP 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)