MySQL 8.0 Release Note

8.0.2 변경 사항 (2017-07-17 Development Milestone)

Estimated reading: 10 minutes 41 views

공식 문서: Changes in MySQL 8.0.2 (2017-07-17, Development Milestone)

계정 관리 관련 사항

데이터 디렉토리 초기화 또는 업그레이드 중에 MySQL은 이제 'mysql.session'@'localhost' 예약 계정을 생성합니다. 이 계정은 플러그인이 서버에 액세스할 수 있도록 내부적으로 사용됩니다. 클라이언트 연결을 위해 사용할 수 없도록 잠겨 있습니다. (버그 #25642343)

이제 필수 역할을 정의하고 클라이언트 연결 시 부여된 역할을 자동으로 활성화할 수 있도록 하는 다음 시스템 변수가 제공됩니다:

  • mandatory_roles는 서버가 모든 사용자에게 자동으로 부여된 것으로 처리해야 하는 역할 목록을 지정하는 값을 가집니다.
  • activate_all_roles_on_login은 사용자가 서버에 로그인할 때 부여된 모든 역할을 자동으로 활성화할 수 있도록 제어합니다.

자세한 내용은 역할 사용하기를 참조하세요. (WL #924)

캐릭터셋 지원

NO PAD 대조를 사용하는 유니코드 데이터의 경우, 다중 바이트 및 가변 길이 값의 정렬이 개선되었습니다:

  • NO PAD 대조는 utf8mb4_0900_ai_ci 또는 utf8mb4_ja_0900_as_cs와 같이 UCA 9.0.0 이상을 기반으로 하는 대조입니다.
  • 짧은 가중치 문자열을 가진 키 값의 경우 성능 개선이 가장 큽니다. 예를 들어, utf8mb4_0900_ai_ci 대조를 사용하는 VARCHAR(10) 열의 경우 최대 160바이트를 차지할 수 있습니다. 문자열 'a'는 가능한 160바이트 중 2바이트만 사용하며 'abcdefghij'보다 희소합니다. 하지만 'abcdefghij'조차도 가능한 160바이트 중 20바이트만 사용하며, 예를 들어 U+337F SQUARE CORPORATION (㍿)의 10회 복사로 이루어진 문자열과 비교할 때 더 희소합니다. 해당 문자열의 가중치 문자열은 전체 160바이트가 필요합니다.

(버그 #25750527, 버그 #85546, WL #9554)

MySQL은 이제 utf8mb4 유니코드 캐릭터셋에 대해 새로운 대조인 utf8mb4_0900_as_ci를 지원합니다. 이 대조는 악센트에 민감하고 대소문자를 구분하지 않습니다. 기본 utf8mb4 대조(utf8mb4_0900_ai_ci)와 유사하지만 기본 대조는 악센트에 민감하지 않습니다.
또한, MySQL은 utf8mb4 유니코드 캐릭터셋에 대해 새로운 일본어 대조인 utf8mb4_ja_0900_as_cs_ks를 지원합니다. 이 대조는 utf8mb4_ja_0900_as_cs와 유사하게 악센트에 민감하고 대소문자를 구분하지만, utf8mb4_ja_0900_as_cs_ks는 또한 가나에 민감하여 가타카나와 히라가나 문자를 구분합니다. utf8mb4_ja_0900_as_cs는 가타카나와 히라가나 문자를 정렬 시 동일하게 처리합니다. 가나 민감도가 필요하지 않은 일본어 대조가 필요한 애플리케이션의 경우, 더 나은 정렬 성능을 위해 utf8mb4_ja_0900_as_cs를 사용할 수 있습니다. utf8mb4_ja_0900_as_cs는 정렬을 위해 3개의 가중치 레벨을 사용하며, utf8mb4_ja_0900_as_cs_ks는 4개의 레벨을 사용합니다.
utf8mb4_ja_0900_as_cs_ks_ks 대조 접미사를 사용하는 첫 번째 대조입니다. 이 접미사가 없는 일본어 대조는 가나에 민감하지 않습니다.
자세한 내용은 유니코드 캐릭터셋을 참조하세요. (WL #10480, WL #10818)

MySQL 클라이언트 지원에 다음과 같은 캐릭터셋 변경이 적용되었습니다:

  • 다음 클라이언트는 이제 latin1 대신 utf8mb4를 기본 캐릭터셋으로 사용합니다: mysql, mysql_upgrade, mysqladmin, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlslap, mysqlshow, 및 mysqltest. (이 변경 사항은 연결 캐릭터셋과 대조에 설명된 대로 mysql, mysqladmin, mysqlcheck, mysqlimport, 및 mysqlshow에서 수행되는 캐릭터셋 자동 감지에는 영향을 미치지 않습니다).
  • libmysqlclient 라이브러리를 사용하여 생성된 클라이언트 연결은 이제 latin1 대신 utf8mb4를 기본 캐릭터셋으로 사용합니다.
  • mysqltest 프로그램은 캐릭터셋을 명시적으로 지정하기 위한 --default-character-set 옵션을 지원합니다.

(WL #10353)

컴파일 관련 사항

성능: GCC의 엄격한 별칭 최적화가 더 이상 비활성화되지 않으며, 이에 따라 MySQL 단일 스레드 성능이 약간 개선되었습니다. (WL #10344)

Linux: MySQL이 이제 Alpine Linux에서 컴파일됩니다. (버그 #25945568, 버그 #80322)

Solaris: Solaris에서 서버 빌드는 이제 std::atomic을 사용하므로 libstatomic에 대해 링크해야 합니다. (버그 #25957991)

이제 MySQL이 Visual Studio 2017을 사용하여 컴파일됩니다. (버그 #25788406)

서버 빌드를 위한 Boost 라이브러리의 최소 버전이 이제 1.64.0입니다. (버그 #25772329, 버그 #85593)

클라이언트 프로그램 개발과 관련하여 다음 변경 사항이 적용되었습니다:

  • 클라이언트 프로그램은 <mysql.h> 헤더 파일만 #include하면 됩니다. 특히 <my_config.h>는 더 이상 필요하지 않으며 설치되지 않습니다.
  • my_init() 함수는 이제 libmysqlclient에서 내보내는 심볼 목록에 포함되지 않습니다. 이 함수는 다른 C API 초기화 함수에 의해 암시적으로 호출되므로 클라이언트 프로그램에서 명시적으로 호출할 필요가 없습니다.

(버그 #25732787)

Xcode IDE에 대해 헤더 파일이 MySQL 프로젝트 소스에 추가되어 검색이 가능합니다. (버그 #25636986)

소스 코드 정리에 대한 작업이 수행되었으며, 여기에는 다음 사항이 포함됩니다: 불필요한 CMake 검사를 제거하고, 소스 파일에서 사용하지 않는 매크로를 제거하며, 의존성을 줄이고 모듈성을 높이기 위해 헤더 파일을 재구성하고, 정의 없이 선언된 함수를 제거하며, 자체적으로 작성된 함수를 표준 라이브러리의 동등한 함수로 대체하는 작업이 포함됩니다.

컴포넌트 관련 사항

새로운 서비스가 추가되어 컴포넌트가 시스템 변수를 등록 및 등록 해제할 수 있으며(component_sys_variable_register, component_sys_variable_unregister), 상태 변수를 등록할 수 있습니다(status_variable_registration). (WL #8020)

컴포넌트와 플러그인이 로드 가능한 함수를 등록 및 등록 해제할 수 있도록 두 가지 새로운 서비스가 제공됩니다: mysql_service_udf_registrationmysql_service_udf_registration_aggregate는 각각 스칼라 및 집계 로드 가능 함수에 대한 등록 서비스를 제공합니다. 이러한 서비스는 컴포넌트와 플러그인이 직접 로드 가능 함수를 관리할 수 있도록 하며, CREATE FUNCTIONDROP FUNCTION 문이 필요하지 않습니다.
이러한 서비스나 CREATE FUNCTION을 사용하여 등록된 로드 가능 함수는 새로운 Performance Schema의 user_defined_functions 테이블에 나열됩니다. 자세한 내용은 user_defined_functions 테이블을 참조하십시오. 이러한 로드 가능 함수는 mysql.func 시스템 테이블에 나열되지 않으므로, 설치된 로드 가능 함수를 확인하려면 user_defined_functions 테이블을 사용하는 것이 더 적합합니다. (WL #8020)

mysql_string 문자열 조작 서비스가 플러그인 서비스에서 컴포넌트 서비스로 전환되었으며, 이는 컴포넌트에서 사용할 수 있는 일련의 문자열 서비스 API입니다. 비밀번호 검증 컴포넌트가 수정된 서비스 구현을 사용하도록 업데이트되었습니다. (WL #9503)

구성 관련 사항

이전에는 특정 상황에서 LOAD DATA 작업에 대한 LOCAL 기능이 기본적으로 활성화되어 있었습니다. MySQL 바이너리 배포의 클라이언트 라이브러리는 클라이언트 측 LOCAL 기능이 활성화된 상태로 컴파일되었고, 서버 측 local_infile 시스템 변수도 활성화되어 있었습니다. 이제 모든 상황에서 LOCAL 기능이 기본적으로 비활성화되었습니다. 클라이언트 프로그램은 LOCAL을 활성화하도록 명시적으로 구성해야 하며, 서버는 local_infile을 활성화한 상태로 실행해야 합니다. 자세한 내용은 LOAD DATA LOCAL에 대한 보안 고려사항을 참조하세요. (버그 #24511108)

mysqld 시작 동작이 다음과 같이 수정되었습니다. 일반적으로 이러한 변경 사항은 mysqld_safe를 사용하지 않을 때 더 일관된 서버 시작 또는 더 쉬운 서버 시작을 가능하게 합니다.

  • 서버 실행 파일은 시작 시 자체 전체 경로 이름을 결정하고, 해당 디렉터리의 상위 디렉터리를 기본 basedir 값으로 사용합니다. 이는 서버가 오류 메시지를 포함하는 share 디렉터리와 같은 서버 관련 정보를 검색할 때 해당 basedir을 사용하게 합니다.
  • 오류 로그 출력을 --log-error 옵션 값으로 리디렉션할 수 없는 경우, 오류 출력이 손실될 수 있습니다. 이제 이러한 가능성이 줄어들었습니다.
  • --daemonize 옵션을 사용하여 서버가 시작되고 tty 장치에 연결되지 않은 경우 명시적인 로깅 옵션이 없는 경우 기본 오류 로깅 옵션으로 --log-error=""가 사용되어 오류 출력을 기본 로그 파일로 리디렉션합니다. 이전에는 이러한 상황에서 오류가 발생할 수 있었습니다.
  • -D-I 옵션은 이제 각각 --daemonize--initialize의 동의어로 사용됩니다.

(버그 #20398088, 버그 #75343, WL #10441)

MySQL은 이제 서버 재시작 시에도 지속되는 런타임 구성 변경을 위한 SET문 구문 변형으로 SET PERSIST_ONLY를 지원합니다. SET PERSIST과 마찬가지로, SET PERSIST_ONLY는 데이터 디렉터리의 mysqld-auto.cnf 옵션 파일에 변수를 저장합니다. 그러나 PERSIST와 달리 PERSIST_ONLY는 런타임 전역 시스템 변수 값을 수정하지 않습니다. 이로 인해 PERSIST_ONLY는 서버 시작 시에만 설정할 수 있는 읽기 전용 시스템 변수의 구성에 적합합니다. 자세한 내용은 옵션 파일 사용하기변수 할당을 위한 SET 구문을 참조하세요.
SET PERSIST_ONLY 사용에는 새로운 PERSIST_RO_VARIABLES_ADMIN 권한이 필요하며, 시스템 변수를 지속시키기 위한 SYSTEM_VARIABLES_ADMIN 권한도 필요합니다. (WL #9787)

데이터 딕셔너리 관련 사항

column_stats 시스템 테이블이 제거되고 column_statistics 데이터 딕셔너리 테이블로 대체되었습니다. (WL #8943)

version 데이터 딕셔너리 테이블의 이름이 dd_properties로 변경되었습니다.
동적 플러그인에 의해 생성된 INFORMATION_SCHEMA 테이블의 메타데이터는 이제 데이터 딕셔너리에 기록되며 INFORMATION_SCHEMA TABLES 테이블을 통해 볼 수 있습니다.
이제 INFORMATION_SCHEMA에서 다음 테이블을 볼 수 없습니다: SHOW_STATISTICS, SHOW_STATISTICS_DYNAMIC, STATISTICS_BASE, STATISTICS_DYNAMIC, TABLES_DYNAMIC. 사용자에게 미치는 영향은 최소화되며, 이 테이블들은 서버 내부에서 사용됩니다. (WL #9495)

InnoDB 스토리지 엔진은 이제 자체 스토리지 엔진 전용 데이터 딕셔너리 대신 MySQL 데이터 딕셔너리를 사용합니다. 데이터 딕셔너리에 대한 자세한 내용은 MySQL 데이터 딕셔너리를 참조하세요.
다음 목록은 이 변경 사항의 주요 영향을 간략히 설명합니다:

  • 업그레이드 및 다운그레이드와 관련된 영향:
    • MySQL 5.7에서 MySQL 8.0으로 업그레이드하려면 MySQL 업그레이드에 설명된 업그레이드 절차를 수행해야 합니다.
    • MySQL 8.0에서 MySQL 5.7로 다운그레이드는 논리적 다운그레이드 방법(즉, mysqldump를 사용하는 다운그레이드)만 지원됩니다. 제자리 다운그레이드는 지원되지 않습니다.
  • 운반 가능한 테이블스페이스 기능을 사용하여 테이블스페이스를 내보내고 가져오는 것과 관련된 메타데이터 업데이트는 이제 InnoDB 데이터 딕셔너리 테이블 대신 글로벌 데이터 딕셔너리 테이블에서 수행됩니다.
  • InnoDB 메모리 내 메타데이터는 이제 글로벌 데이터 딕셔너리 객체에서 인스턴스화됩니다. 이 메타데이터는 이전에는 InnoDB 시스템 테이블에서 읽어 들였습니다.
  • 테이블스페이스 암호화 및 투명한 페이지 압축을 나타내는 테이블 옵션은 이제 글로벌 데이터 딕셔너리에서 가져옵니다.
  • 데이터 딕셔너리는 InnoDB FULLTEXT 인덱스에 대한 지원을 추가했습니다. 보조 인덱스 테이블 이름이 소문자로 변경되었습니다.
  • DDL 작업 중 생성되거나 수정된 InnoDB 메타데이터는 이제 글로벌 데이터 딕셔너리에 기록됩니다.

(WL #9461, WL #9537, WL #9534, WL #9531, WL #9530, WL #9525, WL #9357)

mysql 시스템 테이블과 데이터 딕셔너리 테이블은 이제 MySQL 데이터 디렉토리의 단일 InnoDB 테이블스페이스 파일인 mysql.ibd에 생성됩니다. 이전에는 이러한 테이블들이 mysql 데이터베이스 디렉토리의 개별 InnoDB 테이블스페이스 파일에 생성되었습니다. 관련된 변경 사항은 다음과 같습니다:

  • 빈번하게 변경되는 InnoDB 메타데이터를 저장하는 InnoDB 데이터 딕셔너리 버퍼 테이블의 이름이 innodb_dynamic_metadata로 변경되었으며, InnoDB 시스템 테이블스페이스에서 데이터 딕셔너리 테이블스페이스로 이동되었습니다.
  • 언두 테이블스페이스 메타데이터는 이제 데이터 딕셔너리 테이블스페이스에 위치합니다.
  • 임시 테이블스페이스 메타데이터는 이제 데이터 딕셔너리 테이블스페이스에 위치합니다.
  • mysql 테이블스페이스, InnoDB 시스템 테이블스페이스(innodb_system), 또는 일반 테이블스페이스에 생성된 테이블의 테이블 정의에는 이제 TABLESPACE 속성이 포함됩니다. 이 변경 사항은 다음과 같은 영향을 미칩니다:
    • 위의 테이블스페이스에 위치한 테이블 정의를 기반으로 빈 테이블을 생성하기 위해 CREATE TEMPORARY TABLE ... LIKE를 사용할 수 없습니다. 이 테이블스페이스들은 임시 테이블을 지원하지 않기 때문입니다.
    • CREATE TABLE ... LIKE는 원래 테이블의 TABLESPACE 속성을 보존하며, innodb_file_per_table 설정에 관계없이 정의된 테이블스페이스에 새 테이블을 생성합니다. 이는 일시적인 문제입니다.
    자세한 정보와 해결 방법은 CREATE TABLE … LIKE 문CREATE TEMPORARY TABLE 문을 참조하세요.

(WL #9532)

사용 중단 및 제거 관련 사항

mysql 클라이언트는 기본적으로 서버로 전송되는 구문에서 주석을 제거하며, 이 동작은 --skip-comments (주석 제거) 및 --comments (주석 유지) 옵션으로 제어됩니다.
이제 주석 제거 기능은 사용 중단되었습니다. 이 기능과 이를 제어하는 옵션들은 향후 MySQL 버전에서 제거될 예정입니다. (WL #10944)

explicit_defaults_for_timestamp 시스템 변수는 이제 기본적으로 활성화됩니다 (이전에는 기본적으로 비활성화됨). 이 변수를 비활성화할 경우 경고가 발생합니다. 이는 TIMESTAMP 열에서 기본값 및 NULL 값 처리를 위한 비표준 (및 사용 중단된) 동작이 이제 기본적으로 비활성화된다는 의미입니다. (WL #9687)

테이블 및 열 참조에 대한 다음과 같은 사용 중단된 구문 구성이 제거되었으며, 이를 사용할 경우 이제 오류가 발생합니다. 이러한 구문은 선행 마침표를 제거하여 수정해야 합니다.

  • .col_name
  • .tbl_name
  • .tbl_name.col_name

(WL #8662)

Unix에서 MyISAM 테이블에 대한 심볼릭 링크 사용에 설명된 대로 심볼릭 링크 지원 및 이를 제어하는 --symbolic-links 옵션은 이제 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. 또한 이 옵션은 이제 기본적으로 비활성화됩니다. 관련된 have_symlink 시스템 변수도 사용 중단되었으며, 향후 MySQL 버전에서 제거될 예정입니다. (WL #8392)

SQL 함수 및 연산자 관련 사항

MySQL은 이제 쿼리의 각 행에 대해 해당 행과 관련된 행을 사용하여 계산을 수행하는 윈도우 함수를 지원합니다. 여기에는 RANK(), LAG(), NTILE()와 같은 함수가 포함됩니다. 또한 대부분의 기존 집계 함수는 이제 윈도우 함수로 사용할 수 있습니다. 예를 들어, SUM()AVG(). 자세한 내용은 윈도우 함수를 참조하십시오.

참고
다음 단어들은 이제 예약어로, 식별자로 사용할 수 없습니다(식별자 인용 없이 사용 불가): CUME_DIST, DENSE_RANK, FIRST_VALUE, GROUPS, LAG, LAST_VALUE, LEAD, NTH_VALUE, NTILE, OVER, PERCENT_RANK, RANK, ROW_NUMBER, WINDOW.

(WL #9236, WL #9603, WL #9727)

로깅 관련 사항

호환성 변경: 다음 오류 로깅 변경 사항이 적용되었습니다:

  • 서버는 설정된 오류 메시지 파일(lc_messages_dirlc_messages 시스템 변수로 지정)을 찾을 수 없는 경우에 더 유연해졌습니다. 이전에는 서버가 오류 로그에 문제를 표시하고, 시작 과정을 중단한 뒤 종료되었습니다. 이제 서버는 메시지를 기록한 후 계속해서 시작을 진행하며, 내장된 영어 메시지를 기본으로 사용합니다. 이는 서버가 오류 로그에 기록하고 클라이언트에 전송하는 메시지에 적용됩니다. 자세한 내용은 오류 메시지 언어 설정을 참조하세요.
  • 오류 로깅은 이제 MySQL 컴포넌트 아키텍처를 사용하도록 다시 작성되었습니다. 기존 오류 로깅은 내장된 컴포넌트를 사용하여 구현되었으며, 시스템 로그를 사용하는 로깅은 로드 가능한 컴포넌트로 구현됩니다. 추가로, JSON 형식 로그 싱크를 사용할 수 있는 로드 가능한 컴포넌트가 제공됩니다. 활성화할 로그 컴포넌트를 제어하려면 log_error_services 시스템 변수를 사용하십시오. 자세한 내용은 오류 로그를 참조하십시오.
  • 호환성 문제: 시스템 로그에 로그를 기록하려면 log_sink_syseventlog 로그 컴포넌트를 로드하고 이를 log_error_services 값에 추가해야 합니다. 이는 MySQL 5.7 및 이전 버전과 달리 Windows에서 기본적으로 시스템 로그에 로깅되며, 모든 플랫폼에서 컴포넌트 로딩 없이 사용할 수 있었던 설정과 차이가 있습니다.
    이러한 구성 변경의 결과로, 이전에 시스템 로그에 로깅을 제어하는 데 사용되었던 log_syslog 시스템 변수는 이제 더 이상 효과가 없으며, 향후 MySQL 버전에서 제거될 예정입니다.

(WL #9323, WL #9342, WL #9343, WL #9344)

옵티마이저 관련 사항

MySQL은 이제 테이블 열 값에 대한 히스토그램 통계를 관리할 수 있습니다:

  • ANALYZE TABLE 문은 열 히스토그램 통계를 생성하고 제거하기 위한 UPDATE HISTOGRAMDROP HISTOGRAM 절을 지원합니다.
  • 서버는 column_statistics 데이터 딕셔너리 테이블에 히스토그램 정보를 저장합니다. 히스토그램은 INFORMATION_SCHEMA.COLUMN_STATISTICS 테이블을 통해 확인할 수 있습니다.
  • histogram_generation_max_mem_size 시스템 변수는 히스토그램 생성을 위한 메모리 양을 제어합니다.
  • Performance Schema에는 히스토그램 생성을 위한 메모리 할당을 모니터링할 수 있는 memory/sql/histograms 인스트루먼트가 있습니다.
  • mysqldumpmysqlpump는 덤프 파일을 다시 로드할 때 덤프된 테이블에 대한 히스토그램 통계를 생성하기 위해 출력에 ANALYZE TABLE 문을 추가하는 --column-statistics 옵션을 제공합니다.

자세한 내용은 ANALYZE TABLE 문, 옵티마이저 통계INFORMATION_SCHEMA COLUMN_STATISTICS 테이블을 참조하세요. (WL #8943)

패키징 관련 사항

mysqladmin이 이제 InnoDB 클러스터에 필요하기 때문에 Docker/Minimal 패키지에 추가되었습니다. (버그 #25998285)

Windows용 MSI 설치 프로그램 패키지에는 이제 필요한 Visual Studio 재배포 패키지를 확인하는 기능이 포함되었으며, 누락된 경우 사용자가 설치하라는 메시지를 표시합니다. (버그 #25658832)

Debian/Ubuntu 패키지는 이제 systemd를 사용하여 다중 MySQL 인스턴스를 지원합니다. 자세한 내용은 systemd로 MySQL 서버 관리를 참조하세요. (버그 #24559588, 버그 #82785)

구문 분석기 관련 사항

ALTER TABLE의 구문 규칙이 문맥에 독립적으로 작동하도록 리팩터링되어 유지 보수성과 확장성이 개선되었습니다. 그 결과 일부 이전에 허용되었던 문서화되지 않은 구문 변형이 더 이상 허용되지 않습니다. 예를 들어, 열 이름 앞에 테이블 이름 또는 현재 데이터베이스와 테이블 이름을 사용하여 허용되었던 CREATE TABLE 및 특정 ALTER TABLE 문이 이제 오류를 발생시킵니다. (WL #8657)

Performance Schema 관련 사항

Performance Schema threads 테이블에 이제 리소스 그룹 레이블을 나타내는 RESOURCE_GROUP 열이 추가되었습니다. (WL #8881)

Performance Schema는 이제 버전 관리를 지원하며, 테이블의 현재 정의를 내부적으로 유지 관리합니다. 서버 시작 시, 서버는 지원되는 Performance Schema 버전을 데이터 딕셔너리에 저장된 Performance Schema 버전과 비교합니다. 버전이 다르면 서버는 이전 Performance Schema 테이블을 삭제하고 최신 정의를 사용하여 다시 생성합니다. 이러한 변경의 결과로 다음 사항이 적용됩니다:

  • MySQL 업그레이드의 경우, Performance Schema 테이블 변경 사항을 반영하기 위해 mysql_upgrade를 실행할 필요가 없으며, 서버 시작 시 필요에 따라 테이블이 자동으로 다시 생성됩니다.
  • mysql_system_tables.sql 지원 스크립트에는 더 이상 Performance Schema 테이블 생성을 위한 SQL 문이 포함되지 않으며, 이 테이블 정의는 내부적으로 유지 관리됩니다.

동적 Performance Schema 테이블 조작을 지원하기 위해 pfs_table_service라는 새로운 컴포넌트 서비스가 제공됩니다. (WL #7900, WL #8879)

Performance Schema 기본 인스트루먼트 설정이 변경되었습니다:

  • transaction 인스트루먼트와 events_transactions_currentevents_transactions_history 소비자가 이제 기본적으로 활성화됩니다. 자세한 내용은 Performance Schema 트랜잭션 테이블을 참조하세요.
  • 모든 memory/% 메모리 인스트루먼트가 이제 기본적으로 활성화됩니다. 자세한 내용은 메모리 요약 테이블을 참조하세요.
  • wait/lock/metadata/sql/mdl 메타데이터 잠금 인스트루먼트가 이제 기본적으로 활성화됩니다. 자세한 내용은 metadata_locks 테이블을 참조하세요.

(WL #9625, WL #9628, WL #9629)

플러그인 관련 사항

호환성 변경: 그룹 복제 및 X Plugin과 같은 플러그인은 이제 이번 릴리스에서 추가된 mysql.session 계정을 사용합니다. mysql.session 계정을 포함하지 않는 이전 릴리스에서 업그레이드하는 경우 mysql_upgrade를 실행하여 계정이 생성되도록 해야 합니다. mysql_upgrade를 실행하지 않으면, 플러그인이 “There was an error when trying to access the server with user: mysql.session@localhost. Make sure the user is present in the server and that mysql_upgrade was run after a server update” 오류 메시지와 함께 시작되지 않습니다. 이전에 이 목적을 위해 사용되었던 mysqlxsys와 같은 사용자 계정은 더 이상 생성되지 않습니다. (버그 #26042764)
참조: 관련된 사항은 버그 #24311527, 버그 #25642343, 버그 #25750822, 버그 #25103980, 버그 #83841을 참조하십시오.

보안 관련 사항

MySQL 상용 서버에 링크된 OpenSSL 라이브러리가 버전 1.0.2l로 업데이트되었습니다. 새로운 OpenSSL 버전에서 수정된 문제에 대한 자세한 내용은 http://www.openssl.org/news/vulnerabilities.html을 참조하세요.
이 변경 사항은 yaSSL 라이브러리를 사용하는 Oracle이 제작한 MySQL 커뮤니티 빌드에는 영향을 미치지 않습니다. (버그 #26160962)

이전에는 모든 사용자가 XA RECOVER 문을 실행하여 미확정 준비된 XA 트랜잭션의 XID 값을 확인할 수 있었습니다. 이로 인해 시작한 사용자 외의 사용자가 XA 트랜잭션을 커밋하거나 롤백할 가능성이 있었습니다. 이제 XA RECOVER는 새로운 XA_RECOVER_ADMIN 권한을 가진 사용자에게만 허용되며, 이는 해당 권한이 필요한 관리자에게만 부여되는 것이 기대됩니다. 예를 들어, XA 애플리케이션이 충돌했을 때 관리자가 미확정 트랜잭션을 찾아 롤백할 필요가 있는 경우가 이에 해당됩니다. 이 권한 요구 사항은 XA 트랜잭션의 정상적인 커밋 또는 롤백에는 영향을 미치지 않습니다. 왜냐하면 트랜잭션을 시작한 사용자는 해당 XID를 알고 있기 때문입니다.
MySQL 업그레이드 시, mysql_upgrade는 이미 XA_RECOVER_ADMIN 권한이 있는 계정이 발견되지 않는 한, SUPER 권한이 있는 사용자에게 XA_RECOVER_ADMIN 권한을 부여합니다. (버그 #17188129, WL #7194)

공간 데이터 지원

다음 기하 관계를 테스트하는 공간 함수에 대한 인수 적합성 검사 기능이 개선되었습니다: ST_Contains(), ST_Crosses(), ST_Disjoint(), ST_Equals(), ST_Intersects(), ST_Overlaps(), ST_Touches(), ST_Within(), MBRContains(), MBRCoveredBy(), MBRCovers(), MBRDisjoint(), MBREquals(), MBRIntersects(), MBROverlaps(), MBRTouches(), MBRWithin(). 자세한 내용은 객체 모양을 사용하는 공간 관계 함수최소 경계 사각형을 사용하는 공간 관계 함수를 참조하십시오.
이 작업의 결과로, 두 인수 모두 동일한 차원의 기하 도형을 포함하는 경우, 즉 GeometryCollection 인수(또는 GeometryCollection과 다른 유형의 기하 도형)가 공간 관계 함수에 전달될 때 MultiPoint, MultiLineString, 또는 MultiPolygon으로 축소될 수 있는 경우, 더 복잡한 일반 GeometryCollection을 피할 수 있도록 공간 관계 함수의 성능이 향상되었습니다. (버그 #22285402, 버그 #79406, WL #8685)

테스트 스위트 관련 사항

mysql-test-run.pl--do-test-list 옵션은 파일에 각 줄마다 하나의 테스트가 포함된 인수를 허용합니다. 파일의 줄은 이제 다음 형식 중 하나로 허용됩니다:

test_name
test_name.test
suite_name.test_name
suite_name.test_name.test
path/to/test/file

(버그 #25700362)

mysql-test-run.plmysqltest는 이제 허용되는 테스트 케이스 및 결과 파일 이름에 대해 더 엄격해졌습니다. 이름은 영숫자 문자(A-Z, a-z, 0-9), 대시(-), 또는 밑줄(_)만으로 구성되어야 하며, 대시 또는 밑줄로 시작할 수 없습니다. 이를 준수하지 않는 파일 이름에 대해서는 오류가 발생합니다. (버그 #25487471)

mysql-test-run.pl--xml-report 옵션에 대해 다음 변경 사항이 적용되었습니다:

  • <failure> 태그가 재시도 시도에서 실패한 모든 테스트를 식별합니다.
  • 건너뛰거나 비활성화된 테스트에 대해 개별 통계 및 필드가 포함됩니다.
  • 절대 경로가 지정되지 않은 경우 XML 보고서는 빌드 디렉터리에 생성됩니다.
  • 조합 실행의 경우, variation이라는 이름의 필드가 <testcase> 태그에 포함됩니다.
  • 특정 스위트에 속한 모든 테스트 결과가 단일 <testsuite> 태그 내에서 집계됩니다.
  • 실패에 대한 정보는 message라는 속성에 간단한 이유와 함께 태그 내의 다른 세부 정보와 함께 보고됩니다.

(버그 #25349924)

mysql-test-run.pl은 이제 --report-unstable-tests 옵션을 지원하며, 이 옵션에는 다음과 같은 효과가 있습니다:

  • 요약에서 별도의 “Unstable tests” 카테고리로 재시도를 통해 통과된 모든 테스트를 보고합니다.
  • 불안정한 테스트로 인한 모든 실패의 경우, mysql-test-run.pl은 경고를 출력하지만 정상적으로 종료됩니다.
  • --xml-report 옵션이 지정된 경우 불안정한 테스트를 보고하는 새로운 XML 태그가 추가됩니다.

(버그 #24473420, 버그 #25984429)

mysqltest는 이제 숫자 값을 반올림할 소수점 자릿수를 0에서 16까지 지정하는 replace_numeric_round 명령을 지원합니다. 이는 플랫폼 간의 미세한 차이로 인해 테스트 결과의 내용 불일치를 방지하는 데 유용할 수 있습니다. Daniel Black에게 패치에 감사드립니다. (버그 #23280117, 버그 #81399)

mysql-test-run.pl은 이제 testname-client.opt 파일을 찾으며, 이는 테스트별 클라이언트 옵션을 지정하는 testname-master.opt 파일과 유사합니다. (버그 #17084918)

X Plugin 관련 사항

X Plugin이 이제 만료된 SSL 인증서를 올바르게 처리합니다. (버그 #25835833)

GROUP BYHAVING과 같은 절의 출력이 개선되어, grouping_criteria 표현식을 파생된 쿼리로 이동했습니다. (버그 #25549637, 버그 #24497007)

X Plugin 설치 중 방화벽 허용 목록에 빈 규칙이 생성되는 문제가 있었습니다. (버그 #24488234)

기능 추가 및 변경 사항

호환성 변경; InnoDB: ADD PARTITION, DROP PARTITION, COALESCE PARTITION, REORGANIZE PARTITION, REBUILD PARTITION ALTER TABLE 옵션이 이제 네이티브 파티셔닝 인플레이스 API에서 지원되며 ALGORITHM={COPY|INPLACE}LOCK 절과 함께 사용할 수 있습니다.
EXCHANGE PARTITION은 이전에 ALGORITHMLOCK 절을 지원했으며, MySQL 데이터 딕셔너리와의 호환성을 위해 새로운 서버 계층 API로 수행됩니다. 파티션 및 테이블 교환은 네이티브 파티션 핸들러에 의해 내부적으로 수행됩니다.
DROP PARTITIONALGORITHM=INPLACE로 파티션에 저장된 데이터를 삭제하고 파티션을 제거합니다. 그러나 ALGORITHM=COPY 또는 old_alter_table=ON일 경우 파티션 테이블을 다시 빌드하고 삭제된 파티션의 데이터를 호환 가능한 PARTITION ... VALUES 정의가 있는 다른 파티션으로 이동하려 시도합니다. 이동할 수 없는 데이터는 삭제됩니다. (WL #9559)

InnoDB: InnoDB는 이제 복구 중에 테이블스페이스 맵 파일을 사용하여 리두 로그 적용이 필요한 테이블스페이스를 식별합니다. 이는 이전에 사용되던 리두 로그 테이블스페이스 검색 방식에서 변경된 것입니다.
테이블스페이스 맵 파일이 손실되거나 손상된 경우, 서버 중단 후 MySQL을 다시 시작할 때 innodb_scan_directories 시작 옵션을 사용하여 테이블스페이스 디렉토리를 지정할 수 있습니다.
자세한 내용은 크래시 복구 중 테이블스페이스 검색을 참조하십시오. (버그 #24793413, WL #9499)

InnoDB: 이전 릴리스에서는 테이블을 생성하거나 변경할 때 ROW_FORMATKEY_BLOCK_SIZE 속성이 무시되더라도 CREATE TABLE 또는 ALTER TABLE 문에 지정된 ROW_FORMATKEY_BLOCK_SIZE 속성을 InnoDB에 저장했습니다. 이러한 경우, SHOW CREATE TABLESHOW TABLE STATUSCreate_options 열에는 실제 속성 대신 지정된 속성이 표시되었습니다. 이제 InnoDB는 테이블의 실제 ROW_FORMATKEY_BLOCK_SIZE 속성을 저장하고 보고합니다. (WL #9525)

복제: 이전 버전에서는 STOP GROUP_REPLICATION을 실행해도 플러그인이 중지되었지만 서버는 여전히 트랜잭션을 허용했기 때문에 트랜잭션이 그룹에 전송되지 않았습니다. STOP GROUP_REPLICATION을 보다 안전하게 만들기 위해, 이제 이 명령을 실행하면 즉시 super_read_onlyON으로 설정되어 트랜잭션이 허용되지 않도록 보장합니다. (버그 #25495067, 버그 #84795, WL #10611, WL #10960)

복제: 네트워크 분할 상황에서 소수의 멤버가 있을 때 모든 쿼리가 차단되는 문제를 개선하기 위해, group_replication_unreachable_majority_timeout 변수가 추가되었습니다. 이를 통해 소수에 속한 멤버가 다수 멤버와의 연결을 복구하지 못한 경우 그룹을 떠날 때까지 대기 시간을 설정할 수 있습니다. (버그 #25473794)

복제: group_replication_transaction_size_limit 변수가 추가되어, 대용량 트랜잭션으로 인해 그룹에 문제가 발생하는 것을 방지할 수 있습니다. (버그 #84785, 버그 #25510757)

복제: MySQL 5.0 이전 버전에서 생성된 바이너리 로그 파일에 대한 지원이 제거되었으며, Version 1 및 Version 3 형식의 바이너리 로그는 이제 슬레이브나 mysqlbinlog에서 지원되지 않습니다. (WL #9219)

복제: Performance Schema의 replication_group_membersreplication_group_member_stats 테이블이 그룹 복제에 대한 추가 모니터링 정보를 제공하도록 확장되었습니다. replication_group_members에는 이제 멤버 역할 및 해당 멤버에서 실행 중인 MySQL 버전에 대한 정보가 포함됩니다. replication_group_member_stats에는 그룹의 모든 멤버, 적용기 및 로컬 큐, 롤백된 트랜잭션에 대한 정보가 포함됩니다. (WL #10380)

복제: 수신 스레드가 디스크 공간을 기다리는 동안 다른 스레드의 활동을 차단하지 않도록 개선되었습니다. 이를 통해 수신 스레드가 디스크 공간을 기다릴 때 복제 모니터링이 정확하게 보고될 수 있습니다. 디스크 공간을 확보하지 못해 수신 스레드가 계속 활동할 수 없는 경우, 대부분의 경우 부작용 없이 강제 중지할 수 있습니다. (WL #10406)

복제: 트랜잭션 길이 필드가 새로 추가되어 Gtid_log_event에 트랜잭션 길이를 바이트 단위로 저장합니다. (WL #10493)

복제: 다음 변수들의 기본값이 변경되어, 복제가 기본적으로 더욱 견고하고 효율적으로 작동하도록 했습니다:

(WL #10474, WL #10476, WL #10477, WL #10478)

복제: 그룹 복제 플러그인은 이제 다른 서버 구성 요소에게 관련 이벤트가 발생했음을 알립니다. 플러그인은 서비스 레지스트리에 등록된 리스너에게 알림을 보내며, 다른 플러그인과 같은 리스너는 이러한 이벤트에 반응할 수 있습니다. 이러한 이벤트에는 뷰 변경, 복구 상태 업데이트, 네트워크 분할, 기본 선출 등이 포함됩니다. (WL #10412)

그룹 복제: group_replication_member_weight 변수가 추가되어, 단일 기본 모드에서 새로운 기본 선출을 제어할 수 있습니다. 이전 버전에서는 기본 선출이 멤버의 UUID에 기반했으며, 장애 발생 시 가장 낮은 UUID가 기본으로 선택되었습니다. 이 변수를 사용하여 특정 멤버에게 숫자 가중치를 할당함으로써 기본을 유지보수할 때나 특정 하드웨어를 우선적으로 사용할 때 특정 멤버가 선출되도록 할 수 있습니다. (WL #10433, WL #10959)

그룹 복제: 이번 릴리스에서는 그룹 복제에 영향을 미치는 다음 시스템 변수가 추가되었습니다:

이 변수들을 사용하여 개별 그룹 멤버의 흐름 제어를 미세 조정하고, 멤버가 그룹에서 수행하는 작업에 따라 할당량을 조정할 수 있습니다. (WL #9838)

JSON: 많은 MySQL JSON 함수와 함께 사용하는 XPath 표현식에서 범위를 지원하도록 추가되었습니다. 이 함수에는 JSON_EXTRACT()JSON_REMOVE()가 포함됩니다. 이러한 범위는 start to end 구문을 사용하여 지정하며, 여기서 _start_와 _end_는 JSON 배열의 요소 범위에서 각각 첫 번째와 마지막 인덱스입니다(항상 0부터 시작). 예를 들어, $[1 to 3]는 두 번째, 세 번째, 네 번째 요소를 포함합니다. 다음 예시와 같습니다:

mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]');
+----------------------------------------------+
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]') |
+----------------------------------------------+
| [2, 3, 4]                                    |
+----------------------------------------------+
1 row in set (0.00 sec)

이 작업은 또한 이러한 표현식에서 마지막(가장 오른쪽) 요소의 인덱스를 나타내기 위해 사용할 수 있는 last 키워드를 지원합니다. 예시는 다음과 같습니다:

mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]');
+--------------------------------------------+
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]') |
+--------------------------------------------+
| 5                                          |
+--------------------------------------------+
1 row in set (0.00 sec)

배열의 끝을 기준으로 한 인덱스도 지원됩니다. 예시는 다음과 같습니다:

mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]');
+--------------------------------------------------------+
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]') |
+--------------------------------------------------------+
| [1, 2, 3]                                              |
+--------------------------------------------------------+
1 row in set (0.00 sec)

자세한 내용과 예시는 JSON 값 검색 및 수정을 참조하십시오. (버그 #79052, 버그 #22285926, WL #9831)

JSON: 옵티마이저는 이제 JSON_SET(), JSON_REPLACE(), 또는 JSON_REMOVE()를 사용할 때 JSON 문서의 부분적(인플레이스) 업데이트를 지원합니다. (이전에는 JSON 열 값의 모든 업데이트가 이전 문서를 완전히 제거하고 새 문서를 해당 위치에 작성하여 이루어졌습니다.) 일반적으로 이 최적화는 대체 값이 열의 원래 값보다 크지 않고, 원래 값에 새로운 요소가 추가되지 않을 때 수행될 수 있습니다. UPDATE _tbl_ SET _json_col_ = _json_val_ 형식의 열 값 단순 대체에는 적용할 수 없습니다.
JSON 데이터 타입은 이 방식으로 최적화가 가능한 업데이트의 요구사항에 대해 자세히 설명합니다.
이 작업에는 MySQL 서버에서 두 가지 JSON 유틸리티 함수, JSON_STORAGE_SIZE()JSON_STORAGE_FREE()가 추가되었습니다. JSON_STORAGE_SIZE()는 JSON 문서의 이진 표현을 저장하는 데 사용되는 바이트 수를 반환하며, 이는 테이블의 열 값, 사용자 변수의 값, 또는 JSON 리터럴로 제공될 수 있습니다. JSON 열의 경우, 이는 열에 삽입된 JSON 문서의 저장 공간이며 이후 수행된 부분 업데이트 이전의 상태를 나타냅니다. JSON_STORAGE_FREE()는 열의 가장 최근 부분 업데이트로 해제된 바이트 수를 표시합니다. JSON 문서를 저장하는 사용자 변수의 경우 JSON_STORAGE_FREE()는 항상 0을 반환하며, 인수가 JSON 리터럴인 경우에도 0을 반환합니다.
이러한 함수는 JSON 값을 처리하는 다른 많은 MySQL 함수처럼 JSON 문서로 구문 분석할 수 있는 문자열을 허용합니다. 자세한 내용과 예시는 JSON 유틸리티 함수를 참조하십시오. (WL #9192, WL #8963, WL #10570)

RPM .spec 파일에 이제 유닛 테스트를 실행할 수 있는 지원이 포함되었습니다. (버그 #25814143, 버그 #85743)

mysql 클라이언트는 이제 바이너리 데이터를 16진 표기법(0xvalue)을 사용하여 표시하는 --binary-as-hex 옵션을 지원합니다. Daniël van Eeden의 패치에 감사드립니다. (버그 #25340722, 버그 #84391)

SHOW TABLES 문은 이제 EXTENDED 키워드를 선택적으로 지원하여 실패한 ALTER TABLE 문에 의해 생성된 숨겨진 테이블을 목록에 포함합니다. (이 임시 테이블 이름은 #sql로 시작합니다.) 자세한 내용은 SHOW TABLES 문을 참조하세요. (버그 #24786075, 버그 #83241)

직렬화된 딕셔너리 정보(SDI) 파일의 확장자가 이제 대문자 대신 소문자(.sdi)로 변경되었습니다. (WL #7069)

TempTable 스토리지 엔진이 이제 메모리 내부 임시 테이블의 기본 엔진으로 MEMORY 스토리지 엔진을 대체합니다. TempTable 스토리지 엔진은 VARCHARVARBINARY 열에 대해 효율적인 저장을 제공합니다. internal_tmp_mem_storage_engine 세션 변수는 메모리 내부 임시 테이블에 사용할 스토리지 엔진을 정의합니다. 허용되는 값은 TempTable(기본값)과 MEMORY입니다. temptable_max_ram 구성 옵션은 TempTable 스토리지 엔진이 디스크에 데이터를 저장하기 시작하기 전까지 차지할 수 있는 메모리의 최대 용량을 정의하며, 기본값은 1073741824바이트(1GiB)입니다.
Performance Schema의 memory/temptable/physical_rammemory/temptable/physical_disk 인스트루먼트를 사용하여 TempTable 메모리 할당 및 디스크 저장소를 모니터링할 수 있습니다. (WL #8117)

MySQL 8.0.2 릴리스에서는 다음과 같은 언두 관련 변경 사항이 도입되었습니다:

  • 언두 테이블스페이스 수는 이제 innodb_undo_tablespaces 구성 옵션을 사용하여 런타임 또는 서버 재시작 시 수정할 수 있습니다. 이전에는 MySQL 인스턴스 초기화 시에만 언두 테이블스페이스 수를 구성할 수 있었으며 이후에는 변경할 수 없었습니다. 이 변경으로 데이터베이스가 커짐에 따라 언두 테이블스페이스와 롤백 세그먼트를 추가할 수 있습니다.
  • innodb_undo_log_truncate는 기본적으로 활성화되어 있으며, 활성화된 경우 innodb_max_undo_log_size로 정의된 임계값을 초과하는 언두 테이블스페이스는 잘림 대상으로 지정됩니다. 자세한 내용은 언두 테이블스페이스 잘라내기를 참조하세요.
  • innodb_undo_tablespaces의 기본값이 0에서 2로 변경되었으며, 이는 기본적으로 InnoDB 시스템 테이블스페이스 대신 두 개의 개별 언두 테이블스페이스에 롤백 세그먼트가 생성됨을 의미합니다. 언두 로그 잘라내기를 허용하려면 최소 두 개의 언두 테이블스페이스가 필요합니다.innodb_undo_tablespaces를 0으로 설정하는 것은 사용 중단될 예정이며, 향후 MySQL 버전에서는 지원되지 않습니다.
  • 언두 테이블스페이스 파일의 명명 규칙이 undoNNN에서 undo_NNN로 변경되었습니다. 여기서 NNN은 언두 공간 번호입니다.
  • innodb_rollback_segments 구성 옵션은 언두 테이블스페이스당 롤백 세그먼트 수를 정의합니다. 이전에는 innodb_rollback_segments가 MySQL 인스턴스의 전체 롤백 세그먼트 수를 지정하는 글로벌 설정이었습니다. 이 변경은 동시 트랜잭션을 위한 롤백 세그먼트 수를 증가시킵니다. 더 많은 롤백 세그먼트는 동시 트랜잭션이 언두 로그를 위해 별도의 롤백 세그먼트를 사용할 가능성을 높이며, 자원 경쟁을 줄입니다.
  • innodb_undo_logs 구성 옵션이 제거되었습니다. 동일한 기능을 수행하는 innodb_rollback_segments 구성 옵션을 대신 사용해야 합니다.
  • Innodb_available_undo_logs 상태 변수가 제거되었습니다. 테이블스페이스당 사용 가능한 롤백 세그먼트 수는 SHOW VARIABLES LIKE 'innodb_rollback_segments'; 명령을 통해 확인할 수 있습니다.

(WL #9507, WL #10498, WL #10499, WL #10322)

SHOW COLUMNSSHOW INDEX 문은 이제 EXTENDED 키워드를 선택적으로 지원하여 MySQL이 내부적으로 사용하는 숨겨진 열 및 인덱스에 대한 정보를 포함하는 출력을 제공합니다. 자세한 내용은 SHOW COLUMNS 문SHOW INDEX 문을 참조하세요. (WL #9570)

버그 수정

InnoDB: information_schema_statslatest로 설정한 경우 INFORMATION_SCHEMA.TABLES에서 쿼리 속도가 저하되었습니다. (버그 #26197113)

InnoDB: DATA DIRECTORY 절을 지정한 ALTER TABLE ... ADD PARTITION 작업이 테이블의 TABLESPACE 속성을 무시하지 못했습니다. (버그 #26113652)

InnoDB: foreign_key_checks가 비활성화된 경우, 외래 키 제약 조건을 가진 자식 테이블이 부모 테이블보다 먼저 생성될 수 있으며, 이로 인해 부모 테이블이 제약 조건을 인식하지 못해 외래 키 제약 조건 오류가 발생할 수 있습니다. 이제 테이블을 생성할 때 해당 테이블에 대한 외래 키 제약 조건을 로드하고 자식 테이블을 확인하는 호출이 추가되었습니다. (버그 #25976199)

InnoDB: 전체 텍스트 인덱스를 사용하는 테이블을 최적화하는 동안 구문 분석 오류가 발생했습니다. (버그 #25914332)

InnoDB: Windows에서 Microsoft Visual C++ 2015 또는 macOS 10.12.4에서 GCC 4.2.1 또는 Apple LLVM 버전 8.0.0 (clang-800.0.38)으로 MySQL을 컴파일할 때 경고가 표시되었습니다. (버그 #25910531)

InnoDB: 디버그 빌드에서 시스템 테이블스페이스 파일(ibdata1)이 더블라이트 페이지 생성 중 공간이 부족해질 때 부트스트랩 중에 어설션이 발생했습니다. (버그 #25872368)

InnoDB: 잘못된 잠금 순서로 인해 InnoDB가 자동 증가 카운터 값을 디스크에 저장하려 할 때 교착 상태가 발생했습니다. (버그 #25833228)

InnoDB: 사전 열에 대한 내부 사전 테이블 객체 데이터 접근 메서드가 가상 열을 고려하지 않았습니다. (버그 #25822154)
참고: 이 문제는 버그 #23748128의 회귀입니다.

InnoDB: 가상 인덱스 레코드의 가상 열 필드 길이가 예상되는 템플릿 열 길이보다 짧았습니다. (버그 #25793677)

InnoDB: 디버그 빌드에서 --innodb-fast-shutdown=0 옵션을 사용해 서버를 종료할 때 어설션이 발생했습니다. (버그 #25756224)

InnoDB: 지원되지 않는 파일 유형에서 실행된 경우 ibd2sdi 유틸리티가 종료되었습니다. (버그 #25738491)

InnoDB: InnoDB가 파티셔닝된 테이블을 열 때 압축 알고리즘을 설정하지 않았습니다. (버그 #25685868)

InnoDB: 인플레이스 ALTER TABLE 작업이 암호화 유형을 설정하지 못해 FLUSH TABLES ... FOR EXPORT 작업이 어설션을 발생시켰습니다. (버그 #25672779)

InnoDB: 파일 닫기를 등록할 때 유지되었던 래치로 인해 시스템이 멈추는 조건이 발생했습니다. (버그 #25658467)

InnoDB: 복구 중에 innodb_force_recovery 설정이 0보다 클 경우 준비된 트랜잭션이 롤백되었습니다. (버그 #25651042)

InnoDB: 기본 키가 정의되지 않은 상태에서 8자 접두사가 있는 고유 키를 NOT NULL TEXT 필드에 정의하는 CREATE TABLE 작업이 어설션을 발생시켰습니다. (버그 #25647413)

InnoDB: 데이터 사전 테이블 업데이트와 전체 텍스트 검색 보조 테이블에 대한 InnoDB 시스템 테이블 업데이트가 결합될 때 잠금 관련 어설션이 발생했습니다. (버그 #25610353)

InnoDB: 테이블을 재구축하는 작업에 대해 서버가 불필요하게 메모리를 할당했습니다. (버그 #25573565, 버그 #85043)

InnoDB: 존재하지 않는 페이지에서 무작위 읽기를 시뮬레이션하려는 테스트 관련 코드가 잘못된 어설션을 발생시켰습니다. (버그 #25479538)
참고: 이 문제는 버그 #25053705의 회귀입니다.

InnoDB: foreign_key_checks를 비활성화한 경우, InnoDB가 존재하지 않는 외래 키를 참조하는 테이블에서 작업을 수행할 때 잘못된 메시지를 오류 로그에 기록했습니다. (버그 #25365223)

InnoDB: 파일별 테이블스페이스에서 TRUNCATE TABLE 작업 중 버퍼 풀에서 더티 페이지가 제거되기 전에 사전 작업 잠금이 해제되어 래치 순서 위반이 발생했습니다. (버그 #25357789)

InnoDB: 실패한 온라인 ALTER TABLE .. ADD INDEX 작업 후 DROP TABLE 또는 TRUNCATE TABLE 작업이 어설션을 발생시킬 수 있었습니다. 인덱스 루트 페이지가 너무 일찍 삭제되었습니다. (버그 #25357789)

InnoDB: 인덱스 병합 옵티마이저 스위치를 사용할 때, SELECT COUNT(*) 작업이 간혹 0을 반환했습니다. 파티셔닝 코드가 인덱스가 읽은 열에 대해 memcpy를 잘못 수행하여 잘못된 레코드가 복사되었습니다. (버그 #25332330, 버그 #81031)

InnoDB: 테이블을 다른 스키마로 이동하는 RENAME TABLE 작업 후 InnoDB가 재시작 시 테이블스페이스 데이터 파일을 찾을 수 없다는 오류를 반환했습니다. InnoDBRENAME TABLE 작업 중 INNODB_SYS_DATAFILES 데이터 사전 테이블을 업데이트하지 못했습니다. (버그 #25189192, 버그 #84038)

InnoDB: 가상 열이 포함된 테이블을 재구축하는 ALTER TABLE 작업 중에 InnoDB가 동시 삽입 로그 레코드를 적용하지 못했습니다. (버그 #24961167)

InnoDB: 가상 열 유효성 검사 문제로 인해 인플레이스 ALTER TABLE 작업에서 동시 삭제 로그를 적용하지 못했습니다. (버그 #24960450)

파티셔닝: ALTER TABLE ... OPTIMIZE PARTITION 문을 실행한 후, 테이블에서 사용된 테이블스페이스 이름이 유지되지 않아 이후 테이블에 대한 접근이 서버 장애를 일으켰습니다. (버그 #25512556)

복제: 파티셔닝된 테이블을 인덱스와 함께 복제할 때, HASH_SCANslave_rows_search_algorithms 설정의 일부로 지정된 경우, 복제 슬레이브의 I/O 스레드가 HA_ERR_KEY_NOT_FOUND 오류로 인해 중지되는 경우가 있었습니다. (버그 #26137159)

복제: SET GTID_NEXT 문에 이어진 USE 문이 간혹 효과를 발휘하지 못했습니다. (버그 #26128931)

복제: 만료 시간이 설정된 바이너리 로그 파일에 대해 FLUSH LOGS 또는 PURGE LOGS BEFORE 명령을 사용했을 때, 해당 파일이 사용 중인 경우 잘못된 경고가 발생했습니다. 경고는 파일이 사용 중임을 나타내며 만료 시간이 지나지 않았음에도 삭제 시도가 있었음을 암시했습니다. 이제 MySQL은 먼저 바이너리 로그 파일의 만료 시간을 확인하고 그 후에 파일 사용 여부를 확인합니다. 따라서 이제 경고는 삭제될 나이가 된 사용 중인 바이너리 로그 파일에 대해서만 발생합니다. (버그 #25973525)

복제: 이제 복제 그룹에서 온라인 업그레이드를 수행할 수 있도록 서로 다른 서버 버전을 실행하는 멤버가 그룹에 포함될 수 있습니다. 서로 다른 버전의 멤버를 그룹에 결합하는 규칙은 다음과 같습니다:

  • 8.0 멤버로 구성된 그룹에 5.7 멤버를 추가할 수 없습니다.
  • 5.7 멤버로 구성된 그룹에는 8.0 멤버를 추가할 수 있지만, 이 멤버는 읽기 전용 모드로 유지됩니다. 여러 서버 버전이 포함된 그룹에서는 이 멤버에 쓰기를 피해야 합니다.

단일 기본 그룹에서 현재 기본 멤버가 그룹을 떠나 새로운 기본을 선택해야 할 경우, 기본은 먼저 낮은 버전 멤버 중에서 선택됩니다. 낮은 버전 멤버가 없으면 최신 버전 멤버 중에서 선택됩니다. (버그 #25876807)

복제: 이제 XA 트랜잭션이 두 부분으로 준비 및 커밋됨에 따라 문 기반 복제에서 문제가 발생할 수 있는 것으로 확인되었습니다. 마스터에서 커밋된 두 개의 XA 트랜잭션이 슬레이브에서 역순으로 준비 중일 경우 해결할 수 없는 잠금 종속성이 발생할 수 있습니다. 이 문제는 행 기반 복제에서는 발생하지 않습니다.
따라서 이제 XA 트랜잭션은 문 기반 복제에서는 안전하지 않은 것으로 간주됩니다.

  • binlog_format = STATEMENT인 경우 XA 트랜잭션 내의 DML 문에 대해 경고가 발생하며, 복제가 슬레이브에서 교착 상태로 실패할 수 있습니다.
  • binlog_format = MIXED인 경우 XA 트랜잭션 내의 DML 문은 행 기반 복제를 사용하여 기록됩니다.
  • binlog_format = ROW인 경우 XA 트랜잭션 내의 DML 문은 이전과 동일하게 기록됩니다.

(버그 #25786490, 버그 #85639)

복제: 이제 다음의 Performance Schema 복제 테이블이 Performance Schema가 비활성화된 경우에도 계속해서 데이터가 채워집니다:

예외는 replication_connection_status, replication_applier_status_by_coordinator, 및 replication_applier_status_by_worker 복제 테이블의 로컬 타이밍 정보(트랜잭션 시작 및 종료 타임스탬프)입니다. Performance Schema가 비활성화된 경우 이 정보는 수집되지 않습니다. (버그 #25694813)

복제: RPM을 통해 MySQL 서버를 설치한 후 처음 시작할 때 패스워드 검증 플러그인이 기본적으로 활성화됩니다(RPM 설치에만 해당). 이 시점에 바이너리 로그가 이미 활성화된 경우 플러그인 활성화가 기록되었으며, 이는 바이너리 로그에 기록되지 않아야 합니다. (버그 #25672750)

복제: XA 트랜잭션을 수행하기 위해 사용되는 XA START, XA END, XA COMMIT, 및 XA ROLLBACK 문이 관련 데이터베이스를 지정한 replicate-do-db 필터의 카운터를 증가시키고 있었습니다. 이제 이러한 문에 대해 카운터가 더 이상 증가하지 않습니다. (버그 #25669344)

복제: MySQL 8.0 서버가 MySQL 5.7 서버로 구성된 복제 그룹에 참여할 수 없었으며, MySQL 5.7 서버가 있는 복제 그룹을 MySQL 8.0으로 업그레이드할 수 없었습니다. (버그 #25477979)

복제: MySQL 5.7 서버에서 mysqlbinlog 출력이 MySQL 8.0 서버에 적용될 때, MySQL 8.0 서버는 original_commit_timestamp에 대해 자체 타임스탬프를 생성했습니다. 수정 사항은 이제 original_commit_timestamp 값이 정확히 0으로 설정되도록 하여 타임스탬프가 알려지지 않았음을 의미합니다. (버그 #25316086)

복제: 서버가 --log-bin 옵션으로 시작되었을 때, 구조가 잘못된 하나의 Performance Schema 테이블이 발견되면 이후 확인되는 모든 Performance Schema 테이블이 유효하지 않은 것으로 표시되었습니다. (버그 #25041396)

복제: 트랜잭션 격리 수준이 REPEATABLE-READ로 설정된 경우 교차된 트랜잭션이 슬레이브 적용기에서 교착 상태를 일으킬 수 있었습니다. (버그 #25040331)

복제: slave_skip_errors 시스템 변수가 3000보다 큰 오류 번호를 허용하지 않았습니다. Tsubasa Tanaka에게 패치에 감사드립니다. (버그 #24748639, 버그 #83184)

복제: ER_TRANSACTION_ROLLBACK_DURING_COMMIT의 SQL 상태가 롤백에 적합하지 않은 일반 상태 HY00로 설정되어 있었습니다. SQL 상태는 40000으로 수정되었습니다. (버그 #24658431)

복제: mysqlbinlog--raw 옵션과 함께 호출될 경우, 프로세스가 종료될 때까지 출력 파일을 플러시하지 않습니다. 하지만 --stop-never 옵션과 함께 호출되면 프로세스가 종료되지 않아 출력 파일에 아무것도 기록되지 않습니다. 이제 각 이벤트 후에 출력이 플러시됩니다. (버그 #24609402)

복제: mysqlbinlog에서 메모리 누수가 수정되었습니다. 이 누수는 가짜 회전 이벤트를 처리할 때나 --raw 옵션을 사용해 대상 로그 파일을 생성하지 못할 때 발생했습니다. 이 문제는 원격 서버의 이벤트를 처리할 때만 발생했습니다. 이 버그 수정에 기여한 Laurynas Biveinis에게 감사드립니다. (버그 #24323288, 버그 #82283)

복제: MASTER_AUTO_POSITION=0일 때 두 복제 스레드가 중지되고 CHANGE MASTER TO MASTER_DELAY=N를 사용해 적용 지연을 변경하면, 슬레이브 서버가 아직 적용되지 않은 이벤트를 잃을 수 있었습니다. (버그 #23203678, 버그 #81232)
참고: 관련 버그 #25340185, 버그 #84375도 참조하십시오.

복제: 대형 GCS 메시지 전송이 너무 오래 걸리면 송신자가 중단된 것으로 보일 수 있었습니다. (버그 #22671846)

복제: 다중 스레드 슬레이브가 작은 큐 크기로 구성된 경우, slave_pending_jobs_size_max를 초과하는 트랜잭션을 처리할 필요가 있을 때 큐 크기 설정이 문제가 되었습니다. 패킷이 slave_pending_jobs_size_max보다 큰 경우, 오류 ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX와 함께 거부되었으며, 이 패킷은 slave_max_allowed_packet 제한보다 작아도 거부되었습니다.
이 수정으로 slave_pending_jobs_size_max는 하드 제한이 아닌 소프트 제한으로 변경되었습니다. 패킷 크기가 slave_pending_jobs_size_max를 초과하지만 slave_max_allowed_packet 미만일 경우, 트랜잭션은 모든 슬레이브 작업자 큐가 비워질 때까지 대기한 후 처리됩니다. 이후 트랜잭션들은 큰 트랜잭션이 완료될 때까지 대기합니다. 이를 통해 슬레이브 작업자 큐 크기를 제한하면서 가끔 큰 트랜잭션을 처리할 수 있습니다. (버그 #21280753, 버그 #77406)

복제: 복제를 중단하는 사건 이벤트가 GTID와 함께 바이너리 로그에 기록되지 않아, SET gtid_next=value를 사용해 이벤트를 건너뛸 수 없었습니다. 대신 릴레이 로그 파일 및 위치를 직접 설정해야 했으며, 이로 인해 자동 위치 지정이 활성화된 경우 먼저 이를 비활성화하고 나서 릴레이 로그 파일과 위치를 설정한 후 자동 위치 지정을 다시 활성화해야 했습니다.
이제 이러한 경우 MySQL은 사건 이벤트를 문장 캐시에 기록해, 플러시 전에 GTID가 생성 및 기록되도록 하여 슬레이브 적용기가 이 변경을 반영할 수 있도록 합니다. 이제 사용자는 SET gtid_next=value SQL 문을 사용한 다음 BEGINCOMMIT을 통해 이벤트를 건너뛸 수 있습니다. (버그 #19594845)

복제: CHANGE REPLICATION FILTER로 빈 필터 규칙을 설정하면 UBSan으로 테스트를 실행할 때 문제가 발생했습니다. (버그 #85405, 버그 #25702297)

복제: 수신 스레드가 이벤트를 큐에 추가하는 동안 릴레이 로그에 대한 잠금을 유지하고 있을 때, SHOW SLAVE STATUS 또는 SHOW RELAYLOG EVENTS를 실행하는 클라이언트가 차단되었습니다. (버그 #85084, 버그 #25584734)

복제: Performance Schema의 replication_applier_status_by_worker 테이블 인덱스가 단일 스레드 복제에서만 올바르게 작동했습니다. 이는 인덱싱이 작업자의 존재 여부와 관계없이 SQL 스레드 ID에만 의존했기 때문입니다. 이제 슬레이브에서 멀티스레딩이 활성화된 경우 작업자 스레드 ID도 인덱스에 고려됩니다. (버그 #84646, 버그 #25444610)

복제: 특정 상황에서 마스터가 last_committed 값을 잘못 기록해 슬레이브에서 동시 트랜잭션을 실행할 수 있었습니다. 이로 인해 불일치나 기타 오류가 발생할 수 있었습니다. (버그 #84471, 버그 #25379659)

복제: group_replication_ip_whitelist=AUTOMATIC 사용 시, 사설 네트워크 내 IP는 자동으로 허용되지만 일부 클래스 C IP 주소는 올바르게 허용되지 않았습니다. (버그 #84329, 버그 #25503458)

복제: 예상 오류 번호와 실제 오류 번호가 다른 경우 복제 적용 스레드가 오류 3002 ER_INCONSISTENT_ERROR를 반환했습니다. 이제 3002를 slave_skip_errors로 무시할 수 있습니다. (버그 #83186, 버그 #24753281)

복제: 서버가 재시작된 후 mysqldump로 덤프된 데이터를 로드한 경우 MySQL이 GTID 위치를 잃을 수 있었습니다.
이 문제가 발생하지 않도록 이제 mysqldump로 만든 덤프에서 mysql.gtid_executed 테이블이 자동으로 제외됩니다. (버그 #82848, 버그 #24590891)
참고: 관련 버그 #87455, 버그 #26643180도 참조하십시오.

복제: 열린 임시 테이블이 있는 상태에서 binlog_format을 설정해도 오류가 발생하지 않았습니다. (버그 #82467, 버그 #24411680)

복제: 멀티 소스 복제에서 하나의 채널의 릴레이 로그가 손상된 경우, 정상 채널이 서버 재시작 중에 초기화되지 않았습니다. 또한 --skip-slave-start=false로 실행할 때, 정상 상태인 채널에 대해 슬레이브 스레드가 시작되지 않았습니다.
이제 서버는 다른 채널에서 오류가 있더라도 정상 상태의 채널을 초기화하려 시도하며, --skip-slave-start가 비활성화된 경우 정상 채널에 대해 슬레이브 스레드를 시작합니다. 이 수정의 일환으로, 모든 채널에서 작동하도록 설계된 START SLAVESTOP SLAVE가 손상된 채널이 있더라도 정상 채널에서 계속 실행되도록 수정되었습니다. (버그 #82209, 버그 #24285104)

복제: SQL 스레드가 부분 트랜잭션에 대해 GTID 스킵을 수행할 수 없었습니다. (버그 #81119, 버그 #25800025)

복제: FLUSH LOGS가 초기화되지 않은 로그 파일에 Rotate_log_event를 기록할 수 있었습니다. (버그 #80368, 버그 #22732184)
참고: 관련 버그 #23531998, 버그 #81734도 참조하십시오.

그룹 복제: 시작 후 binlog_checksumNONE으로 설정되어 있을 때, 그룹 복제를 시작한 후 오류가 발생하면 서버가 RECOVERING 상태에서 멈추고 종료할 수 없었습니다. (버그 #25793366, 버그 #85667)

그룹 복제: 서로 다른 복제 그룹 멤버 간 원형 비동기 복제가 구현된 그룹 복제 설정에서, 뷰 변경 로그 이벤트가 그룹 간에 반복적으로 복제되면서 매번 새로운 GTID가 생성되었습니다. 이 수정으로 이제 뷰 변경 로그 이벤트는 발생한 이름 지정된 복제 그룹 외부에서는 무시되며, 새 GTID를 생성하지 않습니다. (버그 #25674926)
참고: 관련 버그 #26049695, 버그 #25928854, 버그 #25721175도 참조하십시오.

그룹 복제: 단일 기본 그룹 복제가 비동기 복제와 결합된 설정(예: 서버 S1S2가 그룹을 구성하고, S2S3가 마스터와 슬레이브로 작동하는 경우)에서, S2와 같은 세컨더리 서버가 트랜잭션을 수락하고 그룹에 참여할 수 있었습니다. 이 수정은 세컨더리가 단일 기본 그룹에 속하는 경우 비동기 복제 채널을 생성하지 못하도록 하며, 비동기 복제가 실행 중일 때 그룹 복제를 시작하지 못하도록 방지합니다. (버그 #25574200, 버그 #85047)
참고: 관련 버그 #86325, 버그 #26078602도 참조하십시오.

그룹 복제: super_read_only 시스템 변수가 활성화된 경우 그룹 복제를 시작할 수 없었습니다. (버그 #25481287, 버그 #84733)

그룹 복제: 멤버가 그룹에 참여하지 못한 경우 멈추지 않고 계속 트랜잭션을 수락했습니다. 이를 방지하려면 my.cfg 파일에서 멤버를 super_read_only=1로 설정하십시오. 그룹 복제는 이제 시작 시 이 설정을 확인하고, super_read_only=0으로 설정합니다. 이를 통해 그룹에 성공적으로 참여하지 않은 멤버가 트랜잭션을 수락하지 않도록 합니다. (버그 #25474736, 버그 #84728)

그룹 복제: root 계정이 없는 경우 그룹 복제 플러그인의 로딩 및 초기화가 실패했습니다. (버그 #24311527)
참고: 관련 버그 #25750822, 버그 #25103980, 버그 #83841도 참조하십시오.

그룹 복제: 그룹 복제를 사용하는 서버를 재시작한 후 SHOW SLAVE STATUS FOR CHANNEL 'group_replication_recovery'를 실행하면 예기치 않은 종료가 발생했습니다. (버그 #85739, 버그 #25813258)

그룹 복제: 기존 GTID_NEXT 트랜잭션에 대해 서버에서 충돌하는 GTID가 할당될 때, 그룹 복제는 동일한 GTID를 가진 두 트랜잭션을 감지하고 어설션을 생성했습니다. 이는 그룹 복제가 비동기 복제보다 충돌 감지 후에 GTID를 생성하기 때문입니다. 트랜잭션이 커밋되면 서버는 이미 사용된 GTID임을 경고하고 트랜잭션을 롤백합니다. (버그 #84153, 버그 #25232042)

Microsoft Windows: Windows에서 Docs/INFO_SRC 파일에 build-date 항목이 누락되었습니다. (버그 #25799855)

JSON: NULLIF() 함수 결과가 JSON 문맥에서 사용될 때 디버그 빌드에서 어설션 오류가 발생했습니다. 이제 이 결과를 안전하게 JSON 값으로 사용할 수 있습니다.
이 수정에는 특정 플랫폼에서 디버깅 문제를 야기하는 DBUG_ABORT() 대신 DBUG_ASSERT()를 사용하는 방식이 포함되었습니다. (버그 #25818544)
참고: 관련 버그 #21383497, 버그 #21383530도 참조하십시오.

JSON: 내부 Json_array가 이제 요소를 저장하는 데 Prealloced_array 대신 std::vector를 사용하여 힙 공간 요구량을 줄였습니다. (버그 #85877, 버그 #25867454)

문자열 비교 피연산자 중 하나의 문자셋이 다른 피연산자의 문자셋의 상위 집합인 경우, “작은” 문자셋을 “큰” 문자셋으로 변환하여 허용해야 할 비교가 일부 허용되지 않았습니다. utf8mb4utf32는 다른 모든 인코딩의 상위 집합으로 간주됩니다. (버그 #27897053, 버그 #25642319, 버그 #85224)

RPM 패키지의 mysqld_pre_systemd 스크립트는 옵션 파일에서 오류 로그 설정을 log-error로 지정했을 때는 찾았지만 log_error로 지정한 경우에는 찾지 못했습니다. 두 형식 모두 허용됩니다. (버그 #26148391, 버그 #86466)

ALTER TABLE ... ADD PARTITION 문이 서버 종료를 유발할 수 있었습니다. (버그 #26132947)

SET PERSIST가 X Plugin 시스템 변수에 대해 작동하지 않았습니다. (버그 #26115672)

REFERENCES 권한 검사에서 일부 경우 잘못된 데이터베이스를 사용할 수 있었습니다. (버그 #26106655)

gtid_mode 시스템 변수가 .cnf 옵션 파일이나 명령줄에서 설정되지 않은 경우, SET PERSIST 또는 SET GLOBALgtid_modeON_PERMISSIVE로 설정한 후 서버가 재시작에 실패했습니다. (버그 #26085712)

준비된 문장을 실행하는 동안 버퍼에서 너무 많은 바이트를 읽을 수 있었습니다. (버그 #26042934, 버그 #85937)

서버가 --initialize 옵션으로 시작될 때 동적 권한이 로드되지 않았습니다. (버그 #26005645)

Linux: MySQL 8.0용 일반 Linux 빌드는 이제 호스트 시스템의 비균일 메모리 접근(NUMA)을 지원합니다. 이 빌드를 사용하는 시스템에는 libnuma가 설치되어 있어야 합니다. 자세한 내용은 유닉스/Linux에서 일반 바이너리를 사용한 MySQL 설치를 참조하십시오. (버그 #26005558)

Debian 클라이언트 패키지에는 akonadi-backend-mysql 패키지와의 충돌 정보가 누락되어 있었습니다. (버그 #26002288)

mysqldumpUSE 문에서 데이터베이스 이름을 잘못 기록할 수 있었습니다. (버그 #25998635)

C API 함수 mysql_stmt_close()를 호출하면 mysql_stmt_error(), mysql_stmt_errno() 또는 mysql_stmt_sqlstate()를 호출할 때 나중에 액세스될 수 있는 메모리가 해제되었습니다. mysql_stmt_close() 호출 후 오류 정보를 얻으려면 mysql_error(), mysql_errno() 또는 mysql_sqlstate()를 대신 호출하십시오. (버그 #25988681)

MySQL 5.7에서 MySQL 8.0으로 업그레이드하는 중 데이터 사전 생성 시 64자 길이 제한을 초과하는 테이블 이름으로 인해 실패했습니다. (버그 #25973237, 버그 #86120)

다음 상황에서 쿼리가 잘못 캐시되어 잘못된 쿼리 결과가 나올 수 있었습니다: InnoDB 테이블; 행이 삽입되었으나 아직 커밋되지 않음; 쿼리가 파생 테이블의 기본 테이블로 테이블을 사용함; 옵티마이저가 파생 테이블을 물리적으로 만들기로 선택함. (버그 #25943038, 버그 #86047)

AddressSanitizer가 활성화된 상태로 컴파일되고 --basedir= 옵션 값을 비워둔 채 mysqld를 실행하면 이상 동작이 발생했습니다. (버그 #25914296, 버그 #85994)

ST_LatFromGeohash(), ST_LongFromGeohash(), 및 ST_PointFromGeohash() 함수가 CHAR 열에서 생성된 데이터를 허용하지 않았습니다. (버그 #25912557, 버그 #85981)

여러 데이터 파일이 포함된 테이블스페이스에서 데이터 파일을 삭제하려고 하면 중복 파일 이름 오류가 반환되었습니다. (버그 #25858461)

데이터 사전 클라이언트 메서드 선언에 반환 값을 무시할 경우 컴파일 경고를 생성하는 속성이 추가되었습니다. (버그 #25840927)

데이터 사전 클래스 계층 구조가 단순화되었습니다. (버그 #25835968, 버그 #85811)

동일한 객체에 대해 Dictionary_client::update 데이터 사전 객체 업데이트 함수를 두 번 호출하지 못하게 하는 제한이 제거되었습니다. (버그 #25833932, 버그 #85800)

Ubuntu 플랫폼에서 MySQL 서비스 스크립트를 실행한 사용자가 데이터 디렉터리 또는 PID 파일에 접근 권한이 없으면 스크립트가 제대로 종료되지 않았습니다. (버그 #25825833)

INFORMATION_SCHEMA.CHARACTER_SETS.DESCRIPTION 필드의 문자열 비교 쿼리가 대소문자를 구분하도록 설정되었습니다. 이는 이전 릴리스에서의 회귀 문제입니다. (버그 #25824297)

Debian/Ubuntu 패키지에서 일부 유틸리티의 매뉴얼 페이지가 누락되었습니다. (버그 #25811814)

INFORMATION_SCHEMA 뷰가 LOCK TABLES 모드로, SERIALIZABLE 격리 수준으로, 그리고 autocommit이 비활성화된 상태에서 실행되었을 때 비잠금 읽기를 사용하지 못해 DDL 작업이 차단되거나 교착 상태가 발생할 수 있었습니다. (버그 #25811413)

동일한 이름의 트리거가 다른 데이터베이스에 존재하고 데이터베이스 이름이 대소문자만 다를 경우 트리거를 사용하는 테이블에서 테이블 잠금 실패가 발생할 수 있었습니다. (버그 #25807393)

.TRG 파일이 트리거 정의에 대해 created 행이 없는 경우, 제자리 MySQL 업그레이드가 실패했습니다. (이 문제는 MySQL 5.7.2 이상에서는 created 행이 존재하므로 MySQL 5.7에서 MySQL 8.0으로의 업그레이드에서 발생할 가능성은 적습니다.) (버그 #25805260, 버그 #85704)

field-t 유닛 테스트가 AddressSanitizer가 활성화된 상태에서 실행되지 않았습니다. 이 패치에 기여한 Laurynas Biveinis에게 감사드립니다. (버그 #25803823, 버그 #85678)

Debian 클라이언트 패키지에 네이티브 패키지와의 충돌 정보가 누락되었습니다. (버그 #25799475)

INFORMATION_SCHEMA.TABLES 테이블의 CREATE_OPTIONS 열이 binary 정렬 규칙으로 처리되어 UPPER()LOWER() 함수가 예상대로 작동하지 않았습니다. (버그 #25793429)

DECIMAL 열이 포함된 테이블을 가져온 후 해당 테이블에 접근하면 어설션이 발생했습니다. (버그 #25792649)

기본 문자셋이 utf8mb4로 변경되었을 때 ALTER TABLE이 잘못된 열 길이 계산으로 인해 실패할 수 있었습니다. (버그 #25779239, 버그 #85614)

컴포넌트의 deinit() 메서드가 실패할 경우에도 해당 컴포넌트는 언로드되었습니다. (버그 #25764325)

저장된 프로그램 실행이 잠긴 DEFINER 계정의 만료된 암호로 인해 실패할 수 있었습니다. 이제 잠긴 DEFINER 계정의 경우 만료된 암호에 대한 검사가 수행되지 않습니다. (버그 #25741966)

임시 테이블에서의 DISTINCT 작업이 너무 작은 비교 키 할당으로 인해 잘못된 결과를 생성할 수 있었습니다. (버그 #25740550, 버그 #85518)

옵티마이저 추적 출력에서 num_tmp_files가 파일 수를 나타내지 않았습니다. 이제 num_initial_chunks_spilled_to_disk로 이름이 변경되었으며, 병합이 발생하기 전의 청크 수를 나타냅니다. (버그 #25733784, 버그 #85487)

Perl 스크립트의 시작 부분에 있는 #! 줄의 Perl 경로가 FreeBSD 11에 맞게 /usr/local/bin/perl로 조정되었습니다. (버그 #25719975)

IGNORE_SPACE SQL 모드가 활성화된 경우 구문 오류 메시지에 항상 1번 줄이 보고되었습니다. (버그 #25717617)

mysqldump가 덤프 출력에 작성된 SQL 문에서 특정 식별자를 적절히 인용하지 못했습니다. (버그 #25717383)

연결된 테이블스페이스 파일이 없는 테이블스페이스를 삭제할 때 테이블스페이스 사전 객체가 유효하지 않다는 오류가 발생했습니다. (버그 #25717019)

서버에 의한 클라이언트 사전 인증에서 길이 인코딩된 문자열의 길이 검사가 누락되었습니다. (버그 #25714674)

디버그 빌드에서 NDB 스토리지 엔진을 사용할 때 CREATE TABLESPACE 작업이 잘못된 어설션을 발생시켰습니다. NDB 테이블스페이스에는 적용되지 않는 0길이 데이터 파일을 검사하는 유효성 검사 함수가 제거되었습니다. (버그 #25700242)

디버그 빌드에서 EXPORT_SET() 작업이 특정 인수로 인해 어설션을 발생시킬 수 있었습니다. (버그 #25688192)

디버그 빌드에서 버그 #59686에 대해 추가된 어설션이 너무 엄격하여 필요하지 않은 경우에도 어설션이 발생할 수 있었습니다. (버그 #25685958)
참고: 관련 항목으로 버그 #59686을 참조하십시오.

MySQL 8.0.1에서 코드 리팩터링으로 인해 디버그 빌드에서 여러 어설션이 발생했습니다. (버그 #25669590, 버그 #25669606, 버그 #25669580, 버그 #25688504)
참고: 이 문제는 버그 #25221172, 버그 #84103의 회귀 문제입니다.

일부 배정밀도 계산에서 지수 부분을 계산할 때 오버플로가 발생할 수 있었습니다. (버그 #25664323, 버그 #85290)

여러 열에 정의된 FULLTEXT 인덱스의 SHOW INDEX 출력이 일관되지 않았습니다. (버그 #25659276)

그룹 커밋 중 스택이 잘못 소진된 것으로 보고되어 스택 오버플로가 발생할 수 있었습니다. (버그 #25656875)

제자리(바이너리) 업그레이드가 저장된 루틴의 기본 character_set_clientcharacter_set_connection 변수를 변경하여 루틴 동작이 달라질 수 있었습니다. (버그 #25633041)

디버그 빌드에서 파티셔닝 핸들러가 UPDATE 문에서 생성된 열 표현식을 부적절하게 평가하여 어설션이 발생할 수 있었습니다. (버그 #25615803, 버그 #85179)

엄격 SQL 모드에서 ER_TRUNCATED_WRONG_VALUE 오류가 경고에서 오류로 전환될 수 있었으나 무시되면서 어설션이 발생할 수 있었습니다. (버그 #25586959, 버그 #25586673)

NOT NULL 열에 기하 데이터 유형이 있는 ARCHIVE 테이블에 대해 ALTER TABLE 작업이 실패했습니다. 디버그 빌드에서는 어설션이 발생했으며, 비디버그 빌드에서는 오류가 발생했습니다. (버그 #25582178, 버그 #85059)

디버그 빌드에서 뷰가 사용 중인 테이블의 트리거에 대해 DROP TRIGGER가 실행되면 어설션이 발생할 수 있었습니다. (버그 #25581925)

MySQL 5.7에서 MySQL 8.0으로 업그레이드할 때 서버가 오류 로그에 불필요한 구문 분석 경고를 기록했습니다. 이제 이러한 메시지는 억제됩니다. (버그 #25518436, 버그 #84889)

서버가 잘못된 메모리에 접근하려고 시도하면서 비정상적으로 종료되었습니다. (버그 #25501659)

데이터 사전의 column_type_elements 테이블의 name 필드의 최대 길이가 255바이트에서 1020바이트로 확장되어 멀티바이트 문자셋을 사용할 경우 발생할 수 있는 긴 ENUMSET 값을 수용할 수 있게 되었습니다.
멀티바이트 문자셋을 사용할 때 단일 ENUM 또는 SET 요소는 데이터 사전의 열 유형 정의에서 최대 M x w 바이트를 차지합니다. 여기서 M은 요소 리터럴 길이이고 w는 문자셋에서 최대 길이의 문자가 차지하는 바이트 수입니다.
이전 릴리스에서는 유형 내 요소 수에 따라 개별 ENUM 또는 SET 요소의 최대 지원 길이가 달랐습니다. 따라서 (M x w) = 64K인 단일 요소 또는 (M x w) = 1인 64K 요소가 있을 수 있었습니다.
이제 개별 ENUM 또는 SET 요소의 최대 지원 길이는 요소 수와 관계없이 M <= 255 및 (M x w) <= 1020입니다. (버그 #25481355)

TCP 래퍼로 보호되고 hosts.allowhosts.deny 파일이 IP 주소로 접근을 제한하도록 설정된 mysqld에서 해당 주소로부터의 연결 시도 시 오류 로그에 과도한 메시지가 기록되었습니다. (버그 #25476479, 버그 #84708)

mysqlpump은 이제 mysql 시스템 데이터베이스의 덤프에서 slave_master_infoslave_relay_log_info 테이블을 포함하지 않습니다. 이 테이블들이 포함된 덤프 파일을 복원하면 복제 상태가 잘못 변경되어 문제가 발생할 수 있었습니다. (버그 #25469190)

MYSQL_OPT_SSL_MODE를 설정하기 위해 mysql_options()를 호출하여 변경한 내용이 이후의 mysql_options() 호출로 인해 영향을 받을 수 있었습니다. 이제 MYSQL_OPT_SSL_MODE 설정은 이후의 mysql_options() 호출에 영향을 받지 않습니다. (버그 #25452210)

DATA DIRECTORY 또는 INDEX DIRECTORY 절을 포함하는 CREATE TABLE 문에서 경쟁 상태가 발생할 수 있었습니다. (버그 #25451091)

AddressSanitizer가 활성화된 상태에서 keyring_file 플러그인을 컴파일하면 One-Definition Rule 위반이 발생했습니다. (버그 #25448205)

AFTER 절을 사용하여 DATETIME NOT NULL 열에 대해 ALTER TABLE ... MODIFY를 실행하면 ER_INVALID_USE_OF_NULL 오류가 발생했습니다. (버그 #25385334)

범위 옵티마이저가 잘못된 쿼리 트리를 생성하여 서버가 종료될 수 있었습니다. (버그 #25369742, 버그 #25586531)

--datadir 옵션에 상대 경로가 지정된 경우 mysqld가 서버 시작에 실패했습니다. (버그 #25364806)

연결이 끊긴 세션에서의 트랜잭션에 대해 XA PREPARE, XA ROLLBACK, XA COMMIT 명령이 전역 커밋 잠금을 설정하지 않고 InnoDB의 바이너리 로그와 리두 로그를 수정했습니다. 이로 인해 백업 도구가 서버가 읽기 전용 상태에 있다고 가정하는 경우 백업이 불일치할 수 있었습니다. (버그 #25364178, 버그 #84442)

GROUP_CONCAT(DISTINCT)는 데이터 크기가 tmp_table_size 시스템 변수의 값보다 큰 경우 고유하지 않은 값을 반환했습니다. (버그 #25331425, 버그 #84320)

버그 #78777에 대한 수정이 Performance Schema 활성화 여부에 따라 다른 영향을 미쳤습니다. (버그 #25309017, 버그 #84305)
참고: 이 문제는 버그 #78777의 회귀 문제입니다.

일부 중첩 쿼리에서 집계 함수가 서버 종료를 유발할 수 있었습니다. (버그 #25303711)

가상 생성 열 표현식에서 BIN_TO_UUID(), CONV(), HEX() 함수를 사용하는 경우 연결 문자셋이 변경되면 문제가 발생할 수 있었습니다. 이제 이 함수들에 대해 테이블 문자셋이 연결 문자셋과 상관없이 사용됩니다. (버그 #25287633)

Rewriter 플러그인은 read_only 시스템 변수가 활성화된 경우 올바르게 잠금을 수행하지 않았습니다. (버그 #25264253)

read_only가 활성화된 상태에서도 비-SUPER 사용자가 비 TEMPORARY 테이블을 생성할 수 있었습니다. (버그 #25250768)

기본값으로 CURRENT_TIMESTAMP를 가지는 TIMESTAMP 또는 DATETIME 열을 가진 테이블에서 BEFORE INSERT 트리거가 있는 경우 열이 0000-00-00 00:00:00으로 초기화될 수 있었습니다. (버그 #25209512, 버그 #84077)

Windows에서 SHOW PROCESSLIST 출력의 Time 값이 시간이 지남에 따라 점점 커졌습니다. (버그 #25101724, 버그 #83019)

서버 부트스트랩 시 함수 생성이 미해결된 표현식을 평가하려고 할 때 어설션이 발생했습니다. (버그 #24961932)

데이터 사전 캐시 조회 수가 감소했으며, 트리거 지속성을 보장하기 위해 서버 종료 시 ALTER TABLE 처리를 개선했습니다. (버그 #24930129, 버그 #83473)

InnoDB 테이블에 대한 특정 쿼리가 기본 키와 하위 쿼리를 사용할 때 optimizer_switch 시스템 변수의 index_merge_intersection 플래그가 활성화되어 있으면 잘못된 결과를 반환할 수 있었습니다. (버그 #24829050, 버그 #79675)

x86 머신에서 uint3korr() 매크로가 의도된 3바이트 대신 4바이트의 데이터를 읽었습니다. (버그 #24807826, 버그 #83264)

memcached 플러그인의 페치 작업 중에 어설션이 발생했습니다. (버그 #24605783)

하위 쿼리에서 UNION을 포함하고 GROUP BY를 사용하는 쿼리가 잘못된 결과를 반환할 수 있었습니다. (버그 #24595639)

일부 구문적으로 잘못된 CREATE INDEX 문이 구문 오류 대신 서버 종료를 일으킬 수 있었습니다. (버그 #24593992)

MySQL 인플레이스 업그레이드가 mysql 시스템 데이터베이스에 innodb_table_stats 또는 innodb_index_stats 테이블이 없는 경우 실패했습니다. (이 문제는 MySQL 5.7에서 8.0으로 업그레이드하는 경우에는 발생하지 않아야 합니다. 해당 테이블은 MySQL 5.7에 존재합니다.) (버그 #24557143)

ON DUPLICATE KEY UPDATE 절의 VALUES 부분이 BLOB 값을 INSERT 열 목록에 참조할 때 저장 프로그램 또는 준비된 문맥에서 실행된 INSERT 문에 대해 잘못된 동작이 발생할 수 있었습니다. (버그 #24538207, 버그 #25361251, 버그 #25530880, 버그 #25684790)

Debian 패키지의 systemd 지원 스크립트에 데이터 디렉터리에 대한 하드코딩된 참조가 포함되어 있어 --datadir를 사용하여 데이터 디렉터리를 변경하기가 어려웠습니다. (버그 #24398446, 버그 #82417)

MySQL이 macOS 10.10.5에서 Clang을 사용하여 컴파일에 실패했습니다. (버그 #24352163, 버그 #82340)

가상 생성된 BLOB 열을 포함한 테이블에서 REPLACE 문이 행을 업데이트하려고 하면 이후의 DML 문이 잘못 작동할 수 있었습니다. (버그 #23573575)

일부 PROXY 권한이 슬레이브에 복제되지 않아 잘못된 복제가 발생했습니다. (버그 #23289541, 버그 #81424, 버그 #23623115)

단일 테이블 UPDATE 또는 DELETE 문에 대해 EXPLAIN을 수행할 때 하위 쿼리를 최적화하려고 시도하여 어설션이 발생할 수 있었습니다. (버그 #23209903)

mysqlxtest의 도움말 출력이 개선되었습니다. (버그 #23107137, 버그 #81086)

AddressSanitizer가 활성화된 빌드에서 ST_Simplify() 함수가 이미 해제된 메모리를 사용하려고 할 수 있었습니다. (버그 #23023817)

Clang을 사용하여 keyring_file 플러그인을 컴파일할 때 발생하는 여러 경고를 제거하기 위해 컴파일러 플래그가 조정되었습니다. (버그 #22834591, 버그 #80524)

이벤트 스케줄러를 활성화하면 실행 시간이 지난 ON COMPLETION NOT PRESERVE로 정의된 이벤트가 삭제되었을 때, 이 삭제 이벤트가 바이너리 로그에 기록되지 않아 슬레이브가 이를 복제하지 못하고 나중에 동일한 이름의 이벤트가 생성될 경우 복제가 실패했습니다. (버그 #22150112)

일부 CREATE TABLE ... SELECT 문에서 ORDER BY 절을 추가하면 열 데이터 유형이 변경되거나 디버그 빌드에서 어설션이 발생할 수 있었습니다. (버그 #16833464)

LOAD XML 성능이 읽는 XML 파일에 들여쓰기나 프리티 프린트로 인해 많은 공백이 포함된 경우 눈에 띄게 느려졌습니다. 이제 각 값의 선행 공백이 메모리에 읽기 전에 모두 제거됩니다. (버그 #16212207)

Leave a Comment



이 문서 공유

8.0.2 변경 사항 (2017-07-17 Development Milestone)

링크 복사

CONTENTS