Buscar y matar transacciones inactivas. Evitando problemas mayores

InnoDB se convirtió en el motor de almacenamiento por defecto en MySQL 5.5. Era un paso lógico. Es un motor transaccional, escalable y con un rendimiento superior a MyISAM. Hay que recordar esa frase tan mítica... MyISAM es el lugar donde los datos van para morir. Pero ese cambio ha traído algunas consecuencias. Malas prácticas que en MyISAM no tenían ningún efecto visible en InnoDB pueden causar graves problemas.

Uno de ellos es dejar transacciones abiertas y olvidadas. Y no hablo de minutos o horas, si no días e incluso he llegado a ver semanas. Cuando te contactan y te dicen que hay un problema con alguno de estos síntomas:

  • ibdata1 no para de crecer, nos vamos a quedar sin espacio en disco
  • la base de datos funciona muy lenta y tenemos constantes errores de tiempo de espera agotado esperando bloqueos de filas

Ya casi tenemos claro donde está el problema. Un SHOW ENGINE …

[Lea más]
Buscar y matar transacciones inactivas. Evitando problemas mayores

InnoDB se convirtió en el motor de almacenamiento por defecto en MySQL 5.5. Era un paso lógico. Es un motor transaccional, escalable y con un rendimiento superior a MyISAM. Hay que recordar esa frase tan mítica... MyISAM es el lugar donde los datos van para morir. Pero ese cambio ha traído algunas consecuencias. Malas prácticas que en MyISAM no tenían ningún efecto visible en InnoDB pueden causar graves problemas.

Uno de ellos es dejar transacciones abiertas y olvidadas. Y no hablo de minutos o horas, si no días e incluso he llegado a ver semanas. Cuando te contactan y te dicen que hay un problema con alguno de estos síntomas:

  • ibdata1 no para de crecer, nos vamos a quedar sin espacio en disco
  • la base de datos funciona muy lenta y tenemos constantes errores de tiempo de espera agotado esperando bloqueos de filas

Ya casi tenemos claro donde está el problema. Un SHOW ENGINE …

[Lea más]
mysqldump: Warning: Skipping the data of table mysql.event

Al realizar un mysqldump nos podemos encontrar con el siguiente warning:

# mysqldump --all-databases
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

Se trata de una alerta por si tenemos habilitado el event scheduler. Podemos consultarlo mediante:

mysql> show variables like '%event%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

Si no lo estamos usando podemos ignorar la tabla para quitar el warning mediante:

--events --ignore-table=mysql.event

Encaso contrario, nos interesa que tengamos backup también de estos jobs, porlo que deberemos añadir:

--events

Tags: …

[Lea más]
Forzar el inicio de InnoDB con MySQL +5.1.36

A partir de la versión 5.1.36 de MySQL, la opción –innodb puede usarse con tres valores para controlar si se arranca o no InnoDB y si se arranca, si es un engine obligatorio para el arranque del daemon de MySQL

Las opciones que podemos pasar a la opción innodb son:

  • OFF: Desactivamos InnoDB
  • ON: Activamos InnoDB, pero si falla en el arranque, el daemon puede arrancar (las tablas del resto de storage engines) a no ser que InnoDB sea el storage engine por defecto (opción –default-storage-engine)
  • FORCE: Aunque InnoDB no sea el storage engine por defecto, si falla no permite el arranque de mysqld

Por lo tanto, podemos …

[Lea más]
Cuadrado mágico MySQL 4x4: Rutinas, Loop, Variables

Original post: http://anothermysqldba.blogspot.com/2014/05/mysql-magic-square-4x4-routines-loop.html

Me desvié hoy jugando con cuadrados mágicos y pensé que podría ser una buena oportunidad para dar un ejemplo del uso de rutinas de MySQL, Loops y SI cheques. 

Así que si no son conscientes de lo que es un cuadrado mágico es que he incluido algunos enlaces. Puede ser que le ahorre una búsqueda en Google, pero por lo demás creo Sudoku como un ejemplo. 

[Lea más]
Una mirada a MySQL 5.7 DMR

Original post: http://anothermysqldba.blogspot.com/2014/05/a-look-at-mysql-57-dmr.html

Así que pensé que ya era hora Miré a MySQL 5.7. Esta es una visión general de alto nivel, pero yo estaba mirando por encima de la MySQL 5.7 en un documento de síntesis: 

Así que estoy empezando con una fresca  …

[Lea más]
Configuración de clientes MySQL

Mediante el fichero my.cnf no únicamente podemos configurar el comportamiento del servidor MySQL, sino que también los clientes como el comando mysql o mysqldump

Mediante la sección mysql podemos configurar el cliente del mismo nombre:

[mysql]
socket=/tmp/mysql.sock

De la misma forma que lo podemos hacer para mysqldump:

[mysqldump]
socket=/tmp/mysql.sock

Igual para mysqlhotcopy, pero podemos hacerlo globalmente para todos los clientes locales con la sección client:

[client]
socket=/tmp/mysql.sock

De esta forma podemos configurar los parámetros globales en dicha sección y los específicos de cada herramienta en la propia sin tener que repetir parámetros

Tags: …

[Lea más]
ERROR MySQL 1118 (42000) MySQL 5.0 a MySQL 5.5 o superior

Original post: http://anothermysqldba.blogspot.com/2014/05/mysql-error-1118-42000-mysql-50-to.html 

Así que recientemente he tenido una base de datos que TBs que tenía que actualizar de MySQL 5.0 a MySQL 5.5.
Este blog se referirá a lo siguiente:

  • sql_mode
  • innodb_strict_mode
  • ESCLAVO IO_THREAD

Durante el proceso de mysql_fix_privilege_tables (que hace un mysqlcheck) Rápidamente me di cuenta de el error siguiente:

ERROR 1118 (42000) at line 23: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
Así que empecé tuve que comprobar algunas cosas primero.

[Lea más]
Benchmark MySQL con mysqlslap

Original post: http://anothermysqldba.blogspot.com/2014/05/mysql-benchmark-with-mysqlslap.html

Así que la evaluación comparativa de diferentes consultas de MySQL en contra de su base de datos es una cosa sabia que hacer. Eso debería ser evidente. Mientras que optimizamos consultas lo mejor que podemos utilizar explicar (y EXTENDIDO) llevándolos tiempo para compararlas deberían resultar útiles. 

Este es un simple ejemplo de ejecución de una sentencia mysqlslap. 

Para este ejemplo he cargado la base de datos de MySQL MUNDO. ( …

[Lea más]
Password root de MySQL en Plesk

En el caso que necesitemos entrar en el MySQL de una maquina con Plesk para evitar tener que usar el interfaz gráfico, primero deberemos localizar el password de root del MySQL

Podemos encontrar el fichero /etc/psa/.psa.shadow que contiene el password de root del MySQL:

# cat /etc/psa/.psa.shadow
$AES-128-CBC$L0T0rD0u0CN0W0KB0T0n0w==$k050f0090g0E0fk0L0d0F0==

A primera vista diremos: ¡Esta cifrado!

Pero no, este es litralemente el password de root del MySQL, el único detalle es que el usuario administrador no se llama root como es habitual, sino que se llama admin. Por lo tanto, para conectarnos al MySQL como root de un Plesk deberemos ejecutar:

# mysql -uadmin -p$(cat /etc/psa/.psa.shadow)
Enter password:
Welcome to the MySQL monitor.  Commands end …
[Lea más]