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.

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

MySQL Cheat Sheet

Então, primeiro postei em algum momento como senti que deveria ser. Fiquei muito ocupado ainda trabalhando com o MySQL e todos os garfos relacionados e não consegui colocar blogs como eu senti que deveria. Então vou trabalhar com isso. 

Agora, sendo dito, recordei no outro dia um site que eu adorava porque era uma lista comum de tabelas de truques VI. A sintaxe que você conhece, você sabe que precisa, mas digite 3 vezes até que esteja certo. Quando é que entra logo, olha-o estupefato, pensei que já escrevi isso. 

Então eu percebi por que não uma simples lista de comandos comuns do MySQL que todos nós fazemos 50 vezes por mês ou devemos saber como a parte de trás da nossa mão, mas esquecemos quando o cliente está olhando por cima do ombro. 
Para iniciantes.. 
Criamos um novo servidor MySQL 5.7.6+ e entre. 
Precisa mudar a senha antes que possamos fazer qualquer coisa. Mas é Alter User não Set pass. 
Queremos saber como ler a senha ainda como está em texto limpo. 

ALTER USER 
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; 
Definir senha é 
SET PASSWORD FOR 'bob''@'localhost' = PASSWORD('cleartext password'); 

Purgar logs binários 
PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2008-04-02 00:00:00
PURGE BINARY LOGS BEFORE NOW() - interval 3 DAY;

MySQL Dump 
# COMPACT WILL REMOVE DROP STATEMENTS
mysqldump --events --master-data=2 --routines --triggers --compact --all-databases > db.sql
mysqldump --events --master-data=2 --routines --triggers --all-databases > NAME.sql
mysqldump --opt --routines --triggers dbname > dbname.sql
mysqldump --opt --routines --triggers --no-create-info joomla jforms > dataonly.sql 

Desligue as Chaves Estrangeiras por um momento 
SET GLOBAL foreign_key_checks=0; 



Skip Grants 
/usr/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf --skip-grant-tables
vi /etc/mysql/my.cnf
[mysqld]
skip-grant-tables


BinLog avaliações 
--base64-output = DECODE-ROWS & --verbose 
mysqlbinlog --defaults-file=/home/anothermysqldba/.my.cnf --base64-output=DECODE-ROWS --verbose binlog.005862 > 005862.sql

CLIENTE SEGUINTE DE MYSQL 
mysql_config_editor print --all
mysql_config_editor set --user=mysql --password --login-path=localhost --host=localhost
mysql --login-path=localhost -e 'SELECT NOW()';

Troca 
sudo swapoff -a
To set the new value to 10: echo 10 | sudo tee /proc/sys/vm/swappiness
sudo swapon -a 

ESQUEMA INFORMATIVO 
set global innodb_stats_on_metadata=0; 

Variáveis ​​AWS 
CALL mysql.rds_show_configuration;
> call mysql.rds_set_configuration('binlog retention hours', 24);
> call mysql.rds_set_configuration('slow_launch_time', 2);

Encontre em que tabela um nome de coluna está em 
SELECT TABLE_SCHEMA , TABLE_NAME , COLUMN_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'fieldname' ; 
O cliente diz que está em TableA, mas eles têm 50 bases de dados. Qual esquema tem TableA 
SELECT TABLE_SCHEMA , TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = 'TableA' ; 

Ajude os trabalhadores escravos 
Select @@slave_parallel_workers;
Stop Slave; Set GLOBAL slave_parallel_workers=5; Start Slave;

MySQL Multi 
5.6>
To start both : mysqld_multi start 1,2
To check on status of both: mysqld_multi report 1,2
To check on status or other options you can use just one

5.7<
[mysqld1] BECOMES [mysqld@mysqld1]
systemctl start mysqld@mysqld1
systemctl start mysqld@mysqld2
systemctl start mysqld@mysqld3
systemctl start mysqld@mysqld4 
Apenas tabelas do sistema de atualização do MySQL 
mysql_upgrade --defaults-file=/home/ anothermysqldba /.my.cnf --upgrade-system-tables 

ERROR DE REPLICAÇÃO DE PASSAGEM 
STOP SLAVE; SET GLOBAL sql_slave_skip_counter =1; START SLAVE; SELECT SLEEP(1); SHOW SLAVE STATUS\G