MySQL 8.0.43 릴리스 노트
MySQL 8.0.43 Community Server 릴리스 노트를 한국어로 번역하고, DBA가 참고해야 할 핵심 내용을 함께 정리하였습니다.
DBA를 위한 핵심 내용
MySQL 8.0.43은 단순 패치 릴리스처럼 보이지만, Group Replication과 복제 안정성 측면에서는 주의해서 볼 항목이 많습니다. 특히 GCS 멤버십 추적, InnoDB Cluster의 쓰기 불능 상태, CREATE TABLE ... AS SELECT 복제 불일치, semisync 상태 전환 문제가 포함되어 있어 HA/복제 구성을 운영하는 DBA에게는 의미 있는 버전입니다. 또한 mysql 클라이언트 명령 제어 옵션이 추가되어 운영 보안 정책에도 연결됩니다.
mysql클라이언트에 대부분의 클라이언트 명령을 켜고 끄는--commands옵션이 추가되었습니다. 기본값은 활성화이지만, 운영 환경에서 클라이언트 내부 명령 사용을 제한해야 하는 경우--commands=OFF또는--skip-commands를 검토할 수 있습니다. 8.0.40의--system-command보다 범위가 넓은 제어 옵션으로 보는 것이 좋습니다.- Group Replication에서는 과거 멤버십에 있던 사라진 서버로 계속 연결을 시도해 네트워크 지연을 유발할 수 있던 문제가 완화되었습니다. 이제 이전 멤버십 서버에 대한 연결 시도는 5분 후 중지됩니다. 멤버 교체가 잦거나 장애 노드가 장기간 복귀하지 않는 클러스터에서는 GCS 통신 지연 완화 효과를 기대할 수 있습니다.
- 불안정한 네트워크에서
group_replication_paxos_single_leader=ON을 사용하는 InnoDB Cluster가waiting for handler commit상태에 고착되고 쓰기 불능 상태가 될 수 있던 문제가 수정되었습니다. 단일 리더 Paxos 설정을 쓰는 환경에서는 이 항목이 가장 중요한 운영 안정성 수정입니다. - 체인 복제에서
CREATE TABLE ... AS SELECT가 바이너리 로그에 일관되지 않은 항목을 생성해 다운스트림 복제가 중단될 수 있던 문제와, semisync 복제가 binlog 접미사 길이 증가 후 비동기로 전환될 수 있던 문제가 수정되었습니다. 다단 복제·장기 운영으로 binlog 번호가 큰 환경에서는 복제 상태 전환과 relay 적용을 점검해야 합니다. - NDB Cluster에서는 8.0에서 8.4로 업그레이드한 후 모든 데이터 노드가 동시에 재시작될 수 있던 문제가 포함되어 있습니다. NDB를 쓰는 환경은 일반 InnoDB 서버와 별도로 8.4 전환 리허설에서 이 항목을 확인해야 합니다.
- 검색 결과에서 이 버전과 직접 연결된 비공식 대규모 회귀 보고는 확인하지 못했습니다. 다만 MySQL Bugs에는 InnoDB Cluster의
group_replication_paxos_single_leader관련 이슈가 노출되어 있어, 공식 릴리스노트의 Group Replication 항목을 실제 운영 영향이 있는 수정으로 보는 편이 안전합니다. (MySQL Bugs 검색 결과)
컴파일 관련 사항
- macOS: 이제
-DWITH_KERBEROS를 사용하여 MacOS에서 서버를 컴파일할 수 있습니다. - 번들로 포함된
libcurl라이브러리를 버전 8.14.1로 업그레이드했습니다. (Bug #38042758) - MySQL Server는 이제 CMake 4를 지원하여, 3.10 이전 버전에 대한 지원이 중단될 것으로 예상되는 향후 CMake 버전과의 호환성을 보장합니다. (Bug #38027636)
- 포함된 ICU 라이브러리가 버전 77-1로 업그레이드되었습니다. (Bug #37870791)
- 포함된
zstd라이브러리가 버전 1.5.7로 업그레이드되었습니다. (Bug #37869972) - GCC 15로 빌드할 때
clang::musttail을 비활성화했습니다. (Bug #37776018) - Clang 18에서 사용 중단되고 Clang 19에서 제거된
std::char_traits<unsigned char>의 드롭인 대체 항목으로 사용할 수 있도록, 표준을 준수하는my_char_traits<unsigned char>를 구현했습니다. (Bug #37273525, Bug #37785339) - 링커가 올바른 라이브러리(
ext::icu)가 이미 다른 위치에서 링크되었음에도 비어 있는 Cmake 변수${ICU_LIBRARIES}를 사용하려고 했습니다. (Bug #36524167) - Fedora 38에서 컴파일할 때 이제 egrep 대신 grep -E가 사용됩니다. (Bug #36507549)
- macOS에서 컴파일할 때 이전에는 명시적으로
openssl@1.1을 찾았지만, 이제openssl@3을 허용하기 위해 대신 일반openssl심볼릭 링크를 찾습니다. (Bug #35468370)
InnoDB 관련 사항
- 테이블 가져오기와 관련된 문제가 수정되었습니다. (Bug #37621360)
설치 관련 사항
- 이제 root가 아닌 사용자도 MySQL 설치용 Debian 패키지를 실행할 수 있습니다. 이는 rootless 설치가 필요한 Debian 또는 Ubuntu 시스템에서 발생하는 문제를 방지하는 데 도움이 됩니다. (Bug #37765153)
패키징 관련 사항
- Fedora 24에서 MariaDB가 이미 시스템에 설치되어 있으면 패키지 충돌로 인해 Oracle MySQL RPM을 설치할 수 없었습니다. 이 수정으로 충돌이 올바르게 처리되어 MySQL Server를 성공적으로 설치할 수 있습니다. (Bug #37798784)
추가되거나 변경된 기능
-
중요한 변경: 대부분의 mysql 클라이언트 명령을 활성화하거나 비활성화하는 mysql 클라이언트
--commands옵션이 추가되었습니다.이 옵션은 기본적으로 활성화됩니다. 비활성화하려면
--commands=OFF또는--skip-commands로 클라이언트를 시작하십시오.이 옵션의 영향을 받는 모든 명령의 전체 목록과 추가 정보는 mysql Client Options를 참조하십시오. (WL #16949)
참조: 함께 참조하십시오: Bug #36416568, Bug #38066040.
-
Group Replication: applier 스레드가 오류로 중지된 것이 아니라 SQL KILL을 사용하여 종료된 경우를 구분하기 위해 오류
ER_GRP_RPL_APPLIER_THD_KILLED가 추가되었습니다. (Bug #37764717) -
시스템
curl라이브러리에 링크하지 않고curl을 포함하는 바이너리 패키지는curl8.14.1을 사용하도록 업그레이드되었습니다. (Bug #37389565)
수정된 버그
-
중요 사항; Group Replication: Group Communication System (GCS)은 멤버 간의 Group Replication 통신을 처리하고, 그룹 멤버십과 모든 그룹 멤버 간의 연결을 추적합니다. 멤버십 추적에는 멤버십의 현재 반복과 이전 두 번의 반복이 포함됩니다. 멤버가 떠나면, 그룹에 남아 있는 멤버는 떠나는 멤버의 레코드를 유지하지만 해당 멤버가 돌아올 때까지 그 멤버와의 통신을 중지합니다. 예: 그룹에 멤버 M1, M2, M3이 포함되어 있습니다. M3이 그룹을 떠나며, M1과 M2는 M3과의 통신을 중지합니다. 새 멤버(M4)가 조인하면, 이 그룹 멤버십의 이전 반복을 알게 되고 이전 반복의 서버를 포함한 모든 서버(이 경우 M3)와 통신을 시도합니다.
일부 이전 서버가 사라지고 돌아오지 않은 경우, 새 멤버는 누락된 서버에 계속 연결을 시도했습니다. 일부 조건에서는 이러한 지속적인 연결 시도가 그룹 멤버 통신에 영향을 주는 네트워크 지연 시간을 유발할 수 있었습니다.
이 문제를 방지하기 위해, 이제 그룹 멤버십의 반복에 속하는 서버에 대한 연결은 5분 후 중지됩니다. 이는 그룹 통신에 지속적인 영향을 부과하지 않으면서 유효한 연결을 다시 설정하기에 충분한 시간이어야 합니다. (Bug #37704514)
-
NDB Cluster: NDB 8.0에서 NDB 8.4로 업그레이드한 후, 클러스터의 모든 데이터 노드가 예기치 않게 동시에 재시작되었습니다. 이는 트랜잭션 코디네이터에 스캔 상태가 없을 때 발생하여 프로토콜 타임아웃으로 이어졌으며, 그 결과 프로토콜 상태의 불일치로 인해 데이터 노드가 예기치 않게 종료되었습니다. 이 문제는 예상치 못한
SCAN_NEXTREQ신호에 대한 기존 처리를 확장하여 스캔이 이미 상태를 갖지 않는 경우를 포함하도록 수정되었습니다. (Bug #37994985)참조: 이 문제는 다음 버그의 회귀입니다: Bug #37022901.
-
NDB Cluster: 클라이언트가 충돌하는 로우 잠금을 보유하여 함께 수행되는
get_commit_count()호출이 정체될 때, 동시ALTER TABLE문은 잠금 대기 타임아웃으로 실패하기 전에 최대 100 *TransactionDeadlockDetectionTimeout까지 지연을 유발할 수 있었습니다. 잠금 문제를 더 빨리 식별하도록 재시도 메커니즘이 조정되었습니다. (Bug #37955025) -
InnoDB: 기본 키를 재구축할 때 중복이 있는 경우 서버에서 때때로 문제가 발생했으며, 이로 인해 서버가 예기치 않게 중지될 가능성이 있었습니다.
기여해 주신 Alibaba의 Xizhe Zhang 및 팀에 감사드립니다. (Bug #37822992)
-
InnoDB: 인덱스의 일부인 컬럼을 삭제하는 것과 관련된 문제가 수정되었습니다. (Bug #37726881)
-
InnoDB: DELETE 작업과 관련된 문제를 수정했습니다. (Bug #37478594)
-
InnoDB:
VARCHAR컬럼에 보조 인덱스를 생성할 때 설정된 값보다 더 많은 메모리를 할당할 수 있었으며, 할당된 양은innodb_ddl_buffer_size값과 직접 관련되어 ERROR 1136 (21S01): Column count doesn't match value count at row 1과 유사한 오류로 이어졌습니다. (Bug #37233273) -
InnoDB: 공간 데이터 타입 컬럼의 인덱싱과 관련된 문제를 수정했습니다. (Bug #36682518)
-
InnoDB: 실패한 MySQL Enterprise Backup 증분 백업 후 redo 로그 소비자가 뒤처져 redo 로그 writer 스레드가 진행하지 못하게 될 때 긴 세마포어 대기 크래시가 발생할 수 있었습니다. 다음과 유사한 오류 메시지가 반환되었습니다:
[Warning] [MY-013934] [InnoDB] Redo log writer is waiting for MEB redo log consumer which is currently reading LSN=23335640211468 preventing reclamation of subsequent portion of the redo log. Consider increasing innodb_redo_log_capacity.(Bug #36330455)
-
InnoDB: 테이블에 대한 범위 쿼리와 관련된 문제를 수정했습니다. (Bug #31360522)
참조: 다음도 참조하십시오: Bug #38063122.
-
파티셔닝: 파티션 ID가
INT_MAX를 초과하면 파티션 자르기가 중복 항목 오류와 함께 거부되어, 새 파티셔닝된 테이블을 생성할 수 없었습니다. 이 문제를 완화하기 위해 이제Table_partition_values_pk클래스 생성자는 객체 ID에 대해int대신ulonglong을 사용합니다. (Bug #35912852) -
복제: 체인에서 복제를 사용할 때
CREATE TABLE... AS SELECT가 때때로 바이너리 로그에 일관되지 않은 항목을 생성하여, 다운스트림 서버에서 복제가 중단될 수 있었습니다. 이 문제와 관련된 오류 메시지에는 로그에START TRANSACTION문이 누락되어 발생한 오류가 포함되었습니다. (Bug #37986380) -
복제: Semisync 복제 중에 바이너리 로그 접미사의 길이가 여섯 자리(
.999999)를 초과하여 다음 로그 파일이 예를 들어mysql-bin.1000000이 되면, 복제 프로토콜이 예기치 않게 semisynchronous에서 asynchronous로 변경되었습니다.기여해 주신 Alibaba의 Wuhao Cao, Karry Zhang 및 팀에 감사드립니다. (Bug #115861, Bug #113813, Bug #37024069, Bug #36246779)
-
Group Replication: 불안정한 네트워크 환경에서
group_replication_paxos_single_leader=ON을 사용하는 Group Replication InnoDB Cluster에서waiting for handler commit상태에 고착된 여러 장기 실행 트랜잭션이 발생했습니다. 그 결과group_replication_set_as_primary()가 강제로 대기하게 되었고, 이는 다시 다른 수신 쿼리를 차단하여 클러스터를 쓰기 불가능한 상태로 만들었습니다.waiting for handler commit에 고착된 장기 실행 트랜잭션과 관련된 문제는 다음과 같이 발생했습니다: 간헐적인 네트워크 파티션 중에 secondary 노드가 오래되었거나 부정확한 멤버십 정보로 인해 leader 역할을 잘못 맡은 것으로 간주했습니다. 이로 인해 synode 번호 할당에 충돌이 발생하여 primary 노드에서 시작된 트랜잭션이 완료되지 않은 상태로 남았습니다.secondary 노드가 view 메시지를 Paxos로 푸시하기 전에 항상 최신의 정확한 상태를 반영하도록 보장하여 이 문제를 수정했습니다. 이를 통해 오래되었거나 일관되지 않은 멤버십 정보가 leadership 또는 synode 번호 할당의 충돌로 이어지지 않도록 보장합니다. (Bug #37764970)
참조: 다음도 참조하십시오: Bug #117424, Bug #37237959, Bug #37645674.
-
NDB Cluster APIs: 이벤트 정의에서
VARCHAR컬럼을 제외하면 Invalid schema object version 오류가 발생했습니다. (Bug #37766391)References: See also: Bug #31848270.
-
저장 루틴을 호출하는 일부 트리거가 항상 올바르게 실행되지는 않았습니다. (Bug #37915445)
-
서브쿼리를 포함하는 CTE를 사용하는 뷰가 항상 올바르게 처리되지는 않았습니다. (Bug #37832605)
-
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()가 항상 올바르게 실행되지는 않았습니다. (Bug #37829550)References: See also: Bug #38063175.
-
종료 중에 클라이언트 연결이 항상 올바르게 종료되지는 않던 문제에 대한 이전 수정 사항을 개선했습니다. (Bug #37755594)
References: This issue is a regression of: Bug #35854919.
-
Fedora 42 RPM 설치 패키지는 Fedora 42 이상에서 병합된
/usr/bin및/usr/sbin디렉터리를 수용하도록 조정되었습니다. (Bug #37737658) -
InnoDB를 사용하는 전체 텍스트 검색의 성능, 특히 구문 검색의 성능이 개선되었습니다.doc_id매칭의 효율성이 향상되었습니다. (Bug #37682648) -
[
keyring_okv플러그인(keyring_okv KMIP 플러그인 사용 참조)이 설치되었지만 올바르게 설정되지 않은 경우,performance_schema.keyring_keys테이블에 대한 쿼리로 인해 문제가 발생했습니다. (Bug #37655299) -
Bug #30875669에 대한 수정 사항은 해당 버그가 종료되었을 때 실제로 mysql 클라이언트 코드에 포함되지 않았습니다. 이제 변경 사항이 구현되었습니다. (Bug #37572191)
References: 함께 참조하십시오: Bug #30875669.
-
하나 이상의 단일 라인을 가지며 각 라인에 여러 SQL 문이 포함된 init 파일이 초기화 중에 때때로 오류를 발생시켰습니다. (Bug #37559598)
-
CREATE TABLE및DROP TABLE문의 일부 시퀀스가 올바르게 처리되지 않았습니다. (Bug #37534068)References: 이 문제는 다음의 회귀입니다: Bug #35721121.
-
UPDATE... SET...은 항상 성공적으로 롤백될 수는 없었습니다. (Bug #37489167) -
CREATE TABLE문에서 여러DEFAULT컬럼 표현식이 항상 올바르게 처리되지는 않았습니다. (Bug #37436220) -
집계를 수행하는 상관 서브쿼리가 있는 쿼리가 실행 중에 중복 키 오류와 함께 (잘못) 거부되는 경우가 있었습니다.
이 문제는
JOIN::cleanup()실행 중 원래 참조 슬라이스(set_ref_item_slice(REF_SLICE_SAVED_BASE))의 복원이 필요하지 않다는 가정하에 이를 제거한 이전 수정으로 인해 도입되었습니다. 그 결과, 이전 실행의 임시 테이블 필드 참조가 지워지지 않아, 임시 테이블에 중복 키를 삽입하려는 시도가 발생하고 Can't write; duplicate key in table 오류가 트리거되었습니다.정리 중에 원래 참조 슬라이스를 복원하여 이 문제를 수정했으며, 이를 통해 오래된 참조가 모두 폐기되도록 했습니다. (Bug #37415167)
참조: 함께 참조하십시오: Bug #32141711. 이 문제는 다음의 회귀입니다: Bug #35856247.
-
주석 내 따옴표 처리되지 않은 세미콜론 문자(
;)는 허용되지 않음에도 불구하고 항상 오류로 표시되지는 않았습니다. (Bug #37117875)참조: 함께 참조하십시오: Bug #38063286.
-
서브쿼리를 포함하는 중첩 집계 함수를 사용하는 쿼리가 항상 올바르게 처리되지는 않았습니다. (Bug #36421727)
-
서브쿼리를 파생 테이블로 변환하려고 할 때, 특정 사례가 항상 고려되지는 않았습니다. (Bug #36421710)
참조: 이 문제는 다음의 회귀입니다: Bug #36921175.
-
optimizer_switch가subquery_to_derived=on으로 설정된 경우,ROLLUP을 사용하는 일부 쿼리가 올바르게 처리되지 않았습니다. (Bug #36314993) -
max_join_size를 설정하면 일부 중첩 쿼리가 부적절하게 처리되었습니다. (Bug #35625769) -
저장 프로그램 내에서 생성된 이벤트가 항상 올바르게 처리되지는 않았습니다. (Bug #35395333, Bug #36402968, Bug #37918920)
참조: 이 문제는 다음 버그의 회귀입니다: Bug #17809, Bug #11745618.
-
서브쿼리가
SELECT목록에 있고 이를 포함하는 쿼리가 암시적으로 그룹화된 경우, 스칼라 서브쿼리를 파생 테이블과의 조인으로 변환하는 것은 허용되어야 하지만,subquery_to_derived옵티마이저 스위치가 활성화되었을 때 거부되었습니다. (Bug #35150438) -
include/assert_grep.inc의 오류로 인해 이를 포함한 모든 파일에서 잘못된 결과가 발생할 수 있었습니다.기여해 주신 Ke Yu에게 감사드립니다. (Bug #116239, Bug #37105430, Bug #37675340)
-
쿼리 재작성 플러그인(The Rewriter Query Rewrite Plugin 참조)은 서버가
autocommit=OFF로 실행될 때 제대로 작동하지 않았습니다. (Bug #115437, Bug #36784795) -
sql/range_optimizer/rowid_ordered_retrieval_plan.cc의 주석을 개선했습니다.기여해 주신 Xiaodong Huang 및 Tencent 팀에 감사드립니다. (Bug #107972, Bug #34422274)