2018年3月20日星期二

MySQL 8.0.4rc

MySQL 8.0.4rc剛剛發佈為“ Pre-General Availability草案: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`(
`主機`字符(60)COLLATE utf8_bin NOT NULL DEFAULT'',
`User` char(32)COLLATE utf8_bin NOT NULL DEFAULT'',
`Select_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Insert_priv` enum('N','Y')字符集utf8不為NULL默認'N',
`Update_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Delete_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Drop_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Reload_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Shutdown_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Process_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`File_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Grant_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`References_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Index_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Alter_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Show_db_priv` enum('N','Y')字符集utf8不為NULL默認'N',
`Super_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_tmp_table_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Lock_tables_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Execute_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Repl_slave_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Repl_client_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_view_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Show_view_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_routine_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Alter_routine_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_user_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Event_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Trigger_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Create_tablespace_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`ssl_type`枚舉('','ANY','X509','SPECIFIED')字符集utf8不為NULL DEFAULT'',
`ssl_cipher` blob NOT NULL,
`x509_issuer` blob NOT 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`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`password_last_changed` timestamp NULL DEFAULT NULL,
`password_lifetime` smallint(5)unsigned DEFAULT NULL,
`account_locked` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_role_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Drop_role_priv` enum('N','Y')字符集utf8不為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 ='用戶和全局權限'
一排(0.00秒)

是的,用戶表是InnoDB並擁有自己的TableSpace。

隨著新數據字典的添加,您現在將注意到Information_schema更改。
因此,作為一個簡單的示例,歷史上的Columns表格不是一個視圖,但現在已經發生變化,以及許多其他視圖,您可以通過所提供的網址查看。


mysql> show create table COLUMNS \G
*************************** 1. row ***************************
查看:COLUMNS
創建視圖: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;
+------------+
| @@ version |
+ ------------ +
| 5.7.16-log |
+ ------------ +
一排(0.00秒)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
錯誤1109(42S02):information_schema中的表“RESOURCE_GROUPS”未知

mysql> select @@ version;
+ -------------- +
| @@ version |
+ -------------- +
| 8.0.4-rc-log |
+ -------------- +
一排(0.00秒)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| 字段| 類型| 空| Key | 默認| 額外|
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| RESOURCE_GROUP_NAME | varchar(64)| NO | | NULL | |
| RESOURCE_GROUP_TYPE | 枚舉('SYSTEM','USER')| NO | | NULL | |
| RESOURCE_GROUP_ENABLED | tinyint(1)| NO | | NULL | |
| VCPU_IDS | blob | 是| | NULL | |
| THREAD_PRIORITY | int(11)| NO | | NULL | |
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
5行(0.00秒)


關於InnoDB緩衝池緩存的更多信息現在可用。

mysql> desc INFORMATION_SCHEMA.INNODB_CACHED_INDEXES ;
+----------------+---------------------+------+-----+---------+-------+
| 字段| 類型| 空| Key | 默認| 額外|
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
| SPACE_ID | int(11)unsigned | NO | | | |
| INDEX_ID | bigint(21)unsigned | NO | | | |
| N_CACHED_PAGES | bigint(21)unsigned | 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文檔進行部分更新的二進制日誌記錄。

然而,總體而言,許多功能都可用(您可以在這裡閱讀所有關於它們的信息 ),其中一個(我希望我的客戶明天)是每個通道的複製文件管理器。
我的測試實例已經啟用了二進制日誌,但它們現在默認情況下與基於TABLE和基於文件的主從信息一起使用(默認情況下基於該事務的粉絲)

總的來說,這只是第一眼看到這個版本和對它的非常高層次的想法,還有很多其他的變化。 查看有關此版本的其他博客帖子以及手冊發行說明也將有所幫助。 當然,下載和復審看起來對於管理,安全和復制的觀點非常有希望。