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 

sexta-feira, 13 de outubro de 2017

MySQL InnoDB Tablespace Encryption

MySQL Tablespace Encryption is relatively simple to set up. You have to be using MySQL 5.7, innodb_file_per_table


The MySQL documentation covers everything you need to set this up:


But my blog post would be very short if I just shared a link. So....

Once upgraded and on MySQL 5.7 you need to have a valid location for your key file.  I have a MySQL datadir as /var/lib/mysql/data  this allows default locations for people to find it if needed but also allows a simple mounted location for more disks if needed as well. This also avoids having to do additional edits to selinux and etc since it already allows /var/lib/mysql.

touch /var/lib/mysql/keyring
chmod 750  /var/lib/mysql/keyring*
chown mysql:mysql  /var/lib/mysql/keyring

Edit the mysql .cnf file :

 ls  /usr/lib64/mysql/plugin/keyring_file.so
/usr/lib64/mysql/plugin/keyring_file.so

[mysqld]
# Keyring Plugin Installation
early-plugin-load=keyring_file.so
keyring_file_data=/var/lib/mysql/keyring

After MySQL startup check your plugins:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
    ->        FROM INFORMATION_SCHEMA.PLUGINS
    ->        WHERE PLUGIN_NAME LIKE 'keyring%';
+--------------+---------------+
| PLUGIN_NAME  | PLUGIN_STATUS |
+--------------+---------------+
| keyring_file | ACTIVE        |  
| keyring_udf  | ACTIVE        |
+--------------+---------------+


INSTALL PLUGIN keyring_udf SONAME 'keyring_udf.so';
CREATE FUNCTION keyring_key_generate RETURNS INTEGER SONAME 'keyring_udf.so';
CREATE FUNCTION keyring_key_fetch RETURNS STRING SONAME 'keyring_udf.so';
CREATE FUNCTION keyring_key_length_fetch RETURNS INTEGER SONAME 'keyring_udf.so';
CREATE FUNCTION keyring_key_type_fetch RETURNS STRING SONAME 'keyring_udf.so';
CREATE FUNCTION keyring_key_store RETURNS INTEGER SONAME 'keyring_udf.so';
CREATE FUNCTION keyring_key_remove RETURNS INTEGER SONAME 'keyring_udf.so';


mysql>  use test;
mysql>  SELECT keyring_key_generate('MyKey1', 'AES', 32);

mysql>  CREATE TABLE `enc_test` (
  `enc_test_id` varchar(255) NOT NULL,
  PRIMARY KEY (`enc_test_id`)
) ENGINE=InnoDB ;
 
mysql>  alter table test.enc_test encryption='Y';

mysql>  show create table enc_test \G
*************************** 1. row ***************************
       Table: enc_test
Create Table: CREATE TABLE `enc_test` (
  `enc_test_id` varchar(255) NOT NULL,
  PRIMARY KEY (`enc_test_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y'
1 row in set (0.00 sec)

sexta-feira, 22 de abril de 2016

Matemática com MySQL

The Original post: http://anothermysqldba.blogspot.com/2016/04/math-with-mysql.html

Eu pensei que eu postei isso há muito tempo ... oh bem ....

Nós todos sabemos que a matemática é o aspecto fundamental de toda a vida e a língua comum utilizado em todo o mundo, se não além. MySQL, como todos os bancos de dados, pode ajudá-lo com inúmeros aspectos da matemática.

Aqui está uma lista das funções: https://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html

Aqui estão alguns exemplos simples para você começar.
  • A Fórmula machado quadrática ^ 2 + bx + c = 0

# 2x^2 – 4x – 3 = 0.
SET @a= 1;
SET @b= 3;
SET @c= -4;
SET @XX = ( -(@b) - SQRT( POW(@b,2) -4 * @a * @c) / POW(@a,2) ) ;
SET @YY = ( -(@b) + SQRT( POW(@b,2) -4 * @a * @c) / POW(@a,2) ) ;
SET @XXX = MOD(@YY, @XX);

SELECT @XX / @XXX as X;
+------+
| X |
+------+
| -4 |
+------+
SELECT @YY / @XXX as X ;
+------+
| X |
+------+
| 1 |
+------+

  • O Teorema de Pitágoras (lembre-se de geometria 101): A ^ 2 + B ^ 2 = C ^ 2

SET @A = 14;
SET @B = 48;
SELECT @C := SQRT(POW(@A,2) + POW(@B,2) );
+-------------------------------------+
| @C := SQRT(POW(@A,2) + POW(@B,2) ) |
+-------------------------------------+
| 50 |
+-------------------------------------+


Assim que resolve C e é claro que você usar isso para resolver para um bem.

SELECT @A := SQRT(POW(@C,2) - POW(@B,2)) ;
+-----------------------------------+
| @A := SQRT(POW(@C,2) - POW(@B,2)) |
+-----------------------------------+
| 14 |
+-----------------------------------+


  • O logaritmo e suas identidades xy log = log x + y log
http://www.businessinsider.com/the-17-equations-that-changed-the-world-2012-7#the-logarithm-and-its-identities-2


SET @X = 2;
SET @Y = 3;
SELECT concat(log(@X * @Y) ,' = ', log(@X) + log(@Y) ) as "logarithm and its identities" ;
+---------------------------------------+
| logarithm and its identities |
+---------------------------------------+
| 1.791759469228055 = 1.791759469228055 |
+---------------------------------------+

  • A fórmula de Euler para poliedros: F - E + V = 2
http://www.businessinsider.com/the-17-equations-that-changed-the-world-2012-7#eulers-formula-for-polyhedra-6

SET @V = 4; # Vertices
SET @E = 6; # Edges
SET @F = 4; # Faces
SELECT @V - @E + @F as Tetrahedron;

SET @V = 8; # Vertices
SET @E = 12; # Edges
SET @F = 6; # Faces
SELECT @V - @E + @F as Hexahedron;

SET @V = 12; # Vertices
SET @E = 30; # Edges
SET @F = 20; # Faces
SELECT @V - @E + @F as Icosahedron;

SET @V = 12; # Vertices
SET @E = 30; # Edges
SET @F = 20; # Faces
SELECT @V - @E + @F as Icosahedron;

  • teoria da relatividade de Einstein E = mc ^ 2

SET @lbs = 190; # lbs
SET @lb2gram = 453.6; # 1 lbs = 453.6g
SET @lbstograms := @lbs * @lb2gram / 1;
SET @m := @lbstograms * 1 / 1000;
SET @c := POW(3.00 * POW(10,8), 2 );
SELECT @E := @m * @c ;
+----------------+
| @E := @m * @c |
+----------------+
| 7.75656e18 |
+----------------+

  • 1 = 0,9999 .....

SELECT SUM(.9/(9/10));
+----------------+
| SUM(.9/(9/10)) |
+----------------+
| 1.00000 |
+----------------+

sábado, 25 de julho de 2015

Geração de senha rápido com MySQL

Original post http://anothermysqldba.blogspot.com/2015/07/quick-password-generation-with-mysql.html

Aqui está uma maneira rápida e simples para gerar uma senha seu aplicativo usando o MySQL. 
Esta consulta irá criar um maiúsculas e minúsculas senha gerada aleatoriamente de comprimento e valores. 


SELECT CONCAT(UCASE(SUBSTRING( SUBSTRING(MD5(RAND()), FLOOR( 1 + (RAND() * 5)) , FLOOR( 8 + (RAND() * 15 )) ) , FLOOR( 1 + (RAND() * 4 )) , FLOOR( 4 + (RAND() * 12 )) )), 
SUBSTRING('!@#$%^&*', FLOOR( 1 + (RAND() * 4)) , FLOOR( 1 + (RAND() * 8)) ), 
SUBSTRING( SUBSTRING(MD5(RAND()), FLOOR( 1 + (RAND() * 5)) , FLOOR( 8 + (RAND() * 15 )) ) , 5)) as password \G 


Esta consulta terá um valor aleatório para a primeira parte da senha dinâmica e maiúsculas quando aplicável, em seguida, o segundo semestre ele adiciona alguns símbolos em seguida, o restante é em letras minúsculas porque MD5 faz isso automaticamente. Você naturalmente pode ajustar o que quer que você prefere símbolos. 

Exemplo de resultados: 

CREATE TABLE `generated` ( 
`password` varchar(255) NOT NULL 
) ENGINE=InnoDB ; 

MariaDB [(none)]> INSERT INTO test.generated SELECT CONCAT(UCASE(SUBSTRING( SUBSTRING(MD5(RAND()), FLOOR( 1 + (RAND() * 5)) , FLOOR( 8 + (RAND() * 15 )) ) , FLOOR( 1 + (RAND() * 4 )) , FLOOR( 4 + (RAND() * 12 )) )), SUBSTRING('!@#$%^&*', FLOOR( 1 + (RAND() * 4)) , FLOOR( 1 + (RAND() * 8)) ),SUBSTRING( SUBSTRING(MD5(RAND()), FLOOR( 1 + (RAND() * 5)) , FLOOR( 8 + (RAND() * 15 )) ) , 5)) as password; 

MariaDB [(none)]> select * from test.generated; 
+-----------------------------------+ 
| password | 
+-----------------------------------+ 
| 7232E1D9$%^&*f7de22c1b14f15c8a6 | 
| DEE22B7F7#$%541adcdd1b8e2 | 
| 2C4BB81001@#$%^&d0d9a2126 | 
| 941D3B92D@#$%^a4b7be92 | 
| 1CF2563254FC@#a79bb5 | 
| 2AE86E7D6!@#$%^&*4ca03f2e8 | 
| 074DD8D3#$e70a1 | 
| B2DDC!@#$%^47a252f79 | 
| 3A6D0A#$%^&*01ce9278a2a | 
| E9FB4CD16E19!739db9faa1616505c | 
| 1ED7A2E1379B4!@#$%ebe60b | 
| E9B57D71DB1@#$%^e9a4f8c2e94bf3d35 | 
| C97982!@#$8b5c534653c06 | 
| DE8998057C8!@#$%^8977a807 | 
| 7C7172EB1AE5$%^&*79d2b27 | 
| B52CE71@#$%^&*4508 | 
| AB17714F!@#$%^&203ba4ff80f8a6 | 
| 558D@#$04087871e29ff54 | 
| 27A78E8EF#$%^b8cee8628d81593 | 
| 315F2EC4#ad9913ec0595c | 
+-----------------------------------+
 

domingo, 28 de junho de 2015

Seqüência de Fibonacci Procedimento

Original post: http://anothermysqldba.blogspot.com/2015/06/fibonacci-sequence-procedure.html

 Bem, tem sido um tempo desde que eu postei, desculpe por isso. Hoje eu estava assistindo a reprises do programa de TV Fringe e quando Walter referenciado a seqüência de Fibonacci eu tenho lado seguido com opções do MySQL para isso. 

Agora este post já existia: 

Então eu peguei esse post e ampliou um pouco, o resultado é um procedimento que você pode ligar e voltar a gama dentro da sequência de Fibonacci que você está depois. 

O procedimento é abaixo: 

delimiter // 
CREATE PROCEDURE `Fibonacci`(IN POS INT, IN RANG INT, IN LIMTED INT) 
BEGIN 
select FORMAT(Fibonacci,0) AS Fibonacci from ( 
select @f0 Fibonacci, @fn:=@f1+@f0, @f0:=@f1, @f1:=@fn 
from (select @f0:=0, @f1:=1, @fn:=1) x, 
information_schema.STATISTICS p limit LIMTED) y LIMIT POS, RANG; 
END// 
delimiter ; 


Você pode chamar isso e passar quaisquer valores e varia você está depois. 

Então, se você quiser que o valor 5 (a partir de 0) na seqüência eo próximo valor 

> CALL Fibonacci(5,2,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 5 | 
| 8 | 
+-----------+ 


Então, se você quiser que o valor 30 (a partir de 0) na seqüência eo próximo valor 

> CALL Fibonacci(30,2,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 832,040 | 
| 1,346,269 | 
+-----------+ 


Então, se você quiser que o valor 150 (a partir de 0) na seqüência eo próximo valor 

> CALL Fibonacci(150,2,1000); 
+--------------------------------------------+ 
| Fibonacci | 
+--------------------------------------------+ 
| 9,969,216,677,189,305,000,000,000,000,000 | 
| 16,130,531,424,904,583,000,000,000,000,000 | 
+--------------------------------------------+ 


Então você começa a idéia. Agora você também pode expandir a gama de resultados se você quer mais do que apenas 2 mudar o segundo valor na chamada de procedimento. 

> CALL Fibonacci(0,10,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 0 | 
| 1 | 
| 1 | 
| 2 | 
| 3 | 
| 5 | 
| 8 | 
| 13 | 
| 21 | 
| 34 | 
+-----------+ 

> CALL Fibonacci(30,5,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 832,040 | 
| 1,346,269 | 
| 2,178,309 | 
| 3,524,578 | 
| 5,702,887 | 
+-----------+ 


De qualquer forma, espero que alguém acha útil e de crédito para a base de consulta não ir para o post original.