카테고리 : MySQL/릴리스노트/8.0

MySQL 8.0.36 릴리스 노트

MySQL 8.0.36 Community Server 릴리스 노트를 한국어로 번역하고, DBA가 참고해야 할 핵심 내용을 함께 정리하였습니다.

저자: Oracle 작성: 2024.01.16 약 10분 5,635자

DBA를 위한 핵심 내용

MySQL 8.0.36은 기능 추가보다 운영 안정성·보안·패키징 영향이 큰 유지보수 릴리스입니다. DBA 관점에서는 저장 프로그램/Performance Schema 오버헤드 완화, InnoDB AHI 성능 회귀 보정, 복제·Group Replication 장애 수정이 긍정적이지만, 저장소 GPG 키 교체로 패키지 업그레이드가 실패할 수 있고, Google Cloud가 정리한 MySQL 8.0.36 이하 GROUP BY/TempTable 성능 이슈도 함께 점검해야 합니다. (Google Cloud Known Issues)

  1. 패키지 업그레이드 전 repo.mysql.com GPG 키 교체(A8D3785C)를 반영하십시오. 기존 키 만료로 apt/yum 서명 검증 실패가 발생할 수 있으므로 MySQL APT/YUM repo 설정 패키지 재설치 또는 새 공개키 등록을 사전 작업에 포함해야 합니다.
  2. InnoDB AHI 해시 함수 성능 회귀와 보조 인덱스 손상 가능성이 수정되었습니다. 8.0.30 이후 AHI 관련 CPU 상승·성능 저하를 경험한 환경은 업그레이드 후 AHI 사용 여부, 핫 인덱스, SHOW ENGINE INNODB STATUS 지표를 비교하는 것이 좋습니다.
  3. CREATE TABLE ... SELECT 복제 중 중지 시 서버 종료, 오류 상태 채널에서 강제 START GROUP_REPLICATION 시 비정상 종료 가능성이 수정되었습니다. HA 토폴로지에서는 롤링 업그레이드 전후 failover·rejoin 절차를 재검증하십시오.
  4. Performance Schema의 저장 프로시저 마이크로 명령어 계측(statement/sp/%, statement/sp/stmt 제외)이 기본 비활성화됩니다. 저장 프로그램 상세 추적에 의존하는 모니터링은 업그레이드 후 수집 항목 감소를 확인하고 필요한 계측만 명시적으로 활성화해야 합니다.
  5. PAM 인증 디버그 로그는 기본적으로 비밀번호를 더 이상 출력하지 않습니다. 보안상 개선이지만, 장애 분석 절차에서 민감정보 포함 로그를 기대하던 운영 스크립트는 AUTHENTICATION_PAM_LOG=PAM_LOG_WITH_SECRET_INFO가 필요한지 별도 승인 절차와 함께 검토하십시오.
  6. OpenSSL 번들 버전이 3.0.12로 갱신되었습니다. TLS 정책, FIPS, 오래된 클라이언트/암호군 호환성을 사용하는 환경은 사전 연결 테스트가 필요합니다.

Audit Log 관련 사항

컴파일 관련 사항

  • Microsoft Windows: MySQL이 Visual Studio 2022를 사용하여 올바르게 컴파일되지 않았습니다. (Bug #35967676)

  • -DWITH_ZLIB=system 검사를 개선했습니다. (Bug #35968195)

  • Linux에서 컴파일할 때 OpenSSL 3 라이브러리에 대해 no-error=deprecated-declarations 플래그를 no-deprecated-declarations로 변경했습니다.

    기여해 주신 karry zhang께 감사드립니다. (Bug #112209, Bug #35755328)

Optimizer 관련 사항

  • 사용된 해싱 알고리즘은 고유성을 확인하기 위해 HASH 필드를 사용할 때 성능이 좋지 않았습니다. (Bug #109548, Bug #34959356)

패키징 관련 사항

  • 중요한 변경 사항: MySQL 다운로드 가능 패키지에 서명하는 데 사용되는 GnuPG 빌드 키(A8D3785C)가 업데이트되었습니다. 이전 GnuPG 빌드 키(3A79BD29)는 2023-12-14에 만료되었습니다. GnuPG 서명 검사를 사용하여 MySQL 다운로드 가능 패키지의 무결성과 진위를 확인하는 방법에 대한 정보 또는 공개 GnuPG 빌드 키 사본을 얻으려면 Signature Checking Using GnuPG를 참조하십시오.

    GnuPG 키 업데이트로 인해, repo.mysql.com을 사용하도록 설정된 시스템은 apt 또는 yum을 사용하여 MySQL 8.0.36 이상 또는 MySQL 8.3.0 이상으로 업그레이드할 때 서명 확인 오류를 보고할 수 있습니다. 이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오:

    • https://dev.mysql.com/downloads/에서 MySQL APT 또는 YUM 저장소 설정 패키지를 수동으로 다시 설치하십시오.
    • MySQL GnuPG 공개 키를 다운로드하고 시스템 GPG 키링에 추가하십시오.

Performance Schema 관련 사항

  • 저장 프로그램을 실행할 때 Performance Schema 계측으로 인해 일부 불필요한 오버헤드가 발생했습니다.

    이 릴리스부터 statement/sp/stmt를 제외한 모든 저장 프로시저 마이크로 명령어(statement/sp/%)는 기본적으로 비활성화됩니다. (Bug #27934653)

  • Performance Schema 문 계측의 성능이 개선되었습니다. 구체적으로, MESSAGE_TEXT 데이터 수집이 이제 더 효율적입니다. (Bug #112621, Bug #35916912)

Pluggable Authentication 관련 사항

  • 이번 릴리스부터 PAM authentication 플러그인을 디버깅하는 데 사용되는 AUTHENTICATION_PAM_LOG 환경 변수의 동작이 다음과 같이 변경되었습니다:

    • AUTHENTICATION_PAM_LOG를 임의의 값으로 설정해도(다음 항목에서 설명하는 경우는 제외) 더 이상 진단 메시지에 비밀번호가 포함되지 않습니다.
    • 진단 메시지에 비밀번호를 포함하려면 AUTHENTICATION_PAM_LOG=PAM_LOG_WITH_SECRET_INFO를 설정하십시오.

    자세한 내용은 PAM Authentication Debugging을 참조하십시오. (Bug #74313, Bug #20042010)

추가되거나 변경된 기능

  • 중요한 변경: OpenSSL 라이브러리가 번들로 제공되는 플랫폼의 경우, MySQL Server에 링크된 OpenSSL 라이브러리가 버전 3.0.12로 업데이트되었습니다. OpenSSL 버전 3.0.12에서 수정된 문제는 https://openssl-library.org/news/openssl-3.0-notes/에 설명되어 있습니다. (Bug #36033684)

수정된 버그

  • Performance; InnoDB: InnoDB adaptive hash index에서 사용하는 해싱 함수가 MySQL 8.0.30에서 수행된 리팩터링의 의도하지 않은 결과로 더 많은 비용이 들게 되었습니다. (Bug #111538, Bug #35531293)

    References: 이 문제는 다음의 회귀입니다: Bug #81814, Bug #16739204, Bug #23584861.

  • InnoDB: adaptive hash index (AHI)에서 사용하는 해시 함수가 성능을 높이도록 개선되었습니다. (Bug #35449386)

  • InnoDB: 시작 중에 change buffer 항목이 있는 경우, 비활성화된 innodb_validate_tablespace_paths 옵션은 더 이상 강제되지 않으며, 대신 MySQL 서버가 모든 테이블스페이스 검증을 진행합니다. 그렇지 않으면 보조 인덱스가 손상될 수 있었습니다. (Bug #35208990)

  • InnoDB: 동시 DDL 및 DML 작업 중에 온라인 로그가 너무 크게 증가하면 DDL이 실패할 수 있었습니다. 이 문제를 방지하도록 버퍼 처리가 개선되었습니다. (Bug #35115601)

  • Replication: Performance Schema 메모리 인스트루멘테이션에서 Log_event 이벤트에 사용된 현재 바이트 수를 계산하는 문제로 인해, 복제본의 sql/replica_sql 스레드가 끝없이 증가하고 크기가 결코 감소하지 않는 것처럼 보였습니다. (Bug #35546877)

  • Replication: CREATE TABLE AS SELECT를 복제하는 동안 복제를 중지하면 서버가 종료되었습니다. (Bug #33934013)

  • Group Replication: 복제 채널이 오류 상태인 동안 강제 START GROUP_REPLICATION을 수행하면 계획되지 않은 서버 종료로 이어질 수 있었습니다. (Bug #34724344)

  • Enterprise Linux 8 RPM을 빌드할 때, 빌드 스크립트는 이제 더 새로운 strip 명령(/opt/rh/gcc-toolset-12 아래)을 가리키며, 이제 해당 dwz 도구를 사용할 수 있는지 확인합니다. (Bug #36086236)

  • 일부 경우, 부적절하게 초기화된 플러그인이 설치한 로드 가능한 함수를 호출하면 계획되지 않은 종료가 발생했습니다. (Bug #35889261)

  • handler.cchandler::ha_index_end()에서 어설션 실패를 발견하고 수정했습니다. (Bug #35877600)

  • 서버 시작 중 MYSQL_FIREWALL 플러그인이 올바르게 초기화되지 못하면, 서버 로그에 오류가 발생하고 때때로 mysqld가 계획되지 않게 종료되었습니다. (Bug #35853298)

  • GROUP BY가 있는 일부 중첩 쿼리가 올바르게 처리되지 않았습니다. (Bug #35846402, Bug #35945822)

    참조: 이 문제는 다음의 회귀입니다: Bug #32918400.

  • 제한된 경우, MD5() 암호화 함수에 데이터를 전달하면 서버가 중단될 수 있었습니다. (Bug #35764496)

  • 뷰의 일부 하위 선택은 항상 올바르게 처리되지 않았습니다. (Bug #35738548)

  • 여러 테이블의 대량 이름 변경과 같은 작업을 수행하는 동안, CREATE TABLE... SELECT와 유사한 데이터 정의 문을 동시에 실행하면 서버가 예기치 않게 중지될 수 있었습니다. (Bug #35735937)

  • UPDATE HISTOGRAM은 모든 경우에 예상대로 동작하지 않았습니다.

    UPDATE HISTOGRAM은 모든 경우에 예상대로 동작하지 않았습니다. (Bug #35710404)

  • EXPLAIN ANALYZE는 항상 예상된 결과를 생성하지 않았습니다. (Bug #35710383)

  • 하위 쿼리 해석 중 오류가 발생했습니다. (Bug #35710373)

    참조: 이 문제는 다음의 회귀입니다: Bug #35184353.

  • 사용된 테이블 정보의 갱신은 이제 모든 테이블 객체가 적절한 상태에 있음을 알 수 있도록 테이블이 열린 직후인 다음 실행 시작 시점까지 지연됩니다. (Bug #35710213, Bug #36030073)

  • 일부 HAVING 쿼리는 예상된 결과를 생성하지 않았습니다. (Bug #35710183)

  • 일부 재귀 CTE는 예상대로 동작하지 않았습니다. (Bug #35654240)

  • OVER (PARTITION...)을 사용하는 일부 쿼리는 항상 성공적으로 실행되지 않았습니다. (Bug #35627798)

  • ROLLUP이 포함된 일부 서브쿼리가 항상 올바르게 처리되지는 않았습니다. (Bug #35621842, Bug #35804794)

  • Windows 설치 MSI 인터페이스에서 CPACK_COMPONENT_GROUP_INFO_DISPLAY_NAME 설정 옵션을 제거했습니다. 이제 INFO_BININFO_SRC 파일은 항상 설치됩니다. (Bug #35529968)

  • 윈도우 함수를 사용하는 일부 쿼리가 항상 올바르게 처리되지는 않았습니다. (Bug #35471471)

  • 디버그 빌드에서 대소문자가 변경된 컬럼 이름으로 인해 서버가 종료될 수 있었습니다. (Bug #35449266)

  • MySQL Server 설치 패키지에 INFO_SRC 파일 사본이 두 개 포함되어 있었습니다. (Bug #35400142)

  • prepared statement 내의 SELECT 문이 연속 실행에서 예기치 않게 서로 다른 결과를 반환했습니다. (Bug #35340987, Bug #35846585, Bug #35846873)

    참조: 이 문제는 다음의 회귀입니다: Bug #35060385.

  • 일부 SELECT DISTINCT 쿼리가 항상 올바르게 처리되지는 않았습니다. (Bug #33725447)

  • sql/field.cc의 어설션 실패를 제거했습니다. (Bug #112503, Bug #35846221)

  • SELECT AVG(...) OVER (PARTITION BY...) 형식의 일부 쿼리가 항상 올바르게 처리되지는 않았습니다. (Bug #112460, Bug #35710179, Bug #35845413)

  • 공식 MySQL Yum 또는 SUSE 리포지토리를 사용하여 MySQL을 업그레이드하면 항상 MySQL 서비스가 활성화되었습니다. 이제 설치 후에만 서비스를 활성화하며, 업그레이드 중에는 기존 값을 보존하고 편집하지 않습니다. (Bug #112382, Bug #35823558)

  • 조건의 컬럼을 교체해야 하는 파생 조건 푸시다운이 있는 쿼리에서, 교체 항목은 ROLLUP으로 래핑되어 있지만 일치하는 항목은 그렇지 않은 경우, 존재하는 것으로 알려져 있더라도 일치하는 항목을 찾을 수 없었습니다. (Bug #111665, Bug #35498378, Bug #35570065, Bug #35826171)

    References: 이 문제는 다음 버그의 회귀입니다: Bug #33349994.

  • ORDER BY에 윈도우 함수가 포함된 중첩 블록을 정렬하면 sql/sql_executor.cc에서 assert가 발생했습니다. (Bug #111306, Bug #34856256, Bug #35471522)

  • 저장 프로시저에서 윈도우 함수에 대한 결과에 산술 연산을 수행하면 프로시저가 처음 실행될 때는 올바른 결과를 제공했지만, 이후 모든 호출에서는 잘못된 결과를 반환했습니다. (Bug #110983, Bug #35380604)

    References: 다음도 참조하십시오: Bug #110847, Bug #35340987.

  • MySQL은 libcmusl 버전을 사용하여 올바르게 빌드되지 않았습니다.

    기여해 주신 Sam James에게 감사드립니다. (Bug #110808, Bug #35330950)

  • 일부 경우에 뷰에서 선택하면 소량의 메모리가 누수되었습니다. (Bug #103133, Bug #32764586)