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

MySQL 8.0.12 릴리스 노트

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

저자: Oracle 작성: 2018.07.27 약 43분 25,438자

DBA를 위한 핵심 내용

MySQL 8.0.12는 InnoDB Online DDL의 체감 변화를 만든 ALGORITHM=INSTANT가 핵심인 릴리스입니다. 동시에 복제 메모리 기본값, Group Replication 장애 시 동작, 공간 함수 좌표 해석, 보안 라이브러리와 인증/SSL 관련 수정이 포함되어 운영 표준값을 재검토해야 하며, 확인 가능한 범위의 외부 검색에서는 이 릴리스에 대해 광범위하게 확산된 단일 대형 회귀 이슈는 두드러지게 확인되지 않았습니다.

  1. InnoDB는 컬럼 추가, 가상 컬럼 추가/삭제, 기본값 변경, ENUM/SET 정의 변경 등 일부 ALTER TABLEALGORITHM=INSTANT를 지원합니다. 지원되는 작업은 데이터 복사 없이 메타데이터만 바꾸므로 배포 시간을 크게 줄일 수 있지만, 지원되지 않는 작업에 ALGORITHM=INSTANT를 명시하면 즉시 실패합니다.
  2. slave_pending_jobs_size_max 기본값이 16M에서 128M으로 증가해 멀티스레드 레플리카의 메모리 산정이 달라집니다. 또한 XA 트랜잭션과 복제/바이너리 로그 필터 조합은 지원되지 않는 것으로 명확화되었고, 필터에 걸린 XA 트랜잭션은 ER_XA_REPLICATION_FILTERS를 발생시켜 토폴로지 일관성 점검이 필요할 수 있습니다.
  3. group_replication_exit_state_action이 추가되었고 기본값 ABORT_SERVER에서는 멤버가 비자발적으로 그룹을 떠날 때 서버가 종료됩니다. READ_ONLY로 바꾸면 super_read_only 상태로 남길 수 있으므로, 자동 복구·감시·failover 정책과 함께 선택해야 합니다.
  4. GROUP BYASC|DESC 한정자는 사용 중단되어 다음 릴리스 제거 대상이 되었고, ST_X()/ST_Y()는 SRS 축 정의에 따라 값을 해석하므로 지리 좌표 데이터를 쓰는 쿼리 결과가 달라질 수 있습니다. 지오메트리 컬럼 인덱스는 공간 인덱스로 취급되며 primary key/unique key나 정렬 지정 제약도 확인해야 합니다.
  5. OpenSSL이 1.0.2o로 갱신되었고 클라이언트 라이브러리 heap overflow, SSL 요구 연결이 비암호화로 열릴 수 있던 문제, 특정 ALTER TABLE이 테이블 암호화를 비활성화하던 문제, SHOW GRANTS/SHOW TABLE STATUS/REGEXP/JSON/파티셔닝/복제 관련 crash와 잘못된 결과 문제가 다수 수정되었습니다.

Audit Log 관련 사항

  • 새 MySQL 설치의 경우, 이제 MySQL Enterprise Audit에서 사용하는 audit_log_user 테이블의 USERHOST 컬럼은 mysql.user 시스템 테이블의 UserHost 컬럼 정의에 더 잘 대응하는 정의를 가집니다.

    MySQL Enterprise Audit가 이미 설치되어 있는 설치 환경으로 업그레이드하는 경우, 다음과 같이 테이블 정의를 변경하는 것이 권장됩니다:

    ALTER TABLE mysql.audit_log_user
      DROP FOREIGN KEY audit_log_user_ibfk_1;
    ALTER TABLE mysql.audit_log_filter
      CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci;
    ALTER TABLE mysql.audit_log_user
      CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci;
    ALTER TABLE mysql.audit_log_user
      MODIFY COLUMN USER VARCHAR(32);
    ALTER TABLE mysql.audit_log_user
      ADD FOREIGN KEY (FILTERNAME) REFERENCES mysql.audit_log_filter(NAME);
    

    (Bug #23706056)

컴파일 관련 사항

  • Microsoft Windows: OpenSSL 1.1의 경우 Windows에서 라이브러리 이름이 변경되었습니다. 이제 CMake 설정 코드가 이를 고려합니다. 또한 이제 Windows에서 -DWITHOUT_SERVER=1을 사용하여 32비트 클라이언트 바이너리를 빌드할 수 있습니다. (Bug #28170711, Bug #91223)
  • 서버 빌드를 위한 Boost 라이브러리의 최소 버전은 이제 1.67.0입니다. (Bug #27866110)

설정 관련 사항

  • 다음 Performance Schema 시스템 변수의 최댓값이 256에서 1024로 증가했습니다:

    performance_schema_max_cond_classes
    performance_schema_max_file_classes
    performance_schema_max_mutex_classes
    performance_schema_max_rwlock_classes
    performance_schema_max_socket_classes
    performance_schema_max_stage_classes
    performance_schema_max_thread_classes
    

    다음 Performance Schema 시스템 변수의 기본값이 250에서 300으로 증가했습니다:

    performance_schema_max_mutex_classes
    

    (Bug #27647918)

  • Linux의 RelWithDebInfo 빌드에서 REPRODUCIBLE_BUILD는 이제 기본값이 ON입니다. (Bug #27483447)

  • slave_pending_jobs_size_max 시스템 변수의 기본값이 16M에서 128M으로 증가했습니다. 멀티스레드 슬레이브(slave_parallel_workers > 0 사용)에서 이 값은 아직 적용되지 않은 이벤트를 보유하는 슬레이브 워커 큐에 사용할 수 있게 되는 메모리의 최대량을 설정합니다. 멀티스레드 슬레이브를 배포하는 데 필요한 리소스를 계산할 때 잠재적으로 더 커진 메모리 사용량을 고려해야 합니다. 마스터와 단일 스레드 슬레이브는 이 설정의 영향을 받지 않습니다.

    새 기본값은 최근 증가한 max_allowed_packet 시스템 변수에 지정된 기본값(현재 64M)의 두 배입니다. slave_pending_jobs_size_max의 값은 소프트 제한이므로, 해당 값보다 큰 이벤트(하나 이상의 패킷으로 구성됨)도 큐에 들어가 처리될 수 있습니다. 그러나 큰 트랜잭션은 모든 슬레이브 워커의 큐가 비워질 때까지 보류된 다음 처리됩니다. 이후의 모든 트랜잭션은 큰 트랜잭션이 완료될 때까지 보류됩니다. 모든 슬레이브 워커의 큐를 비우는 지연과 이후 트랜잭션을 큐에 넣기 위한 대기는 복제 슬레이브에서 지연을 일으키고 슬레이브 워커의 동시성을 감소시킬 수 있습니다. 따라서 slave_pending_jobs_size_max의 값은 예상되는 대부분의 이벤트 크기를 수용할 수 있을 만큼 충분히 높게 설정해야 합니다. (WL #11348)

데이터 딕셔너리 관련 사항

  • 다음 데이터 딕셔너리 개선 사항이 도입되었습니다:

    • 전역 읽기 잠금으로부터 보호하기 위한 내부 메서드가 추가되었습니다. 이 메서드는 데이터 딕셔너리 객체를 저장, 업데이트 또는 삭제하기 전에 호출됩니다.
    • 데이터 딕셔너리 객체를 저장, 업데이트 또는 삭제할 때 전역 읽기 잠금으로부터 보호하기 위해 데이터 딕셔너리 API에 assertion 코드가 추가되었습니다.
    • 이제 스토리지 엔진이 exclusive 메타데이터 잠금을 획득할 때 백업 잠금 및 전역 읽기 잠금에 대한 보호가 암시적으로 획득됩니다.
    • 이제 cost model 항목을 해제하기 전에 cost model 캐시 유효성 검사가 수행됩니다.
    • 트랜잭션을 커밋 및 롤백하고, 트랜잭션 메타데이터 잠금을 해제하기 위한 데이터 딕셔너리 API 함수가 추가되었습니다.

    (Bug #27937059)

사용 중단 및 제거 관련 사항

  • GROUP BY 절에 대한 명시적 ASC 또는 DESC 한정자는 이제 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. (WL #11459)

Firewall 관련 사항

  • MySQL Enterprise Firewall firewall_whitelist 테이블에 이제 ID라는 이름의 기본 키 컬럼이 포함됩니다. (Bug #27164826)

SQL 함수 및 연산자 관련 사항

로깅 관련 사항

  • 이전에는 dragnet.log_error_filter_rules 시스템 변수에 대한 성공적인 할당이 Note와 0이 아닌 경고 수를 발생시켰습니다. 성공한 작업에 대해 진단을 생성하지 않도록, 이 Note는 더 이상 생성되지 않습니다. 대신 dragnet.Status 상태 변수를 참조하여 dragnet.log_error_filter_rules에 대한 가장 최근 할당의 결과를 확인할 수 있습니다. (Bug #27910708, Bug #90571)
  • 이전에는 log_error_services 시스템 변수에 나열된 로그 컴포넌트를 세미콜론으로 구분해야 했습니다. 이제 컴포넌트를 쉼표로 구분할 수 있습니다. 지정된 설정에서 세미콜론 구분자와 쉼표 구분자를 모두 사용할 수는 없습니다. (Bug #27788925, Bug #90268)

Optimizer 관련 사항

  • filesort 알고리즘(인덱스를 사용할 수 없을 때 optimizer가 ORDER BY 절을 충족하기 위해 사용합니다)이 이제 메모리를 더 효율적으로 사용합니다. 주요 변경 사항은 optimizer가 sort_buffer_size 바이트의 고정된 양을 미리 할당하는 대신, sort_buffer_size 시스템 변수로 표시된 크기까지 필요에 따라 메모리 버퍼를 점진적으로 할당한다는 것입니다. 이를 통해 사용자는 작은 정렬에서 과도한 메모리 사용을 걱정하지 않고 더 큰 정렬의 속도를 높이기 위해 sort_buffer_size를 더 큰 값으로 설정할 수 있습니다. (이 이점은 multithreaded malloc이 약한 Windows에서 여러 동시 정렬에 대해서는 발생하지 않을 수 있습니다.)

    또한 filesort는 최악의 경우 시나리오와 관련하여 덜 비관적입니다. 이전에는 병합 작업 또는 정렬 키 생성이 실패할 가능성이 있으면 filesort가 시작하지 않고 오류를 생성했습니다. 이제 최악의 경우가 실제로 발생할 가능성이 낮기 때문에, filesort는 예상되는 실패가 아니라 실제 실패에 대해서만 오류를 생성합니다. (WL #11590)

  • 이전에는 확장 EXPLAIN 출력이 SELECT 문에 대해서만 생성되었습니다. 이제 확장 출력은 INSERT, REPLACE, UPDATE, DELETE 문에 대해서도 생성됩니다. (확장 출력을 표시하려면 EXPLAIN 다음에 SHOW WARNINGS를 사용하십시오. Extended EXPLAIN Output Format을 참조하십시오.) (WL #6033)

패키징 관련 사항

  • Linux의 경우 일반 바이너리 배포판 압축 알고리즘이 Gzip에서 XZ로 변경되었으며, 파일 확장자가 .tar.gz에서 .tar.xz로 변경되었습니다. (Bug #28450941, Bug #91889)

  • Docker는 기본적으로 NUMA 관련 작업을 비활성화하므로, Docker 이미지에 포함된 mysqld는 이제 NUMA 지원이 비활성화되어 오류 로그가 NUMA 경고로 채워지지 않습니다. (Bug #28081363)

  • yaSSL 제거와 OpenSSL이 모든 빌드의 기본 SSL 라이브러리라는 점을 반영하도록 RPM .spec 파일이 업데이트되었습니다. (Bug #28025427)

  • 일반 Linux .tar.gz 배포판의 경우 mysqlxtest 클라이언트가 서버 패키지에서 테스트 패키지로 이동되었습니다. (Bug #27744137)

  • Oracle Linux 7에서 MySQL Server의 ARM 64비트(aarch64) 바이너리를 설치하기 위한 RPM 패키지를 이제 MySQL Yum Repository 및 직접 다운로드를 통해 사용할 수 있습니다.

    이 ARM 릴리스의 알려진 제한 사항: 이 패키지를 설치하려면 Oracle Linux 7 Software Collections Repository(ol7_software_collections)를 활성화해야 하며, libstdc++7 경로도 조정해야 합니다. 추가 세부 정보는 Yum의 플랫폼별 관련 사항을 참조하십시오.

플러그인 관련 사항

보안 관련 사항

  • MySQL Server에 연결된 OpenSSL 라이브러리가 버전 1.0.2o로 업데이트되었습니다. 새 OpenSSL 버전에서 수정된 문제는 http://www.openssl.org/news/vulnerabilities.html에 설명되어 있습니다. (Bug #28025379)

공간 데이터 지원

  • 호환되지 않는 변경: 새로운 공간 함수 ST_Longitude()ST_Latitude()는 각각 해당 Point 인수의 경도 또는 위도를 반환합니다. 두 번째 인수와 함께 호출되는 경우, 이 함수는 해당 인수를 사용하여 각각 해당 Point 인수의 경도 또는 위도를 설정합니다.

    또한 ST_X()ST_Y() 함수는 이제 해당 공간 참조 시스템 정의(SRS)에 따라 해당 Point 인수를 해석합니다:

    • ST_X()는 SRS 정의에서 첫 번째로 나타나는 축의 좌표 값을 반환하고, ST_Y()는 SRS 정의에서 두 번째로 나타나는 축의 좌표 값을 반환합니다.
    • ST_X()ST_Y()가 지리적 SRS를 가진 Point 인수의 경도 또는 위도를 설정하는 데 사용되는 경우, 경도 또는 위도 값은 해당 SRS에 적합한 범위 안에 있어야 하며, 그렇지 않으면 오류가 발생합니다.

    공간 데이터에 이제 ST_X()ST_Y()에 의해 다르게 해석되는 지오메트리 값이 포함되어 있으면, 이러한 함수를 사용하는 기존 쿼리는 이전 MySQL 버전과 비교하여 다른 결과를 반환합니다.

    (Bug #27125600, Bug #88503, WL #11453)

  • 공간 계산을 위한 공간 참조 시스템 데이터를 포함하는 EPSG 데이터 세트가 버전 9.2에서 9.3으로 업그레이드되었습니다. (Bug #27977721)

  • 지오메트리 인자를 허용하고 이전에는 범위를 벗어난 경도 또는 위도 값에 대해 ER_LONGITUDE_OUT_OF_RANGE 또는 ER_LATITUDE_OUT_OF_RANGE 오류를 반환하던 공간 함수는 이제 대신 ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE 또는 ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE을 반환합니다. 이는 지오메트리를 파싱하거나 수정하는 공간 함수에는 적용되지 않습니다: ST_xxxFromText(), ST_xxxFromWKT(), ST_xxxFromWKB(), ST_GeomFromGeoJSON(), ST_X(), ST_Y(), ST_Longitude(), 및 ST_Latitude(). (Bug #27892138)

  • 이전에는 파서가 인덱스 명세에서 USING RTREE를 인식했지만, 어떤 스토리지 엔진에도 이를 지정할 수 없었습니다. 이제 공간 인덱스 명세에 USING RTREE가 허용됩니다. (Bug #27836608)

  • 이제 지오메트리 컬럼의 인덱스는 공간 인덱스여야 합니다. 따라서 공간 컬럼에 인덱스를 생성할 때 SPATIAL 키워드는 선택 사항이지만 암시적으로 적용됩니다. 지오메트리 컬럼의 공간 인덱스는 프라이머리 키 또는 유니크 인덱스에 허용되지 않습니다. 또한 공간 인덱스에는 ASCDESC가 허용되지 않습니다. (Bug #21087676, WL #11808)

SQL 문법 관련 사항

  • 중요한 변경 사항: MySQL은 이제 WITH ROLLUP 수정자를 가진 쿼리에서 DISTINCT를 사용할 수 있도록 허용합니다. 자세한 내용은 SELECT Statement를 참조하십시오. (Bug #87450, Bug #26640100, Bug #20671578, Bug #76229)
  • 중요한 변경 사항: MySQL은 이제 SELECT 문에서 그룹화 함수와 함께 ORDER BY를 사용할 수 있도록 허용합니다. (Bug #86312, Bug #27063525)
  • 중요한 변경 사항: MySQL은 이제 WITH ROLLUP 수정자를 가진 쿼리에서 ORDER BY를 사용할 수 있도록 허용합니다. 자세한 내용은 SELECT Statement를 참조하십시오. (Bug #86311, Bug #26073513)

X 플러그인 관련 사항

  • MySQL 8.0.11 서버에서 X Plugin 클라이언트로 반환된 인증 오류가 치명적인 것으로 표시되어, 클라이언트가 서로 다른 메서드를 사용하는 자동 인증 시도 시퀀스를 계속 시도하지 않고 중지했습니다. 이제 X Plugin은 인증 시도 시퀀스가 진행 중인 동안 치명적 인증 오류와 쓰기 시간 초과 오류 같은 이후의 예상 오류를 무시합니다. 시도한 인증 메서드 중 성공한 것이 없으면, 이제 X Plugin은 서버에서 수신한 가장 관련성이 높은 오류 메시지를 선택하여 반환하며, 이 메시지가 반드시 마지막으로 수신한 오류 메시지인 것은 아닙니다. (Bug #28135006)

  • X Plugin 자동 인증 시퀀스 중에는 미리 설정된 시퀀스에서 서로 다른 인증 메서드를 사용하여 연결 시도가 수행됩니다. X Plugin은 시퀀스를 시작하기 전에 연결이 SSL을 사용하는지 여부를 확인하며, 연결이 암호화되지 않은 경우 PLAIN 인증 메서드로 연결을 시도하지 않습니다. 추가 검증을 위해, 연결이 암호화되지 않은 상태에서 시도되는 경우 PLAIN 인증 메서드가 허용되지 않도록 검사와 오류가 추가되었습니다. (Bug #27691189)

  • 인증 실패가 발생한 경우, X Plugin은 항상 오류 상황에 대한 사용자 지정 X Protocol 오류 메시지와 함께 오류 코드 ER_ACCESS_DENIED를 반환했습니다. 이제 인증 실패에 대해 MySQL 서버에서 수신한 오류 코드가 그에 해당하는 표준 MySQL 오류 메시지와 함께 클라이언트로 대신 전달됩니다. (Bug #27675699)

  • 미리 설정된 시퀀스에서 서로 다른 인증 메서드를 사용하여 연결 시도가 수행되는 X Plugin 자동 인증 시퀀스 중에는, 실패한 각 연결 시도 후 반환된 오류가 심각도 FATAL로 표시되었습니다. 이제 아직 시도할 다른 인증 메서드가 남아 있는 동안 오류는 ERROR로 표시되며, 연결 해제로 이어지는 최종 오류만 FATAL로 표시됩니다. (Bug #27636947)

  • X Plugin 코드가 서로 다른 전처리기 정의로 두 번 컴파일되고 있었습니다. (Bug #27267054)

  • X Plugin의 인증 문제 처리에 여러 개선 사항이 적용되었습니다:

    • 미리 설정된 시퀀스에서 서로 다른 인증 메서드를 사용하여 연결 시도가 수행되는 X Plugin 자동 인증 시퀀스는 이제 오류 응답이 연결이 끊어졌거나 읽기 또는 쓰기 시간 초과가 발생했음을 나타내면 중단됩니다.

    • 자동 인증 시퀀스는 이제 치명적 오류가 발생하는 경우에도 중단됩니다.

    • 이제 포기된 인증 시퀀스에 대해 단순히 마지막으로 발생한 오류가 아니라 마지막으로 중요한 오류가 보고됩니다.

    • 안전하지 않은 연결을 통해 caching_sha2_password 인증 플러그인으로 인증이 시도되는 경우, 이제 더 구체적인 오류 코드와 메시지가 보고됩니다.

      (Bug #27257774)

  • 일부 상황에서 X Plugin이 로드된 MySQL 서버는 실패한 시작 또는 RESTART 명령으로 시작된 종료 프로세스 중 예기치 않은 중단을 겪을 수 있었습니다. 이 문제는 이제 수정되었습니다. (Bug #25474793, Bug #27259783)

추가되거나 변경된 기능

  • 중요한 변경; Group Replication: group_replication_exit_state_action은 불안정한 네트워크 연결로 인해 그룹에서 추방되는 경우와 같이 서버 인스턴스가 비자발적으로 그룹을 떠날 때 Group Replication이 동작하는 방식을 결정합니다. group_replication_exit_state_actionABORT_SERVER(기본값)이면 해당 인스턴스는 자체적으로 종료됩니다. 이 값이 READ_ONLY이면 해당 인스턴스는 대신 자체적으로 super read-only 모드로 전환되고, Group Replication ERROR 상태로 들어갑니다. (WL #11568)

  • InnoDB: 이제 InnoDB는 다음 ALTER TABLE 작업에 대해 ALGORITHM=INSTANT를 지원합니다:

    • 컬럼 추가. 이 기능은 “Instant ADD COLUMN”이라고 합니다.
    • 가상 컬럼 추가 또는 삭제.
    • 컬럼 기본값 추가 또는 삭제.
    • ENUM 또는 SET 컬럼의 정의 수정.
    • 인덱스 타입 변경.
    • 테이블 이름 변경.

    ALGORITHM=INSTANT를 지원하는 작업은 데이터 딕셔너리의 메타데이터만 수정합니다. 작업의 준비 및 실행 단계 동안 테이블에 대해 exclusive 메타데이터 잠금이 설정되지 않으며, 테이블 데이터는 영향을 받지 않으므로 작업이 즉시 수행됩니다. 명시적으로 지정하지 않으면, 이를 지원하는 작업은 기본적으로 ALGORITHM=INSTANT를 사용합니다. ALGORITHM=INSTANT가 지정되었지만 지원되지 않는 경우 작업은 오류와 함께 즉시 실패합니다.

    ALGORITHM=INSTANT를 지원하는 작업에 대한 자세한 내용은 Online DDL Operations를 참조하십시오.

    기여해 주신 Tencent Games DBA 팀에 감사드립니다. (Bug #28100103, Bug #91074, WL #11250)

  • InnoDB: 대형 객체(LOB) 데이터에 대한 작은 업데이트에 이제 undo 로깅이 지원되며, 이는 크기가 100바이트 이하인 LOB 업데이트의 성능을 개선합니다. 이전에는 LOB 업데이트의 크기가 최소 하나의 LOB 페이지였으며, 이는 몇 바이트만 수정할 수 있는 업데이트에는 최적보다 낮은 방식이었습니다. 이 개선 사항은 MySQL 8.0.4에서 추가된 LOB 데이터의 부분 업데이트 지원을 기반으로 합니다. (WL #11328)

  • Replication: 이제 셸 파이프를 사용하여 압축된 바이너리 로그 파일의 아카이브를 스트리밍 입력으로 mysqlbinlog에 제공할 수 있습니다. 이전에는 파일을 mysqlbinlog에 전달하기 전에 별도로 추출해야 했습니다. 이 기여에 대해 Facebook 팀에 감사드립니다.

    이 예에서 binlog-files_1.gz는 처리할 여러 바이너리 로그 파일을 포함합니다. 파이프라인은 binlog-files_1.gz의 내용을 추출하고, 바이너리 로그 파일을 표준 입력으로 mysqlbinlog에 파이프하며, 실행을 위해 mysqlbinlog의 출력을 mysql 클라이언트로 파이프합니다:

    gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot -p
    

    (Bug #27445278, Bug #89423)

    참조: 다음도 참조하십시오: Bug #27836543.

  • Replication: SYSTEM_VARIABLES_ADMINPERSIST_RO_VARIABLES_ADMIN 권한이 mysql.session 예약 계정에 추가되었습니다. (Bug #89873, Bug #27621869)

  • Replication: XCom의 메모리 사용량에 대한 정보가 Performance Schema 테이블에 추가되었습니다. setup_instruments 테이블에는 이제 XCom 캐시에 해당하는 항목이 있으며, memory_summary_global_by_event_name 테이블에는 XCom 캐시의 메모리 사용량 통계가 포함됩니다. (WL #9855)

  • Microsoft Windows: Windows에서 RESTART를 구현하는 데 사용되는 fork는 --gdb 옵션을 사용하여 억제할 수 있었습니다. 그러나 이는 디버깅 환경을 설정하기 위해 수행되는 다른 옵션 동작에 더해 수행되는 부수 효과였습니다. 디버그가 아닌 설정에서는 모니터 프로세스의 fork를 억제하는 단일 목적을 위해 새 --no-monitor 옵션을 사용할 수 있습니다. --gdb 또는 --no-monitor 중 하나로 시작된 서버의 경우 RESTART를 실행하면 서버가 다시 시작되지 않고 단순히 종료됩니다. (Bug #27801043)

  • DROP TABLEDROP DATABASE에 의한 외래 키 관계 검사가 개선되었습니다. 이제 검사는 어떤 테이블도 삭제되기 전에 수행되므로, 문제가 발생하는 경우 문은 변경 사항을 만들기 전에 실패합니다. 부모 테이블과 자식 테이블은 동일한 DROP TABLE 문으로 삭제되는 한 이제 임의의 순서로 삭제할 수 있습니다. 또한 자식 테이블을 삭제하지 않고 부모 테이블을 삭제하려는 시도에 대한 오류 보고가 개선되었습니다. (Bug #27821060, Bug #17564464, Bug #70531, Bug #22359539, Bug #79610)

  • 역할 지원이 추가되었을 때 ADMIN 키워드는 예약어가 되었습니다. 이제 ADMIN은 다시 비예약어가 되었습니다. (Bug #27814204)

  • 클라이언트가 서버를 종료할 때, 이제 서버는 이 동작을 수행한 사용자를 나타내는 메시지를 오류 로그에 기록합니다. (Bug #26246628, Bug #86635)

  • 이전에는 --ssl-mode=VERIFY_IDENTITY 옵션에 대해, 클라이언트가 연결에 사용한 호스트 이름이 인증서의 Common Name 값과 일치하는지 여부를 확인했지만 Subject Alternative Name 값은 확인하지 않았습니다. 이제 클라이언트가 OpenSSL 1.0.2 이상을 사용하는 경우, 클라이언트는 호스트 이름이 서버 인증서의 Subject Alternative Name 값 또는 Common Name 값 중 하나와 일치하는지 여부를 확인합니다. 이 변경의 기반이 된 패치를 제공한 Daniël van Eeden에게 감사드립니다. (Bug #16211011, Bug #68052, Bug #27511233, Bug #89578)

수정된 버그

  • 중요한 변경 사항; JSON: 이제 JSON_TABLE() 함수가 base-64 값을 자동으로 디코드하고 컬럼 사양에서 지정한 캐릭터셋을 사용하여 출력합니다. (Bug #90157, Bug #27729112)

    참조: 다음도 참조하십시오: Bug #89847, Bug #27613276.

  • InnoDB: 8.0.12에서 INFORMATION_SCHEMA.INNODB_TABLESINFORMATION_SCHEMA.INNODB_COLUMNS 테이블에 추가된 새 컬럼이 8.0.12로 업그레이드한 후 표시되지 않았습니다. (Bug #28065244)

  • InnoDB: LOB 인덱스 항목에 저장된 대형 객체(LOB) 버전 번호가 1로 초기화되지 않고 0으로 초기화되지 않은 상태로 남아 있었습니다. (Bug #28046298)

  • InnoDB: 생성 컬럼이 있는 테이블에 컬럼을 추가하면 유효하지 않은 어설션이 발생했습니다. (Bug #28040201)

  • InnoDB: 체크포인트 작업 중 해제된 메모리에 접근하려는 시도로 인해 서버가 종료되었습니다. (Bug #28039477)

  • InnoDB: 일반 MySQL 빌드에서 의도치 않게 노출된 실험적 시스템 변수와 함께 서버를 시작할 때 어설션 실패가 발생했습니다. (Bug #27899424, Bug #90526, Bug #27898396, Bug #90523, Bug #27898344, Bug #90522)

  • InnoDB: 유효하지 않은 시스템 변수 설정으로 인해 어설션이 발생했습니다. (Bug #27898284)

  • InnoDB: 삭제된 file-per-table 테이블스페이스에서 공유 테이블스페이스로 테이블을 이동하려고 시도하면 어설션이 발생했습니다. 이제 해당 작업은 대신 오류를 생성합니다. (Bug #27861972)

  • InnoDB: 대형 객체(LOB)에 대한 페이지 할당과 관련된 잠재적 실패가 충분히 처리되지 않았습니다. (Bug #27852003)

  • InnoDB: ngram 풀텍스트 검색 파서는 쉼표 및 마침표 문자가 단어로 토큰화되는 것을 허용했으며, 이로 인해 boolean 모드와 자연어 모드 검색 결과 사이에 불일치가 발생했습니다. 쉼표 및 마침표 문자는 더 이상 토큰화되지 않습니다. (Bug #27847697)

  • InnoDB: 테이블스페이스 헤더 페이지의 동시 수정과, 부분적으로 초기화된 페이지에 잠금을 설정하려는 시도로 인해 체크섬 불일치 및 기타 문제가 발생했습니다. (Bug #27823064)

  • InnoDB: 이제 fsync() 작업에서 반환된 I/O 오류는 hard error로 처리됩니다. (Bug #27805553, Bug #90296)

  • InnoDB: 단일 스레드에서 두 minitransaction이 대형 객체 값(LOB)의 첫 번째 페이지를 latch한 동안 다른 스레드가 해당 페이지를 할당하려고 시도하여 데드락이 발생했습니다. (Bug #27777959)

  • InnoDB: MySQL 8.0.12로 업그레이드한 후 INFORMATION_SCHEMA.INNODB_COLUMNS 테이블에서 FTS_DOC_ID 컬럼을 포함한 테이블 컬럼이 누락되었습니다. (Bug #27774145)

  • InnoDB: Optimizer가 가상 컬럼에 정의된 prefix 인덱스를 선택했을 때 유효하지 않은 assertion이 발생했습니다. (Bug #27755892)

    참조: 이 문제는 다음의 regression입니다: Bug #19806106.

  • InnoDB: truncate 중인 테이블의 인메모리 테이블 객체가 부적절한 메타데이터 잠금 보호 아래에서 열릴 수 있었습니다.

    TRUNCATE PARTITION 작업 중 AUTOINC 카운터 값을 보존하는 새로운 방법이 구현되었습니다. (Bug #27754995)

  • InnoDB: dirty 페이지는 포함하지만 redo 로그 레코드는 포함하지 않는 mini-transaction 커밋 중 assertion이 발생했습니다. mini-transaction은 최근 닫힌 버퍼의 공간을 기다리지 않았고, 이후 해당 페이지를 유효하지 않은 현재 LSN 값으로 표시했습니다. 유효하지 않은 LSN 값이 flush 리스트에 추가된 후, 지연된 mini-transaction이 더 이른 LSN 값을 가진 dirty 페이지를 추가하여 flush 리스트 순서를 깨뜨렸습니다.

    innodb_log_checkpoint_fuzzy_now 디버그 옵션이 추가되었습니다. 이 옵션을 활성화하면 InnoDB가 fuzzy checkpoint를 쓰도록 강제합니다. 또한 LSN 값을 추적하기 위해 새로운 내부 redo 로그 모듈 카운터가 추가되었습니다. log_lsn_buf_dirty_pages_added 카운터는 dirty 페이지가 추가된 범위의 LSN 값을 추적하며, log_lsn_buf_pool_oldest_lwm 카운터는 버퍼 풀에서 가장 오래된 수정된 블록에 대한 low watermark LSN을 추적합니다. (Bug #27664539)

  • InnoDB: Contention-Aware Transaction Scheduling 알고리즘(CATS)은 다른 트랜잭션을 기다리는 트랜잭션 수를 추적합니다. 교착 상태가 발생한 경우, 대기 중인 트랜잭션 수를 근사하는 방식이 부풀려진 값을 생성했습니다. (Bug #27646322)

  • InnoDB: 피해자 트랜잭션 잠금을 보유한 상태에서 InnoDB 티켓을 획득하려고 하면 잠금 순서 위반이 발생했습니다. (Bug #27626681)

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

  • InnoDB: 길이가 0인 BLOB 값을 읽으려는 시도가 복구 중 어설션 실패를 발생시켰습니다. BLOB 값이 아직 완전히 삽입되지 않았습니다. (Bug #27617389)

  • InnoDB: 이미 메모리에 있는 테이블에 대한 테이블 잠금을 획득할 때 경합 조건이 발생했습니다. (Bug #27586419, Bug #27577704)

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

  • InnoDB: 서버를 다시 시작한 후 암호화된 테이블을 생성하려고 하면 스토리지 엔진에서 일반 오류가 반환되었습니다. (Bug #27577339)

  • InnoDB: 공간 인덱스와 함께 Contention-Aware Transaction Scheduling(CATS)을 사용하면 트랜잭션이 무기한 대기했습니다. (Bug #27572937)

  • InnoDB: 멀티바이트 문자를 포함한 테이블스페이스 이름을 잘못 파싱하여 DROP DATABASE 작업이 실패했습니다. (Bug #27566937)

  • InnoDB: 임시 테이블을 식별하기 위해 수행된 검사로 인해 데이터 딕셔너리가 파티셔닝된 테이블을 열려고 시도할 때 오류가 발생했습니다. (Bug #27565997)

  • InnoDB: import tablespace 작업 중 보고된 스키마 불일치 오류가 일치하지 않는 테이블 플래그를 읽을 수 있는 형식으로 출력하지 못했습니다. (Bug #27542720)

  • InnoDB: DDL 작업이 FULLTEXT 인덱스 최적화 작업이 완료될 때까지 기다리지 못했습니다. (Bug #27326796)

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

  • InnoDB: 읽기 전용 트랜잭션에 대한 불필요한 검사가 trx_set_rw_mode() 함수에서 제거되었습니다. 패치를 제공한 Sandeep Sethia에게 감사드립니다. (Bug #27211287, Bug #88739)

  • InnoDB: 외래 키 제약 조건을 추가한 DDL 작업이 부모 테이블에 속한 오래된 메모리 객체에 접근했을 때 assertion을 발생시켰습니다. (Bug #27208858)

  • InnoDB: memcached get 작업을 시작한 후 실패하는 assertion이 발생했습니다. (Bug #26876594)

  • InnoDB: 외래 키 검사 중 발견된 손상된 인덱스 ID가 assertion을 발생시켰습니다. (Bug #26654685)

  • InnoDB: 일반 테이블스페이스에 있는 테이블에 대한 DROP TABLE 작업이 해당 작업의 post-DDL 단계에서 인덱스 상태를 검사할 때 assertion을 발생시켰습니다. (Bug #26523254)

  • InnoDB: DDL 작업 중 내부 데드락으로 인해 긴 세마포어 대기가 발생한 후 서버가 종료되었습니다. (Bug #26225783)

  • InnoDB: DDL 작업에서 유효하지 않은 잠금 업그레이드로 인해 심각한 오류가 발생했습니다. (Bug #26225783)

  • InnoDB: Windows 64-bit 시스템에서 유효하지 않은 버퍼 풀 설정 값으로 인해 서버가 시작 시 종료되었습니다. (Bug #26100239, Bug #86370)

  • InnoDB: 뮤텍스 타입 정의와 관련된 디버그 코드 블록이 제거되었습니다. 이 코드 블록은 더 이상 코드 블록의 비디버그 버전과 다르지 않았습니다. (Bug #24952279, Bug #83529)

  • InnoDB: 로그 파싱 버퍼 오버플로로 인해 복구 중 서버 오류가 발생했습니다. 이제 로그 파싱 버퍼에는 공간이 동적으로 할당되며, innodb_log_buffer_size에 지정된 크기에 도달할 때까지 필요에 따라 증가합니다. (Bug #24734190)

  • InnoDB: 테이블 잠금 큐에 대한 비용이 큰 반복을 피함으로써 동일한 테이블에 대한 동시 업데이트의 테이블 잠금이 최적화되었습니다.

    기여해 주신 Zhai Weixiang에게 감사드립니다. (Bug #18955152, Bug #72948)

  • Packaging: Windows에서 mysqld.exe --help 명령은 시스템 출력에 불필요하고 예상치 못한 세부 정보를 표시했으며, 이 수정으로 해당 출력이 제거되었습니다. (Bug #27894020)

  • 파티셔닝: ALTER TABLE... TRUNCATE PARTITION 문의 롤백이 올바르게 처리되지 않았습니다. (Bug #27603025)

    참조: 다음도 참조하십시오: Bug #87562, Bug #26710839.

  • 파티셔닝: 파티셔닝된 테이블의 경우, 테이블을 다시 빌드하거나 서버를 다시 시작한 후 파티션 업데이트 시간이 올바르지 않을 수 있었습니다. (Bug #27073100)

  • Replication: 서버 시작 시 바이너리 로깅을 비활성화하기 위해 --skip-log-bin 옵션을 지정한 경우, expire_logs_daysbinlog_expire_logs_seconds가 모두 0이 아닌 값으로 설정되어도 경고 메시지가 발생하지 않았습니다. --skip-log-bin 옵션은 만료할 바이너리 로그 파일이 없음을 의미하므로, 이러한 바이너리 로그 만료 기간 설정의 결과(즉, expire_logs_days 값이 무시되는 것)는 실질적인 영향이 없었습니다. 그러나 이제는 경고 메시지가 발생하므로, 서버에 대해 바이너리 로깅을 활성화하기 전에 해당 상황을 수정할 수 있습니다. (Bug #27699608)

  • Replication: 멤버가 그룹에 조인하지 못할 때 생성되는 로그 메시지가 개선되었으며, 예를 들어 그룹에 조인하는 멤버의 group_replication_group_name이 시드의 group_replication_group_name과 일치하지 않는 경우 이제 로그 메시지에 이 내용이 설명됩니다. (Bug #27628695)

  • Replication: MySQL 서버가 InnoDB를 읽기 전용 모드로 전환하는 innodb_force_recovery 설정값 4 이상으로 크래시 복구 모드에서 시작되는 경우, 반동기 복제 마스터 플러그인은 초기화되지 않아야 합니다. MySQL 8.0에서 플러그인 초기화 순서가 변경되었기 때문에, 서버는 플러그인이 등록되어 있으면 초기화도 완료된 것으로 가정하고, 잘못해서 이를 초기화 해제하려고 시도했습니다. 이제 크래시 복구 모드에서 이 플러그인의 처리가 수정되어, 플러그인이 초기화되지 않은 경우 초기화 해제 함수가 실행되지 않습니다. (Bug #27481872)

  • Replication: XA 트랜잭션으로 업데이트되는 테이블에 복제 필터 또는 바이너리 로그 필터를 적용하면 문제가 발생할 수 있습니다. 테이블 필터링으로 인해 복제 슬레이브에서 XA 트랜잭션이 비어 있게 될 수 있으며, 비어 있는 XA 트랜잭션은 지원되지 않습니다. 또한 MySQL 8.0에서 기본값이 된 복제 슬레이브의 master_info_repository=TABLErelay_log_info_repository=TABLE 설정에서는 필터링된 XA 트랜잭션 이후 데이터 엔진 트랜잭션의 내부 상태가 변경되며, 복제 트랜잭션 컨텍스트 상태와 일관되지 않게 될 수 있습니다.

    이러한 문제로 인해 XA 트랜잭션과 함께 복제 필터 또는 바이너리 로그 필터를 사용하는 것은 지원되지 않습니다. 이 수정 사항은 새 오류 ER_XA_REPLICATION_FILTERS를 추가하며, 이 오류는 트랜잭션이 그 결과 비어 있었는지 여부와 관계없이 XA 트랜잭션이 복제 필터의 영향을 받을 때마다 기록됩니다. 트랜잭션이 비어 있지 않으면 복제 슬레이브는 계속 실행될 수 있지만, 잠재적인 문제를 방지하기 위해 XA 트랜잭션과 함께 복제 필터를 사용하는 것을 중단하는 조치를 취해야 합니다. 트랜잭션이 비어 있으면 복제 슬레이브가 중지됩니다. 이 경우 복제 슬레이브는 복제 프로세스의 일관성이 손상될 수 있는 미확정 상태에 있을 수 있습니다. 특히 슬레이브의 슬레이브에 설정된 gtid_executed 집합이 마스터의 집합과 일관되지 않을 수 있습니다. 이 상황을 해결하려면 마스터를 격리하고 모든 복제를 중지한 다음, 복제 토폴로지 전반에서 GTID 일관성을 확인하십시오. 오류 메시지를 생성한 XA 트랜잭션을 실행 취소한 다음 복제를 다시 시작하십시오. (Bug #27442477)

  • Replication: mysqlbinlog를 사용하여 128KB보다 큰 바이너리 로그 이벤트를 읽을 때, 실제 크기 대신 128KB가 크기로 반환되었기 때문에 읽기가 실패했습니다. 이제 이 문제가 수정되었습니다. 패치를 제공해 주신 Facebook 팀에 감사드립니다. (Bug #27417084, Bug #89326)

  • Replication: 처리 중에 바이너리 로그 트랜잭션 캐시 크기(binlog_cache_size)보다 큰 트랜잭션이 임시 파일로 플러시되고, 임시 디렉터리의 공간 부족으로 인해 플러시가 실패한 경우, 플러시 오류가 올바르게 처리되지 않았습니다. 오류 로그에 메시지가 기록되지 않았고, 트랜잭션이 롤백된 후 바이너리 로그 캐시가 지워지지 않았습니다. 이제 이 상황에서 서버는 binlog_error_action 설정에 따라 적절한 조치(서버 종료 또는 로깅 중지)를 수행하고, 오류 로그에 메시지를 기록합니다. 트랜잭션이 롤백될 때, 서버는 플러시 오류를 확인하고 발생한 오류가 있으면 바이너리 로그 캐시를 지웁니다. (Bug #27399620, Bug #89272)

  • Replication: GTID가 복제에 사용 중일 때, 슬레이브에서 필터링되어 제외된 복제된 트랜잭션은 영속화됩니다. 슬레이브에서 바이너리 로깅이 활성화되어 있으면, 필터링되어 제외된 트랜잭션은 Gtid_log_event 뒤에 BEGINCOMMIT 문만 포함하는 빈 트랜잭션이 오는 형태로 바이너리 로그에 기록됩니다. 바이너리 로깅이 비활성화되어 있으면, 필터링되어 제외된 트랜잭션의 GTID가 mysql.gtid_executed 테이블에 기록됩니다. 이 프로세스는 실행된 GTID 집합에 누락이 없도록 보장하고, 슬레이브가 마스터에 다시 연결하는 경우 필터링되어 제외된 트랜잭션이 다시 검색되지 않도록 보장합니다. 이전에는 이 프로세스가 CREATE DATABASE, ALTER DATABASE, DROP DATABASE 문에는 수행되지 않았지만, 이제는 다른 문뿐만 아니라 해당 문에도 수행됩니다. (Bug #27308751, Bug #88891)

  • Replication: 멀티스레드 슬레이브에서 슬레이브에 STOP SLAVE 문이 실행된 뒤 START SLAVE 문이 실행되면, 오류 로그가 종료 시 슬레이브 SQL 스레드에 대해 바이너리 로그에서 보고한 위치와 이후 초기화 시 슬레이브 SQL 스레드에 대해 보고한 위치가 서로 다를 수 있습니다.

    멀티스레드 슬레이브의 경우 종료 시 SQL 스레드에 대해 보고되는 위치는 복제 스트림이 일관되고 갭이 없는 지점까지의 low water mark입니다. 해당 위치 이전에 나타나는 트랜잭션은 커밋된 것이 보장되지만, 해당 위치 이후의 트랜잭션은 커밋되었을 수도 있고 그렇지 않을 수도 있습니다. 그러나 이 low water mark는 워커 스레드를 중지하는 프로세스가 실제로 수행되기 전에 보고되고 있었으며, 이후 해당 프로세스 중 체크포인트 루틴에 의해 low water mark가 업데이트되었습니다. 이제 로그 메시지의 타이밍이 변경되어 최종 low water mark가 종료 시 SQL 스레드의 위치로 보고됩니다. (Bug #27300658)

  • Replication: MySQL 5.7.23보다 이전 버전의 MySQL을 실행 중인 복제 그룹의 온라인 업그레이드는 가능하지 않았습니다. MySQL 5.7.22 또는 MySQL 8.0.11보다 이전 버전을 실행 중인 멤버가 MySQL 5.7.21 이하를 실행 중인 멤버가 있는 그룹에 참여하려고 하면, MySQL 5.7.21이 자신의 lower_case_table_names 시스템 변수 값을 전송하지 않기 때문에 그룹에 참여하지 못했습니다. 이는 더 이후 버전이 lower_case_table_names 변수를 유효하지 않은 값과 비교한 뒤 그룹을 종료했음을 의미합니다. 해결 방법은 그룹을 오프라인으로 전환하고 버전 5.7.23 또는 8.0.12 이상으로 업그레이드하는 것입니다. 이후 그룹의 후속 업그레이드는 그룹을 오프라인으로 전환하지 않고 수행할 수 있습니다. Upgrading Group Replication을 참조하십시오. (Bug #90794, Bug #27991334)

  • Replication: Group Replication 플러그인을 실행하는 동안 gtid_purged 값을 변경할 수 있었지만, 이러한 경우에는 이 변수를 절대 수정해서는 안 됩니다. (Bug #90146, Bug #27724561)

  • Replication: PIT_TRANSACTIONS_NEGATIVE_CERTIFIED, PIT_TRANSACTIONS_ROWS_VALIDATINGPIT_TRANSACTIONS_LOCAL_ROLLBACK 멤버 메시지가 올바르게 디코딩되지 않았습니다. (Bug #90077, Bug #27692831)

  • Replication: 분산 복구 절차 중과 같은 특정 상황에서, 인증 정보 가비지 컬렉션이 필요한 것보다 더 많은 데이터를 제거하여 충돌이 감지되지 않았습니다. 이 경우를 고려하도록 가비지 컬렉션 절차가 개선되었습니다. (Bug #89938, Bug #27652526)

  • Replication: ER_GRP_RPL_SQL_SERVICE_FAILED_TO_RUN_SQL_QUERY 오류가 잘못 로깅되었습니다. (Bug #89788, Bug #27590534)

  • Replication: 예를 들어 과반수를 잃은 후 그룹 차단을 해제하기 위해 group_replication_force_members를 사용하면 때때로 오류 1231로 실패했습니다. (Bug #86957, Bug #26394418)

  • Group Replication: group_replication_applier 채널의 applier 스레드에서 오류가 발생했을 때, 결과 오류 메시지에 표시되는 master_log_nameend_log_pos 값이 올바르지 않았습니다. 이는 트랜잭션의 이벤트가 해당 트랜잭션이 시작된 멤버의 바이너리 로그에 기록되기 전에 복제되며, 그 결과 applier 스레드가 복제본에서 이를 적용하는 시점에는 최종 값을 알 수 없기 때문입니다. 혼동을 방지하기 위해, group_replication_applier 채널에서 발생하는 이러한 오류 메시지는 더 이상 바이너리 로그 이름이나 위치를 포함하지 않습니다. (Bug #89146, Bug #27368735)

  • macOS: macOS에서, MySQL 환경설정 패널에서 그렇게 설정하지 않았더라도 시스템 부팅 시 서버가 자동 시작되었습니다. (Bug #27969174, Bug #90672)

  • Microsoft Windows: Windows의 디버그 빌드에서, 빈 정의 문자열을 사용하는 CREATE SPATIAL REFERENCE SYSTEM이 어설션을 발생시킬 수 있었습니다. (Bug #27672683)

  • 클라이언트 라이브러리에서 ppoll()에 대해 시그널 차단이 잘못 해제되었습니다. 패치를 제공해 준 Facebook에 감사드립니다. (Bug #28075623, Bug #90999, Bug #28096808, Bug #91067)

  • 특정 ALTER TABLE 문이 테이블 암호화를 비활성화할 수 있었습니다. (Bug #28045585)

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

  • 일부 조건에서 MyISAM 코드 컴파일이 누락된 include 파일로 인해 실패했습니다. (Bug #28039150, Bug #90898)

  • REGEXP_REPLACE() 함수는 UPDATE 문에서 사용될 때 결과를 잘랐습니다. (Bug #28027093, Bug #90870)

  • 한 결과 세트 로우의 REGEXP_REPLACE() 결과가 다음 로우로 이어질 수 있었으며, 이로 인해 현재 로우에 이전 결과가 누적되었습니다. (Bug #27992118, Bug #90803)

  • MySQL 클라이언트 라이브러리의 힙 오버플로 취약점이 수정되었습니다. (Bug #27980823)

  • SUPER 권한이 있는 사용자가 keyring_operations 시스템 변수를 수정할 수 없었습니다. (Bug #27976270)

  • MySQL 5.7 및 MySQL 8.0.11에서 타임스탬프가 0인 상태로 생성된 전체 텍스트 검색 보조 테이블은 MySQL 8.0.11에서 MySQL 8.0.12로 업그레이드할 때 데이터 딕셔너리 업그레이드 실패를 발생시켰습니다. (Bug #27960500)

  • MySQL 5.7에서 업그레이드할 때 “source and destination overlap in memcpy” Valgrind 오류가 반환되었습니다. (Bug #27945658, Bug #90691)

  • Linux 바이너리는 setuid() 호출을 실행한 후 코어를 덤프할 수 없었습니다. (Bug #27929894, Bug #90642, Bug #23337428, Bug #21723)

  • RESET PERSIST는 메모리에서 변수 값을 플러시하지 않았습니다. (Bug #27924206)

  • 디버그 빌드의 경우, CREATE TABLE... SELECT를 사용하여 긴 숫자 문자열이 있는 테이블을 생성하고 해당 컬럼에 인덱스를 생성하면 assertion이 발생할 수 있었습니다. (Bug #27909771)

  • 디버그 빌드의 경우, 알 수 없는 변수에 대한 RESET PERSIST가 assertion을 발생시킬 수 있었습니다. (Bug #27903874, Bug #90546)

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

  • 파티셔닝된 테이블을 참조하는 뷰의 컬럼 메타데이터 업데이트가 서버 종료를 유발할 수 있었습니다. (Bug #27903842)

  • 디버그 빌드의 경우, GEOMETRY 컬럼과 SELECT * FROM (SELECT NULL)의 결합된 데이터 타입을 계산할 때 UNION 쿼리에서 assertion이 발생할 수 있었습니다. (Bug #27903792, Bug #90550)

  • 디버그 빌드에서 thread_stack=0으로 서버를 시작하고 ALTER TABLE을 실행하면 assertion이 발생할 수 있었습니다. (Bug #27899274, Bug #90525)

  • SHOW TABLE STATUS가 서버 종료를 유발할 수 있었습니다. (Bug #27897815)

  • INTERVAL() 함수를 사용하는 생성 컬럼에서 잘못된 동작이 발생할 수 있었습니다. (Bug #27881102)

  • Fedora 28의 경우 Connector ODBC 네이티브 패키지가 설치되어 있으면 MySQL Community RPM 패키지가 설치되지 않았습니다. (Bug #27850721)

  • Performance Schema를 삭제할 수 있었습니다. (Bug #27830283)

  • mysql_sys_var_longlong() 또는 String::copy() 호출에서 런타임 오류가 발생할 수 있었습니다. (Bug #27822413, Bug #27808412)

  • 부적절한 오류 번호를 사용한 오류 로깅 코드에서 assertion이 발생했습니다. (Bug #27792903)

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

  • ALTER TABLECONVERT TO CHARACTER SET charset_name 절은 charset_nameDEFAULT인 경우 문법 오류를 생성했습니다. (Bug #27760787, Bug #90222)

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

  • 클라이언트 연결 시도에서 암호화된 연결이 필요하다고 지정했더라도, 서버가 SSL을 지원하도록 설정되지 않은 경우 암호화되지 않은 연결이 발생할 수 있었습니다. (Bug #27759871)

  • INSERT INTO... SELECT는 지오메트리 컬럼에 대해 유효한 지오메트리 값을 요구하는 것과 관련하여 INSERT INTO... VALUES()만큼 많은 검사를 수행하지 않았습니다. (Bug #27756083)

  • REGEXP_INSTR()는 유효하지 않은 일치 모드 플래그와 함께 사용될 때 오류 메시지를 반환하지 않았습니다. (Bug #27751277)

  • 일부 데이터 딕셔너리 테이블 정의가 초기 설계에 더 가깝게 맞춰지도록 수정되었습니다. 또한 데이터 딕셔너리 버전 번호가 증가되었으며, 데이터 딕셔너리 테이블 인덱스를 참조하는 코드는 이제 숫자 값 대신 심볼릭 인덱스 이름을 사용합니다. (Bug #27745526, Bug #90196)

  • 많은 수의 매개변수가 포함된 로우를 삽입하기 위해 준비된 명령문을 실행하는 작업이 매우 느렸습니다. (Bug #27699248)

  • ibd2sdi는 0으로 나누기 연산을 수행하여 종료될 수 있었습니다. (Bug #27692051, Bug #90071)

  • mysql-boost-8.0.4.tar.gz 소스 배포판에서 NDB 소스가 누락되었습니다. (Bug #27690232)

  • SHOW GRANTS는 익명 사용자로부터 권한을 상속한 권한 없는 사용자에 대해 실행되는 경우 서버 종료를 유발할 수 있었습니다. (Bug #27678129)

  • 파서가 CREATE INDEX의 인덱스 이름이 비어 있는 것을 잘못 허용했습니다. (Bug #27676427)

  • systemd 또는 mysqld_safe가 시작한 서버 재시작 실패가 오류 로그에 기록되지 않았습니다. (Bug #27675050, Bug #90012)

  • 디버그 빌드의 경우, 트랜잭션이 읽기 전용 모드에 있으면 히스토그램을 생성하거나 삭제하려고 할 때 어설션이 발생할 수 있었습니다. (Bug #27672693)

  • 서버가 --skip-grant-tables로 시작된 경우, SET ROLE DEFAULT가 서버 종료를 발생시켰습니다. (Bug #27672154)

  • VARBINARY 값을 TIME 값으로 캐스팅하는 작업이 올바르게 수행되지 않았습니다. (Bug #27665997)

  • const 참조에 대한 조건 생성 후 오류 검사가 수행되지 않았습니다. (Bug #27665085)

  • MeCab 모델이 관리하는 딕셔너리 정보 객체가 MeCab 모델이 해제된 후 사용되었습니다. (Bug #27660368)

  • MYSQL_AUDIT_AUTHENTICATION_CLASS 클래스의 이벤트를 중단하려고 하면 서버 종료가 발생했습니다. 이제 이러한 이벤트는 중단할 수 없습니다. (Bug #27645636)

  • 이러한 resource-group 문은 암시적 커밋을 발생시키며, 저장 함수에서는 암시적 커밋이 허용되지 않기 때문에 이제 저장 함수에서 허용되지 않습니다: CREATE RESOURCE GROUP, ALTER RESOURCE GROUP, DROP RESOURCE GROUP. (Bug #27638623, Bug #89914)

  • Audit log 필터 규칙에서 클래스 이름을 문자열 배열로 지정할 수 없었습니다. 이제 가능합니다. 예:

    {
      "filter": {
        "class": [
          { "name": [ "connection", "general", "table_access" ] }
        ]
      }
    }
    

    (Bug #27628325)

  • Windows에서 Visual Studio용 Visual C++ Redistributable이 제거된 경우, MSI 설치 관리자를 사용한 MySQL 제거가 실패했습니다. (Bug #27621546)

  • mysql_secure_installation은 이제 사용 중단된 validate_password 플러그인이 아니라 validate_password 컴포넌트를 로드합니다. (Bug #27619667)

  • 물음표(?)를 포함하는 표현식을 사용하는 REGEXP_LIKE()는 prepared statement에 포함되었을 때 올바르게 처리되지 않았습니다. (Bug #27595368)

  • REGEXP_SUBSTR()NULL 패턴을 항상 올바르게 처리하지 못했습니다. (Bug #27572258)

  • 일부 SHOW CREATE TABLE 문에서 assertion이 발생할 수 있었습니다. (Bug #27569314)

  • Performance Schema events_stages_current 테이블에서 잘못된 stage가 보일 수 있었습니다. (Bug #27566220)

  • 테이블의 트리거가 해당 PRECEDES/FOLLOWS 절에 지정된 순서와 다른 순서로 실행될 수 있었습니다. (Bug #27544152)

  • 시작 시 일부 지속 변수(예: keyring_operationsmandatory_roles)를 설정하려는 시도에서 권한 위반 오류가 발생했으며, 서버가 시작되지 않거나 변수가 설정되지 않았습니다. (Bug #27523095)

  • 일부 조건에서 MeCab 전체 텍스트 검색 코드에 unused-variable 경고가 발생했습니다. 패치를 제공해 준 Laurynas Biveinis에게 감사드립니다. (Bug #27519952, Bug #89598)

  • 저장 프로시저 내에서 관련된 테이블이 FEDERATED 스토리지 엔진을 사용하는 경우, 외래 키 실패를 포착하기 위한 조건 핸들러를 작성할 수 없었습니다. (Bug #27509959)

  • 외래 키 관계에서 부모 키로 사용되는 기본 키를 삭제할 수 있었습니다. 또한 테이블 생성의 경우, 이제 SQL 계층은 외래 키에 대한 부모 키가 있는지 확인하고 누락된 경우 오류를 보고합니다. (Bug #27506922, Bug #89570, Bug #11754696, Bug #46337)

  • NO_ENGINE_SUBSTITUTION SQL 모드가 비활성화된 상태에서, 원하는 엔진이 disabled_storage_engines 시스템 변수를 사용하여 비활성화된 경우 CREATE TABLEALTER TABLE에 대해 대체가 아니라 오류가 발생했습니다. (Bug #27502530)

  • keyring_encrypted_file keyring 플러그인을 사용한 키 순환으로 인해 서버가 종료될 수 있었습니다. (Bug #27497018)

  • MySQL Enterprise Firewall이 많은 수의 규칙으로 설정된 경우, 서버 종료에 오랜 시간이 걸릴 수 있었습니다. (Bug #27492122)

  • SET PERSIST_ONLY var_name = DEFAULT는 기본값이 아니라 현재 전역 값을 영구 저장했습니다. (Bug #27489026)

  • MySQL이 LINK_RANDOMIZE CMake 옵션을 활성화하여 설정된 경우, 이제 --gc-sections 컴파일러 옵션이 비활성화됩니다. 이 조합은 세그멘테이션 폴트를 일으킵니다. (Bug #27484106)

  • 서버 설치 중에, 기본 플러그인이 caching_sha2_password인 경우에도 mysql.infoschema, mysql.session, mysql.sys 예약 계정이 mysql_native_password 인증 플러그인과 연결되었습니다. (Bug #27454299)

  • 일부 윈도우 함수가 집계된 데이터 타입에 잘못된 정밀도를 사용했습니다. (Bug #27452179)

  • 16진수 값 H에 대해, WHERE (-1) - H를 사용하는 SELECT가 어설션을 발생시켰습니다. (Bug #27452082)

    참조: 함께 참조하십시오: Bug #27041382. 이 문제는 다음의 회귀입니다: Bug #21982792.

  • pfs-t 단위 테스트의 메모리 누수가 수정되었습니다. 패치를 제공한 Yura Sorokin에게 감사드립니다. (Bug #27440735, Bug #89384)

  • 저장 프로그램 내에서 CHAR()를 여러 번 호출하면, 유효하지 않은 코드 포인트가 인수로 전달된 후 서로 다른 결과가 산출될 수 있었습니다. (Bug #27410088)

  • automatic_sp_privileges가 활성화된 경우, EXECUTEALTER ROUTINE 권한이 루틴 생성자에게 올바르게 부여되지 않았습니다. (Bug #27407480)

  • 정렬을 사용한 일부 쿼리는 최적화 중 초기화되지 않은 컬럼에 접근하여 서버 종료를 유발할 수 있었습니다. (Bug #27389294)

  • 디버그 빌드의 경우, 빈 문자열을 포함하는 GEOMETRY NOT NULL 컬럼이 있는 ARCHIVE 테이블에 대한 ALTER TABLE에서 오류가 아니라 어설션이 발생했습니다. (Bug #27330634, Bug #89088)

  • auth_sock 인증 플러그인으로 인증한 계정은 이전 클라이언트를 사용하여 연결할 수 없었습니다. (Bug #27306178)

  • 시스템 테이블을 읽거나 초기화할 수 없는 경우, 서버가 불완전한 오류 메시지를 기록했습니다. 수정과 관련된 패치를 제공해 주신 Daniël van Eeden에게 감사드립니다. (Bug #27302337, Bug #89001)

  • 계정이나 역할에 부여되지 않은 역할의 이름을 변경하는 데 사용한 경우 RENAME USER가 실패했습니다. (Bug #27284699)

  • keyring_okv 플러그인은 기본 서버를 사용할 수 없을 때 대기 OKV 서버로 항상 장애 조치하지 않았습니다. (Bug #27244099)

  • Performance Schema가 유효하지 않은 SOURCE 컬럼 값에 접근하려고 시도할 수 있었습니다. (Bug #27231036)

  • 내부 권한 구조의 잘못된 처리로 인해 서버가 종료될 수 있었습니다. (Bug #27230925)

  • 디버그 빌드의 경우, GIS 계산에서 행렬식을 계산하는 데 너무 작은 타입을 사용하면 assertion이 발생할 수 있었습니다. (Bug #27135504)

  • INPLACE 알고리즘과 함께 ALTER TABLE을 사용하여 InnoDB 테이블의 VARCHAR 컬럼 길이를 늘리려는 시도의 경우, 해당 컬럼이 인덱싱되어 있으면 시도가 실패했습니다.

    인덱스 크기가 COMPACT 또는 REDUNDANT 로우 형식에 대한 InnoDB 제한인 767바이트를 초과하는 경우, CREATE TABLEALTER TABLE은 오류(strict SQL 모드) 또는 경고(nonstrict 모드)를 보고하지 않았습니다. (Bug #26848813)

  • MySQL 5.7.19에서 mysql.gtid_executed 테이블은 덤프에서 제외되었습니다. 이 테이블은 더 이상 제외되지 않지만 해당 데이터는 덤프되지 않습니다. (Bug #26643180, Bug #87455)

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

  • slave_rows_search_algorithms 시스템 변수는 로우 기반 로깅 및 복제를 위해 로우 배치를 준비할 때 일치 항목을 찾기 위해 로우를 검색하는 방식을 제어합니다. 검색 알고리즘 중 하나로 INDEX_SCAN을 지정하면 인덱스가 있는 경우 인덱스 스캔을 수행합니다. 마스터와 슬레이브에서 서로 다른 프라이머리 키가 사용되고, 슬레이브에 유니크 키가 있는 상황에서, 코드의 버그로 인해 인덱스 스캔이 수행되어야 하는 대로 수행되지 않았고, 대신 더 느린 테이블 스캔이 수행되었습니다. 이제 이 문제는 인덱스 스캔이 사용되도록 수정되었습니다. (Bug #26450129, Bug #23311892, Bug #81500, Bug #81501)

  • 서브쿼리 구체화의 특정 경우로 인해 서버가 종료될 수 있었습니다. 이제 이러한 쿼리는 구체화를 비활성화할 것을 제안하는 오류를 생성합니다. (Bug #26402045)

  • 지리 GeometryCollection 값에 대한 공간 연산이 유효한 지오메트리에 대해 ER_GIS_INVALID_DATA를 반환할 수 있었습니다. (Bug #26174808)

  • MyISAM 테이블의 경우, INSERTDELETE 문의 특정 시퀀스가 테이블 손상을 일으킬 수 있었습니다. (Bug #25541037)

  • SHOW CREATE USER 문은 현재 사용자에 대한 정보를 보는 경우를 제외하고 mysql 데이터베이스에 대한 SELECT 권한을 필요로 합니다. 또한 현재 사용자의 경우, 이 문은 IDENTIFIED AS 절에 비밀번호 해시를 표시하기 위해 mysql.user 시스템 테이블에 대한 SELECT 권한을 필요로 하며, 그렇지 않으면 해시가 <secret>으로 표시됩니다. (Bug #24911117)

  • 기본 데이터베이스가 없고 함수 본문이 다른 함수를 호출하는 경우 CREATE FUNCTION이 오류를 생성했습니다. (Bug #24357244, Bug #82350)

  • 디버그 빌드의 경우, 파생 테이블 해석에 실패하면 저장 프로그램 내에서 실행된 SELECT 문이 assertion을 발생시킬 수 있었습니다. (Bug #23221336)

  • mysqldump 또는 mysqlpump--hex-blob 옵션 없이 사용하여 바이너리 데이터를 덤프한 경우, 덤프 파일을 다시 로드하면 가짜 경고가 발생할 수 있었습니다(경고와 관계없이 값은 올바르게 삽입되었습니다). 이제 이러한 값은 경고가 표시되지 않도록 _binary introducer가 앞에 붙은 상태로 작성됩니다. (Bug #22601255, Bug #80150)

  • 와일드카드를 포함하는 문자열 비교가 초기화되지 않은 메모리를 참조할 수 있었습니다. (Bug #12635103)

  • REGEXP_REPLACE()는 잘못된 capture group과 함께 호출될 때 Valgrind 경고를 발생시켰습니다. (Bug #87842, Bug #27612255)