MySQL 8.0.23 メジャーアップデート (新機能)

MySQL 8.0.23 メジャーアップデート (新機能)

著者: Guan Changlong は、Aikesheng の配送サービス部門の DBA です。主に MySQL と Redis の日常的な問題処理を担当し、会社のデータベース トレーニングの教育と研究、オープン ソース コミュニティの運営に参加しています。
出典: オリジナル寄稿
* Aikesheng オープンソース コミュニティによって作成されたオリジナル コンテンツは、許可なく使用することはできません。転載する場合は、編集者に連絡して出典を明記してください。

前回の記事では、MySQL 8.0.23 のインストール方法についての非常に詳細なチュートリアルを紹介しました。ご興味があれば、クリックしてご覧ください。

本日、MySQL 8.0.23 がリリースされました。リリース頻度は 3 か月に 1 回で安定しています。このリリースはメンテナンス バージョンです。いくつかのバグが修正されたほか、いくつかの新機能も追加されています。

1. 見えない列

列は非表示として定義できます。例:

# テーブルを作成するときに、それを非表示にすることができます (ALTER TABLE もこれをサポートしています)
mysql> テーブル t1 を作成します (col1 は INT、col2 は INT INVISIBLE)。
mysql> t1 (col1, col2) に値 (1, 2), (3, 4) を挿入します。

# SQL ステートメントは、非表示の列を明示的に参照して使用します。mysql> SELECT * FROM t1;
+------+
| 列1 |
+------+
| 1 |
| 3 |
+------+

# 非表示の列が参照されていない場合、結果には表示されません。mysql> SELECT col1, col2 FROM t1;
+------+------+
| 列1 | 列2 |
+------+------+
| 1 | 2 |
| 3 | 4 |
+------+------+

https://dev.mysql.com/doc/refman/8.0/en/invisible-columns.html

2. クエリ属性

アプリケーションがクエリごとにクエリごとのメタデータを設定できるようにします。

mysql> query_attributes n1 v1 n2 v2;
mysql> 選択
     mysql_query_attribute_string('n1') は '属性1' として、
     mysql_query_attribute_string('n2') は '属性2' として、
     mysql_query_attribute_string('n3') は 'attr 3' として扱われます。
+--------+--------+--------+
| 属性 1 | 属性 2 | 属性 3 |
+--------+--------+--------+
| v1 | v2 | NULL |
+--------+--------+--------+

https://dev.mysql.com/doc/refman/8.0/en/query-attribute-udfs.html#udf_mysql-query-attribute-string

3. 安全性

二重書き込みファイルページ暗号化

InnoDB は、暗号化された表領域に属する Doublewrite ファイル ページを自動的に暗号化します。アクションは必要ありません。ダブルライト ファイル ページは、関連付けられた表領域の暗号化キーを使用して暗号化されます。同じ表領域にデータが書き込まれる暗号化されたページも Doublewrite ファイルに書き込まれます。暗号化されていない表領域に属する二重書き込みファイル ページは暗号化されないままになります。回復中、暗号化された Doublewrite ファイル ページは暗号化解除され、破損がないかチェックされます。

https://dev.mysql.com/doc/refman/8.0/en/innodb-data-encryption.html

アカウントの確実性を向上させる

TCP 接続のアカウント照合をより決定論的にするために、ホスト名で指定されたアカウントを照合する前に、照合アカウントのホスト名部分が次の順序でチェックされます。ホスト IP アドレスを使用してアカウントを指定します。

# IP アドレスでアカウントを指定しますmysql> CREATE USER 'user_name'@'127.0.0.1';
mysql> CREATE USER 'user_name'@'198.51.100.44';

# CIDR 表記を使用して IP アドレスとして指定されたアカウントmysql> CREATE USER 'user_name'@'192.0.2.21/8';
mysql> 'user_name'@'198.51.100.44/16' というユーザーを作成します。

# サブネットマスク形式の IP アドレスとして指定されたアカウントを使用します。mysql> CREATE USER 'user_name'@'192.0.2.0/255.255.255.0';
mysql> CREATE USER 'user_name'@'198.51.0.0/255.255.0.0';

https://dev.mysql.com/doc/refman/8.0/en/接続アクセス.html

より正確なFLUSH権限

RELOAD 権限を付与されたユーザーは、さまざまな操作を実行できます。 DBA が場合によっては RELOAD の付与を回避し、ユーザー権限を許可された操作に近づけることができるように、FLUSH 操作に対するよりきめ細かい権限制御が導入され、顧客は RELOAD 権限なしで FLUSH OPTIMIZER_COSTS、FLUSH STATUS、FLUSH USER_RESOURCES、および FLUSH TABLES ステートメントを実行できるようになりました。

特権の付与

4. バイナリ

TRUNCATE / DROP の最適化

ユーザーが InnoDB テーブルスペースに対して TRUNCATE または DROP 操作を実行すると、次のようになります。

  • 大きなバッファプール(>32GB)を持つインスタンス上の大きなテーブルを削除する
  • 多数のページを参照する適応ハッシュインデックスを持つ表領域の場合
  • 一時表領域を切り捨てる

上記の場合、MySQL はそれを削除済みとしてマークし、削除された表領域に属するすべてのページをバッファ プールから遅延解放するか、ページを解放するときに再利用します。

テーブルスペースのAUTOEXTEND_SIZE属性を追加しました

InnoDB の通常テーブルの CREATE / ALTER TABLESPACE 句と独立テーブルスペースの CREATE / ALTER TABLE 句に、新しい自動拡張属性が追加されました。元のテーブルスペースの増加サイズは、InnoDB 内で内部的に 1MB [デフォルト] (page_size * 範囲内のページ数) にハードコードされています。一度設定すると、表領域はユーザーが決定したサイズまで拡張できます。

# テーブルを作成または変更するときに拡張スペースのサイズを指定します。 mysql> CREATE TABLE t1 (c1 INT) AUTOEXTEND_SIZE = 4M;
mysql> ALTER TABLE t1 AUTOEXTEND_SIZE = 4M;

# 属性値をクエリするmysql> SELECT NAME, AUTOEXTEND_SIZE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES 
    WHERE NAME LIKE 'test/t1';
+---------+-----------------+
| 名前 | AUTOEXTEND_SIZE |
+---------+-----------------+
| テスト/t1 | 4194304 |
+---------+-----------------+

https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-autoextend-size.html

temptable_max_mmap変数を追加しました

新しい変数は、TempTable ストレージ エンジンが内部一時テーブル データを InnoDB ディスクの内部一時テーブルに保存する前に、メモリ マップ ファイルから割り当てることができるメモリの最大量を定義します。 temptable_max_mmap = 0 設定は、メモリマップされたファイルからの割り当てを無効にします。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_temptable_max_mmap

5. コピー

用語の置換

CHANGE MASTER TO ステートメントは非推奨です。代わりにエイリアス CHANGE REPLICATION SOURCE TO を使用してください。ステートメントのパラメータには、MASTER という用語を SOURCE という用語に置き換えるエイリアスもあります。たとえば、MASTER_HOST と MASTER_PORT は、SOURCE_HOST と SOURCE_PORT として入力できるようになりました。 START REPLICA | SLAVE ステートメントのパラメータ MASTER_LOG_POS および MASTER_LOG_FILE に、エイリアス SOURCE_LOG_POS および SOURCE_LOG_FILE が追加されました。ステートメントは以前と同じように機能しますが、各ステートメントで使用される用語のみが変更されています。古いバージョンを使用すると、非推奨の警告が発行されます。

GTID が無効なマスターから GTID が有効なスレーブに直接複製する

CHANGE REPLICATION SOURCE TO ステートメントの新しいオプション: ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = [OFF,LOCAL,<UUID>]

非 GTID インスタンスと GTID インスタンス間でデータを転送できるようにします。

https://dev.mysql.com/doc/refman/8.0/en/replication-gtids-assign-anon.html

MTSデッドロック検出インフラストラクチャにMDLおよびACLロックを含める

SOURCE と同じコミット順序を維持するマルチスレッド REPLICA を提供するために必要なスレッド シリアル化インフラストラクチャを、MDL および ACL アクセス シリアル化インフラストラクチャと統合します。目的は、REPLICA が変更ストリームをアクティブに処理している間に、REPLICA 上で任意のクライアント ステートメントを実行できるようにすることです。このようなステートメントはデッドロックを引き起こす可能性があり、実行を続行するにはこれを検出し、最終的に解除する必要があります。

グループレプリケーション

非同期レプリケーション チャネルの自動接続フェイルオーバーにより、受信側の送信者リストがグループ レプリケーション メンバーシップの変更と同期されるようになります。

6. Xプロトコル

従来の MySQL プロトコルでは、SQL クエリがメタデータ ロックまたはスリープ関数を使用する場合、サーバーへの接続が定期的にチェックされ、それがまだ有効であるかどうかが検証されます。 そうでない場合は、クエリを停止して、リソースを消費し続けないようにすることができます。以前は、X プロトコルはこれらのチェックを実行せず、接続がまだ有効であると想定していました。 X プロトコルのチェックが追加されました。

MySQL 8.0.23 以降では、サーバーは接続を閉じたばかりか、独自に閉じたかをすべてのクライアントに通知します。クライアントはこの情報を使用して、再接続して再試行する価値があるかどうかを判断できます。

VII. その他

ハッシュ結合のハッシュ テーブル実装を最適化します。目標は、パフォーマンスを向上させ、メモリ使用量を削減し、メモリ制御を改善することです。

古い InnoDB コードの一部を標準 C++11 に置き換えました。コード内でアトミック性を使用するためのルールとセマンティクスを適用し、より標準に準拠したものにします。

8. 廃止と削除

relay_log_info_repository と master_info_repository は非推奨になりました。ユーザーが relay_log_info_repository または master_info_repository 変数の値を設定または読み取ると、非推奨の警告が表示されます。今後、レプリケーション構成とメタデータを保存するための唯一のオプションは、トランザクション システム テーブルになります。

FLUSH HOSTS ステートメントは非推奨となり、代わりに TRUNCATE performance_schema.host_cache が推奨されます。このステートメントは、将来の MySQL バージョンでは削除される予定です。

記事参照

MySQL 8.0.23 リリースノート:

8.0 リリースノート

MySQL 8.0.23 メンテナンスリリースが一般公開されました

https://mysqlserverteam.com/the-mysql-8-0-23-maintenance-release-is-generally-available/

MySQL 8.0.23 のメジャーアップデート(新機能の解釈)に関するこの記事はこれで終わりです。MySQL 8.0.23 のアップデートに関する詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • mysql8.0.23 Linux (centos7) のインストールの完全かつ詳細なチュートリアル
  • MySQL 8.0.23 インストールの超詳細なチュートリアル
  • Centos7 に MySQL 8.0.23 をインストールする手順 (初心者レベル)

<<:  XHTML と CSS によるオブジェクト指向プログラミング

>>:  純粋な CSS3 で蝶が羽ばたく様子を再現する例

推薦する

Vue-routerルーティングの使い方

目次1. 説明2. インストール3. テスト1. 説明Vue Router は、Vue.js の公式...

Vueコンポーネントの基本のまとめ

コンポーネントの基本1 コンポーネントの再利用コンポーネントは再利用可能な Vue インスタンスです...

sed コマンドを使用してファイルの特定の行を効率的に削除する方法

序文通常、ファイル内の特定の行を削除したい場合は、まずファイルを開き、削除する内容を見つけて、これら...

MySQLのバックアップとリカバリの簡単な分析

目次1. はじめに2. バックアップとリカバリの簡単な定義3. 復旧計画で考慮すべきいくつかの要素4...

CSS と Bootstrap アイコンを使用して、上下にジャンプするインジケーター矢印のアニメーション効果を作成します。

ページが非常に長い場合は、下にさらにコンテンツがあることをユーザーに知らせるために矢印が必要になるこ...

MySQL の指定文字によるマージと分割の例のチュートリアル

序文指定した文字による結合または分割は一般的なシナリオです。MySQL では結合の記述は比較的簡単で...

エンコードが utf-8 に設定されている場合に Web ページが文字化けする問題の解決策

最近、PHP で Web ページを書いているときに、エンコードを UTF-8 に設定しました。しかし...

CocosCreator で http と WebSocket を使用する方法

目次1. HTTPGET 2. HTTP POSTウェブソケット4. Egretのhttpとwebs...

mysql-8.0.17-winx64 のデプロイメント方法

1. 公式サイトからmysql-8.0.17-winx64をダウンロードし、Zipファイル形式を選択...

MySQL パーティション フィールド列に別のインデックスを作成する必要がありますか?

序文パーティション フィールドは主キーの一部でなければならないことは誰もが知っています。では、複合主...

ウェブ標準学習リソースの素晴らしいコレクション

これらの仕様は、下位互換性のあるドキュメントを Web 上で公開し、できるだけ幅広いユーザーがアクセ...

HTMLフォーム送信方法のケーススタディ

フォームの送信方法をまとめると次のようになります。 1. 送信ボタンを使用して送信します。送信ボタン...

携帯電話番号が合法かどうかを判断するWeChatアプレットのサンプルコード

目次シナリオ効果コード要約するシナリオ登録ページに携帯電話番号を入力し、登録インターフェイスを要求す...

HTML のボタン タグをクリックしてページにジャンプする 3 つの方法

方法1: onclickイベントを使用する <input type="button&...

Docker の 4 つのネットワーク タイプの主な例

4 つのネットワーク タイプ:なし: コンテナのネットワーク機能を一切設定しません。--net=no...