MySQL 8.0.11 릴리스 노트
MySQL 8.0.11 Community Server 릴리스 노트를 한국어로 번역하고, DBA가 참고해야 할 핵심 내용을 함께 정리하였습니다.
DBA를 위한 핵심 내용
MySQL 8.0.11은 MySQL 8.0 GA 계열의 기준점으로, 5.7에서 올라오는 환경에는 기능 추가보다 호환성 단절과 운영 모델 변화가 더 큰 의미를 갖습니다. 데이터 딕셔너리, 계정 관리, 인증, SQL mode, 바이너리 로그 만료, Group Replication 제약을 업그레이드 체크리스트에 포함해야 하며, 확인 가능한 범위의 외부 검색에서도 특정 단일 회귀보다는 8.0 GA 전환 자체의 호환성 이슈가 주요 위험으로 보입니다.
DB2,MAXDB,MSSQL,ORACLE,POSTGRESQL,NO_FIELD_OPTIONS등 호환 SQL mode와NO_AUTO_CREATE_USER가 제거되었고,GRANT로 사용자 생성/계정 속성 변경,IDENTIFIED BY PASSWORD,PASSWORD(),old_passwords도 제거되었습니다. 5.7 소스에서 8.0 레플리카로 복제하는 경우 관련 문장이 실패하거나 효과가 달라질 수 있습니다.- MySQL 8.0 빌드는 yaSSL 대신 OpenSSL을 기본 SSL 라이브러리로 사용하고 FIPS mode를 지원합니다. 8.0 계열의 기본 인증 플러그인 변화로 구형 클라이언트 호환성이 문제가 될 수 있으므로, 배포판 옵션이나 계정별 인증 플러그인 정책을 사전에 정해야 합니다.
- 대형 버퍼 풀 초기화가 멀티스레드화되었고 redo logging은 전용 writer 스레드와 동적
innodb_log_buffer_size를 포함하도록 재작업되었습니다. 성능 이점이 기대되지만, 고쓰기 워크로드에서는 업그레이드 전후 latency와 flush 관련 지표를 비교해야 합니다. - 기본 바이너리 로그 만료는
expire_logs_days가 아니라binlog_expire_logs_seconds=2592000기준으로 이동했으며, 두 변수를 동시에 설정하면 새 변수만 유효합니다.RESET MASTER, XA, 멀티스레드 레플리카, Group Replication의lower_case_table_names일치 요구 등 GTID/복제 일관성 관련 수정도 포함됩니다. - 이후 버전 데이터 디렉터리로 8.0.11을 시작하지 못하도록 하는 검사가 추가되었고, 초기화 시점과 다른
lower_case_table_names값으로 재시작하는 것도 금지됩니다. 5.7→8.0 업그레이드에서는 4Kinnodb_page_size,mysql_upgrade, 대량 테이블 데이터 딕셔너리 생성 메모리, 외래 키/가상 컬럼/공간 인덱스 관련 수정 사항을 사전 리허설에서 검증해야 합니다.
캐릭터셋 지원
utf8mb3캐릭터셋은 향후 MySQL 버전에서utf8mb4로 대체됩니다.utf8캐릭터셋은 현재utf8mb3의 별칭이지만, 그 시점에는utf8mb4에 대한 참조가 됩니다.utf8의 의미에 대한 모호성을 피하려면, 캐릭터셋 참조에utf8대신utf8mb4를 명시적으로 지정하는 것을 고려하십시오. (WL #10778)
컴파일 관련 사항
-
MySQL 소스 코드는 clang-format을 사용하여 Google 스타일 규칙으로 변환되었습니다. (Bug #27414321)
-
Sun RPC가
glibc에서 제거되고 있습니다. 이제 CMake는glibc에 Sun RPC가 포함되어 있지 않은 경우libtirpc를 감지하고 사용합니다. (이 CMake 기능을 활용하려면libtirpc및 rpcgen을 설치해야 할 수도 있습니다.) (Bug #27368272, Bug #89168) -
서버 빌드를 위한 Boost 라이브러리의 최소 버전은 이제 1.66.0입니다. (Bug #27137349, Bug #88540)
-
소스에서 빌드할 때 제공된 CMake 스크립트는 JUnit 및 Ant가 설치되어 있고 설정된 경로에서 사용할 수 있다고 가정했습니다. 그렇지 않은 경우 GCS Java wrapper를 빌드하면 빌드 오류가 발생했습니다. 이를 해결하기 위해 새 CMake 옵션
WITH_ANT=path_name이 빌드 스크립트에 추가되었으며, 이 옵션은 기존WITH_BOOSTCMake옵션과 유사한 방식으로 동작합니다.WITH_ANT를 Ant tarball 또는 이미 압축이 해제된 아카이브가 저장된 디렉터리의 경로로 설정하십시오.WITH_ANT가 설정되지 않았거나 특수 값system으로 설정된 경우, 빌드는$PATH에 바이너리 ant가 존재한다고 가정합니다.마찬가지로, Google Test 배포판과 같은 필수 라이브러리를 빌드 중에 다운로드하기 위한
CMake옵션ENABLE_DOWNLOADS는 이미 존재합니다. 이제ENABLE_DOWNLOADS가 설정되어 있고 JUnit 또는 Ant를 찾을 수 없는 경우, 이들은 빌드 프로세스의 일부로 다운로드됩니다. (Bug #26678793)
설정 관련 사항
- 새로운 CMake 옵션인
BUNDLE_RUNTIME_LIBRARIES는 Windows용 서버 MSI 및 Zip 패키지에 런타임 라이브러리를 번들로 포함할 수 있게 합니다. (Bug #27584796, Bug #89771) - systemd 서비스 파일은 이제 MySQL 8.0의 더 높은 기본 설정을 수용하기 위해
LimitNOFILE을 10000으로 증가시킵니다. (Bug #27530282) - 새로운
WITH_SYSTEM_LIBSCMake 옵션은 활성화되면 명시적으로 설정되지 않은 다음 옵션 중 하나에 대해system값을 선택합니다:WITH_EDITLINE,WITH_ICU,WITH_LIBEVENT,WITH_LZ4,WITH_PROTOBUF,WITH_SSL,WITH_ZLIB. (Bug #27356668, Bug #89136) - 컴파일 내장된
zlib라이브러리의 버전은 이제version_compile_zlib시스템 변수의 값으로 런타임에 사용할 수 있습니다. 패치를 제공한 Daniël van Eeden에게 감사드립니다. (Bug #27235065, Bug #88825)
사용 중단 및 제거 관련 사항
-
호환되지 않는 변경: 다음의 사용 중단된 호환성 SQL 모드가 제거되었습니다:
DB2,MAXDB,MSSQL,MYSQL323,MYSQL40,ORACLE,POSTGRESQL,NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS. 더 이상sql_mode시스템 변수에 할당하거나 mysqldump--compatible옵션에 허용되는 값으로 사용할 수 없습니다.MAXDB가 제거되었다는 것은CREATE TABLE또는ALTER TABLE의TIMESTAMP데이터 타입이TIMESTAMP로 처리되며, 더 이상DATETIME으로 처리되지 않음을 의미합니다.MySQL 8.0에서 제거된 SQL 모드를 사용하는 MySQL 5.7 애플리케이션의 경우, MySQL 5.7 마스터에서 MySQL 8.0 슬레이브로 복제될 때 명령문이 실패하거나 마스터와 슬레이브에서 서로 다른 효과를 가질 수 있습니다. 이러한 문제를 방지하려면 MySQL 8.0에서 제거된 모드를 사용하는 애플리케이션을 해당 모드를 사용하지 않도록 수정해야 합니다. (WL #8383, WL #9465)
-
계정 관리와 관련된 다음 기능이 제거되었습니다:
-
사용자를 생성하기 위해
GRANT를 사용하는 기능입니다. 대신CREATE USER를 사용하십시오. 이 방식을 따르면GRANT명령문에 대해NO_AUTO_CREATE_USERSQL 모드가 중요하지 않게 되므로, 이 모드도 제거되었습니다. -
권한 할당 이외의 계정 속성을 수정하기 위해
GRANT를 사용하는 기능입니다. 여기에는 인증, SSL, 리소스 제한 속성이 포함됩니다. 대신 이러한 속성은 계정 생성 시CREATE USER로 설정하거나, 이후ALTER USER로 수정하십시오. -
CREATE USER및GRANT에 대한IDENTIFIED BY PASSWORD 'hash_string'문법입니다. 대신CREATE USER및ALTER USER에 대해IDENTIFIED WITH auth_plugin AS 'hash_string'을 사용하십시오. 여기서'hash_string'값은 지정된 플러그인과 호환되는 형식입니다.또한
IDENTIFIED BY PASSWORD문법이 제거되었으므로,log_builtin_as_identified_by_password시스템 변수는 불필요해졌으며 제거되었습니다. -
PASSWORD()함수. 또한PASSWORD()가 제거됨에 따라SET PASSWORD... = PASSWORD('auth_string')문법은 더 이상 사용할 수 없습니다. -
old_passwords시스템 변수.
MySQL 8.0에서 제거된 기능을 사용하는 MySQL 5.7 애플리케이션의 경우, 명령문이 MySQL 5.7 마스터에서 MySQL 8.0 슬레이브로 복제될 때 실패할 수 있거나, 마스터와 슬레이브에서 서로 다른 영향을 줄 수 있습니다. 이러한 문제를 방지하려면 MySQL 8.0에서 제거된 기능을 사용하는 애플리케이션을 수정하여 해당 기능을 피하고, 가능한 경우 대안을 사용해야 합니다. (Bug #27455708, WL #10774)
-
오류 처리
- perror는 인수를 이해하는 데 더 유연해졌습니다. 예를 들어
ER_WRONG_VALUE_FOR_VAR오류의 경우, perror는 다음 인수 중 어느 것이든 이해합니다:1231,001231,MY-1231, 또는MY-001231, 또는ER_WRONG_VALUE_FOR_VAR. 오류 번호가 MySQL 오류와 운영 체제 오류가 겹치는 범위에 있으면, perror는 두 오류 메시지를 모두 표시합니다. (Bug #27462408)
INFORMATION_SCHEMA 관련 사항
-
새로운
INFORMATION_SCHEMA.KEYWORDS테이블은 MySQL에서 키워드로 간주되는 단어를 나열하고, 각 단어에 대해 예약어인지 여부를 나타냅니다. 이 테이블은 애플리케이션에 MySQL 키워드 정보의 런타임 소스를 제공합니다. The INFORMATION_SCHEMA KEYWORDS Table을 참조하십시오.또한 소스에서 MySQL을 빌드하는 경우, 빌드 프로세스는 키워드 배열과 해당 예약어 상태를 포함하는
keyword_list.h헤더 파일을 생성합니다. 이 파일은 빌드 디렉터리 아래의sql디렉터리에서 찾을 수 있습니다. 이 파일은 키워드 목록의 정적 소스가 필요한 애플리케이션에 유용할 수 있습니다. (WL #8989)
설치 관련 사항
- RPM 및 Debian 패키지는 이제
share디렉터리 이름에 현재 MySQL 시리즈를 추가합니다(예:share/mysql-8.0). (Bug #27638192, Bug #26990531)
로깅 관련 사항
- 오류 로그에 기록되는 메시지는 이제 이벤트가 발생한 서브시스템을 나타냅니다. 가능한 서브시스템 값은
InnoDB(InnoDB스토리지 엔진),Repl(복제 서브시스템),Server(그 외의 경우)입니다. (WL #11150)
패키징 관련 사항
- Debian 패키지를 사용하여 설치하거나 업그레이드할 때 이제 기본 인증 플러그인을
mysql_native_password로 설정하는 옵션이 있는 대화 상자가 표시됩니다. 이는 일부 설치 사이트에서 하위 호환성을 위해 유용할 수 있습니다. (Bug #27454287, Bug #27667294) - compile_innodb 스크립트는 더 이상 사용되지 않으며 MySQL 배포판에서 제거되었습니다. 제안해 주신 Alexey Kopytov에게 감사드립니다. (Bug #27448099, Bug #89437)
Performance Schema 관련 사항
-
새로운 Performance Schema 테이블
log_status는 온라인 백업 도구가 복사 프로세스가 진행되는 동안 해당 리소스를 잠그지 않고 필요한 로그 파일을 복사할 수 있게 하는 정보를 제공합니다.log_status테이블이 쿼리되면, 서버는 테이블을 채우는 데 필요한 짧은 시간 동안만 로깅 및 관련 관리 변경을 차단한 다음 리소스를 해제합니다.log_status테이블은 온라인 백업에 마스터의 바이너리 로그와gtid_executed레코드, 그리고 각 복제 채널의 릴레이 로그에서 어느 지점까지 복사해야 하는지 알려 줍니다. 또한 InnoDB 스토리지 엔진의 마지막 로그 시퀀스 번호(LSN) 및 마지막으로 수행된 체크포인트의 LSN과 같이 개별 스토리지 엔진에 대한 관련 정보도 제공합니다.log_status테이블에 액세스하려면BACKUP_ADMIN권한이 필요합니다. (Bug #27599831, WL #9452) -
Performance Schema 객체는 이제 기본 캐릭터셋으로
utf8mb4를 사용합니다. (Bug #27407745)
보안 관련 사항
-
MySQL 8.0 빌드는 이제 기본 SSL 라이브러리로 yaSSL이 아니라 OpenSSL을 사용합니다. MySQL은 더 이상 yaSSL을 사용한 빌드를 지원하지 않으며, 소스 배포판에는 더 이상 yaSSL이 포함되지 않습니다.
WITH_SSLCMake 옵션은 더 이상bundled(yaSSL 사용)를 유효한 값으로 허용하지 않으며, 기본 옵션 값은bundled에서system(호스트 시스템에 설치된 OpenSSL 버전 사용)으로 변경되었습니다.yaSSL 대신, GPLv2 호환 라이선스를 가진 기능적으로 동등한 대안으로 wolfSSL을 사용할 수 있습니다. 또한 wolfSSL은 OpenSSL과 마찬가지로 TLSv1.2 프로토콜을 지원하며, yaSSL은 이를 지원하지 않습니다.
wolfSSL을 사용하여 소스에서 MySQL을 빌드하는 방법에 대한 지침은 MySQL 소스 배포판의
extra/README-wolfssl.txt파일을 참조하십시오.WITH_SSLCMake 옵션은 이제wolfssl을 유효한 값으로 허용합니다.-DWITH_SSL=wolfssl을 사용하려면README-wolfssl.txt의 지침을 따라야 합니다. (Bug #26671671, WL #8998) -
MySQL은 이제 OpenSSL 1.0.2를 사용하여 컴파일되었고 런타임에 OpenSSL 라이브러리와 FIPS Object Module을 사용할 수 있는 경우 FIPS 모드를 지원합니다. FIPS 모드는 허용 가능한 암호화 알고리즘에 대한 제한 또는 더 긴 키 길이에 대한 요구 사항과 같은 조건을 암호화 작업에 부과합니다.
ssl_fips_mode시스템 변수는 서버 측에서 FIPS 모드 제어를 활성화합니다.--ssl-fips-mode클라이언트 옵션은 다음 프로그램에 대해 클라이언트 측에서 FIPS 모드 제어를 활성화합니다: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlshow, mysqlslap, mysqltest, mysqlxtest, mysql_secure_installation, 및 mysql_upgrade. FIPS Support를 참조하십시오. (WL #8102)
공간 데이터 지원
-
호환되지 않는 변경: 다음 geometry collection 변경 사항이 구현되었습니다:
- geometry collection 데이터 타입에 대한 표준
GeomCollection이름이GeometryCollection데이터 타입 이름의 동의어로 지원됩니다. GeomCollection()함수가GeometryCollection()함수의 동의어로 지원됩니다.GeomCollection및GeomCollection()은 선호되는 데이터 타입 및 함수 이름입니다.
비호환성: 선호되는 데이터 타입 이름 변경의 결과로, 데이터 타입 정보를 표시하는 일부
INFORMATION_SCHEMA테이블,SHOW CREATE TABLE과 같은 문, 그리고ST_GeometryType()함수는 이제GEOMETRYCOLLECTION이 아니라GEOMCOLLECTION을 표시합니다.GEOMETRYCOLLECTION을 찾는 애플리케이션은 이 변경 사항을 고려하도록 조정해야 합니다.자세한 내용은 GeometryCollection Class 및 MySQL-Specific Functions That Create Geometry Values를 참조하십시오. (WL #2388)
- geometry collection 데이터 타입에 대한 표준
sys 스키마 관련 사항
sysSchema 객체는 이제 기본 캐릭터셋으로utf8mb4를 사용합니다. (Bug #27675959)
테스트 스위트 관련 사항
- 부동 소수점 결과의 GIS 처리에서 컴파일러 및 플랫폼 차이를 줄임으로써, 더 이상 허위 테스트 실패를 피하기 위한 반올림이 필요하지 않은 관련 테스트 케이스를 단순화할 수 있습니다. 패치를 제공한 Daniel Black에게 감사드립니다. (Bug #26540102, Bug #87223, Bug #27462294)
X 플러그인 관련 사항
- MySQL을 문서 저장소로 사용할 때, X DevAPI를 사용하는 geometry 값 컬럼에 대한
SPATIAL인덱스 사용이 이제 완전히 지원됩니다. 이전에는 공간 인덱스를 생성할 수 있었지만, 공간 참조 시스템 식별자(SRID)가 인덱싱된 컬럼에 포함되지 않았으므로 인덱스가 Optimizer에서 사용되지 않았습니다. 이제SRID속성이 인덱싱된 컬럼에 추가됩니다. (Bug #27568243) - X Plugin 테스트에 사용되는 소켓 파일은 이제 22자 파일 이름으로 제한됩니다. (Bug #27460677, Bug #89464)
- Bug #26328274에 대한 수정으로 인해 X Plugin 연결에 빈 호스트 이름이 사용될 때 디버그 빌드에서 어설션이 발생했습니다. 이제 이 문제가 수정되었습니다. (Bug #27266584, Bug #88925)
- X Plugin은 암호가 설정되지 않은 사용자 계정이
PLAIN인증 메서드와 함께 사용될 때 암호 캐시를 채우지 않았습니다. 이로 인해 이후 인증 시도가 실패했습니다. 이제 사용자 계정의 암호가 비어 있으면 암호 캐시가 항목으로 올바르게 채워집니다. (Bug #27257722) - X Plugin은 이제 MySQL 서버 인스턴스를 클라이언트 세션 내에서 재시작할 수 있도록 MySQL 8.0.4에 추가된
RESTARTSQL 문을 지원합니다. (Bug #27245319) - X Protocol을 사용하는 MySQL Shell 연결은 버전 8.0.4부터 TCP 또는 Unix 소켓을 사용할 수 있습니다. 이 수정으로 UNIX 소켓 연결에서 암호화 프로토콜을 사용할 수 있으므로, 암호화된 연결이 필요한 사용자 계정이 연결할 수 있습니다. (Bug #27192091)
DATETIME데이터 타입 처리를 수정한 Bug #26647488에 대한 수정은 이제 데이터 타입을 식별하는 데 사용할 수 있는 새 필드가 없는 이전 버전의 플러그인에서 수신한 메시지도 올바르게 디코딩합니다. (Bug #27169735)- X Protocol을 사용하는 X Plugin 연결 시도는 연결 옵션에 지정된 기본 데이터베이스가 유효하지 않을 때 오류를 반환하지 않았으며, null 기본 데이터베이스로 연결이 허용되었습니다. 클래식 MySQL 프로토콜을 사용하는 연결 시도는 오류를 반환하고 연결을 허용하지 않았습니다. 이제 X Protocol 연결 시도도 유효하지 않은 스키마가 지정된 경우 연결을 허용하지 않습니다. (Bug #26965020)
- 이제 X Plugin은 기본적으로 로드되며, 이는 더 이상 플러그인을 설치할 필요가 없음을 의미합니다. (WL #11040)
추가되거나 변경된 기능
-
InnoDB:
InnoDB테이블스페이스용 ibd2sdi 직렬화된 딕셔너리 정보(SDI) 추출 유틸리티가 이제 SDI 데이터의 JSON pretty print 형식을 제어하는--pretty옵션을 지원합니다. Pretty print 형식은 기본적으로 활성화됩니다.--skip-pretty를 사용하여 pretty print 형식을 비활성화하면 추출된 SDI 데이터의 크기가 줄어듭니다. (Bug #27546514) -
InnoDB: 대형 버퍼 풀을 사용하는 시스템에서 시작 성능을 개선하기 위해, 버퍼 풀 초기화가 이제 멀티스레드로 수행됩니다. (Bug #22963374, Bug #80784)
-
InnoDB: 다음 redo 로깅 최적화가 구현되었습니다:
-
사용자 스레드는 이제 쓰기를 동기화하지 않고 로그 버퍼에 동시에 쓸 수 있으며, 완화된 순서로 더티 페이지를 flush 목록에 추가할 수 있습니다.
-
전용 로그 writer 스레드가 이제 로그 버퍼의 redo 로그 레코드를 시스템 버퍼에 쓰고 시스템 버퍼를 redo 로그 파일로 flush하는 작업을 담당합니다.
-
flush된 redo를 기다리는 사용자 스레드의 spin delay 사용을 설정하기 위한 시스템 변수가 추가되었습니다:
innodb_log_wait_for_flush_spin_hwm: flush된 redo를 기다리는 동안 사용자 스레드가 더 이상 spin하지 않는 최대 평균 로그 flush 시간을 정의합니다.innodb_log_spin_cpu_abs_lwm: flush된 redo를 기다리는 동안 사용자 스레드가 더 이상 spin하지 않는 최소 CPU 사용량을 정의합니다.innodb_log_spin_cpu_pct_hwm: flush된 redo를 기다리는 동안 사용자 스레드가 더 이상 spin하지 않는 최대 CPU 사용량을 정의합니다.
-
innodb_log_buffer_size설정 옵션은 이제 동적이며, 이를 통해 서버가 실행 중인 동안 로그 버퍼 크기를 조정할 수 있습니다.
자세한 내용은 Optimizing InnoDB Redo Logging을 참조하십시오. (WL #10310)
-
-
macOS: macOS 설치 프로그램은 이제 임의의
root비밀번호를 생성하는 대신 사용할root비밀번호를 사용자에게 묻습니다. (Bug #22608157, Bug #80144) -
macOS: macOS 설치 프로그램에 포함된 MySQL preference pane에는 이제 launchd가 시작할 때 서버가 읽어야 하는
my.cnf파일을 지정하는 설정이 포함됩니다. (Bug #19775549, Bug #74214) -
Solaris: Solaris에서 이제 MySQL을 Developer Studio 12.6으로 빌드할 수 있습니다. (Bug #27055190, Bug #88316, Bug #28165246, Bug #91214)
-
데이터 디렉터리 초기화 중 로깅(예: mysqld --initialize 사용)이 변경되었습니다:
- 시작 메시지는 서버가 초기화 모드로 실행 중임을 나타냅니다.
- 초기화가 완료된 시점을 나타내는 메시지가 기록됩니다.
- CA 인증서가 자체 서명되었다는 메시지는 표시되지 않습니다.
(Bug #27557952, Bug #89693)
-
로깅이 활성화된 경우에도
-log접미사가 더 이상 서버 버전 문자열에 추가되지 않습니다. 이는 예를 들어version시스템 변수의 값에 영향을 줍니다. (Bug #27532097, Bug #89626) -
에러 로그에 기록되는 서버 종료 라인에는 이제 서버 버전이 포함됩니다. (Bug #27522788, Bug #87910)
-
SHOW CREATE TABLE은 일반적으로 로우 형식이 기본 형식인 경우ROW_FORMAT테이블 옵션을 표시하지 않습니다. 이는 이동 가능한 테이블스페이스에 대한 테이블 임포트 및 익스포트 작업 중 문제를 일으킬 수 있습니다. MySQL은 이제show_create_table_verbosity시스템 변수를 지원하며, 이 변수가 활성화되면SHOW CREATE TABLE이 기본 형식인지 여부와 관계없이ROW_FORMAT을 표시합니다. (Bug #27516741) -
Performance Schema 메모리 계측 오버헤드가 줄었습니다. (Bug #27500610)
-
데이터 디렉터리 초기화 중에 서버는
sql_mode=''를 사용하여 객체를 생성했습니다. 이제 서버는 기본sql_mode값(다른 설정 중에서도 strict mode를 포함합니다)을 사용합니다. (Bug #27476029, Bug #89495) -
mysql-test/std_data/Index.xml에 정의된 콜레이션은 테스트 목적으로만 사용되며, 그 외에는 사용해서는 안 됩니다. 일부 사용자가 이를 테스트가 아닌 환경에서 사용하고 있었기 때문에, 이를 명확히 하기 위해 해당 파일에 주석이 추가되었습니다. (Bug #27421838) -
RESET PERSIST는 더 이상 암시적 커밋을 수행하지 않습니다. (Bug #27374791) -
persisted 변수의 경우, 이제 Performance Schema
variables_info테이블의SET_TIME컬럼은 서버 시작 시간이 아니라 변수가 persisted된 시간을 반영합니다. (Bug #25677422) -
이전에는
SHOW CREATE TABLE이 컬럼의 콜레이션이 테이블 기본값과 동일한 경우, 테이블 생성 시점에 해당 콜레이션이 명시적으로 지정되었더라도 컬럼의 콜레이션을 표시하지 않았습니다. 이제SHOW CREATE TABLE은 콜레이션이 테이블 기본값과 동일하더라도, 콜레이션이 명시적으로 지정된 경우 항상 컬럼 콜레이션을 표시합니다. (Bug #11754608, Bug #46239)
수정된 버그
-
중요한 변경 사항:
NO_ZERO_DATESQL 모드가 활성화된 경우,ALTER TABLE은 해당 컬럼에DEFAULT가 지정되지 않았으면NOT NULL로 선언된DATE또는DATETIME컬럼을 비어 있지 않은 테이블에 추가하려는 시도를 거부합니다. 생성 컬럼에는 기본값이 없으므로, 이 제한은 생성된DATE NOT NULL또는DATETIME NOT NULL컬럼을 비어 있지 않은 테이블에 추가하는 것도 방지했습니다. 컬럼 값을 결정할 때 컬럼을 생성하는 데 사용되는 표현식을 누락된 기본값 대신 사용할 수 있으므로, 이제 이 제한은 생성 컬럼에 대해 해제됩니다. (Bug #27252354) -
중요한 변경 사항:
ANALYZE TABLE... UPDATE HISTOGRAM문에서WITH N BUCKETS절은 이제 선택 사항입니다. 지정하지 않으면BUCKETS의 기본값은 100입니다. (Bug #89909, Bug #27637968) -
InnoDB: 치명적 오류 메시지가 오류 로그에 기록되기 전에 서버가 중지되었습니다. (Bug #27626478)
-
InnoDB: 대기 잠금을 부여할 수 있는지 결정할 때, 롤백 중인 희생 트랜잭션이 보유한 잠금이 무시되었습니다. (Bug #27607235)
-
InnoDB: GCC 7.2.0을 사용하여 debug build를 컴파일할 때
Sdi_Decompressor::decompress()에서 오류가 발생했습니다. (Bug #27565889) -
InnoDB: 여러 buffer pool을 병렬로 생성하는 동안 buffer pool chunk를 등록할 때 assertion이 발생했습니다. 이제 buffer pool chunk map에서 buffer pool chunk 등록을 보호하기 위해 mutex가 사용됩니다. (Bug #27565865)
-
InnoDB: standard monitor를 활성화하면 오류가 발생했습니다. (Bug #27534041)
-
InnoDB: 컬럼을 hidden으로 표시하는 데 사용되는 내부 필드가 추가적인 컬럼 visibility 수준을 지원하기 위해 boolean 필드에서 enum 필드로 변경되었습니다. (Bug #27499518, Bug #89553)
-
InnoDB: 조건부 jump 또는 move가 초기화되지 않은 값에 의존한다고 보고한, zlib 관련 잘못된 Valgrind 실패가 발생했습니다. (Bug #27482740, Bug #89509)
-
InnoDB:
TempTable스토리지 엔진과NO PAD콜레이션을 사용할 때 잘못된GROUP BY결과가 반환되었습니다. (Bug #27454796) -
InnoDB: 페이지 압축 함수의 잘못된 compression length 값으로 인해 페이지가 처음 압축될 때 hole punching이 건너뛰어졌습니다. (Bug #27399897)
-
InnoDB: 잘못된
--log-bin옵션 값으로 서버를 시작하면 어설션이 발생했으며, 이후 올바른--log-bin값으로 또는--log-bin옵션 없이 서버를 시작하려는 시도에서도 어설션 실패가 계속 발생했습니다. (Bug #27393317) -
InnoDB:
UPDATE작업 중 LOB가 삽입될 때 large object (LOB) 참조가 업데이트되지 않았습니다. (Bug #27368662) -
InnoDB: 서버를 재시작한 후,
TRUNCATE TABLE작업이 메모리에 저장된 원격 데이터 디렉터리 정보와 일치하지 않는 테이블 플래그 때문에 어설션을 발생시켰습니다. (Bug #27367639) -
InnoDB:
CREATE TEMPORARY TABLE... TABLESPACE문법을 사용하여 file-per-table 테이블스페이스에 임시 테이블을 생성하려고 할 때 오류가 보고되지 않았습니다. 임시 테이블스페이스는 임시 테이블스페이스에서만 허용됩니다. (Bug #27361662) -
InnoDB: 대형 객체(LOB)의 첫 번째 페이지에 설정된 래치가 다른 스레드가 해당 페이지 할당을 시도하기 전에 해제되지 않아 교착 상태가 발생했습니다. (Bug #27360492)
-
InnoDB: 가장 작은 활성 트랜잭션 ID를 추적하는 멤버 변수를 도입하여 암시적 잠금을 명시적 잠금으로 변환하는 작업이 최적화되었습니다.
패치를 제공해 주신 Zhai Weixiang님께 감사드립니다. (Bug #27353468, Bug #89127)
-
InnoDB:
InnoDB스토리지 엔진에서 내부적으로 사용하는mysql.innodb_ddl_log및mysql.innodb_dynamic_metadata테이블이 이제 보호됩니다. 이러한 테이블에 대한 DDL 및 DML 작업은 더 이상 허용되지 않으며, 해당 테이블은 더 이상INFORMATION_SCHEMA쿼리 결과에 나타나지 않습니다. (Bug #27353455, Bug #89129) -
InnoDB:
innodb_page_size설정이 4K인 MySQL 5.7 인스턴스를 업그레이드할 때, 시스템 테이블을 생성하거나 수정하는 과정에서 mysql_upgrade가 “Specified key was too long; max key length is 768 bytes” 오류로 실패했습니다.innodb_page_size설정이 4K인 인스턴스에서 mysql_upgrade 클라이언트를 실행할 수 있도록 해당 오류가 억제되었습니다. (Bug #27338431) -
InnoDB: 복구 프로세스가 space_id 값을 올바르게 확인할 수 없어 서버가 종료되었습니다. (Bug #27331936)
-
InnoDB: 인덱싱된 컬럼의 NULL 허용 여부를 수정하는
ALTER TABLE작업에서 어설션이 발생했습니다.InnoDB는 기존 유니크 키에서 생성하는 대신 새 프라이머리 키를 추가해야 한다고 잘못 가정했습니다. (Bug #27330454, Bug #89087)참조: 이 문제는 다음의 회귀입니다: Bug #24397406.
-
InnoDB:
ALTER TABLE... IMPORT TABLESPACE작업 후INFORMATION_SCHEMA.INNODB_COLUMNS테이블에서 메타데이터를 올바르게 가져올 수 없었습니다. (Bug #27322099) -
InnoDB: 큰 객체(LOB) 값을 포함하는
INSERT작업에서 어설션이 발생했습니다. LOB 프래그먼트를 분할한 후 디렉터리 엔트리를 위한 공간이 부족했습니다. (Bug #27320977) -
InnoDB: utf8mb4 캐릭터셋을 사용하는 서버에서 가상 컬럼을 포함하는 테이블의 로우 형식을 변경하는
ALTER TABLE작업 중INSERT또는UPDATE를 실행하면 인덱스 손상이 발생했습니다. (Bug #27319084) -
InnoDB: 가상 컬럼을 포함하는 테이블에 대해
INFORMATION_SCHEMA.INNODB_COLUMNS에서 검색된 데이터가 올바르지 않았습니다. (Bug #27316037) -
InnoDB: 유효하지 않은 keyring 파일로 인해 복구 후 서버가 시작되지 않았습니다. 백업에서 생성된 keyring 파일이 비어 있었습니다. (Bug #27307740)
-
InnoDB: 전체 텍스트 검색 테이블을 캐시에서 제거하려는 백그라운드 스레드와 테이블을 동기화하려는 다른 백그라운드 스레드 사이의 데드락으로 인해 InnoDB Cluster 노드가 실패했습니다. (Bug #27304661)
-
InnoDB:
InnoDB복구 메시지의 오타가 수정되었습니다. 패치를 제공해 주신 Daniël van Eeden에게 감사드립니다. (Bug #27287979, Bug #27010613, Bug #88185) -
InnoDB: 암호화 알고리즘 지원이 누락되었다는 메시지가
InnoDB복구 중 보고되었습니다. (Bug #27286020) -
InnoDB: 누락되었거나 일치하지 않는 keyring 파일로 인해 시작 시 어설션 실패가 발생했습니다. (Bug #27278324)
-
InnoDB: 암호화된 테이블스페이스 파일의 space ID를 확인할 때 암호화 지원이 누락되었음을 나타내는 오류가 반환되었습니다. (Bug #27278100)
-
InnoDB: “too many open files” 경고를 출력하는 디버그 메시지는 이제 열린 파일 수가 300의 제한에 도달하는 경우에만 출력됩니다. (Bug #27277844)
-
InnoDB: gaps locks를 해제할 때 predicate locks를 건너뛰지 못하면 디버그 어설션이 발생했으며, supremum에서 gaps locks를 해제하기 전에 supremum 레코드 비트를 제거하지 못하는 경우에도 디버그 어설션이 발생했습니다. (Bug #27272806, Bug #27294066)
-
InnoDB: 복제된 데이터 디렉터리에서 서버를 시작할 때 테이블스페이스 ID 발견 실패가 발생했습니다. (Bug #27265874)
-
InnoDB: 보호되지 않은 전역 변수(
fil_n_file_opened)로 인해 서버 종료 시 어설션이 발생했습니다. (Bug #27265473) -
InnoDB: 사용 중인 파일에서 대기 중인 I/O를 확인할 때 더 이상 유효하지 않은 어설션이 발생했습니다. (Bug #27263206)
-
InnoDB: 빈 general tablespace로 인해 MySQL 8.0으로 업그레이드할 때 실패가 발생했습니다. 빈 데이터 파일은 특정 페이지 수를 가져야 하는 것으로 예상되었습니다. (Bug #27261822)
-
InnoDB:
--innodb-directories옵션으로 지정된 디렉터리에 keyring 데이터 파일이 포함되어 있어 시작 실패가 발생했습니다.--innodb-directories옵션은InnoDB테이블스페이스 파일만 인식해야 합니다. (Bug #27253116) -
InnoDB: minimum bounding rectangle (MBR) 크기의 증가량을 계산하는 함수가 잘못 0을 반환하여 R-tree 손상이 발생했습니다. (Bug #27237472)
-
InnoDB: 임시 테이블에 대한
REPLACE작업에서 assertion이 발생했습니다. (Bug #27225649, Bug #27229072) -
InnoDB: 동일한 테이블에 대한 동시 DML과 함께 수행된 테이블의 온라인
ALTER TABLE작업에서 assertion이 발생했습니다. 가상 컬럼의 길이를 확인하기 위해 DML 로그에 접근하기 전에 end-of-log 검사가 수행되지 않았습니다. (Bug #27158030) -
InnoDB: 가상 인덱스 추가가 실패했을 때, 해제된 가상 인덱스가 가상 컬럼 인덱스 목록에서 제거되지 않았습니다. (Bug #27141613)
-
InnoDB: 동일한 문에서 가상 컬럼과 인덱스를 추가하면 오류가 발생했습니다. (Bug #27122803)
-
InnoDB: undo 테이블스페이스 truncate 작업에서 assertion이 발생했습니다. undo 테이블스페이스 세그먼트가 비활성 상태인지 확인하는 검사가 유효하지 않았습니다. (Bug #27114068)
-
InnoDB: TempTable 스토리지 엔진이 임시 파일 및 mmap을 사용하여 메모리를 할당할 수 없을 때, 정의된 디스크 기반 스토리지 엔진이 대신 사용될 것임을 나타내는 유효하지 않은 오류가 보고되었습니다. (Bug #26990375)
-
InnoDB: 디버그 계측에서 latch 순서가 잘못 정의되어
INSERT작업 중 latch 순서 위반이 발생했습니다. (Bug #26983412) -
InnoDB: 기본 로우 형식이
REDUNDANT인 서버에서 테이블스페이스 import 작업을 수행하면 assertion failure가 발생했습니다. (Bug #26960215) -
InnoDB: 생성 컬럼을 기반으로 하는 저장 필드가 베이스 컬럼에 NULL 값을 허용했습니다. (Bug #26958695)
-
InnoDB: resolving 함수에서 서브쿼리를 평가할 때 assertion이 발생했습니다. (Bug #26909960)
-
InnoDB: 데이터 딕셔너리 작업과 관련된 잠금으로 인해
CREATE TABLE성능이 저하되었습니다. (Bug #26848711, Bug #87827) -
InnoDB:
LOCK INSTANCE FOR BACKUP작업이 동시에 실행 중인 DDL 작업이 완료될 때까지 기다리지 않고 백업 잠금을 획득할 수 있었습니다. (Bug #26831155, Bug #87812) -
InnoDB: 잘못 지정된
innodb_data_file_path또는innodb_temp_data_file_path값이 초기화 실패를 발생시킨 시스템 변수의 이름을 지정하지 않는 문법 오류를 반환했습니다. (Bug #26805833) -
InnoDB:
TRUNCATE TABLE작업을 위해 열린 핸들러가 해당 작업에서 어설션을 발생시켰습니다. 이제 서버는 테이블을 삭제하기 전에 열린 핸들러를 닫습니다.이 버그에 대한 패치는 외래 키 제약 조건과 관련된
TRUNCATE TABLE오류 메시지도 개선하며, 손상된 테이블을 truncate할 수 있도록 합니다. (Bug #26710839) -
InnoDB: 테이블을 재빌드하는 온라인 DDL 작업에서 적용할 마지막 insert 로그 레코드가 두 페이지에 걸쳐 분할된 경우 어설션이 발생했습니다. (Bug #26696448, Bug #87532)
-
InnoDB: 아직 저장되지 않은 오프 페이지 대형 객체 값에 의존하는 가상 컬럼 값을 생성하려고 할 때 assertion이 발생했습니다. (Bug #26625652)
-
InnoDB: R-tree 검색이 삭제 표시된 레코드를 집계하여, 클러스터형 인덱스에 있는 것보다 더 많은 레코드를 찾게 되었습니다. 그 결과, 유효한 R-tree 인덱스가 손상된 것으로 표시되었습니다. (Bug #26381207)
-
InnoDB: 스키마 이름을 변경한
RENAME TABLE작업이, 전체 텍스트 검색 인덱스가 이전에 제거될 때 남겨진 전체 텍스트 검색 공통 보조 테이블의 이름을 변경하지 못했으며, 이로 인해 이전 스키마를 삭제하려고 할 때 assertion 실패가 발생했습니다. (Bug #26334149) -
InnoDB: 한 스레드가 BLOB 데이터를 포함하는 레코드를 읽으려고 하는 동안 다른 스레드가 동일한 데이터를 외부 페이지에 쓰고 있을 때 assertion이 발생했습니다. (Bug #26300119)
References: 이 문제는 다음의 회귀입니다: Bug #23481444.
-
InnoDB: 외부에 저장된 컬럼의 컬럼 접두사가 온라인 로그에서 사용 가능한 메모리 양을 초과했습니다. (Bug #25928471)
-
InnoDB: 체크포인트 중 동적 메타데이터 변경 사항을 redo 로그에 쓰는 작업을 보호하기 위해 도입되었던 문제가 있는 잠금이 제거되었습니다. 이제 대신 mutex가 사용됩니다. 동적 메타데이터 변경 사항을 보호하기 위해 체크포인트 LSN도 조정되었습니다. (Bug #25834374)
-
InnoDB:
InnoDB는 자동 증가 컬럼에 대한 인덱스를 검색하기 위해 컬럼 오프셋을 사용할 때 가상 컬럼을 고려하지 못했습니다. (Bug #25076416) -
InnoDB: 잘못된 디버그 조건으로 인해 버퍼 풀 청크 할당 실패가 발생했으며, 이로 인해 purge 스레드가 할당되지 않은 청크에 액세스하려고 시도할 때 assertion failure가 발생했습니다. (Bug #23593654)
참조: 이 문제는 다음의 회귀입니다: Bug #21348684.
-
InnoDB: 티켓 획득 데드락으로 인해 스레드가
InnoDB스토리지 엔진에 진입하지 못했습니다. (Bug #23476050) -
Partitioning:
ALTER TABLE EXCHANGE PARTITION을 실행하는 동안 스토리지 엔진이 반환한 오류가 서버에서 올바르게 처리되지 않았습니다. (Bug #27320682) -
Replication: 롤백된 빈 XA 트랜잭션은 바이너리 로그에 기록되거나
gtid_executed시스템 변수의 트랜잭션 집합에 추가되어서는 안 됩니다. 그러나XA COMMIT... ONE PHASE문으로 끝나는 빈 XA 트랜잭션 이후에 롤백된 빈 XA 트랜잭션이 실행된 경우, 해당 트랜잭션이XA ROLLBACK문으로 바이너리 로그에 잘못 추가되었으며, gtid_executed 시스템 변수에도 잘못 추가되었습니다. 이 문제는 이제 수정되었습니다. (Bug #27435974) -
Replication: 시스템 변수
gtid_next가 AUTOMATIC으로 설정되었을 때, 롤백되어 바이너리 로그에 기록되지 않은 빈 XA 트랜잭션이gtid_executed시스템 변수의 트랜잭션 집합에 잘못 추가되어 불일치가 발생했습니다. 롤백된 빈 XA 트랜잭션은 더 이상gtid_executed에 기록되지 않습니다. (Bug #27407670) -
Replication:
replication_group_member_statsPerformance Schema 테이블의LAST_CONFLICT_FREE_TRANSACTION값이 그룹 멤버 간에 올바르게 동기화되지 않았습니다. (Bug #27317431) -
Replication: 멤버가 그룹에 조인하는 중에는 조인 요청이 거부될 가능성이 있습니다. 이 거부로 인해 재시도가 발생한 경우, 예를 들어 접촉 중인 시드 멤버가 그룹에 없었기 때문인 경우, 재시도 주기가 무한히 계속될 가능성이 있었습니다. (Bug #27294009)
-
Replication: 기본 바이너리 로그 만료 기간인 30일이 이제 더 이상 사용되지 않는
expire_logs_days시스템 변수가 아니라,binlog_expire_logs_seconds시스템 변수의 기본값으로 설정됩니다. 이제binlog_expire_logs_seconds는 기본값 2592000(302460*60초)을 사용하며,expire_logs_days는 이제 기본값 0을 사용합니다.MySQL 8.0.3 및 8.0.4에서는
binlog_expire_logs_seconds와expire_logs_days의 효과가 누적되었습니다. MySQL 8.0.11부터는 더 이상 그렇지 않으며, 새로운 동작은 다음과 같습니다: -
두 변수 모두에 대해 0이 아닌 값을 지정하면
binlog_expire_logs_seconds의 값만 바이너리 로그 만료 기간을 결정하는 데 사용되며,expire_logs_days의 값은 무시됩니다.- 한 변수에 대해서만 0이 아닌 값을 지정하면 해당 값이 바이너리 로그 만료 기간을 결정하는 데 사용되며, 다른 변수의 기본값은 적용되지 않습니다.
- 두 변수 중 어느 것에도 값을 지정하지 않으면
binlog_expire_logs_seconds의 기본값인 30일이 바이너리 로그 만료 기간으로 사용됩니다.
다른 변수가 이미 설정되어 있을 때 변수 중 하나를 동적으로 설정하려고 시도하면 오류 메시지가 발생하며, 시작 시 두 변수 모두에 대해 0이 아닌 값을 지정하면 경고 메시지가 발생합니다.
expire_logs_days에 값을 설정하는 경우에도 사용 중단 경고가 발생합니다.바이너리 로그의 자동 제거를 비활성화하려면
binlog_expire_logs_seconds에 대해 명시적으로 0 값을 지정하고,expire_logs_days에 대해서는 값을 지정하지 마십시오. 이전 릴리스와의 호환성을 위해,expire_logs_days에 대해 명시적으로 0 값을 지정하고binlog_expire_logs_seconds에 대해서는 값을 지정하지 않은 경우에도 자동 제거가 비활성화됩니다. 이 경우binlog_expire_logs_seconds의 기본값은 적용되지 않습니다. 자동 제거를 비활성화하기 위해 더 이상 두 변수를 모두 0으로 설정할 필요가 없습니다. (Bug #27252658) -
Replication: DDL 문
CREATE DATABASE,ALTER DATABASE, 및DROP DATABASE는 더 이상 멀티스레드 슬레이브에서 다른 문과 병렬로 실행될 수 없습니다. 이러한 문은 스키마에 대한 배타적 메타데이터 락을 필요로 하므로, 복제 슬레이브에서slave_preserve_commit_order=1이 설정된 경우 데드락이 발생할 이론적 가능성이 있습니다. (Bug #27165446) -
Replication: 바이너리 로깅이 비활성화된 복제 슬레이브에서 빈 DDL 문(예를 들어 복제 필터로 인한 경우)이 assertion을 발생시켰습니다. 바이너리 로깅이 활성화된 경우에는
BEGIN및COMMIT문이 바이너리 로그에 기록되어 트랜잭션을 생성하지만, 바이너리 로깅이 비활성화된 경우에는 이러한 문을 사용할 수 없어 assertion이 발생했습니다. 이제 MySQL Server는 DDL 트랜잭션이 비어 있고 시작된 것으로 표시되지 않은 상황을 확인하며, assertion을 발생시키지 않고 이를 처리합니다. (Bug #27164661) -
Replication: 바이너리 로그 파일과 릴레이 로그 파일에서 읽는 최소 데이터 양을 바이트 단위로 설정하기 위해 새로운 시스템 변수
rpl_read_size를 사용할 수 있습니다. 기본 읽기 크기는 8KB입니다. 이러한 파일에 대한 과도한 디스크 I/O 작업이 데이터베이스 성능을 저해하는 경우, 운영 체제에서 파일이 캐시되지 않는다면 읽기 크기를 늘리면 파일 읽기와 I/O 지연이 줄어들 수 있습니다.이 값 크기의 버퍼가 바이너리 로그 및 릴레이 로그 파일을 읽는 각 스레드에 할당되며, 여기에는 마스터의 덤프 스레드와 슬레이브의 코디네이터 스레드가 포함됩니다. 따라서 큰 값을 설정하면 서버의 메모리 소비에 영향을 줄 수 있습니다.
패치를 제공해 주신 Facebook 팀에 감사드립니다. (Bug #27147095)
-
Replication: GTID가 활성화된 서버에서 트랜잭션이 플러시되었지만 아직 커밋되지 않은 상태일 때
RESET MASTER를 사용하면, 서버 GTID가 잘못된 상태로 남았습니다. 이 시점에는 해당 트랜잭션의 GTID가 소유된 GTID 집합에는 추가되었지만, 실행된 GTID 집합에는 아직 추가되지 않았습니다. 커밋되지 않은 트랜잭션의 내용이RESET MASTER문에 의해 지워질 때 해당 GTID는 바이너리 로그에서 제거되었지만, 이미 소유된 상태였기 때문에 GTID를 재사용할 수 없어서 GTID 시퀀스에 간격이 생겼습니다.이 수정으로
RESET MASTER는 작업 중 커밋 단계에 있는 트랜잭션이 없도록 하고, 작업 중 새 트랜잭션이 커밋 단계로 들어가지 않도록 전역 읽기 잠금을 획득합니다. 진행 중인 커밋이 있으면,RESET MASTER는 해당 커밋이 완료될 때까지 대기합니다. 재설정이 완료되면 전역 읽기 잠금이 해제되고, 그 후 스토리지 엔진에는 재설정이 성공했음이 통지됩니다. 해당 스레드에 대해FLUSH TABLES WITH READ LOCK이 이미 실행된 경우,RESET MASTER는 잠금을 다시 시도하지 않습니다. (Bug #27041759) -
Replication:
SET @@SESSION.GTID_NEXT문을 사용하여 안전하지 않거나 비어 있는 XA 트랜잭션에 GTID를 설정하려는 시도가 올바르게 처리되지 않았습니다.gtid_mode가OFF또는OFF_PERMISSIVE로 설정되고enforce_gtid_consistency가OFF로 설정된 서버에서, 안전하지 않은 XA 트랜잭션(임시 테이블 생성 또는 삭제)에 GTID를 설정하면 서버의 GTID 위반 카운터에 불일치가 발생하고 어설션이 발생했습니다. 또한 테스트 결과, 비어 있는 XA 트랜잭션에 GTID를 설정하면 잘못된 이벤트 시퀀스가 바이너리 로그에 기록되는 것으로 나타났습니다. 이제 이 두 상황이 모두 올바르게 처리됩니다. (Bug #27041402, Bug #88272) -
Replication: 바이너리 로그를 순환하는 동안 서버가 중지될 때 발생한 오류 메시지가 문제의 올바른 원인을 명시하지 않았습니다. 서버 중지를 유발한 실제 오류를 메시지의 일부로 포함하도록 오류 메시지가 개선되었습니다. 마지막 바이너리 로그의 GTID 집합을
mysql.gtid_executed테이블에 저장하는 동안 메모리 부족 오류가 발생한 상황을 위해 새 오류ER_OOM_SAVE_GTIDS도 추가되었습니다. (Bug #27040070, Bug #88262) -
Replication: 쿼리에서 오류가 발생한 경우에도
CREATE USER IF EXISTS(또는IF NOT EXISTS) 및ALTER USER IF EXISTS(또는IF NOT EXISTS) 문이 바이너리 로그에 기록되었습니다. 이제 MySQL Server는 이러한 쿼리가 실패하게 하는 오류(예: 잘못된 플러그인이 지정된 경우)를 확인하며, 그러한 상황에서는 해당 문을 로그에 기록하지 않습니다. 이러한 문이 성공했지만 조건이 충족되지 않아 마스터에 영향을 미치지 않는 경우에는, 해당 조건이 복제 슬레이브에서 충족될 수 있으므로 문이 바이너리 로그에 기록됩니다(Bug #25813089, Bug #85733 참조). (Bug #26680035)References: 함께 참조: Bug #25813089, Bug #85733.
-
Replication: MySQL 8.0에서 atomic DDL 지원이 도입된 후, atomic DDL을 지원하는 복제 슬레이브는 atomic DDL을 지원하지 않는 이전 MySQL 버전의 복제 마스터와 달라질 수 있습니다. DDL 문을 부분적으로만 적용할 수 있는 경우, MySQL 8.0을 사용하는 슬레이브는 전체 DDL 문을 롤백하지만, 이전 버전을 사용하는 마스터는 DDL 문의 유효한 부분을 커밋할 수 있습니다. 이제 마스터와 슬레이브에서 atomic DDL 문에 대한 커밋이 실패하는 경우 오류 메시지가 로그에 기록되며, 계속 진행하기 전에 마스터와 슬레이브의 상태가 달라지지 않았는지 확인해야 합니다. (Bug #26133488)
-
Replication: 복제 마스터와 슬레이브에서 GTID가 활성화되어 있고, 슬레이브가
MASTER_AUTO_POSITION=1옵션이 설정된 상태로 마스터에 연결하는 경우, 마스터는 슬레이브가 아직 수신하지 않았거나, 커밋하지 않았거나, 또는 둘 다에 해당하는 모든 트랜잭션을 슬레이브에 보내야 합니다. 마스터가 보내야 하는 트랜잭션 중 일부가 이미 마스터의 바이너리 로그에서 제거된 경우, 마스터는 오류ER_MASTER_HAS_PURGED_REQUIRED_GTIDS(1789)를 슬레이브에 보내며, 복제는 시작되지 않습니다.오류
ER_MASTER_HAS_PURGED_REQUIRED_GTIDS에 제공되는 메시지가 이 상황에서 올바른 조치에 대한 조언을 제공하도록 변경되었습니다. 이 조치는 슬레이브가 누락된 트랜잭션을 다른 소스에서 복제하거나, 더 최근의 백업에서 생성된 새 슬레이브로 슬레이브를 교체하는 것입니다. 메시지는 향후 이 상황을 방지하기 위해 마스터의 바이너리 로그 만료 기간을 조정할 수 있다고 안내합니다. 또한 이제 마스터는 제거된 트랜잭션의 GTID를 식별하고 경고 메시지ER_FOUND_MISSING_GTIDS(11809)로 오류 로그에 제공합니다. 따라서 누락된 GTID를 수동으로 계산할 필요가 없습니다. (Bug #26004541, Bug #29769293) -
Replication: BLOB 데이터 타입을 포함하는 가상 생성 컬럼에 대한 업데이트의 경우, 일부 스토리지 엔진에서는 복제를 위해 이전 BLOB 값과 새 BLOB 값이 모두 필요합니다. 이 수정에서는 동일한 동작을 JSON 및 GEOMETRY 데이터 타입으로 확장합니다. 이 데이터 타입은 BLOB 데이터 타입을 기반으로 하므로 이전 값이 저장되지 않을 때 동일한 문제가 발생합니다. (Bug #25873029)
-
Replication: MySQL 8.0.0의 동작 변경으로 인해 생성 컬럼의 식별이 바이너리 로깅을 위한 write set 계산 전에서 후로 이동되었습니다. 이로 인해 NDB 클러스터 복제에서 문제가 발생했습니다. 해당 스토리지 엔진은 생성 컬럼이 불필요한 경우 로그 이벤트에서 이를 생략하며, 그 결과 복제 슬레이브의 applier 스레드가 해당 컬럼에
NULL값을 설정했기 때문입니다. 이제 생성 컬럼의 식별이 다시 write set 계산 전으로 이동되어 이 문제가 발생하지 않습니다. (Bug #25827408) -
Replication: 멀티스레드 복제 슬레이브(
slave_parallel_workers가 0보다 큼)에서 마스터에 대한 슬레이브의 지연이SHOW SLAVE STATUS의Seconds_Behind_Master필드로 보고되지 않았습니다. 이제 값이 올바르게 보고됩니다. 패치를 제공해 준 Robert Golebiowski에게 감사드립니다. (Bug #25407335, Bug #84415) -
Replication:
SET @@GLOBAL.GTID_PURGED문에서 GTID 집합과 함께 더하기 기호(+)를 사용하여 지정된 GTID 집합이gtid_executed와 교차하지 않음을 나타낼 수 있습니다. 더하기 기호는 의미가 없었던 함수GTID_SUBSET()및GTID_SUBTRACT()에 지정된 GTID 집합에도 허용되고 있었습니다. 더하기 기호는 더 이상 이러한 함수와 함께 지정할 수 없습니다. 또한SET @@GLOBAL.GTID_PURGED작업과 관련된 오류 메시지가 개선되었습니다. (Bug #24675979) -
Replication:
--read-from-remote-server및--hexdump옵션과 함께 호출될 때, mysqlbinlog는 autoincrement 값을 생성했거나, 사용자 정의 변수를 참조했거나,RAND()를 호출한 SQL 문 뒤에 오는 바이너리 로그 내용의 hex dump를 생성할 수 없었습니다. 이러한 이벤트의 이벤트 타입 뒤에는 정보용 로우 쿼리 로그 이벤트가 이어지며, mysqlbinlog는 이후 로우 쿼리 로그 이벤트가 수신될 때 출력하기 위해 원래 이벤트를 캐시합니다. 원래 이벤트를 포함하는 메모리에 대한 포인터가 이후 이벤트가 수신될 때 무효화되어, hex dump를 생성하기 위해 원래 데이터에 접근할 수 없었습니다. 이 문제는 이제 수정되었습니다. (Bug #24674276) -
Replication: 유효하지 않거나 손상된 바이너리 로그 항목 처리를 개선하기 위해 바이너리 로그 디코딩 절차에 여러 변경 사항이 적용되었습니다. (Bug #24365972)
-
Replication: XA 트랜잭션에 대한 바이너리 로깅 WL#6860이 도입된 후, 해당 기능이 있는 마스터에서 해당 기능이 없는 슬레이브로 복제하는 동안 슬레이브에
MASTER_AUTO_POSITION=1이 설정된 경우 디버그 빌드에서 assertion이 발생할 수 있었습니다. assertion이 제거되어, 이제 디버그 빌드는 비디버그 빌드와 동일한 동작을 가지며,MASTER_AUTO_POSITION=1이 설정되었는지 여부와 관계없이 지원되지 않는 이벤트 타입의 복제를 시도할 수 있습니다. (Bug #20677683) -
Replication:
group_replication_ip_whitelist를 사용할 때, 모든 멤버가 서로에 대한 내부 그룹 통신 연결을 설정할 수 없더라도 그룹이 동작하도록 설정할 수 있었으며, 그 결과 일관되지 않은 동작이 발생했습니다. 이제 들어오는 연결은 IP가 화이트리스트에 있거나 IP가 XCom 설정의 현재 멤버에 속하는 경우 허용됩니다. 이를 통해 멤버가 그룹 통신에 필요한 내부 네트워크를 항상 생성할 수 있습니다. (Bug #87834, Bug #26846549, Bug #27406775) -
Group Replication: MySQL이
--plugin-load='group_replication.so'와 함께 시작되었지만 Group Replication이 시작되지 않은 경우, 비동기 슬레이브 채널을 시작하면 서버가 응답하지 않게 되었습니다. (Bug #27584141) -
Group Replication: 특정 필수 변수가 영속화되었거나, 영속화된 변수가 적절한 타임스탬프 순서로 설정되지 않은 경우 Group Replication이 시작되지 않았습니다. (Bug #27545544, Bug #27522405)
-
Group Replication: Group Replication 파일이
rapid디렉터리에서plugin디렉터리로 이동되었습니다. (Bug #27413789) -
Group Replication: 충돌 감지는 충돌하는 트랜잭션을 감지하고 허용하지 않기 위해 스키마 및 테이블 이름을 Primary Key Equivalent (PKE)의 일부로 사용합니다.
lower_case_table_names값은 스키마 및 테이블 이름이 저장되고 외부화되는 방식을 변경하며, 값에 따라T1이라는 이름의 테이블이t1로 영속화될 수 있습니다. 그룹 내 이러한 차이는 불일치를 일으킬 수 있습니다. 이제 멤버는 모두lower_case_table_names에 대해 동일한 값을 가져야 합니다. (Bug #27401817) -
Group Replication: macOS에서 Group Replication 관련 설정에 IP 주소 또는 호스트 이름을 사용하면 실패했습니다. (Bug #27376511, Bug #89123, Bug #27604471)
-
Group Replication: 온라인 상태의 보조 멤버에서 Group Replication 필수 설정을 잘못 변경하면 예기치 않은 중단이 발생할 수 있었습니다. (Bug #27317478, Bug #27157202)
-
Group Replication:
START GROUP_REPLICATION을 실행한 후에는 그룹이 온라인 상태가 될 때까지gtid_mode시스템 변수가 잠겨 해당 값에 대한 모든 수정을 방지합니다. 이 시간 동안gtid_mode를 수정하려는 모든 시도는 차단됩니다. Group Replication을 시작하는 프로세스의 일부로 서버는super_read_only=off를 설정해야 하며, 이는SET GTID_MODE가 획득한 잠금에 대한 의존성을 가집니다. 이로 인해 Group Replication이 중단된 상태가 될 수 있었고, 이 상황을 해결하기 위해 서버에 연결할 가능성이 없었습니다. 이 상황을 방지하기 위해SET GTID_MODE에 필요한 잠금을 획득할 수 없는 경우 작업이 중단됩니다. (Bug #27312241) -
Group Replication: 그룹이 시작되지 못하는 드문 경우, 예를 들어 시드 멤버에 접촉할 수 없는 경우에는 그룹이 시작 프로세스를 재시도하는 1분의 기간이 있습니다. 이 기간 동안 Group Replication 플러그인 옵션을 수정하려고 하면 예기치 않은 중단이 발생할 수 있었습니다. 이제 플러그인 시작 또는 중지 중에 Group Replication 플러그인 옵션을 수정하려고 하면 오류가 발생합니다. (Bug #27275312)
-
Group Replication: 부팅 시 플러그인을 자동으로 시작하도록 설정된 서버에서 Group Replication 플러그인을 제거하려고 하면 데드락이 발생할 수 있었습니다. 이제 제거 프로세스는 플러그인이 시작 중인지 확인하며, 시작 중인 경우 정상적으로 실패합니다. (Bug #27179336)
-
Group Replication: Group Replication은 그룹 멤버에서 충돌 감지를 위해 트랜잭션 쓰기 세트 추출을 사용합니다. 상세 성능 분석 중 이 프로세스에서 성능 회귀가 발견되었으며, 이는 쓰기 세트 추출과 메모리 복사 작업에 대한 메모리 할당을 최적화하여 처리되었습니다. 또한 이제 외래 키 쓰기 세트는 현재 테이블에 실제로 외래 키가 있는 경우에만 수집됩니다. (Bug #27016053)
-
Group Replication: multi-primary 그룹에서 멤버가 asynchronous replication 채널도 함께 설정된 경우, asynchronous 채널이 Group Replication이 시작되기 전에 시작될 가능성이 있었습니다. 이로 인해 멤버가 그룹의 온라인 멤버가 되기 전에 asynchronous 채널이 트랜잭션을 처리할 수 있었으며, 멤버가 그룹에 참여하려고 할 때 문제가 발생했습니다. 이 수정 사항은 그룹 멤버의 asynchronous 채널이 해당 멤버가 온라인 상태가 될 때까지 시작되지 않도록 보장합니다. (Bug #26648393)
-
Linux: Alpine Linux의 빌드는 이제 AIO 지원을 활용합니다. (Bug #27327874)
-
macOS: macOS에서 mysql_config --libs가 SSL 라이브러리를 나열하지 않았습니다. (Bug #27232576)
-
Microsoft Windows: Windows에서
RESTART문은 mysqld가 fork하도록 하여 구현되며, 한 프로세스는 다른 프로세스에 대한 모니터 역할을 하고, 다른 프로세스는 서버 역할을 합니다. 이로 인해 디버깅을 위해 attach할 서버 프로세스를 확인하기가 더 어려워집니다. 이를 완화하기 위해 이제--gdb로 서버를 시작하면 forking이 억제됩니다. 부수 효과로, 이 옵션으로 시작된 서버의 경우RESTART는 단순히 종료되며 다시 시작하지 않습니다. (Bug #27273229) -
JSON:
JSON_QUOTE()함수는 일부 상황에서 따옴표 처리된 문자열을 입력 문자열이 들어 있는 동일한 버퍼에 쓸 수 있었으며, 이로 인해 잘못된 결과가 발생할 수 있었습니다. 이제 읽고 있는 버퍼와 동일한 버퍼에 쓰기를 시도하지 않도록 확인하는 검사가 수행됩니다. (Bug #27312444) -
JSON:
JSON_SEARCH()는 더 이상 캐시된Json_path객체를 수정하지 않으며, 대신 이제 필요한 업데이트를 경로를 나타내는String객체에 수행합니다. 이는 경로의Json_path표현과String표현 사이에 필요한 왕복 횟수를 줄여 실행 속도를 높입니다. 또한JSON_SEARCH()에 대한one_or_all및escape_char인수는 불필요하게 캐시되었습니다. 이제 이러한 인수는 더 이상 캐시되지 않으며, 이 역시 이 함수의 실행 시간을 개선할 것입니다. (Bug #87383, Bug #26614455)참조: 다음도 참조하십시오: Bug #21450084, Bug #77785, Bug #21472872.
-
데이터 딕셔너리 버전 정보를 기반으로 하는 검사가 구현되어, 이후 MySQL 릴리스에서 생성된 데이터 디렉터리로 MySQL 8.0 서버를 시작하지 못하도록 했습니다. 이 검사는 현재 지원되지 않는 인플레이스 다운그레이드를 방지하기 위해 필요했습니다. (Bug #27708249)
-
보호된 데이터 딕셔너리 테이블은 더 이상 서버 초기화 파일에 배치된 문으로 접근할 수 없습니다. (Bug #27674311, Bug #90010)
-
데이터 딕셔너리 및
INFORMATION_SCHEMA버전 번호가 새 MySQL 서버 버전 번호와 동기화되었습니다. (Bug #27674285) -
서버가 prefix 인덱스가 있는
BLOB컬럼을 사용하는 특정LIKE쿼리를 올바르게 처리하지 못했습니다. (Bug #27660560) -
-DWITH_PROTOBUF=SYSTEM을 사용하여 설정된 빌드의 경우, Protobuf 3.5가 설치된 시스템에서 빌드가 실패했습니다. (Bug #27638713, Bug #89915) -
mysqld-auto.cnf에 지속 변수와 함께 저장된 타임스탬프의 마이크로초 부분이 항상 000000이었습니다. (Bug #27629719) -
이제 Debian 패키지는 MeCab 플러그인 딕셔너리 파일에 대한 의존성을 처리합니다. 이제 Fedora 패키지는 utf-8 패키지만이 아니라 두 MeCab 패키지 모두에 대한 의존성을 처리합니다. (Bug #27612730, Bug #27613539)
-
systemd를 사용하여 mysqld를 일반 프로세스(
Type=notify)로 실행하고 소켓 파일을 사용하여 통신하는 플랫폼에 대한 MySQL 8.0.11의 변경 사항이 SLES 12.2 이전의 SLES에서 작동하지 않았습니다. (Bug #27604999) -
INFORMATION_SCHEMA.STATISTICS테이블의NON_UNIQUE컬럼은 MySQL 8.0 이전에는BIGINT타입이었지만, MySQL 8.0에서 데이터 딕셔너리가 도입되면서VARCHAR가 되었습니다. 이제NON_UNIQUE컬럼은 다시 정수 타입을 가집니다(컬럼이BIGINT만큼 클 필요가 없으므로INT입니다). (Bug #27593348, Bug #89793) -
일부 입력에서
ST_Crosses()가 서버 종료를 유발할 수 있었습니다. (Bug #27576700) -
일부 오류 메시지가 적절한 오류 ID가 아니라 오류 ID 0으로 오류 로그에 기록되고 있었습니다. (Bug #27575608)
-
mysql_upgrade가
MYSQL_SERVER_PUBLIC_KEY를 올바르게 설정하지 않아 키 파일 읽기에 실패했습니다. (Bug #27568278) -
autocommit이 비활성화된 경우, mysql_upgrade는 MySQL 5.7에서 8.0으로 업그레이드할 때 오류를 생성했습니다. (Bug #27549249) -
디버그 빌드의 경우 Performance Schema
threads테이블의PROCESSLIST_STATE컬럼에서 매우 긴 스테이지 이름을 표시하면 assertion이 발생할 수 있었습니다. (Bug #27545688) -
gtid_purged처리에 메모리 누수가 있었습니다. (Bug #27537968, Bug #89645) -
SET PERSIST를 사용하여optimizer_trace_offset을 영속화하면 서버 재시작 후 잘못된 변수 값이 발생했습니다. (Bug #27536421) -
validate_password컴포넌트에서 메모리가 누수될 수 있었습니다. (Bug #27521770, Bug #89597) -
sql/handler.h의 오타가 수정되었습니다. 패치를 제공해 준 Su Tristan에게 감사드립니다. (Bug #27516280, Bug #89594) -
Performance Schema
variables_info테이블은!include또는!includedir지시문으로 지정된 옵션 파일 내에서 설정된 변수에 대해 잘못된VARIABLE_SOURCE및VARIABLE_PATH값을 표시했습니다. (Bug #27514223)참조: 이 문제는 다음 버그의 회귀입니다: Bug #25563891.
-
MySQL 5.7에서 MySQL 8.0으로 업그레이드한 후, MySQL 5.7 데이터 디렉터리에서
--default-time-zone이"+00:00"같은 특정 시간 값으로 설정된 상태에서 서버를 시작하려는 첫 번째 시도로 인해 서버가 종료되었습니다. (Bug #27512609, Bug #89584) -
캐릭터셋 내부 번호 조회가 스레드 안전하지 않았으며 메모리 누수를 일으킬 수 있었습니다. (Bug #27507950)
-
-DWITH_LIBEVENT=system및-DWITH_ICU=systemCMake 옵션을 함께 사용하면 설정이 실패했습니다. (Bug #27505535, Bug #89398) -
일부 메시지가 클라이언트 오류 ID를 사용하여 서버 오류 로그에 기록되고 있었습니다. (Bug #27503787, Bug #89562)
-
키 마이그레이션 모드로 실행될 때, 서버가 성공한 작업에 대해 오류를 보고할 수 있었습니다. (Bug #27493997)
-
MariaDB에서 MySQL Community Edition으로의 업그레이드가 Fedora 27에서 실패했습니다. (Bug #27484835)
-
ALTER TABLE이 Waiting for tablespace metadata lock 상태에서 멈출 수 있었습니다. (Bug #27472087, Bug #89487) -
Performance Schema
status_by_thread또는variables_by_thread테이블에서 선택하는 작업은 스레드 안전하지 않았으며 잘못된 결과를 산출할 수 있었습니다. (Bug #27471510) -
소스 테이블이 로우를 생성하지 않는 경우
INSERT... ON DUPLICATE KEY UPDATE가 부적절하게 처리될 수 있었습니다. (Bug #27460607) -
SET PERSIST_ONLY는--skip-grant-tables를 무시하고 시스템 변수를 설정하는 데 필요한 동적 권한에 대한 검사를 계속 수행했습니다. (Bug #27455943) -
RPM 패키지와 Docker RPM 패키지의 경우, 포함된
my.cnf파일에는 이제 이전 클라이언트와의 호환성을 위해 이전 기본 인증 플러그인으로 되돌리는 방법(caching_sha2_password를mysql_native_plugin으로 변경)에 대한 정보가 포함됩니다. (Bug #27454015, Bug #27675380) -
>를 사용하는 문자열 비교에서 하나의 피연산자만utf32로 처리되었습니다. (Bug #27452148) -
InnoDB초기화 중 서버 종료로 인해 AddressSanitizer (ASan)가 메모리 누수를 보고했습니다. 이 패치는 테이블에 파싱할 수 없는 데이터가 포함된 경우 데이터 딕셔너리 속성 테이블을 적절히 처리하는 기능도 구현합니다. (Bug #27447981, Bug #89433) -
-DWITH_SSL=system을 사용하는 경우, CMake가 시스템 OpenSSL 라이브러리와 헤더 파일을 찾을 수 없으면 혼란스러운 메시지를 생성했습니다. 이제 즉시 오류와 함께 종료됩니다. (Bug #27447874) -
-DWITH_INNODB_EXTRA_DEBUG=ONCMake 옵션을 사용하여 설정하면 링커 오류가 발생했습니다. (Bug #27444255, Bug #89412) -
-DWITH_ZLIB=system을 사용하여 설정하면 링커 오류가 발생했습니다. (Bug #27435371, Bug #89373) -
UNION ALL쿼리의 결과 집합 메타데이터가DATE가 아니라NEWDATE라고 표시할 수 있었습니다. (Bug #27422376) -
Undefined Behavior Sanitizer가 활성화된 빌드에서 -922337203685477580의 부정 연산으로 인해 서버 종료가 발생할 수 있었습니다. (Bug #27419181)
-
프로토콜 압축이 활성화된 경우, 잘못된 assertion이 발생할 수 있었습니다. (Bug #27418207, Bug #89324)
참조: 이 문제는 다음 버그의 회귀입니다: Bug #17922198.
-
데이터 딕셔너리 캐시를 채우기 위해 데이터 딕셔너리에서 테이블스페이스 객체를 가져오는 것과 관련된 성능이 개선되었습니다. (Bug #27402243)
-
서버가
--skip-grant-tables로 시작된 경우,caching_sha2_password플러그인으로 인증하는 클라이언트가 연결할 수 없었습니다. (Bug #27400095, Bug #89267) -
이제 Linux RPM 및 Debian 패키지는 MySQL 테스트 스위트를 실행하는 데 필요한 Perl JSON 모듈에 대한 의존성 정보를 포함합니다. 이제 Linux RPM 패키지는 MySQL 테스트 스위트를 실행하는 데 필요한 Perl Digest 모듈에 대한 의존성 정보를 포함합니다. (Bug #27392800, Bug #89250, Bug #27392808, Bug #89244)
-
복제에서 내부적으로 사용할 수 있도록 새 시스템 변수
default_collation_for_utf8mb4가 제공됩니다. 이 시스템 변수는utf8mb4캐릭터셋의 기본 콜레이션으로 설정됩니다. 이 변수의 값은 마스터에서 슬레이브로 복제되어, 슬레이브가utf8mb4에 대해 다른 기본 콜레이션을 사용하는 마스터에서 시작된 데이터를 올바르게 처리할 수 있도록 합니다. 이 변수는 주로 MySQL 5.7 또는 그 이전 버전의 마스터 서버에서 MySQL 8.0 슬레이브 서버로의 복제, 또는 MySQL 5.7 primary 노드와 하나 이상의 MySQL 8.0 secondary를 사용하는 그룹 복제를 지원하기 위한 것입니다. MySQL 5.7에서utf8mb4의 기본 콜레이션은utf8mb4_general_ci이지만, MySQL 8.0에서는utf8mb4_0900_ai_ci입니다. 이 변수는 MySQL 8.0 이전 릴리스에는 없으므로, 슬레이브가 이 변수의 값을 받지 못하면 마스터가 이전 릴리스라고 가정하고 값을 이전 기본 콜레이션인utf8mb4_general_ci로 설정합니다.기본
utf8mb4콜레이션은 다음 구문에서 사용됩니다: -
테이블 캐릭터셋 또는 컬럼 캐릭터셋에 대해
COLLATION절 없이CHARACTER SET utf8mb4절이 있는CREATE TABLE및ALTER TABLE.COLLATION절 없이CHARACTER SET utf8mb4절이 있는CREATE DATABASE및ALTER DATABASE.COLLATE절 없이_utf8mb4'some text'형식의 문자열 리터럴을 포함하는 모든 문장.
(Bug #27389878, Bug #27081073)
-
컬럼 이름 옵션이 있는
DESCRIBE는 컬럼 이름을 무시했습니다. (Bug #27387773, Bug #89224) -
키 마이그레이션 모드에서 실행될 때 서버는 잘못된 옵션을 무시했습니다. (Bug #27387331)
-
익명 사용자에 대한
SHOW GRANTS가 서버 종료를 유발할 수 있었습니다. (Bug #27375069) -
매우 긴 경로 이름에 대해 경로 이름 정규화가 실패할 수 있었습니다. (Bug #27368298)
-
설정 중에 CMake는 rpcgen을 확인하지 않고 사용할 수 있다고 가정했습니다. (Bug #27368078)
-
클라이언트 인증 프로세스가 해제된 후의 메모리를 사용할 수 있었습니다. (Bug #27366143)
-
-DWITH_ZLIB=system이 다른 CMake 기능 테스트가 실패하게 할 수 있었습니다. (Bug #27356658, Bug #89135) -
일부 시스템에서 mysqld --initialize를 사용하여 데이터 디렉터리를 초기화하는 작업이 매우 느렸습니다. (Bug #27349579, Bug #89122)
-
RPM 소스 패키지를 사용하는 빌드는 이제 Boost를 다운로드해야 하는 경우 보안 연결을 사용합니다. (Bug #27343289, Bug #89104)
-
ULONGLONG 시간 값을 변환하는 내부
check_datetime_range함수가 Windows에서 assertion을 발생시켰습니다. (Bug #27340709) -
caching_sha2_password인증 플러그인에 대해 너무 많은 잠금이 수행되고 있었습니다(연결당 하나의 lock/unlock). 이제 플러그인 설치/제거당 하나의 lock/unlock으로 개선되었습니다. (Bug #27335346) -
테이블 파티션의 테이블스페이스 이름으로
'innodb_system'을 암시적으로 할당한CREATE TABLE... LIKE작업이 assertion을 발생시켰습니다. (Bug #27331588) -
SET PERSIST_ONLY가 큰 값을 가진 변수를 잘못 저장할 수 있었습니다. (Bug #27322254) -
audit_log플러그인은 바이너리 로깅이 비활성화된 경우에도 문을 바이너리 로그에 쓸 수 있었습니다. (Bug #27315321) -
GREATEST() 또는 LEAST()를 사용하는 특정 쿼리에서 heap-use-after-free 오류가 발생했습니다. (Bug #27312703)
-
서로 다른 언어로 작성된 저장 루틴을 지원하기 위해
mysql.routines데이터 딕셔너리 테이블에external_language컬럼이 추가되었습니다. 이 컬럼에 저장된 데이터는INFORMATION_SCHEMA.ROUTINES테이블의EXTERNAL_LANGUAGES컬럼을 통해 접근할 수 있습니다. (Bug #27309116, Bug #89038) -
이제 서버가 초기화될 때 사용된 설정과 다른
lower_case_table_names설정으로 서버를 시작하는 것이 금지됩니다. 이 제한은 데이터 딕셔너리 테이블 필드에서 사용되는 콜레이션이 서버가 초기화될 때 정의된 설정에 의해 결정되며, 다른 설정으로 서버를 재시작하면 식별자의 정렬 및 비교 방식과 관련하여 불일치가 발생하기 때문에 필요합니다. (Bug #27309094, Bug #89035) -
auth_sock인증 플러그인을 사용하여 인증한 계정의 경우, 서버가 이전 MySQL 버전의 클라이언트로부터 연결을 수락할 수 없었습니다. (Bug #27306178) -
audit_log플러그인의 메모리 누수가 수정되었습니다. (Bug #27302151) -
INFORMATION_SCHEMA.FILES테이블은 이제 다음 컬럼에 필요한 정보를 스토리지 엔진에서 가져옵니다:LOGFILE_GROUP_NAME,LOGFILE_GROUP_NUMBER,ROW_FORMAT,VERSION. (Bug #27292586) -
로드 가능한 함수를 삭제해도 Performance Schema
user_defined_functions테이블에서 해당 항목이 항상 제거되지는 않았습니다. (Bug #27270498) -
크기와 스토리지 사용량을 줄이기 위해, 직렬화된 딕셔너리 정보(SDI)가 이제 compact JSON 형식으로 생성됩니다. (Bug #27265584)
-
여러 세션에서
RESET PERSIST와SET PERSIST를 동시에 실행하면 서버가 종료될 수 있었습니다. (Bug #27264789) -
통계 수집 프로세스에서 오류가 발생한 경우에도 테이블스페이스 통계가 캐시될 수 있었습니다. (Bug #27259963)
-
SET PERSIST가mysqld-auto.cnf파일을 쓸 적절한 디렉터리를 찾지 못할 수 있었습니다. (Bug #27253828) -
ALTER TABLE은 테이블에 데이터가 포함된 경우 생성된NOT NULLgeometry 컬럼을 생성할 수 없었습니다. (Bug #27252609) -
Performance Schema
variables_info테이블은my.cnf에서 설정되고mysqld-auto.cnf에도 지속된 변수에 대해 잘못된VARIABLE_SOURCE값을 표시했습니다. (Bug #27252077) -
플러그인 로드 및 언로드의 부적절한 처리로 인해 서버 종료가 발생할 수 있었습니다. (Bug #27247280, Bug #27297704)
-
RESTART문은 Ubuntu 패키지에서 작동하지 않았습니다. (Bug #27245918) -
LDAP 인증 플러그인은 FreeBSD에서 빌드되지 않았습니다. (Bug #27238252)
-
캐시된 값이 윈도잉 함수에 의해
NULL로 평가되거나, 해당 인수가NULL로 평가될 수 있는ROLLUP작업이 있는GROUP BY의 일부인 경우 서버가 쿼리를 올바르게 처리하지 않았습니다. (Bug #27233287) -
LAST_VALUE()와 같은 윈도잉 함수는 모든 경우에NOT NULL컬럼을 포함하는 테이블에서 올바르게 작동하지 않았습니다. (Bug #27230463) -
역할 캐시 무효화가 잘못 수행될 수 있었습니다. (Bug #27225806)
-
서버 시작 시 지속 변수 처리가 잘못되어 서버 종료가 발생할 수 있었습니다. (Bug #27224682)
-
MySQL 5.7에서 8.0으로 업그레이드하는 경우, 객체 정의의
sql_mode값에NOT_USED가 포함될 수 있었습니다. (Bug #27219709) -
기본 데이터베이스가 선택되지 않은 경우
JSON_TABLE()이 실패했습니다. (Bug #27217897) -
여러 잠금이 유지된
InnoDB테이블에 유니크 인덱스를 추가하면 어설션이 발생할 수 있었습니다. (Bug #27216817) -
뷰 정의에서
JSON_TABLE()을 사용한CREATE VIEW문은 데이터베이스가 선택되지 않은 경우 실패했습니다. (Bug #27189940) -
CLIENT_SSL_VERIFY_SERVER_CERT에 대한 Doxygen 문서가 수정되었습니다. 패치를 제공해 주신 Bradley Grainger에게 감사드립니다. (Bug #27189363, Bug #88686) -
Performance Schema 복제 테이블에 대한 쿼리가 특히 실행 계획에서 인덱스를 사용한 경우 잘못된 결과를 반환할 수 있었습니다. (Bug #27184567)
-
일부 문에서
FILE권한이 제대로 검사되지 않았습니다. (Bug #27160888) -
SET PERSIST로 지속된 것과 동일한 순서로 시작 시 지속된 변수를 설정할 수 있도록 더 잘 지원하기 위해,mysqld-auto.cnf의 설정은 먼저 타임스탬프를 기준으로 정렬됩니다(이 타임스탬프는 이제 파일에 저장됩니다). (Bug #27157520) -
dragnet.log_error_filter_rules시스템 변수를 매우 긴 값으로 설정하면 서버 종료가 발생할 수 있었습니다. (Bug #27120953) -
systemd를 사용하는 플랫폼의 경우(Managing MySQL Server with systemd 참조), systemd가 double-fork된 mysqld 프로세스의 상태를 항상 추론할 수 있는 것은 아니었습니다. 그 결과, 해당 프로세스가 상태 1로 종료된 경우에도 systemd가 mysqld를 다시 시작하려고 시도했습니다. 이제 systemd는 mysqld를 일반 프로세스로 실행하도록 설정됩니다(
Type=forking이 아니라Type=notify). 소켓 파일의 이름이 환경 변수NOTIFY_SOCKET에 지정된 경우, mysqld는 systemd와 통신하기 위한 연결을 열려고 시도하고 해당 위치에 상태 변경 사항을 씁니다. (Bug #27109556, Bug #88463, Bug #26538598, Bug #87210) -
ST_IsValid()는 non-WGS 84 타원체의 일부 지리적 폴리곤에 대해 잘못된 결과를 반환했습니다. (Bug #27074700) -
FULLTEXT키와FTS_DOC_ID컬럼을 포함하는 테이블에 대한 다중 삽입 문이 서버 오류를 발생시켰습니다. (Bug #27041445, Bug #88267)참조: 이 문제는 다음 버그의 회귀입니다: Bug #22679185.
-
strict SQL 모드에서
AUTO_INCREMENT컬럼에 잘못된 값을 할당하는 작업이 잘못 처리되어 assertion이 발생할 수 있었습니다. (Bug #27041393, Bug #88273) -
스레드 스택 고갈이 오류를 반환하는 대신 assertion을 발생시킬 수 있었습니다. (Bug #27041350, Bug #88277)
-
SET PERSIST_ONLY는 지속 변수에 대한 런타임 유효성 검사 함수를 호출해야 하는지 여부를 올바르게 고려하지 않았습니다. (Bug #27016247) -
audit_log플러그인은 이벤트 실행 중단을 잘못 처리하여 서버 종료를 발생시킬 수 있었습니다. (Bug #27008133) -
큰 부호 있는 정수의 부정에 대한 일부 경계 사례가 수정되었습니다. (Bug #27004880, Bug #27008075)
-
ALTER TABLE작업이 삭제된 테이블스페이스에 있는 테이블에 대해AUTO_INCREMENT값을 설정하려고 했습니다. (Bug #26935001) -
MyISAM인덱스 손상은 repair-by-sorting 알고리즘과 많은(4억 5천만 개 초과) 로우를 포함하는 bulk-insert 및 테이블 복구 작업에서 발생할 수 있었습니다. (Bug #26929724, Bug #88003, Bug #28483283) -
Performance Schema가 뒤에 공백이 붙은
DIGEST_TEXT값을 생성할 수 있었습니다. 더 이상 이 문제가 발생하지 않습니다. (Bug #26908015) -
시스템 테이블에서 인덱스를 삭제하면 서버 종료가 발생할 수 있었습니다. (Bug #26881798)
-
CREATE TABLE... SELECT를 사용하는 prepared statement가GROUP BY에서 같은 이름을 가진 뷰를 참조할 때 예기치 않은 동작이 발생했습니다. (Bug #26881703) -
auto-commit이 비활성화되고 XA 트랜잭션이 PREPARED 상태일 때,
XA COMMIT또는XA ROLLBACK을 실행하려는 시도가 실패했습니다. (Bug #26848877, Bug #87836) -
LDAP 인증 플러그인이 생성하는 일부 진단 메시지가 오류가 발생하지 않았는데도 오류가 발생한 것처럼 오해를 줄 수 있었습니다. (Bug #26844713)
-
mysql_upgrade 및 mysqlpump의 초기화 코드는 assertion failure를 방지하도록 재구성되었습니다. (Bug #26802211)
-
전체 텍스트 검색은 메타데이터 잠금 획득을 시도하는 동안 발생한 오류의 부적절한 처리로 인해 assertion을 발생시킬 수 있었습니다. (Bug #26799898)
-
32비트 서버에서
keyring_file플러그인이 생성한 keyring 파일을 64비트 서버의keyring_file에서 액세스할 수 없었으며, 그 반대의 경우도 마찬가지였습니다. (Bug #26793060) -
컬럼 통계에 대한 메타데이터 잠금이 Performance Schema
metadata_locks및events_waits_xxx테이블에 올바르게 표시되지 않았습니다. (Bug #26772858, Bug #87708) -
my_snprintf플러그인 서비스가 제거되었으며 C++11snprintf를 사용하여 다시 구현되었습니다. (Bug #26696147, Bug #87547) -
테이블 수가 많은 서버에서 MySQL 5.7에서 MySQL 8.0으로 인플레이스 업그레이드한 후, 데이터 딕셔너리 생성 중 과도한 메모리 소비로 인해 서버 시작이 완료되지 않았습니다. (Bug #26486160)
-
사용자 권한을 수정하는 문에서 오류가 발생하면 사용자 권한 캐시에 액세스하려고 시도하는 다른 트랜잭션에 대해 데드락이 발생할 수 있었습니다. (Bug #26475282)
-
thread pool 플러그인이 실패한 연결에 대해 너무 많은 정보를 로그에 기록했습니다. (Bug #26368725, Bug #86863)
-
여러 컴포넌트를 동시에 활성화하면 서버가 종료될 수 있었습니다. (Bug #26171471, Bug #86514)
-
잘못된 형식의
mysqld-auto.cnf파일로 인해 서버가 종료될 수 있었습니다. (Bug #26085774) -
예약된 테이블스페이스에 테이블을 생성해도 오류가 반환되지 않았습니다. (Bug #26073851, Bug #86309)
-
디버그 빌드에서 저장 루틴을 종료하기 위해
KILL을 사용하면 assertion이 발생할 수 있었습니다. 패치를 제공해 주신 Laurynas Biveinis에게 감사드립니다. (Bug #26040870, Bug #86260) -
init_connect시스템 변수가 설정된 경우, 만료된 비밀번호를 가진 클라이언트는 그 내용을 실행할 수 없었고, 따라서 연결할 수 없었습니다. 이제 클라이언트에 만료된 비밀번호가 있으면init_connect실행을 건너뛰며, 이를 통해 클라이언트가 연결하고 비밀번호를 변경할 수 있습니다. (Bug #25968185) -
YYYYMMDD형식을 사용하는 날짜가 다음 세 조건을 모두 충족하는 쿼리에서 올바르게 인식되지 않았습니다:쿼리가 left join을 수행했습니다.
조인의 내부 테이블에 있는
DATE컬럼이 다중 컬럼 기본 키의 일부였습니다.내부 테이블의 기본 키에 있는 모든 컬럼이 다른 값과 비교되었습니다. 이는 리터럴 또는 컬럼 값일 수 있었습니다. (Bug #25949639)
-
외래 키가 있는 테이블에 대한 인플레이스
ALTER TABLE작업으로 인해 테이블 정의 불일치가 발생했습니다.ALTER TABLE실행 중 스토리지 엔진 메서드에 전달된 새 테이블 정의에는 잘못된 외래 키 이름이 포함되어 있었습니다. (Bug #25915132, Bug #85997) -
존재하지 않는 역할을 계정의 기본 역할로 할당할 수 있었습니다. (Bug #25755666, Bug #85561)
-
C API를 사용할 때,
CURSOR_TYPE_READ_ONLY가 설정된 상태에서INSERTprepared statement를 실행하려고 하면 클라이언트가 멈췄습니다. (Bug #25701141, Bug #85105) -
이름을 변경할 사용자 또는 역할이 어떤 역할 그래프에도 존재하지 않았음에도
RENAME USER가 실패했습니다. (Bug #25658586) -
잘못된 형식의 클라이언트/서버 프로토콜 패킷이 수신되면 MySQL 클라이언트 프로그램이 예기치 않게 종료될 수 있었습니다. (Bug #25471090)
-
Performance Schema가 수집한 메모리 통계가 경쟁 조건으로 인해 부정확할 수 있었습니다. (Bug #25212799)
-
내부 해시에 대한
CONNECTION_CONTROL플러그인의 잘못된 처리로 인해 오류 로그에 불필요한 메시지가 기록되고 최종적으로 서버가 종료되었습니다. (Bug #25052009) -
CURRENT_ROLE()및ROLES_GRAPHML()은 이제utf8캐릭터셋을 사용하는 문자열을 반환합니다. 이전에는 잘못하여 바이너리 문자열을 반환했습니다. (Bug #24843257) -
INSTALL COMPONENT또는UNINSTALL COMPONENT를 kill하면mysql.component시스템 테이블에서 단일 컴포넌트에 대해 여러 로우가 생길 수 있었습니다. (Bug #24660436) -
X 플러그인을 사용하여 높은 부하를 동시에 실행하는 동안
SHOW PROCESSLIST를 수행하면 계획되지 않은 서버 종료로 이어질 수 있었습니다. (Bug #24621170)참조: 다음도 참조하십시오: Bug #23057045.
-
MySQL의 정규 표현식 구현은 현재 subject를 보관하기 위해 비어 있는 상태로 초기화되도록 의도된
String객체를 사용하며, 이 값에 리터럴""를 사용했습니다. 이는 마찬가지로 동작하는 다른 함수와 간섭할 수 있었습니다. 이 문제는 대신nullptr로String을 구성하여 수정되었습니다. (Bug #23276471) -
mysqlpump는 오류가 발생할 때 메모리 누수가 발생하거나 종료될 수 있었습니다. (Bug #23102944)
-
LDML 2.8 콜레이션 정의가 예기치 않은 서버 동작을 유발할 수 있었습니다. (Bug #22819030)
-
로그 열기 작업이 로그 이름 시스템 변수에 대한 잠금을 보유하지 않고 해당 변수에 접근했습니다. 여러 스레드가 이러한 변수에 접근하면 레이스 컨디션과 예기치 않은 서버 동작으로 이어질 수 있었습니다. (Bug #22591899)
-
range optimizer가 충분한 길이의 문자열에 대한 접두사를 계산할 때, 문자열을 문자 중간에서 잘라낼 수 있었으며, 이로 인해 디버그 빌드에서 assertion 및 기타 실패가 발생할 수 있었습니다. 이제 이러한 경우 문자열이 문자 경계에서 잘리도록 조치합니다. (Bug #22475473, Bug #13712655)
-
GROUP BY절에 서브쿼리 또는 표현식이 있는 쿼리는 일부 상황에서 초기화되지 않은 데이터를 읽기 때문에 임의의 결과를 반환할 수 있었습니다. (Bug #20035304)참조: 함께 참조하십시오: Bug #21922202.
-
GROUP BY절에 서브쿼리 또는 표현식이 있는 쿼리는 초기화되지 않은 데이터를 읽기 때문에 때때로 임의의 결과를 반환했습니다. (Bug #20035304)참조: 함께 참조하십시오: Bug #21922202.
-
audit_log플러그인은 prepared statement의 placeholder 값을 기록하지 않았습니다. (Bug #16617026) -
ALTER TABLE... RENAME작업을COPY알고리즘을 사용하여 실행한 경우 테이블에 정의된 foreign key가 손실될 수 있었습니다. (Bug #11756183, Bug #48070) -
UNION문에서 정수 컬럼은 더 작은 정수 타입이 더 적합한 경우에도BIGINT로 캐스트될 수 있었습니다. (Bug #11747567, Bug #33004) -
ER_REGEXP_INVALID_CAPTURE_GROUP_NAME(Error 13110)이 추가되었습니다. (Bug #89796, Bug #27597980) -
Window function 로우 버퍼 처리는 핸들러 읽기 수를 25% 줄이도록 리팩터링되었습니다. (Bug #89512, Bug #27484133)
-
일부 프레임의 경우,
windowing_use_high_precision시스템 변수가false로 설정된 상태에서 평가될 때 함수VARIANCE(),VAR_POP(),VAR_SAMP()는 잘못된 결과를 생성했습니다. (Bug #89390, Bug #27438725) -
prefix 인덱스가 있는 생성 컬럼은 Optimizer가 표현식을 동등한 생성 컬럼으로 대체하려고 시도할 때 고려되지 않았습니다. 이로 인해 생성 컬럼 표현식을 사용하는 조건자를 포함한 쿼리의 속도를 높이기 위해 prefix 인덱스를 사용할 수 없었습니다. (Bug #89291, Bug #27403367)
-
FIRST_VALUE()는 빈 프레임에 대해 항상NULL을 반환하지 않았습니다. (Bug #89116, Bug #27348276) -
선택적 인수를 받는 정규 표현식 함수는 이러한 인수 중 하나 이상이 명시적
NULL로 전달되었을 때 예상대로NULL을 반환하지 않았습니다. (Bug #88872, Bug #27252630) -
로우 기반 복제는 슬레이브에서 잘못된 인덱스 집합을 사용했습니다. (Bug #88847, Bug #27244826)
-
기본 데이터베이스가 선택되지 않은 상태에서 실행되었을 때,
EXPLAIN EXTENDED는EXTENDED키워드가 제거되었다는 사실 때문에 예상되는 SQL 문법 오류 대신 Error 1046 No database selected를 발생시켰습니다. (Bug #88591, Bug #27153116) -
CMake 옵션
OPTIMIZER_TRACE=0은 빌드에 아무런 영향을 주지 않았으므로 더 이상 사용되지 않습니다. (Bug #88520, Bug #27130109) -
상수 또는 집계 컬럼이 없는
GROUP BY를 사용하는SELECT문은 첫 번째 시도에서는 함수 종속성 검사에 올바르게 실패했지만, 다음 시도에서는 잘못 성공했습니다. (Bug #88474, Bug #27427677)참조: 참고 항목: Bug #21807579.
-
SELECT에UNION이 있는CREATE TABLE... SELECT문은NOT NULL로 선언된DATE컬럼에 대해 엄격 모드에서 실패했습니다. (Bug #87711, Bug #27068222) -
중첩된 서브
SELECT를 사용하는 준비된 문이 항상 올바르게 처리되지는 않았습니다. (Bug #87484, Bug #26657904) -
윈도우 함수를 포함하는 쿼리의 비용 추정은
PARTITION BY또는ORDER BY의 비용을 고려하지 않았으며, 프레임 버퍼 사용 비용도 포함하지 않았습니다. (Bug #87373, Bug #26612356)참조: 참고 항목: Bug #26502118.
-
서브쿼리가 있는 쿼리를 처리할 때, 외부 쿼리가 빈 결과를 생성하는 것으로 알려진 경우 더 이상 서브쿼리가 최적화되지 않습니다. 이러한 경우
EXPLAIN은 이제Not optimized, outer query is empty를 표시합니다.이 변경은 외부 쿼리가 사용하는 테이블이 최적화 시점에 비어 있는 것으로 확인되면, nullable로 정의되지 않은 경우에도 조인 컬럼이
NULL로 설정되어 서브쿼리를 최적화할 때 충돌이 발생하기 때문에 적용되었습니다.외부 쿼리에
GROUP BY없이 집계가 있는 경우에는 예외가 적용됩니다. 이는 외부 쿼리가 비어 있지 않은 결과를 가진다는 것과SELECT목록의 모든 서브쿼리를 평가하고 최적화해야 한다는 것을 의미하며, 이로 인해 null 가능성 문제가 다시 열리지만, 이제 이러한 경우에 대해 올바르게 처리됩니다. (Bug #83115, Bug #24713879)참조: 다음도 참조하십시오: Bug #83216, Bug #24760317.
-
nullable 컬럼을 포함하는 유니크 키를 구성하는 모든 컬럼에서 선택하고,
WHERE조건의 모든 컬럼이 null이 아닌 값으로 설정된 경우, MySQL은 해당 컬럼의 유일성을 고려하지 않았으며, 그 결과only_full_group_by가 함수적으로 종속된 컬럼을 감지하지 못했습니다. (Bug #79291, Bug #22279903) -
부분 인덱스를 사용할 때, 부분 인덱스가 필요한 전체 데이터 세트를 포함하는 경우에도 Optimizer는 인덱스를 사용하는 대신 더 비용이 많이 드는 테이블 조회를 수행했습니다. (Bug #74359, Bug #19806106)