MySQL 8.0 Release Note

8.0.32 변경 사항 (2023-01-17 GA)

Estimated reading: 6 minutes 215 views

공식 문서: Changes in MySQL 8.0.32 (2023-01-17, General Availability)

인증 관련 사항

서버는 AD 도메인에 접근할 수 없는 경우 등 실제 LDAP 서버 오류뿐만 아니라 LDAP 인증 실패에 대해 LDAP_OPERATIONS_ERROR를 반환할 수 있었습니다. 현재 서버는 인증 오류를 나타내기 위해 MySQL 고유의 오류 코드인 LDAP_AUTHENTICATION_ERROR를 반환합니다. (버그 #100333, 버그 #31680279)

C API 관련 사항

공개 키가 사용 가능하더라도, sha256_password_auth_client_nonblocking() 함수는 항상 오류를 반환했습니다. (MySQL Server Doxygen 문서 참조바랍니다. 다음 경로에서 확인 가능합니다. https://dev.mysql.com/doc/index-other.html) (버그 #34556764)

컴파일 관련 사항

Microsoft Windows: SASL 기반 LDAP 인증에서는 클라이언트만 지원되기 때문에, authentication_ldap_sasl 서버 플러그인은 Windows용으로 빌드되지 않게 되었습니다. (버그 #34448155)

Windows에서, VS 2022를 사용하여 MySQL 서버를 컴파일할 때, 테스트와 NDB 스토리지 엔진이 활성화된 경우 "parser-t"라는 이름의 두 프로젝트와 관련된 오류가 발생했습니다. 대소문자를 구분하지 않는 운영 체제에서의 충돌을 피하기 위해 테스트의 이름이 변경되었습니다. (버그 #34790413)

MacOS에서는 Xcode 14에 의해 생성된 폐기 예정 경고를 표시하지 않게 하였습니다. 여기에는 sprintf(3) 대신 snprintf(3) 사용 제안과 64비트에서 32비트 정수로의 정밀도 손실 가능성에 대한 경고가 포함됩니다. (버그 #34776172)

플러그인에서 Boost 라이브러리 사용을 제거했습니다. (버그 #34694419)

"Makefile"이라는 이름의 서드파티 파일이 사용되지 않아 모두 삭제되었습니다. (버그 #34648199)

Clang 15 지원이 추가되었습니다. (버그 #34638573)

사용되지 않는 코드를 찾아 삭제했습니다. fastcov를 사용하여 찾았습니다. (버그 #34583577)

"Ubuntu 22.04의 gcc 11.2.0 RelWithDebInfo""el6의 gcc 8.3.1"에서 생성된 경고를 수정하여 ndbcluster 플러그인의 빌드와 관련된 코드를 개선했습니다. (버그 #34384889)

디버그와 gcov 리포트를 간소화하기 위해, Bison과 Flex 소스 파일에 완전한 파일 경로를 사용하도록 변경했습니다. (버그 #109022, 버그 #34776151)

빌드 사용자가 mysqld 임시 디렉토리에 접근할 수 없는 경우, MySQL의 빌드가 실패했습니다. 현재 INFO_BIN 파일 생성 시 --no-defaults가 사용되도록 변경되었습니다. (버그 #108947, 버그 #34756282)

사용 중단 및 제거 관련 사항

인용 부호로 묶이지 않은 식별자의 첫 글자로서의 달러 기호($) 사용이 사용 중단되었으며, 경고(ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT)가 발생합니다. 이는 향후 릴리스에서 삭제될 수 있습니다.

이는 데이터베이스, 테이블, 뷰, 열, 스토어드 프로시저 또는 별칭 이름에 해당 식별자를 사용하는 문에 영향을 미칩니다. 달러 기호로 시작하는 식별자는 서버의 SQL 모드에 따라, 인용 부호로 묶인 경우 – 즉, 작은 따옴표 또는 큰 따옴표 (' 또는 "), 또는 백틱 문자(`)로 구분된 경우에만 허용됩니다.
예:

mysql> TABLE $t;  # 따옴표로 묶지 않은 경우, warning 발생
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1681
Message: '$ as the first character of an unquoted identifier' is deprecated and
will be removed in a future release. 
1 row in set (0.00 sec)

mysql> TABLE `$t`;  # 따옴표로 묶은 경우, warning 발생하지 않음
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

사용자 변수는, 이 변경의 영향을 받지 않습니다. 예를 들어, SELECT 1 INTO @$x 문은 경고를 생성하지 않습니다.
자세한 정보는 Schema Object Names 부분을 참고바랍니다. (버그 #34785775, WL #15422)
참조: 버그 #34684193도 참조하십시오.

CLIENT_NO_SCHEMA 플래그는 사용 중단되었습니다. CLIENT_NO_SCHEMAmysql_real_connect()client_flag 인수로 지정하는 클라이언트 프로그램은 플래그와 db 인수를 생략하고 연결 시 데이터베이스 값을 현재의(또는 기본) 데이터베이스로 설정할 수 있게 되었습니다. mysql_real_connect()CLIENT_NO_SCHEMA로 호출되면, libmysqlclient 라이브러리는 표준 에러에 경고를 표시하도록 변경되었습니다. 또한, 서버는 연결에 CLIENT_NO_SCHEMA가 있는 경우, 실행된 준비되지 않은 쿼리마다 사용 중단 경고를 추가합니다.

이전에는, 서버에 대한 연결에서 압축 사용을 보다 세밀하게 제어하기 위해 기존 압축 제어 매개변수가 사용 중단되고 새로운 설정 매개변수로 대체되었습니다. 새로운 매개변수와 사용 중단된 매개변수는 다음과 같습니다:

  • --compression-algorithms 클라이언트 옵션은 기존 --compress 클라이언트 옵션과 Compression 상태 변수를 사용 중단합니다.
  • MYSQL_OPT_COMPRESSION_ALGORITHMS C API 옵션은 기존 MYSQL_OPT_COMPRESS C API 옵션의 사용 중단을 활성화합니다.
  • CHANGE MASTER TO 문장의 MASTER_COMPRESSION_ALGORITHMS 옵션은 기존 slave_compressed_protocol 시스템 변수를 사용 중단합니다.

사용 중단된 매개변수는 향후 MySQL 버전에서 삭제될 예정입니다.

현재, 다음 클라이언트 프로그램은 클라이언트 사용자가 –compress(또는 해당하는 경우 -C)를 사용하여 프로그램을 호출할 때, 사용 중단 경고를 표준 에러에 출력합니다: mysqlpump, mysqlcheck, mysql, mysqladmin, mysqlbinlog, mysqldump, mysqlimport, mysqlshow, mysqlslap, mysql_upgrade 및 mysqltest.
mysqlbackup –compress 옵션에는 다양한 기능이 있으며, 사용 중단되지 않았습니다. (WL #13292)

Generated Invisible Primary Keys (GIPKs)

복제: 이제 복제본이 복제된 상태에서 기본 키가 없는 모든 InnoDB 테이블에 생성된 숨겨진 기본 키를 추가할 수 있습니다. 이는 CHANGE REPLICATION SOURCE TO 명령문의 REQUIRE_TABLE_PRIMARY_KEY_CHECK 옵션에 GENERATE를 가능한 값으로 추가하여 구현되었습니다.
REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE는 채널별로 사용할 수 있습니다. 복제본이 ch1ch2라는 두 개의 복제 채널로 구성되어 있다고 가정하고, 다음과 같은 명령문을 실행한다고 가정해 보겠습니다

STOP REPLICA;

SET @@sql_require_primary_key = ON;

CHANGE REPLICA SOURCE TO 
  REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE
  FOR CHANNEL ch1;

START REPLICA;

이 명령문의 효과는 복제본이 이제 ch1 채널을 통해 복제되는 테이블에 대해 숨겨진 기본 키를 추가하지만, ch2 채널의 맥락에서 생성된 키가 없는 테이블에는 추가하지 않는다는 것입니다.
복제본은 소스에서 설정된 sql_generate_invisible_primary_key 설정을 무시하며, 이 변수는 복제되지 않습니다. (이 동작은 이전 릴리스와 변경되지 않았습니다.)
REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE는 이 옵션에 대해 ON, OFF, STREAM만 지원되는 MySQL 그룹 복제와 호환되지 않습니다.
자세한 내용은  CHANGE REPLICATION SOURCE TO 문Generated Invisible Primary Keys를 참조하십시오. (WL #15419)

키링 관련 사항

component_keyring_oci 설정 파일에서 지정되고 Oracle Cloud Infrastructure Console에서 또는 Oracle Cloud Infrastructure API에 문의하여 획득한 엔드포인트의 호스트 이름은, Oracle Cloud Infrastructure Vault 키링 컴포넌트의 MySQL 설정을 생성할 때 이전에 제거해야 했던 https:// 프리픽스를 유지할 수 있게 되었습니다. (버그 #34636297)

플러거블 인증

Windows에서는 클라이언트 측 Kerberos 인증 플러그인이 MIT Kerberos 라이브러리를 통해 GSSAPI를 지원하도록 되었습니다. Windows의 authentication_kerberos_client 인증 플러그인에서 지원되는 새로운 플러그인 옵션을 사용하여, 런타임에 SSPI와 GSSAPI 중 하나를 선택할 수 있습니다. 클라이언트 사용자는 --plugin-authentication-kerberos-client-mode 커맨드라인 옵션을 지정하여 mysql 또는 mysqldump를 호출하고, 모드를 GSSAPI로 설정할 수 있습니다. authentication_kerberos_client 플러그인의 기본 모드는 SSPI이며, 이전에는 Windows에서 유일한 인증 방법이었습니다.
자세한 내용은 Connection Commands for Windows Clients in GSSAPI Mode 부분을 참조하세요. (WL #15336)

공간 데이터 지원

MySQL의 ST_Transform() 함수는 이제 MySQL ST_Transform() 함수는 EPSG 1042 (Krovak Modified), EPSG 1043 (Krovak Modified (North Orientated)), EPSG 9816 (Tunisia Mining Grid), 및 EPSG 9826 (Lambert Conic Conformal (West Orientated))을 제외한 모든 데카르트 투영법을 지원합니다. (버그 #27272733, 버그 #34495023, WL #15164)

SQL 구문 관련 사항

중요한 변경 사항: 이전에는 MySQL이 “full”을 테이블, 컬럼, 뷰, 저장 프로시저 또는 저장 함수의 이름뿐만 아니라 테이블, 뷰 또는 컬럼의 별칭으로 사용하는 것을 지원했습니다. 이번 릴리스부터는 대소문자에 관계없이 따옴표 없는 식별자로 “full”을 사용하는 것이 더 이상 권장되지 않으며, 경고를 발생시킵니다. 이는 FULL이 키워드로 예약된 SQL 표준과 더 밀접하게 일치하도록 하기 위한 것입니다.

예를 들어, 다음의 CREATE TABLEDROP TABLE 문은 이제 다음과 같이 경고를 발생시킵니다:

mysql> CREATE TABLE full (c1 INT, c2 INT);
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 4119
Message: Using FULL as unquoted identifier is deprecated, please use quotes or
rename the identifier. 
1 row in set (0.00 sec)

mysql> DROP TABLE full;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 4119
Message: Using FULL as unquoted identifier is deprecated, please use quotes or
rename the identifier. 
1 row in set (0.00 sec)

경고 없이 명령문을 실행하려면, 각 명령문에서 테이블 이름을 백틱 문자(`)로 감싸십시오. 예를 들면 다음과 같습니다:

mysql> CREATE TABLE `full` (c1 INT, c2 INT);
Query OK, 0 rows affected (0.03 sec)

mysql> DROP TABLE `full`;
Query OK, 0 rows affected (0.02 sec)

이러한 사용은 향후 릴리스에서 지원이 중단될 수 있으므로, “full”을 테이블 이름이나 별칭으로 사용하는 대신 다른 이름을 사용하는 것이 권장됩니다.

mysql> SHOW VARIABLES LIKE '%metadata%';
+---------------------------------------+---------+
| Variable_name                         | Value   |
+---------------------------------------+---------+
| binlog_row_metadata                   | MINIMAL |
| innodb_stats_on_metadata              | OFF     |
| performance_schema_max_metadata_locks | -1      |
| resultset_metadata                    | FULL    |
+---------------------------------------+---------+
4 rows in set (0.00 sec)

mysql> SET @@global.binlog_row_metadata=FULL;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE '%metadata%';
+---------------------------------------+-------+
| Variable_name                         | Value |
+---------------------------------------+-------+
| binlog_row_metadata                   | FULL  |
| innodb_stats_on_metadata              | OFF   |
| performance_schema_max_metadata_locks | -1    |
| resultset_metadata                    | FULL  |
+---------------------------------------+-------+
4 rows in set (0.00 sec)

자세한 내용은 Keywords and Reserved Words 부분을 참조하십시오. (WL #15241)

이번 릴리스에서는 FORMAT 옵션이 없는 EXPLAIN 문이 쿼리 실행 계획을 얻는 출력의 기본 형식을 설정할 수 있도록 explain_format 시스템 변수를 추가했습니다. FORMAT 옵션과 마찬가지로, 이 변수는 TRADITIONAL, JSON 또는 TREE 중 하나의 값을 가질 수 있습니다. DEFAULTTRADITIONAL의 동의어로도 지원됩니다. (DEFAULT는 EXPLAIN의 FORMAT 옵션과 함께 지원되지 않습니다.) 예를 들어, explain_format의 값이 TREE인 경우, 해당 EXPLAIN 문에서 FORMAT=TREE가 지정된 것처럼 트리 기반 형식으로 출력이 표시됩니다.
FORMAT 옵션이 지정되면 explain_format에 설정된 값은 무시됩니다. 즉, explain_formatTREE로 설정된 상태에서 EXPLAIN을 호출할 때 FORMAT=JSON을 지정하면, explain_format의 값은 무시되고 결과는 JSON 형식으로 표시됩니다.
explain_format은 EXPLAIN ANALYZE의 동작에도 영향을 미칩니다. 이 문은 TREE 형식만 지원하므로, explain_format의 값이 TREE가 아닌 경우, 명시적으로 TREE 형식을 지정하지 않은 EXPLAIN ANALYZE 문은 “이 MySQL 버전에서는 ‘FORMAT’ 형식의 EXPLAIN ANALYZE를 아직 지원하지 않습니다”라는 오류를 발생시킵니다.
새로운 시스템 변수는 전역 및 세션 범위를 가지며, 지속될 수 있고, 커맨드 라인(--explain-format) 또는 my.cnf 옵션 파일에서 설정할 수 있습니다.
자세한 내용과 예제는 explain_format 설명서, 실행 계획 정보 획득, 그리고 EXPLAIN ANALYZE를 사용한 정보 획득을 참조하십시오. (WL #15040)
참조: 버그 #33629360도 참조하십시오.

스레드 풀 관련 사항

비활성으로 인해 연결이 종료될 때마다, 스레드 풀 플러그인은 연결 타임아웃에 관한 일반적인 메시지만 출력했습니다. 이는 이러한 타임아웃의 분석을 불필요하게 어렵게 만드는 경우가 많았습니다. 새로운 INFO_LEVEL 메시지는 스레드 풀에서 비활성 상태로 인해 연결이 종료되었음을 명확히 하고, 이 판단을 내리기 위해 사용된 타임아웃 값을 명확히 합니다. (버그 #34767607)

이번 릴리스에서 Performance Schema의 tp_thread_state 테이블에 추가된 두 개의 열을 통해, 스레드의 유형을 식별하고, 이 테이블의 스레드를 Performance Schema 스레드 테이블의 스레드와 매핑할 수 있습니다. 스레드의 유형은 tp_thread_state 테이블의 TP_THREAD_TYPE 열에 표시되며, 스레드의 고유 ID는 THREAD_ID 열에 표시됩니다. (버그 #34020058)

추가 및 변경된 기능

중요한 변경 사항: OpenSSL 라이브러리가 번들된 플랫폼의 경우, 링크된 MySQL 서버용 OpenSSL 라이브러리가 버전 1.1.1s로 업데이트되었습니다. OpenSSL 버전 1.1.1s에서 수정된 문제는 https://www.openssl.org/news/cl111.txt에서 확인할 수 있습니다. (버그 #34828308)

시스템의 curl 라이브러리에 링크하는 대신, curl을 포함하는 바이너리 패키지는 curl 7.86.0을 사용하도록 업그레이드되었습니다. (버그 #34828111)

MySQL 8.0.31에서 추가된 내부 리소스 그룹 확장 기능이 리팩토링되었지만, Resource_group_supported 상태 변수는 계속 지원됩니다. (버그 #34702833, 버그 #34699751)
참조: 되돌려진 패치: 버그 #34264356.

버그 수정

중요한 변경 사항: max_join_size 시스템 변수가 행 또는 디스크 탐색의 최대 수로 문서화되었으나, 행 또는 디스크 탐 수를 직접 확인하지 않고, 대신 max_join_size를 허용 가능한 최대 추정 비용으로 취급했습니다. 비용과 행 수는 상관 관계가 있지만 동일하지 않기 때문에, 일부 큰 쿼리의 실행이 허용되면 예상치 못한 결과가 발생할 수 있었습니다.
이번 릴리스에서는 max_join_size의 사용 방법을 변경하여, 기본 테이블의 행 접근 최대 수를 실제로 제한하도록 했습니다. 기본 테이블에서 더 많은 행을 읽어야 할 것으로 추정되는 경우 오류가 발생합니다. 이를 통해 실제 동작이 문서화된 내용을 더 잘 반영하게 됩니다. (버그 #83885, 버그 #25118903)

InnoDB: 업그레이드 후 감지할 수 없는 문제, 충돌 및 데이터 손상이 있었습니다.
업그레이드 후 삽입되는 모든 새로운 행은 ALGORITHM=INSTANT으로 추가된 모든 열이 물리화되며 version=0을 가집니다.
새로운 구현에서는 ALGORITHM=INSTANT으로 추가된 열의 최대 가능한 행 크기가 행 크기 제한을 초과하는 경우 실패하게 됩니다. 따라서 ALGORITHM=INSTANT으로 물리화된 열이 있는 새로운 행은 항상 행 크기 제한 내에 있게 됩니다. (버그 #34558510)

InnoDB: SHOW ENGINE INNODB STATUS에서 더 이상 깨진 UTF 문자가 나타나지 않습니다. (버그 #34486877, 버그 #108111)

InnoDB: ALGORITHM=INSTANT으로 1024개 이상의 열을 추가해도 더 이상 충돌을 일으키지 않도록 ALTER 핸들러가 조정되었습니다. (버그 #34378513, 버그 #107854)

InnoDB: ALGORITHM=INSTANT으로 열을 추가한 후, 온라인 재구성 DDL이 더 이상 충돌하지 않습니다. (버그 #33788578, 버그 #106279)

InnoDB: 잠재적인 경쟁 조건을 포함한 다양한 문제를 해결하기 위해 몇 가지 적응형 해시 인덱스(AHI) 코드 최적화 및 개선이 구현되었습니다. (버그 #33601434)

복제: CHANGE REPLICATION SOURCE TO를 사용하여 서버에서 SOURCE_HEARTBEAT_PERIOD가 매우 작은 값(예: 1 마이크로초)으로 설정되고, mysqlbinlog 클라이언트 프로그램이 --read-from-remote-server--stop-never=1 옵션으로 시작된 경우, 모든 이벤트가 전송되기 전에 바이너리 로그 덤프 스레드가 EOF 패킷을 클라이언트에 전송할 가능성이 있었습니다.

복제: 테스트에서 잘못된 오류를 유발한 sql/rpl_group_replication.cc에서 어설션을 제거했습니다. (버그 #34619134)

복제: MySQL이 --server-id=0으로 시작된 후, SET PERSIST server_id=N (N은 0보다 큰 정수)를 사용하여 서버 ID를 변경하려고 하고, 서버를 재시작하면 다음과 같은 결과가 발생했습니다:

  • SELECT @@server_id는 N을 반환했습니다.
  • START REPLICA 등의 복제 SQL 문은 ER_SLAVE_CONFIGURATION으로 거부되었습니다.

이를 해결하기 위해, 이러한 검사에서 시작 옵션으로 전달되는 값이 아니라 서버 변수의 값이 사용되도록 변경했습니다. (버그 #34412816)

복제: NDB 바이너리 로그 인젝터에 의해 생성된 압축된 바이너리 로그 이벤트를 복제할 때, 릴레이 로그의 위치가 멀티스레드 어플라이어에서 업데이트되지 않아 복제가 멈췄습니다. (버그 #33889030)
참조: 버그 #33784241도 참조하십시오.

복제: SQL 스레드가 트랜잭션을 처리하는 동안 STOP REPLICA SQL_THREAD를 발행하면, 이벤트 그룹이 완료되기를 60초 동안 기다린 후에 기대한 대로 SQL 스레드를 종료하지 않고, 복제가 즉시 중단되었습니다.
이 문제의 근본 원인은, 마지막 이벤트 시작 시간을 저장하는 내부 변수가 SQL 스레드의 재시작 후에 리셋되지 않았기 때문입니다.
이를 해결하기 위해, SQL 스레드가 시작될 때마다 마지막 이벤트 시작 시간을 유지하는 변수를 리셋하도록 변경했습니다. (버그 #33646899)

복제: 로그 메시지 Setting super_read_only=ON (ER_GRP_RPL_SUPER_READ_ON)Setting super_read_only=OFF (ER_GRP_RPL_SUPER_READ_OFF)는 실제로 동작이 시도된 후에만 기록되었습니다. 사전이나 동작 중에는 기록되지 않았습니다. 이는 변수 설정이 거부되었을 때 혼란을 야기할 수 있었으며, 이는 설정 시도가 로그에 기록되기 전에 기록되었습니다. 이를 방지하기 위해, 이러한 메시지가 동작을 시도하기 직전에 기록되도록 변경했습니다. (버그 #108843, 버그 #34728079)

복제: relay_log_space_limit 시스템 변수는 64비트 값이지만, 내부적으로 최대 값이 32비트 값으로 지정되었습니다. (버그 #106323, 버그 #33799840)

복제: 바이너리 로그를 로테이션할 때 실행된 gtid_executed 테이블의 불필요한 업데이트를 제거했습니다. (버그 #106116, 버그 #33759477)

그룹 복제: MySQL 퍼포먼스 스키마의 replication_group_communication_information 테이블의 WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE 열은 그룹 내 Paxos 단일 리더 설정의 런타임 값을 반영하여, 조인하려는 멤버의 group_replication_paxos_single_leader 값이 어떻게 설정되어야 하는지 사용자에게 알려줍니다.
단일 리더가 활성화된 상태로 부트스트랩된 그룹이 단일 리더를 지원하지 않는 프로토콜 버전으로 다운그레이드된 경우 WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE은 예상대로 0을 보고하지만, group_replication_paxos_single_leader = 0을 사용하여 그룹에 인스턴스를 조인하려는 시도는 불가능했습니다.
이 문제를 해결하기 위해 그룹이 실행 중인 통신 버전에 맞게 group_replication_paxos_single_leader의 값을 일관되게 설정하도록 동작을 변경했습니다. 이 변수는 MySQL 8.0.27에 도입되었으며 이전 버전에서는 알 수 없거나 사용되지 않으므로, 이제 다음 규칙을 적용합니다:

  • 8.0.27 이상의 버전이 8.0.26 이하의 MySQL 버전을 실행 중인 그룹에 조인하려고 시도할 때, group_replication_paxos_single_leaderOFF로 설정해야 함을 알리는 오류와 함께 시도를 거부합니다.
  • 버전 8.0.27 이상에서 group_replication_set_communication_protocol()를 사용하여 8.0.27 미만의 버전으로 설정하려고 할 경우, group_replication_paxos_single_leaderOFF가 아니면 함수 호출을 거부합니다.

추가로, group_replication_set_communication_protocol() 실행 후 그룹 리더 변경이 허용되는지를 확인하는 값도 변경했습니다. 이전에는 그룹 재부팅 후에만 적용되는 group_replication_paxos_single_leader의 런타임 값을 사용했으나, 이제 group_replication_set_communication_protocol() 실행 시 앞서 설명한 replication_group_communication_information 테이블의 WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE 열에 표시된 값을 사용합니다. (버그 #34555045, 버그 #34828311)

그룹 복제: 3 노드 클러스터에서 모든 노드가 메모리 부족으로 인해 종료되었습니다. 이후 모든 노드가 성공적으로 재시작된 후, 클러스터를 다시 온라인 상태로 가져오려 시도할 때, 기존의 기본 노드가 멈추는 문제가 발생했습니다.
자세한 내용은 Rebooting a Cluster from a Major Outage부분을 참조하십시오. (버그 #108339, 버그 #34564856)

그룹 복제: 그룹이 group_replication_consistency = AFTER로 실행되고, 세컨더리가 불안정한 네트워크 등의 외부 조건으로 인해 실패한 경우, 세컨더리에서 “Transaction ‘GTID’ does not exist on Group Replication consistency manager while receiving remote transaction prepare.”라는 오류가 발생할 수 있었습니다.
이 문제의 근본 원인은, 프라이머리가 세컨더리가 재가입한 View_change_log_event의 순서대로 로그아웃할 수 있다는 것이었습니다. 세컨더리가 프라이머리를 그룹 도너로 사용하면, 세컨더리가 그룹에 부적절하게 따라잡히고, 결국 그룹 트랜잭션에 대해 잘못된 GTID를 생성할 수 있었습니다. 그룹 복제 프라이머리는 View_change_log_event가 선행하는 모든 트랜잭션이 로그에 기록되도록 보장하지만, 그룹 글로벌 오더의 View_change_log_event 이후에 순서 지정된 트랜잭션이 이벤트 이전에 로그에 기록될 수 있는 윈도우가 있었습니다.
이를 해결하기 위해, 뷰의 앞에 순서 지정된 트랜잭션은 항상 View_change_log_event 앞에 기록되고, 뷰의 뒤에 순서 지정된 트랜잭션은 항상 이 이벤트 뒤에 기록되도록 했습니다. 이는 바이너리 로그 그룹 커밋 내의 트랜잭션이 커밋되는 순서를 보장하는 바이너리 로그 티켓 매니저에 의해 실행되도록 했습니다. (버그 #104980, 버그 #33405699)
참조: 버그 #34746357도 참조하십시오.

Microsoft Windows: Windows 플랫폼에서 MySQL을 컴파일할 때, CMake의 -DWITH_WIN_JEMALLOC 옵션이 항상 올바르게 처리되지 않았습니다. (버그 #108341, 버그 #34698376)

JSON: JSON_ARRAYAGG() 또는 JSON_OBJECTAGG()의 결과를 열에 저장하는 동안, 결과가 SUM_FUNC_ITEM 유형의 항목이기 때문에 데이터 타입 정보가 손실되었습니다. 이를 수정하기 위해, 타입 체크를 제거하고 원래 타입 정보를 유지했습니다. (버그 #108326, 버그 #34548259)

서버에 대한 일부 원격 연결이 올바르게 처리되지 않았습니다. 이 문제는 require_secure_transport 문제에 대한 이전 수정의 결과로 발생했습니다. (버그 #348557411)
참조: 이 문제는 버그 #34094706의 리그레션입니다.

sql_optimizer.ccKey_use_array의 비결정적 정렬로 인해 일부 쿼리 플랜이 안정적이지 않았습니다. std::sort() 대신 std::stable_sort()를 사용하여 정렬하도록 변경했습니다. (버그 #34823952)
참조: 이 문제는 버그 #25965593의 리그레션입니다.

시스템 OpenLDAP 라이브러리에 링크하는 대신, OpenLDAP을 포함하는 바이너리 패키지는 버전 2.5.13을 사용하도록 업그레이드되었습니다. (버그 #34815046)

경우에 따라, 인증 중에 서버가 MySQL 클라이언트 프로그램에 예상치 못한 패킷을 전송하면 무한 루프가 발생할 수 있었습니다. (버그 #34805922)

GIS 데이터는 윈도우 함수에서 항상 올바르게 처리되지 않았습니다. (버그 #34778646)

스레드는 사용자 기본 리소스 그룹(USR_default)에 할당된 후에도, 삭제된 리소스 그룹의 CPU에 바인딩된 채로 남아 있었습니다. USR_default의 CPU 우선 순위가 0이고, CPU 애피니티가 없기 때문에, 이 수정으로 인해 스레드는 USR_default를 사용하여 임의의 CPU를 실행할 수 있게 되었습니다. (버그 #34748973)

JSON 로깅이 활성화된 경우, audit_log_rotate() 함수를 호출해도 파일이 기대대로 로테이션되지 않았습니다. 로테이션된 파일 이름은 파일에 기록된 마지막 이벤트의 타임스탬프로 구성됩니다. 파일이 비어 있는 경우, 마지막 타임스탬프는 이미 생성된 파일의 타임스탬프와 동일합니다. 이 문제를 해결하기 위해, 파일이 비어 있는 경우 함수는 현재 시간을 사용하여 파일에 이름을 지정하도록 변경했습니다. (버그 #34733508)

여러 개의 래터럴 파생 테이블을 가진 일부 쿼리는 기대한 결과를 얻지 못했습니다. (버그 #34716246)

zlib 라이브러리가 zlib 1.2.13으로 업그레이드되었습니다. zlib 1.2.13은 지원되는 최소 zlib 버전이 되었습니다. (버그 #34711762)

특정 INTERSECT 쿼리가 올바르게 처리되지 않았습니다. (버그 #34642435)

MAX_EXECUTION_TIME 옵티마이저 힌트를 지정된 최대값보다 큰 값으로 사용하면, MySQL 8.0.30으로의 업그레이드가 완료되지 않았습니다. 이로 인해 서버는 업그레이드 프로세스에 의해 복구 불가능한 오류로 해석된 경고를 보고했습니다. (버그 #34607401)

경우에 따라, 윈도우 함수의 평가가 올바르게 실행되지 않았습니다. (버그 #34572136)
참조: 이 문제는 버그 #32644631, 버그 #32802301의 리그레션입니다.

일부 CTE가 올바르게 처리되지 않았습니다. (버그 #34572040, 버그 #34634469)
참조: 이 문제는 버그 #33856374의 리그레션입니다.

값을 FLOAT (CAST(... AS FLOAT), CONVERT(..., FLOAT), JSON_VALUE(... RETURNING FLOAT))에 변환하는 함수 또는 연산자로부터 반환되는 값은 내부적으로 배정밀도로 저장되기 때문에, 내부 표현의 정밀도가 높아질 수 있습니다. 이로 인해 SELECT DISTINCT가 중복을 반환하거나, 비교 연산자가 두 개의 동일한 값을 같지 않다고 잘못 보고하는 등, 값이 같은지 여부를 확인할 때 예상치 못한 결과가 발생할 수 있었습니다.
이 문제는 값을 반환하기 전에 값에서 불필요한 배정밀도를 제거하고, 이러한 변환 연산자에서 float에서 string으로의 변환을 double 형식이 아닌 float 형식을 사용하여 해결했습니다. (버그 #34554755)

query_expression::assert_not_fully_clean()의 어설션을 제거했습니다. (버그 #34526104)

단일 데이터베이스에 매우 많은 테이블이 있고, MySQL 5.7에서 MySQL 8.0으로 업그레이드할 경우, 서버에서 과도한 메모리가 소비되었습니다. 테이블을 업그레이드할 수 있는지 확인하는 프로세스 중에, 사전에 모든 데이터 딕셔너리 테이블 객체를 페치하고, 각각을 처리하여 그 이름을 페치한 다음, 리스트에 대해 CHECK TABLE ... FOR UPGRADE를 실행한 것으로 보입니다. 이 경우, 사전에 모든 객체를 페치할 필요는 없었으며, 이는 메모리 소비의 주요 원인이었습니다.
이 문제를 해결하기 위해, 이러한 경우에 한 번에 하나의 테이블 객체를 가져오고, 필요한 체크를 실행하고, 그 이름을 가져와 객체를 해제한 후 다음 객체로 진행하도록 변경했습니다. (버그 #34526001)

자연 조인 열을 생성할 때, 실체화된 파생 테이블의 일부로 추가된 숨겨진 열이 조인 조건의 구축에 사용됩니다. 이는 나중에 조인이 파생 테이블로 푸시다운될 수 있는지 확인하기 위해 사용됩니다. 현재 문제는 이 열이 숨겨져 있기 때문에 파생 테이블에서 가져오지 않았을 때 발생했습니다. 이는 조건 푸시다운 최적화가 활성화되지 않은 경우에도 발생했습니다. 함수 인덱스를 위해 추가된 숨겨진 열뿐만 아니라, 내부적으로 추가된 모든 숨겨진 열을 거부함으로써 이 문제를 해결했습니다. (버그 #34523627)

타입은 사용자 변수에서 일관되게 파생되지 않았습니다. 이는 예를 들어, 다음 문을 반복적으로 실행하여 확인할 수 있습니다:

CREATE TABLE t AS SELECT @max_error_count UNION SELECT 'a';

SHOW CREATE TABLE t;

이 특정 경우에 SHOW CREATE TABLE 문장의 출력은 처음에는 @max_error_counttext로 표시되고, 이후 반복에서는 @max_error_countmediumblob으로 표시되었습니다. (두 번째가 맞는 값) (버그 #34523475)

MySQL 8.0.23에서 사용자 계정에 대한 호스트 확인을 개선하기 위해 수행된 작업에 따라, 특히 많은 CREATE USER 문을 연속으로 실행할 때 CREATE USER 완료에 필요한 시간이 크게 증가했습니다.
이번 릴리스로 업그레이드하기 전에, 많은 CREATE USER 문을 연속으로 실행하는 경우 이 문제를 우회하기 위해 다음과 같이 단일 CREATE USER 'fakeuser' ACCOUNT LOCK 문을 먼저 실행할 수 있습니다 (여기서 'fakeuser'는 기존 사용자 이름과 충돌하지 않는 임의의 사용자 이름을 사용할 수 있습니다). 완료되면, 다음 명령문을 실행하여 정리할 수 있습니다:

DROP USER 'fakeuser';
FLUSH PRIVILEGES;

자세한 정보는 Access Control, Stage 1: Connection Verification 부분 참고바랍니다. (버그 #34449016)

data_masking 서버사이드 플러그인이 런타임 에러를 발생시켜 예기치 않게 중지되는 경우가 있었습니다. (버그 #34445632)

부하가 많은 상태에서 스레드 풀을 사용할 때 스택 오버런이 잘못 보고될 수 있었습니다. 스레드 풀에서 이 문제를 일으키는 경쟁 조건이 추가 스레드 그룹 ID 확인을 통해 방지되었습니다. (버그 #34414959)

일부 다중 중첩된 쿼리가 올바르게 실행되지 않았습니다. (버그 #34377854)

파생 테이블을 병합할 때, 중첩된 조인 조건이 파생 테이블에 추가되고, 기본 테이블이 이 조인 중첩에 추가됩니다. 또한, 조인 조건은 파생 테이블에 연관되어 있습니다.
테이블이 외부 조인의 내부 테이블인 경우 또는 테이블이 내부 테이블이며 조인이 세미 조인이 아닌 경우, 범위 접근 평가가 건너뛰어집니다. 파생 테이블의 경우, 기본 베이스 테이블은 후자의 유형으로 처리되며, 범위 분석이 건너뛰어지고 범위 접근 방법을 사용할 수 없었습니다.
이 문제를 해결하기 위해, 임베디드 테이블이 파생 테이블인 경우에 범위 접근을 평가하고, 파생 테이블에 연관된 조인 조건이 범위 최적화에 사용되도록 변경했습니다. (버그 #34347116)

서브쿼리에서 발행된 LOAD DATA INFILE 문으로 인해 서버가 잘못된 경고를 반환할 가능성이 있었습니다 (서브쿼리는 여러 행을 반환합니다). (버그 #34336033)

내부 임시 테이블의 리소스 할당 처리가 개선되었습니다. (버그 #34174001)

INSTANT 알고리즘을 사용한 드롭 후 특정 열이 추가되면 데이터 오류가 발생하고 서버가 종료될 가능성이 있었습니다. (버그 #34122122)

다음과 같은 쿼리가 옵티마이저에 의해 잘못 변환되어 잘못된 결과를 초래했습니다:

SELECT 1 AS one 
FROM t 
JOIN ( SELECT 1 AS col1 UNION SELECT 2) derived
WHERE 1 = derived.col1;

이 경우, 옵티마이저는 1 = derived.col1UNION에 푸시다운하여 SELECT 2의 기여를 제거함으로써 잘못된 결과를 초래했습니다. 현재는 이러한 경우에 조건을 푸시다운하지 않습니다. (버그 #33910786)

ORDER BYLIMIT 중 하나 또는 둘 다를 포함하는 괄호로 묶인 일부 쿼리 식이 항상 올바르게 처리되지 않았습니다. (버그 #33725330)

모든 Item 객체에서 참조 카운트를 사용하여 다중 참조를 가진 Item 트리를 유지하도록 재구현했습니다. 또한, 이 변경으로 인해 불필요해진 오래된 코드를 제거했습니다. (버그 #33725415)

innodb_ddl_log 테이블의 정의가 변경된 경우, 데이터 딕셔너리 업그레이드 중에 InnoDB에서 어설션이 발생했습니다. 이는 테이블 및 열 정의의 utf8utf8_bin을 각각 utf8mb3utf8mb3_bin으로 업데이트하는 등, 이러한 변경이 실질적으로 널 작업이었더라도 발생했습니다. (버그 #33688509)
참조: 이 문제는 버그 #33787300의 리그레션입니다.

--single-transaction--set-gtid-purged=ON 옵션을 동시에 사용할 때, mysqldump로 백업된 데이터 및 GTIDs가 일관되지 않았습니다. 이는 mysqldump가 트랜잭션을 시작한 후 GTID_EXECUTED를 가져오는 사이에 서버의 GTID가 이미 증가했을 수 있기 때문이었습니다. 이 수정으로, GTID_EXECUTED를 가져오기 전에 FLUSH TABLES WITH READ LOCK을 수행하여 mysqldump가 취한 스냅샷과 그 값이 일관되도록 했습니다.
기여해 주신 마르셀로 알트만에게 감사드립니다.
제한 사항: 이 수정은 --single-transaction을 사용하여 FLUSH TABLES WITH READ LOCK을 실행할 때 RELOAD 권한을 요구하게 됩니다. MySQL 팀은 해결책을 조사 중입니다. (버그 #33630199, 버그 #105761)

SET PERSIST는 MyISAM의 다중 키 캐시 변수와 유사하게, 컴포넌트에 의해 등록된 변수의 점(.)으로 구분된 이름을 허용했으나, RESET PERSIST는 동일한 이름을 구문 오류로 거부했습니다. 이 불일치를 해결하기 위해, 점(.) 문자를 포함하는 변수 이름의 RESET PERSIST에 대한 지원을 추가했습니다. (버그 #33417357)

일부 그룹화된 쿼리가 항상 올바르게 처리되지 않았습니다. (버그 #33294005, 버그 #33349994)

다중 요소 인증에서 첫 번째 요소로 auth_socket 인증 플러그인을 사용하면, 서버가 두 번째 요소의 인증 워크플로우 중에 잘못된 코드를 실행하고 오류 메시지를 반환했습니다. 두 번째 요소는 임의의 인증 플러그인이 될 수 있습니다. (버그 #33192223)

구문이 지원되지 않는 경우에도, INSERT 문에서 열 식별자로 와일드카드를 사용하는 것이 파서에 의해 허용되어 디버그 빌드에서 어설션이 발생하고, 릴리스 빌드에서는 문장이 조용히 거부되었습니다. 이 구문은 문법에서 잠재적으로 제거되었으며, 현재는 엄격히 구문 오류로 처리됩니다. (버그 #33142665)참조: 이 문제는 버그 #30528450의 리그레션입니다.

프리페어드 스테이트먼트가 특정 유형의 서브쿼리를 사용할 때 서버 종료를 초래할 수 있었습니다. (버그 #33100586)

일부 부동 소수점 리터럴이 항상 올바르게 처리되지 않았습니다. (버그 #32824429)

테이블 별칭을 포함하는 DELETE 문이 서버를 간헐적으로 종료시킬 수 있었습니다. (버그 #32762229)

INFO_SRCINFO_BINmysql-common 패키지에서 mysql-community-server-core 패키지로 이동했습니다. 이 패키지는 mysqld와 동일한 패키지로, RPM 패키지와의 일관성이 향상되었습니다. (버그 #32752147)

HAVING 절 내에서 MATCH()를 사용하는 일부 쿼리가 올바르게 처리되지 않았습니다. (버그 #32616816, 버그 #32934558, 버그 #34782389)

서브쿼리를 포함하는 CREATE VIEW 문이 디버그 빌드에서 어설션을 발생시킬 수 있었습니다. (버그 #108783, 버그 #34703610)

사용자 정의 SQL 함수에 매개변수로 전달되는 동적 매개변수의 데이터 타입 추정이 하나의 매개변수에 대해서만 정확했습니다. 여러 매개변수를 사용할 경우 두 번째 이후 매개변수에 대해 이러한 추정이 수행되지 않아, 그 타입이 항상 MYSQL_TYPE_INVALID로 클라이언트에 잘못 보고되었습니다. (버그 #108545, 버그 #34629157)

내부 함수 clone_os_copy_file_to_buf()는 부분 읽기 경우에 버퍼 위치를 진행하지 않았습니다.
기여해 주신 로리나스 비베이니스에게 감사드립니다. (버그 #108317, 버그 #34543194)

시스템 뷰에 접근하는 뷰는, 푸시다운 조건에 시스템 뷰의 네이티브 함수를 사용하는 식이 포함된 경우, 일반 사용 중에 접근 거부 오류가 발생할 수 있었습니다. (버그 #108202, 버그 #34515868)

윈도우 함수를 사용하면, 현재 행이 잘못된 레코드에 기반하여 재평가될 수 있었습니다. (버그 #108008, 버그 #34431996)

LIKE 절을 가진 쿼리의 UNION으로의 조건 푸시다운은 올바른 문자 집합을 유지하지 않아 (잘못된) 빈 결과로 이어졌습니다. 이 문제는 두 부분으로 해결되었습니다:

  1. LIKE 식의 해석을 리팩토링하여, 이전에는 문자 집합 결정과 전파가 항상 상호 일관되지 않은 두 개의 별도 코드 블록에서 실행되었습니다.
  2. 내부 parse_expression() 함수에, 클론된 리터럴 문자열에 문자 집합 접두사를 추가함으로써.

(버그 #107787, 버그 #34359297, 버그 #34589153)

audit_log 서버사이드 플러그인은 실행된 쿼리의 특정 부분만 로그에 기록하는 것이 아니라, 여러 쿼리 전체를 항상 로그에 기록했습니다. 쿼리의 길이가 설정된 경우 이를 변경하여 문제를 해결했습니다. (버그 #107390, 버그 #34207811)

MySQL 8.0.27으로 업그레이드한 후, 특정 쿼리가 저장 프로시저 내에서 실행될 때마다 비교적 많은 메모리를 소비하기 시작했습니다. (버그 #107327, 버그 #34190122)

maximum- 접두사를 지정하여 mysqld 시작 옵션을 사용한 경우, 해당 시스템 변수의 상한이 설정되었으나, 현재 값이 새로운 제한에 대해 검사 또는 조정되지 않아 경우에 따라 지정된 최대값보다 커질 수 있었습니다. 현재 값이 새로운 사용자 정의 최대값보다 큰 경우, 현재 값을 조정하여 이를 수정했습니다. (버그 #99029, 버그 #31072098)

프리페어드 스테이트먼트가 KILL QUERY를 사용하여 취소된 후, mysql_stmt_close() C API 함수가 응답을 중단할 수 있었습니다. (버그 #84470, 버그 #25584097)

Leave a Comment



이 문서 공유

8.0.32 변경 사항 (2023-01-17 GA)

링크 복사

CONTENTS