martes, 20 de marzo de 2018

MySQL 8.0.4rc

MySQL 8.0.4rc acaba de lanzarse como " Anteproyecto de disponibilidad general: 2018-03-19 ". 

Decidí echar un vistazo rápido y anotar mis impresiones aquí. Algunas de estas son viejas noticias para muchos ya que se ha hablado de este lanzamiento por un tiempo, pero agregué mis pensamientos de todos modos.

Lo primero que noté fue un simple problema de usar el cliente mysql actualizado. Mi versión anterior todavía estaba en mi camino que resultó en

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded
Por lo tanto, corrija fácilmente y asegúrese de estar utilizando el cliente mysql actualizado válido. Por supuesto, existían otras opciones, como cambiar el complemento de autenticación a mysql_native_password, pero ¿para qué molestarse? Utilice el método seguro. Esta es una muy buena mejora para la seguridad, así que no se sorprenda si tiene problemas de conexión mientras obtiene sus conexiones usando este método más 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.

Entonces, la primera mejora genial ...

mysql> show create table user\G
*************************** 1. row ***************************
Tabla: usuario
Crear tabla: 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') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Insert_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Update_priv` enum ('N', 'Y') CHARACTER SET utf8 NO NULO PREDETERMINADO 'N',
`Delete_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Create_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Drop_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Reload_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Shutdown_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Process_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`File_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Grant_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`References_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Index_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Alter_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Show_db_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Super_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Create_tmp_table_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Lock_tables_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Execute_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Repl_slave_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Repl_client_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Create_view_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Show_view_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Create_routine_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Alter_routine_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Create_user_priv` enum ('N', 'Y') CHARACTER SET utf8 NO NULO PREDETERMINADO 'N',
`Event_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Trigger_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Create_tablespace_priv` enum ('N', 'Y') CHARACTER SET utf8 NOT NULL PREDETERMINADO 'N',
`ssl_type` enum ('', 'ANY', 'X509', 'SPECIFIED') JUEGO DE CARACTERES utf8 NOT 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` text COLLATE utf8_bin,
`password_expired` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`password_last_changed` timestamp NULL DEFAULT NULL,
`password_lifetime` smallint (5) unsigned DEFAULT NULL,
`account_locked` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL DEFAULT 'N',
`Create_role_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Drop_role_priv` enum ('N', 'Y') JUEGO DE CARACTERES utf8 NOT NULL PREDETERMINADO 'N',
`Password_reuse_history` smallint (5) sin signo DEFAULT NULL,
`Password_reuse_time` smallint (5) sin signo DEFAULT NULL,
PRIMARY KEY (`Host`,` User`)
) / *! 50100 TABLESPACE `mysql` * / ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin STATS_PERSISTENT = 0 COMMENT = 'Usuarios y privilegios globales'
1 fila en el set (0.00 seg)

Sí, la tabla de usuarios es InnoDB y tiene TableSpace propio.

Con la adición del nuevo diccionario de datos, ahora notará cambios en Information_schema.
Por lo tanto, como un ejemplo simple, la tabla Columnas históricamente no ha sido vista, pero ahora ha cambiado, junto con muchas otras, como puede ver a través de la url proporcionada.


mysql> show create table COLUMNS \G
*************************** 1. row ***************************
Vista: COLUMNAS
Crear vista: CREAR ALGORITMO = DEFINER INDEFINIDO = `mysql.infoschema` @` localhost`

Esto parece estar hecho para ayudar al rendimiento con el esquema de información pero eliminando las creaciones de tablas temporales por consultas en el esquema de información.

El Capítulo 14 de la documentación profundiza en esto, la url proporcionada a continuación le ayudará a encontrar más información y las futuras publicaciones de blog podrían tocar más sobre esto.
El diccionario de datos mencionado anteriormente también conduce a la capacidad de tener sentencias atómicas del lenguaje de definición de datos (DDL) o DDL atómico.


Es probable que se pierdan algunas transacciones si no revisa sus consultas antes de configurar la replicación en una nueva instancia de MySQL 8.0. Lo digo por la forma en que el manejo del mantenimiento de la mesa podría verse afectado. Si escribe consultas claras con "Si existe", no será un gran problema. En general, es una función más basada en transacciones que protege sus datos y las opciones de reversión.


La administración de recursos se ve muy interesante y tendré que dedicar más tiempo para enfocarme en esto, ya que es una característica nueva con MySQL 8.0. En general, puede asignar grupos y ya no tiene que establecer la prioridad de la consulta, pero deje que su agrupación defina cómo se debe comportar una consulta y qué recursos se le asignan.

mysql> select @@version;
+------------+
| @@ versión |
+ ------------ +
| 5.7.16-log |
+ ------------ +
1 fila en el set (0.00 seg)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
ERROR 1109 (42S02): tabla desconocida 'RESOURCE_GROUPS' en information_schema

mysql> seleccionar @@ versión;
+ -------------- +
| @@ versión |
+ -------------- +
| 8.0.4-rc-log |
+ -------------- +
1 fila en el set (0.00 seg)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| Campo | Tipo | Nulo | Clave | Predeterminado | Extra |
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| RESOURCE_GROUP_NAME | varchar (64) | NO | | NULL | |
| RESOURCE_GROUP_TYPE | enum ('SISTEMA', 'USUARIO') | NO | | NULL | |
| RESOURCE_GROUP_ENABLED | tinyint (1) | NO | | NULL | |
| VCPU_IDS | blob | SÍ | | NULL | |
| THREAD_PRIORITY | int (11) | NO | | NULL | |
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
5 filas en el set (0.00 seg)


Más información sobre su caché de grupo de búfer InnoDB en lo que respecta a los índices que están en él ahora está disponible.

mysql> desc INFORMATION_SCHEMA.INNODB_CACHED_INDEXES ;
+----------------+---------------------+------+-----+---------+-------+
| Campo | Tipo | Nulo | Clave | Predeterminado | Extra |
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
| SPACE_ID | int (11) sin firmar | NO | | | |
| INDEX_ID | bigint (21) sin firmar | NO | | | |
| N_CACHED_PAGES | bigint (21) sin firmar | NO | | | |
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
3 filas en el set (0.01 seg)


Si no está seguro de qué configurar InnoDB Buffer pool, log_sizes o flush method, MySQL los configurará ahora basándose en la memoria disponible.

innodb_dedicated_server

[mysqld]
innodb-dedicated-server=1

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

Esta simple prueba establece mi innodb_buffer_pool_size a 6GB por ejemplo cuando el valor predeterminado es 128MB.

Numerosas adiciones JSON se han realizado, así como los cambios de expresiones regulares. Ambos parecen prometedores.

La única mejora de replicación según esta versión es que ahora es compatible con el registro binario de actualizaciones parciales en documentos JSON utilizando un formato binario compacto.

Sin embargo, en general, hay muchas funciones disponibles (puede leerlas todas aquí ), una de las cuales (desearía que mi cliente la tuviera mañana) es la de los usuarios que realizan la replicación por canal.
Mi instancia de prueba ya tenía habilitados los registros binarios, pero ahora están activados por defecto junto con TABLE y la información de maestro y esclavo basada en archivos (gran fan de tener esa transacción basada de manera predeterminada)

En general, tenga en cuenta que esto es solo una primera ojeada a este lanzamiento y pensamientos de muy alto nivel, existen muchos otros cambios. Revisar otras publicaciones de blog sobre este lanzamiento, así como el manual y las notas de la versióntambién lo ayudará. Ciertamente descargue y revise, ya que parece ser muy prometedor para los puntos de vista de administración, seguridad y replicación.