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+express+Socketでチャット機能を実現

この記事では、チャット機能を実現するためのVue+express+Socketの具体的なコードを参考...

知っておくべき JS 配列削減の高度な使い方 25 選

序文Reduce は ES5 で追加された新しい従来の配列メソッドの 1 つです。forEach、f...

MySQL で複数の主キーが定義されているエラーの解決方法

主キーを作成するには 2 つの方法があります。 テーブルテーブル名を作成( フィールド名タイプ、 フ...

Mysqlデータテーブルでワームレプリケーションを使用する方法

簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...

IIS サーバーから apk ファイルをダウンロードする際の 404 エラーの解決策

最近、IIS をサーバーとして使用すると、apk ファイルがサーバーにアップロードされましたが、ダウ...

nginxで静的リソースを公開する方法

ステップ準備した静的リソースファイルを指定されたフォルダに配置しますnginx 設定ファイルを変更す...

Vue は動的な円形のパーセンテージ進捗バーを実装します

最近、小さなプログラムを開発しているときに、次の設計図のような円形のパーセンテージ進捗状況バーを実装...

JavaScript ベースのランダム点呼システムの実装

この記事では、ランダムロールコーラーを実装するためのJavaScriptの具体的なコードを参考までに...

ソースコード分析からTomcatがサーブレットの初期化を呼び出す方法の詳細な説明

目次導入1. Tomcatを起動するコード2. Tomcatフレームワーク3. コンテナを作成する ...

Linux で文字化けしたファイルや特殊文字のファイルを削除する方法

エンコーディングの理由により、Linux サーバーに中国語のファイルやディレクトリをアップロードまた...

MySQL ソートの原則とケース分析

序文ソートはデータベースの基本的な機能であり、MySQL も例外ではありません。ユーザーは、Orde...

Docker での Redis の最も詳細なインストールと構成 (画像とテキスト付き)

1. Dockerに適したRedisのバージョンを見つけるdocker hubで見つけることができ...

MySQL 制約の超詳細な説明

目次MySQL 制約操作1. 非ヌル制約2. ユニーク制約3. 主キー制約4. 外部キー制約5. カ...

Dockerを使用してSonarQubeをインストールする詳細なチュートリアル

目次1. イメージをプルする1.1 関連するイメージをプルして実行する1.1.1 関連する画像を取得...

sshとは何ですか?使い方は?どのような誤解があるのでしょうか?

目次序文SSHとは何かssh は何に使用されますか? sshの使い方ssh 再修正要約する序文ssh...