terça-feira, 20 de março de 2018

MySQL 8.0.4rc

O MySQL 8.0.4rc foi lançado como " Antecipação de Disponibilidade Geral: 2018-03-19 ". 

Eu decidi dar uma olhada rápida e anotar minhas impressões aqui. Algumas dessas notícias são novidades para muitos, pois esse lançamento foi falado por algum tempo, mas adicionei meus pensamentos de qualquer maneira ...

A primeira coisa que notei foi uma simples questão de usar o cliente mysql atualizado. Minha versão mais antiga ainda estava no meu caminho, que resultou em

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded
Tão simples de corrigir e certifique-se de que está usando o cliente mysql atualizado válido. É claro que existiram outras opções, como alterar o plugin de autenticação de volta para mysql_native_password, mas por que incomodar, use o método seguro. Este é um aprimoramento muito bom para a segurança, então não fique chocado se você tiver alguns problemas de conexão enquanto você obtém suas conexões usando este método mais seguro.


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.

Então, o primeiro aprimoramento muito legal ...

mysql> show create table user\G
*************************** 1. row ***************************
Tabela: usuário
Criar tabela: 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') CONFIGURAÇÃO DO CARÁTER utf8 NÃO NULL DEFAULT 'N',
`Insert_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Update_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Delete_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Create_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Drop_priv` enum ('N', 'Y') CONFIGURAÇÃO DO CARÁTER utf8 NÃO NULL DEFAULT 'N',
`Reload_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Shutdown_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Process_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`File_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Grant_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`References_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Index_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Alter_priv` enum ('N', 'Y') CONFIGURAÇÃO DO CARÁTER utf8 NÃO NULL DEFAULT 'N',
`Show_db_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Super_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Create_tmp_table_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Lock_tables_priv` enum ('N', 'Y') CONFIGURAÇÃO DO CARÁTER utf8 NÃO NULL DEFAULT 'N',
`Execute_priv` enum ('N', 'Y') CONFIGURAÇÃO DO CARÁTER utf8 NÃO NULL DEFAULT 'N',
`Repl_slave_priv` enum ('N', 'Y') CONFIGURAÇÃO DO CARÁTER utf8 NÃO NULL DEFAULT 'N',
`Repl_client_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Create_view_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Show_view_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Create_routine_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Alter_routine_priv` enum ('N', 'Y') CONFIGURAÇÃO DO CARÁTER utf8 NÃO NULL DEFAULT 'N',
`Create_user_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Event_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Trigger_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Create_tablespace_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`ssl_type` enum ('', 'ANY', 'X509', 'ESPECIFICADO') CHARACTER SET utf8 NOT NULL DEFAULT '',
`ssl_cipher` blob NÃO NULL,
`x509_issuer` blob NOT NULL,
`x509_subject` blob NOT NULL,
`max_questions` int (11) não assinado NOT NULL DEFAULT '0',
`max_updates` int (11) não assinado NOT NULL DEFAULT '0',
`max_connections` int (11) não assinado NOT NULL DEFAULT '0',
`max_user_connections` int (11) não assinado NOT NULL DEFAULT '0',
`plugin` char (64) COLLATE utf8_bin NOT NULL DEFAULT 'caching_sha2_password',
texto `authentication_string` COLLATE utf8_bin,
`password_expired` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`password_last_changed` timestamp NULL DEFAULT NULL,
`password_lifetime` smallint (5) não assinado DEFAULT NULL,
`account_locked` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Create_role_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Drop_role_priv` enum ('N', 'Y') CHARACTER SET utf8 NÃO NULL DEFAULT 'N',
`Password_reuse_history` smallint (5) não assinado DEFAULT NULL,
`Password_reuse_time` smallint (5) não assinado DEFAULT NULL,
CHAVE PRIMÁRIA (`Host`,` Usuário ')
) / *! 50100 TABLESPACE `mysql` * / ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin STATS_PERSISTENT = 0 COMMENT = 'Usuários e privilégios globais'
1 linha no set (0,00 seg)

A tabela de usuários do Yep é InnoDB e possui TableSpace próprio.

Com a adição do novo Dicionário de dados, você notará as alterações de Information_schema.
Então, como um exemplo simples, a tabela de colunas historicamente não foi uma visão, mas agora mudou, juntamente com muitos outros como você pode ver através da URL fornecida.


mysql> show create table COLUMNS \G
*************************** 1. row ***************************
Vista: COLUMNAS
Criar vista: CREATE ALGORITHM = DEFINER DESFASTADO = `mysql.infoschema` @` localhost`

Isso parece ser feito para ajudar o desempenho com o information_schema, mas removendo as criações da tabela temporária por consultas no information_schema.

O capítulo 14 da documentação entra em profundidade sobre isso, a URL fornecida abaixo irá ajudá-lo a encontrar mais informações e as futuras postagens de blog podem afetar mais isso.
O Dicionário de Dados mencionado anteriormente também conduz à capacidade de ter declarações atômicas de linguagem de definição de dados (DDL) ou DDL atômica.


Isso provavelmente tropeçará algumas transações se você não analisar suas consultas antes de configurar a replicação para uma nova instância do MySQL 8.0. Eu digo isso por causa de como o manuseio da manutenção da tabela pode ser afetado. Se você escrever consultas limpas com "If Exists", não será um grande problema. No geral, é um recurso mais baseado em transações que protege suas opções de dados e reversão.


O gerenciamento de recursos parece muito interessante e vou ter que levar mais tempo para se concentrar nisso, pois é um novo recurso com o MySQL 8.0. Em geral, você pode atribuir grupos e não precisa mais definir a prioridade da consulta, mas deixar seu agrupamento definir como uma consulta deve se comportar e os recursos atribuídos a ela.

mysql> select @@version;
+------------+
| @@ version |
+ ------------ +
| 5.7.16-log |
+ ------------ +
1 linha no set (0,00 seg)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
ERRO 1109 (42S02): tabela desconhecida 'RESOURCE_GROUPS' em information_schema

mysql> selecione @@ versão;
+ -------------- +
| @@ version |
+ -------------- +
| 8.0.4-rc-log |
+ -------------- +
1 linha no set (0,00 seg)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| Campo | Digite | Nulo | Chave | Padrão | Extra |
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| RESOURCE_GROUP_NAME | varchar (64) | NO | | NULL | |
| RESOURCE_GROUP_TYPE | enum ('SYSTEM', 'USUÁRIO') | NO | | NULL | |
| RESOURCE_GROUP_ENABLED | tinyint (1) | NO | | NULL | |
| VCPU_IDS | blob | SIM | | NULL | |
| THREAD_PRIORITY | int (11) | NO | | NULL | |
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
5 linhas no conjunto (0,00 seg)


Mais informações sobre o cache do pool de buffer InnoDB em relação aos índices que estão nele estão agora disponíveis.

mysql> desc INFORMATION_SCHEMA.INNODB_CACHED_INDEXES ;
+----------------+---------------------+------+-----+---------+-------+
| Campo | Digite | Nulo | Chave | Padrão | Extra |
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
| SPACE_ID | int (11) não assinado | NO | | | |
| INDEX_ID | bigint (21) não assinado | NO | | | |
| N_CACHED_PAGES | bigint (21) não assinado | NO | | | |
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
3 linhas no conjunto (0,01 seg)


Se você não tiver certeza do que configurar o pool de buffer InnoDB, log_sizes ou método de descarga, o MySQL irá configurá-los agora com base na memória disponível.

innodb_dedicated_server

[mysqld]
innodb-dedicated-server=1

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

Este teste simples define meu innodb_buffer_pool_size para 6GB, por exemplo, quando o padrão é 128MB.

Numerosas adições JSON foram feitas, bem como mudanças regulares de expressão. Ambos os quais parecem promissores.

O único aprimoramento de replicação por esta versão em si é que agora é compatível com registro binário de atualizações parciais para documentos JSON usando um formato binário compacto.

No entanto, em geral, muitos recursos estão disponíveis (você pode ler tudo sobre eles aqui ), um dos quais (eu queria que meu cliente tivesse amanhã) é um filtro de replicação por canal.
Minha instância de teste já tinha logs binários ativados, mas eles estão ativados por padrão agora, juntamente com a base de tabela baseada em arquivos baseados em arquivos e informações de escravos (grande fã de ter essa transação por padrão)

No geral, tenha em mente que esta é apenas uma primeira olhada neste lançamento e pensamentos de muito alto nível, muitas outras mudanças existem. Olhar para outras postagens de blog sobre este lançamento, bem como o manual e as notas de versãotambém ajudarão. Certamente, baixe e revele como parece ser muito promissor para os pontos de vista de administração, segurança e replicação.