Mi Charla en la PyConES 2014 de Zaragoza sobre MySQL Fabric

El próximo sábado 8 de noviembre a las 19:30 estaré hablando sobre MySQL Fabric en la PyConES 2014 (la versión española de la PyCon), la reunión anual de programadores y entusiastas de Python en España.
Aunque no me auto-denomino como programador, una gran parte de mi tiempo cono consultor de MySQL require implementar procedimientos automáticos (backups, comprobaciones de salud, gestión de AWS, …) y para ello utilizo principalmente una combinación de Python y Bash.

En mi charla, que he titulado “MySQL Fabric, a High Availability solution for Connector/Python” explicaré cómo montar y configurar un conjunto de servidores MySQL y …

[Lea más]
Balanceador software (PHP) para MySQL: mysqlnd_ms

Mediante la extensión mysqlnd_ms podemos automáticamente balancear las queries según sean de lectura o escritura entre el MySQL master y sus diferentes MySQL slaves. Vamos a ver cómo instalarla

En caso que no lo tengamos ya habilitado, deberemos recompilar PHP con mysqlnd habilitado para los diferentes métodos de acceso al MySQL. En el ejemplo lo usamos tanto para el clásico mysql (funciones llamadas mysql_), mysqli y para el PDO:

./configure' \
(...)
--enable-mysqlnd \
--with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
(...)

A continuación deberemos instalar el modulo mysqlnd_ms para poder usar dicho balanceador mediante pecl:

# pecl install mysqlnd_ms

El el fichero de configuración del …

[Lea más]
Mi tutorial sobre optimización de consultas para la Percona Live London 2014 (e información importante si deseáis asistir)

El lunes de la próxima semana, 3 de noviembre, impartiré un tutorial de la mayor conferencia europea de MySQL, la Percona Live London 2014. El tema es una continuación natural de la que impartí el año pasado en el mismo lugar, “Optimización de consultas con MySQL 5.6: trucos nuevos y viejos“. Este año me centraré en los últimos cambios en el optimizador que podemos encontrar no sólo en los ya publicados 5.6 y MariaDB 10, pero también alguna de las características de los todavía en desarrollo MySQL 5.7 y MariaDB 10.1. Algunos de los temas de este taller, que he titulado “Optimización de consultas con MySQL …

[Lea más]
Posición inicial de los binlogs (MySQL)

Al realizar el SHOW MASTER STATUS para iniciar la replicación siempre me había preguntado porque la posición inicial no era ni 0 ni 1. Mediante SHOW BINLOG EVENTS podemos verlo:

El primer evento de un binlog contiene información sobre el formato del binlog, por lo tanto, es un evento que realmente no hace nada y que nos podemos saltar (realmente si lo aplicamos tampoco realiza ningún cambio):

mysql-master> show binlog events limit 2;
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                  |
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| mysql-bin.000355 |   4 | Format_desc |         1 |         106 | Server ver: 5.1.67-log, Binlog ver: 4 |
| …
[Lea más]
Buscar las foreign keys que referencian a una tabla en MySQL

En MySQL, mediante INFORMATION_SCHEMA podemos listar las tablas que tienen foreign keys hacia la tabla que nos interesa

Para ello deberemos hacer la siguiente query a la tabla KEY_COLUMN_USAGE:

SELECT table_name,column_name,constraint_name, referenced_table_name,referenced_column_name
FROM information_schema.key_column_usage
WHERE referenced_table_name = 'tabla';

Por ejemplo, suponiendo que tenemos las siguientes dos tablas:

mysql> CREATE TABLE fc1 (
    ->     i INT PRIMARY KEY,
    ->     j INT
    -> ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.25 sec)

mysql> CREATE TABLE fc2 (
    ->     m INT PRIMARY KEY,
    ->     n INT,
    ->     FOREIGN KEY ni (n) REFERENCES fc1 (i)
    ->         ON DELETE CASCADE
    -> ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.15 sec)

Mediante dicha query podremos listar …

[Lea más]
xtrabackup: Restaurar backup incremental

Tal y como vimos anteriormente, mediante xtrabackup podemos hacer backups incrementales sobre un full. Vamos a ver cómo restaurarlos.

Vamos a suponer que tenemos los siguientes backups:

# ls -la
total 36
drwxr-xr-x 9 root root 4096 Aug 26 19:06 .
drwxr-xr-x 3 root root 4096 Aug 26 14:04 ..
drwxr-xr-x 6 root root 4096 Aug 26 19:02 2014-08-26_19-02-14
drwxr-xr-x 6 root root 4096 Aug 26 19:03 2014-08-26_19-03-30
drwxr-xr-x 6 root root 4096 Aug 26 19:06 2014-08-26_19-06-41

Los renombro por tipo para simplificar la sintaxi:

# mv 2014-08-26_19-02-14 FULL
# mv 2014-08-26_19-03-30 INC1
# mv 2014-08-26_19-06-41 INC2

Primero deberemos preparar el backup aplicando las transacciones ya comiteadas (–apply-log –redo-only) tanto para el full como con los …

[Lea más]
Rotación de Logs MySQL lentas

Original post: http://anothermysqldba.blogspot.com/2014/10/rotating-mysql-slow-logs.html

Al trabajar con diferentes clientes Sucede que correr a través de grandes archivos de registro lento de vez en cuando. Si bien existen varias opiniones sobre la forma en que se deben rotar. Muchas de estas opiniones utilice Girar registro y el comando registros ras, prefiero no para eliminar mis registros binarios sin embargo. Es por esto que estoy de acuerdo con Ronald Bradfordentrada de blog desde hace años sobre la forma de hacer esto.  …

[Lea más]
Probando la manera más rápida de importar una tabla en MySQL (y unos resultados interesantes del rendimiento de 5.7)

Como mencioné en mi anterior entrada, donde comparaba las opciones de configuración por defecto de 5.6 y 5.7, he estado haciendo algunos tests para un tipo particular de carga en varias versiones de MySQL. Lo que he estado comprobando es las diferentes maneras de cargar un archivo CSV (el mismo fichero que usé para comprobar las herramientas de compresión) en MySQL. Aquellos administradores de bases de datos y programadores MySQL con experiencia probablemente ya conozcáis la respuesta, así que podéis saltar a los resultados de 5.7 respecto de 5.6. Sin embargo, la primera parte de este post está dedicado a los desarrolladores/aquellos que dan sus primeros pasos con …

[Lea más]
Lost connection to MySQL server at reading initial communication packet

Intentando conectar a un MySQL me encontré con el siguiente error:

# mysql -h 192.168.157.97
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

Haciendo un tcpdump veremos que la conexión TCP se establece y se cierra correctamente:

# tcpdump -nni any 'host 192.168.157.97'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
16:31:44.812893 IP 192.168.157.97.54337 > 192.168.157.121.3306: Flags [S], seq 4035808194, win 5840, options [mss 1460,sackOK,TS val 2347458047 ecr 0,nop,wscale 7], length 0
16:31:44.812937 IP 192.168.157.121.3306 > 192.168.157.97.54337: Flags [S.], seq 1534874692, ack 4035808195, win 5792, options [mss 1460,sackOK,TS val 2340675374 ecr 2347458047,nop,wscale 7], length 0
16:31:44.813560 IP …
[Lea más]
xtrabackup / innobackupex: Restaurar full

No solo es importante tener los backups, también saber restaurarlos. Vamos a ver cómo restaurar un backup full hecho con xtrabackup

Primero deberemos asegurarnos que se trata de un backup, lo podemos ver mediante el fichero xtrabackup_checkpoints:

# cat FULL/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 1862778
last_lsn = 1862778
compact = 0

A continuación deberemos aplicar los logs para hacer undo de transacciones no comiteadas o aplicar cambios pendientes de transacciones que ya esta comiteadas. Lo deberemos hacer mediante la opción –apply-log:

# innobackupex --apply-log /var/backups/xtrabackup/FULL/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.

This software is …
[Lea más]