2018年3月20日火曜日

MySQL 8.0.4rc

MySQL 8.0.4rcは、「 一般公開前のドラフト:2018-03-19 」としてリリースされました 。 

私は素早く覗いて、ここに私の印象を書き留めることにしました。 このリリースはしばらく話されていたので、これはいくつかの古いニュースですが、とにかく私の考えを追加しました。

私が気づいた最初のことは、更新されたmysqlクライアントを使うという簡単な問題でした。 私の古いバージョンはまだ私の道に残っていた

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded
簡単な修正と有効な最新のmysqlクライアントを使用していることを確認してください。 もちろん、認証プラグインをmysql_native_passwordに戻して変更するなど、他のオプションも存在しましたが、なぜセキュリティメソッドを使用するのか気にしないでください。 これはセキュリティの非常に優れた拡張です。このより安全な方法を使用して接続を取得しているときに接続の問題がある場合は、驚かないでください。


Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 8.0.4-rc-log

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

だから最初の非常にクールな強化...

mysql> show create table user\G
*************************** 1. row ***************************
テーブル:ユーザー
テーブルの作成:CREATE TABLE `user`(
`Host` char(60)COLLATE utf8_bin NOT NULL DEFAULT ''、
`User` char(32)COLLATE utf8_bin NOT NULL DEFAULT ''、
`Select_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Insert_priv` enum( 'N'、 'Y')CHARACTER SET utf8 NOT NULL DEFAULT 'N'、
`Update_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Delete_priv`列挙型( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Create_priv`列挙型( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Drop_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Reload_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Shutdown_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Process_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`File_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Grant_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`References_priv` enum( 'N'、 'Y')CHARACTER SET utf8 NOT NULL DEFAULT 'N'、
`Index_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Alter_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Show_db_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Super_priv` enum( 'N'、 'Y')CHARACTER SET utf8 NOT NULL DEFAULT 'N'、
`Create_tmp_table_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Lock_tables_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Execute_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Repl_slave_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Repl_client_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Create_view_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Show_view_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Create_routine_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Alter_routine_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Create_user_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Event_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Trigger_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Create_tablespace_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`ssl_type` enum( ''、 'ANY'、 'X509'、 'SPECIFIED')キャラクタセットutf8 NOT NULL DEFAULT ''、
`ssl_cipher` blobはNULLではありませんが、
`x509_issuer`ブロブはNULLではない、
`x509_subject` blob NOT NULL、
`max_questions` int(11)unsigned NOT NULL DEFAULT '0'、
`max_updates` int(11)unsigned NOT NULL DEFAULT '0'、
`max_connections` int(11)unsigned NOT NULL DEFAULT '0'、
`max_user_connections` int(11)unsigned NOT NULL DEFAULT '0'、
`plugin` char(64)COLLATE utf8_bin NOT NULL DEFAULT 'caching_sha2_password'、
`authentication_string`テキストCOLLATE utf8_bin、
`password_expired` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`password_last_changed`タイムスタンプNULL DEFAULT NULL、
`password_lifetime` smallint(5)符号なしDEFAULT NULL、
`account_locked`列挙型( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Create_role_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Drop_role_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Password_reuse_history` smallint(5)unsigned DEFAULT NULL、
`Password_reuse_time` smallint(5)unsigned DEFAULT NULL、
PRIMARY KEY( `Host`、` User`)
)/ *!50100 TABLESPACE `mysql` * / ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin STATS_PERSISTENT = 0 COMMENT = 'ユーザーとグローバル特権'
1行セット(0.00秒)

YEPのユーザーテーブルはInnoDBであり、独自のTableSpaceを持っています。

新しいデータディクショナリを追加すると、Information_schemaの変更が通知されます。
したがって、単純な例として、Columnsテーブルは歴史的にビューではありませんでしたが、現在は変更されています。


mysql> show create table COLUMNS \G
*************************** 1. row ***************************
表示:列
ビューの作成:CREATE ALGORITHM = UNDEFINED DEFINER = `mysql.infoschema` @` localhost`

これは、information_schemaでのパフォーマンスを助けるために行われるように見えますが、クエリごとの一時テーブルの作成を削除してinformation_schemaにします。

ドキュメントの第14章でこれについて深く掘り下げて説明します。詳細は以下のURLを参照してください。
また、前述のデータディクショナリは、アトミックデータ定義言語(DDL)文またはアトミックDDLを持つことができます。


新しいMySQL 8.0インスタンスへのレプリケーションを設定する前にクエリを確認しないと、これはいくつかのトランザクションを呼び起こす可能性があります。 テーブルメンテナンスの取り扱いにどのような影響が及ぶかという理由で、私はそれを言います。 "If Exists"というクリーンなクエリを書くと、大きな問題にはなりません。 全体的に、データとロールバックのオプションを保護する、より多くのトランザクションベースの機能です。


リソース管理は非常に興味深く見えます.MySQL 8.0の新機能であるため、これに重点を置くためにはもっと時間をかけなければなりません。 全体的にグループを割り当て、クエリの優先度を設定する必要はなく、クエリの振る舞いやリソースの割り当て方法をグループ化することができます。

mysql> select @@version;
+------------+
| @@バージョン|
+ ------------ +
| 5.7.16-log |
+ ------------ +
1行セット(0.00秒)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
ERROR 1109(42S02):information_schemaの 'RESOURCE_GROUPS'テーブルが不明です

mysql> select @@ version;
+ -------------- +
| @@バージョン|
+ -------------- +
| 8.0.4-rc-log |
+ -------------- +
1行セット(0.00秒)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| フィールド| タイプ| Null | キー| デフォルト| 余分な|
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| RESOURCE_GROUP_NAME | varchar(64)| NO | | NULL | |
| RESOURCE_GROUP_TYPE | 列挙型( 'SYSTEM'、 'USER')| NO | | NULL | |
| RESOURCE_GROUP_ENABLED | tinyint(1)| NO | | NULL | |
| VCPU_IDS | ブロブ| はい | NULL | |
| THREAD_PRIORITY | int(11)| NO | | NULL | |
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
5行セット(0.00秒)


InnoDBバッファプールのキャッシュに関する詳細は、現在使用可能なインデックスに関するものです。

mysql> desc INFORMATION_SCHEMA.INNODB_CACHED_INDEXES ;
+----------------+---------------------+------+-----+---------+-------+
| フィールド| タイプ| Null | キー| デフォルト| 余分な|
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
| SPACE_ID | int(11)unsigned | NO | | | |
| INDEX_ID | bigint(21)署名なし| NO | | | |
| N_CACHED_PAGES | bigint(21)署名なし| NO | | | |
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
3行セット(0.01秒)


InnoDBバッファプールを設定する方法が不明な場合は、log_sizesまたはflushメソッドを使用して、使用可能なメモリに基づいてMySQLを設定します。

innodb_dedicated_server

[mysqld]
innodb-dedicated-server=1

mysql> select @@ innodb_dedicated_server;
+ --------------------------- +
| | @ innodb_dedicated_server |
+ --------------------------- +
| 1 |
+ --------------------------- +

この単純なテストでは、innodb_buffer_pool_sizeを6GBに設定しています(デフォルトは128MBです)。

数多くのJSONの追加と、正規表現の変更が行われました。 どちらも有望です。

このリリース自体のレプリケーションの強化は、コンパクトバイナリ形式を使用したJSONドキュメントの部分的な更新のバイナリログをサポートするようになりました。

しかし、全体的に多くの機能が利用できます( ここではそのすべてを読むことができます )。そのうちの1つ(クライアントが明日持っていたがっています)は、チャネルごとの複製ファイルです。
私のテストインスタンスはすでにバイナリログを有効にしていましたが、デフォルトではTABLEとファイルベースのマスター&スレーブ情報がデフォルトでオンになっています。

全体的に、これはこのリリースでの最初の一見とそれに対する非常に高いレベルの考えであり、他にも多くの変更が存在することに留意してください。 このリリースに関する他のブログ投稿や、 マニュアルリリースノートを見ることも役立ちます。 管理、セキュリティ、レプリケーションの観点から非常に有望であるように見えるので、確かにダウンロードしてレビューしてください。