Saturday, October 14, 2017

MySQL InnoDB Tablespace Encryption

MySQL Tablespace Encryption es relativamente simple de configurar. Tienes que estar usando MySQL 5.7, innodb_file_per_table 


La documentación de MySQL cubre todo lo que necesita para configurarlo: 


Pero mi publicación en el blog sería muy breve si solo compartiera un enlace. Asi que.... 

Una vez actualizado y en MySQL 5.7, debe tener una ubicación válida para su archivo de claves. Tengo un datadir de MySQL como / var / lib / mysql / data, esto permite ubicaciones predeterminadas para que la gente lo encuentre si es necesario, pero también permite una ubicación montada simple para más discos si es necesario también. Esto también evita tener que hacer ediciones adicionales para selinux y etc, ya que permite / var / lib / mysql. 

toque / var / lib / mysql / keyring 
chmod 750 / var / lib / mysql / keyring * 
Chown mysql: mysql / var / lib / mysql / keyring 

Edite el archivo mysql .cnf: 

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

[mysqld] 
# Instalación del complemento de Keyring 
early-plugin-load = keyring_file.so 
keyring_file_data = / var / lib / mysql / keyring 

Después del inicio de MySQL, verifique los complementos: 

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS 
-> FROM INFORMATION_SCHEMA.PLUGINS 
-> DONDE PLUGIN_NAME ME GUSTA 'keyring%'; 
+ -------------- + --------------- + 
| PLUGIN_NAME | PLUGIN_STATUS | 
+ -------------- + --------------- + 
| keyring_file | ACTIVO | 
| keyring_udf | ACTIVO | 
+ -------------- + --------------- + 


INSTALE PLUGIN keyring_udf SONAME 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_generate DEVOLUCIONES INTEGER SONAME 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_fetch DEVOLUCIONES STRING SONAME 'keyring_udf.so'; 
CREAR FUNCTION keyring_key_length_fetch DEVOLUCIONES INTEGER SONAME 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_type_fetch DEVOLUCIONES STRING SONAME 'keyring_udf.so'; 
CREAR FUNCTION keyring_key_store DEVOLUCIONES INTEGER SONAME 'keyring_udf.so'; 
CREAR FUNCTION keyring_key_remove DEVOLUCIONES INTEGER SONAME 'keyring_udf.so'; 


mysql> usar prueba; 
mysql> SELECT keyring_key_generate ('MyKey1', 'AES', 32); 

mysql> CREATE TABLE `enc_test` ( 
`enc_test_id` varchar (255) NOT NULL, 
LLAVE PRIMARIA (`enc_test_id`) 
) ENGINE = InnoDB; 

mysql> alter table test.enc_test encryption = 'Y'; 

mysql> mostrar crear tabla enc_test \ G 
*************************** 1. fila ******************** ******* 
Tabla: enc_test 
Crear tabla: CREATE TABLE `enc_test` ( 
`enc_test_id` varchar (255) NOT NULL, 
LLAVE PRIMARIA (`enc_test_id`) 
) ENGINE = InnoDB CHARSET POR DEFECTO = latin1 ENCRYPTION = 'Y' 
1 fila en el set (0.00 seg) 

Friday, April 22, 2016

Matemáticas con MySQL

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

Pensé que me envió esto hace mucho tiempo ... bueno ....

Todos sabemos que las matemáticas es el aspecto fundamental de toda la vida y el lenguaje común utilizado en todo el mundo, si no más allá. MySQL, como todas las bases de datos, puede ayudarle con numerosos aspectos de las matemáticas.

Aquí está una lista de las funciones: https://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html

Estos son algunos ejemplos simples para ayudarle a empezar.
  • La fórmula cuadrática ax ^ 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 |
+------+

  • El teorema de Pitágoras (recuerda la geometría 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 |
+-------------------------------------+


Así se soluciona C y, por supuesto, usar esto para despejar A así.

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


  • El logaritmo y sus identidades log xy = log x + log y
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 |
+---------------------------------------+

  • La 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;

  • teoría de la relatividad 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 |
+----------------+


Saturday, July 25, 2015

Generación Contraseña rápida con MySQL

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

Aquí está una manera rápida y sencilla para generar una contraseña la aplicación utilizando MySQL. 
Esta consulta se creará una mayúscula y minúscula contraseña generada aleatoriamente en longitud y 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 tendrá un valor aleatorio para la primera parte de la contraseña dinámica y mayúsculas cuando proceda entonces el segundo medio que añade algunos símbolos entonces el restante es en minúsculas porque MD5 lo hace automáticamente.Usted, por supuesto, puede ajustar lo símbolos de su preferencia. 

Ejemplo 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 | 
+-----------------------------------+
 

Sunday, June 28, 2015

Procedimiento Secuencia de Fibonacci

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

Bueno, ha sido un tiempo desde que he publicado, lo siento por eso. Hoy estaba viendo reposiciones de la serie de televisión Fringe y cuando Walter referencia a la secuencia de Fibonacci Me lado seguido con opciones de MySQL para esto. 

Ahora este post ya existía: 


Así que tomé ese puesto y se expandió en él un poco, el resultado es un procedimiento que se puede llamar y devolver el rango dentro de la secuencia de Fibonacci que usted está después. 

El procedimiento es el siguiente: 

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 ; 


Usted puede llamar a este y pase lo que sea los valores y rangos que está después. 

Así que si desea que el quinto valor (empezando desde 0) en la secuencia y el siguiente valor 

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


Así que si desea que el valor 30a (empezando desde 0) en la secuencia y el siguiente valor 

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


Así que si desea que el valor 150 (empezando desde 0) en la secuencia y el siguiente 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 | 
+--------------------------------------------+ 


Así se entiende la idea. Ahora usted también puede ampliar la gama de resultados si desea más de 2 solo cambia el segundo valor en la llamada a procedimiento. 

> 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 todos modos, espero que alguien le resulta útil y el crédito para la base de la consulta no ir al post original.

Friday, December 26, 2014

Encontrar / analizar una cadena desde dentro de una cadena

Original post: http://anothermysqldba.blogspot.com/2014/12/findparse-string-from-within-string.html

Así que me di cuenta de algunas preguntas y mensajes diferentes acerca de analizar una cadena de otra cadena recientemente.Mientras que algunas soluciones incluyen la creación de nuevas funciones y de etc también puede hacerse dentro de una sola consulta en algunos casos. 

Por ejemplo, digamos que estamos buscando para sacar el dominio de una URL. Voy a tratar de entrar en detalles de por qué y cómo esto funciona. 
Tenemos la siguiente tabla. 

CREATE TABLE `parse_example` ( 
`id` int(11) NOT NULL AUTO_INCREMENT, 
`urldemo` varchar(150) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 
+----+----------------------------+ 
| id | urldemo | 
+----+----------------------------+ 
| 1 | http://www.mysql.com/ | 
| 2 | http://www.percona.com/ | 
| 3 | https://tools.percona.com/ | 
| 4 | https://mariadb.com/ | 
| 5 | http://planet.mysql.com/ | 
| 6 | http://dev.mysql.com/doc/ | 
+----+----------------------------+ 


El objetivo de este ejemplo es hacer caso omiso de la http: // o https: // y cualquier cosa después del .com. Así que utilizamos ENCUENTRA para encontrar las ubicaciones. 

La referencia .com es fácil, ya que es constante para que podamos empezar con eso. 

SELECT LOCATE('.com', urldemo), urldemo FROM parse_example; 
+-------------------------+----------------------------+ 
| LOCATE('.com', urldemo) | urldemo | 
+-------------------------+----------------------------+ 
| 17 | http://www.mysql.com/ | 
| 19 | http://www.percona.com/ | 
| 22 | https://tools.percona.com/ | 
| 16 | https://mariadb.com/ | 
| 20 | http://planet.mysql.com/ | 
| 17 | http://dev.mysql.com/doc/ | 
+-------------------------+----------------------------+ 


Aceptar lo que queremos eliminar el /, qué lugar es ese? 

SELECT LOCATE('.com', urldemo) as start, LOCATE('.com', urldemo) +4 as end, SUBSTRING(urldemo FROM LOCATE('.com', urldemo) + 4 ) AS resulting , urldemo FROM parse_example; 
+-------+-----+-----------+----------------------------+ 
| start | end | resulting | urldemo | 
+-------+-----+-----------+----------------------------+ 
| 17 | 21 | / | http://www.mysql.com/ | 
| 19 | 23 | / | http://www.percona.com/ | 
| 22 | 26 | / | https://tools.percona.com/ | 
| 16 | 20 | / | https://mariadb.com/ | 
| 20 | 24 | / | http://planet.mysql.com/ | 
| 17 | 21 | /doc/ | http://dev.mysql.com/doc/ | 
+-------+-----+-----------+----------------------------+

Esto nos da nuestra posición final, sólo me pongo los alias de campo para que los resultados sean más fáciles de seguir. 

Ahora la clasificación después de http y https en realidad es muy fácil, así como los dos tienen: // después de ellos, por lo que sólo necesita la ubicación de la segunda / en la cadena. 


SELECT LOCATE('/', urldemo) as first, LOCATE('/', urldemo) +1 as second, urldemo 
FROM parse_example; 
+-------+--------+----------------------------+ 
| first | second | urldemo | 
+-------+--------+----------------------------+ 
| 6 | 7 | http://www.mysql.com/ | 
| 6 | 7 | http://www.percona.com/ | 
| 7 | 8 | https://tools.percona.com/ | 
| 7 | 8 | https://mariadb.com/ | 
| 6 | 7 | http://planet.mysql.com/ | 
| 6 | 7 | http://dev.mysql.com/doc/ | 
+-------+--------+----------------------------+ 


Estas consultas se acaba de mostrar lo que van a hacer los diferentes aspectos de la consulta final. Así que vamos a poner todo junto. 


SELECT 
TRIM(TRAILING SUBSTRING(urldemo FROM LOCATE('.com', urldemo) + 4 ) 
FROM SUBSTRING(urldemo FROM LOCATE('/', urldemo) + 2 ) ) AS parsed_domain , 
urldemo as original_url 
FROM parse_example; 
+-------------------+----------------------------+ 
| parsed_domain | original_url | 
+-------------------+----------------------------+ 
| www.mysql.com | http://www.mysql.com/ | 
| www.percona.com | http://www.percona.com/ | 
| tools.percona.com | https://tools.percona.com/ | 
| mariadb.com | https://mariadb.com/ | 
| planet.mysql.com | http://planet.mysql.com/ | 
| dev.mysql.com | http://dev.mysql.com/doc/ | 
+-------------------+----------------------------+ 


Ahora espero que te ayuda a ser capaz de analizar a cabo todo lo que necesites. Este ejemplo se limita a una dirección URL.Pero como algunos ejemplos de funciones que ya están aquí es mi ejemplo de una función que se puede utilizar para analizar lo que necesites. 



CREATE FUNCTION PARSE_STRING(delimiterA VARCHAR(50), delimiterB VARCHAR(50), passed_string VARCHAR(255) ) 
RETURNS VARCHAR(255) DETERMINISTIC 
RETURN 
TRIM(TRAILING SUBSTRING(passed_string FROM LOCATE(delimiterB, passed_string) ) 
FROM SUBSTRING(passed_string FROM LOCATE(delimiterA, passed_string) + CHAR_LENGTH(delimiterA) ) ) ; 

SELECT PARSE_STRING('//','.com', urldemo) FROM parse_example; 
+------------------------------------+ 
| PARSE_STRING('//','.com', urldemo) | 
+------------------------------------+ 
| www.mysql | 
| www.percona | 
| tools.percona | 
| mariadb | 
| planet.mysql | 
| dev.mysql | 
+------------------------------------+ 


Tire de un apellido de un campo nombre completo: 

SELECT PARSE_STRING('John ','', 'John Smith') ; 
+----------------------------------------+ 
| PARSE_STRING('John ','', 'John Smith') | 
+----------------------------------------+ 
| Smith | 
+----------------------------------------+ 


Tire el primer nombre 

SELECT PARSE_STRING('',' Smith', 'John Smith') ; 
+-----------------------------------------+ 
| PARSE_STRING('',' Smith', 'John Smith') | 
+-----------------------------------------+ 
| John | 
+-----------------------------------------+ 


Por supuesto, con los ejemplos de nombres que tendría que conocer los valores de los delimitadores. Pero esto es sólo un ejemplo, usted puede construir.