Rotado de logs en MySQL y los problemas de rendimiento

MySQL provee muchos tipos de logs. Tenemos el log binario, el log general y el log de queries lentas. Son muy útiles y necesarios tanto para analizar un problema o montar una replicación pero hay que tener cuidado con el tamaño que pueden llegar a alcanzar. Para los logs binarios existe una serie de parámetros que nos permite limitar su tamaño e ir rotándolos eliminando los antiguos, cosa que no hay para los otros dos tipos de log.

Un cliente me contactó porque al desactivar el log general MySQL se quedaba parado durante varios minutos no aceptando más consultas y causando por lo tanto caída del servicio. Lo primero que te viene a la cabeza es... "¿Cómo cojones desactivar un log puede tirar un servidor abajo?" 😀

Las razones son dos principalmente:

1- Debido a la forma en la que MySQL cierra el fichero.
2- Por el rendimiento del almacenamiento.

Para entender mejor el primer punto debemos analizar …

[Lea más]
InnoDB: Warning: a long semaphore wait

Actualizando un MySQL de la versión 5.1 a la versión 5.5 empezaron a salir errores como el siguiente:

InnoDB: Warning: a long semaphore wait:
--Thread 139816751400704 has waited at trx0trx.c line 754 for 241.00 seconds the semaphore:
Mutex at 0x1770d48 created file srv0srv.c line 1024, lock var 1
waiters flag 1

Causando que se queden colgadas las queries y por lo tanto colapsando el servidor MySQL.

La única forma de recuperar el MySQL era matando el proceso. Buscando el problema, encontré en los foros de MySQL que mediante la opción –skip-innodb_adaptive_hash_index se soluciona, pero no hay feedback al respecto. Aparentemente, dejando ya más de un mes de margen parece que efectivamente ha solucionado el problema.

Tags: …

[Lea más]
ERROR 1356 (HY000)

Original post:  http://anothermysqldba.blogspot.com/2013/12/error-1356-hy000.html


Lo más importante de entender cuando viene sobre un error es tomar un momento y relajarse. 
A veces la gente se encuentra con un error y se vuelven nerviosos y frustrados. Tome una respiración profunda y relajarse. A veces, " La locura es como la gravedad. Todo lo que necesita es un poco de empuje "y"  …

[Lea más]
Una estrategia de la comunidad

Original post: http://anothermysqldba.blogspot.com/2013/11/a-strategy-from-community.html

Hemos visto las noticias sobre MariaDB reemplazar MySQL en Fedora, SUSE y Red Hat.

Mientras que Oracle no estaría contento con este tipo de noticias, la comunidad de código abierto compatible con el enfoque en una solución de código "más" abierta a ser implementado en Linux.

Lo interesante que todos podamos sobre el aspecto es que, la decisión o estrategia para pasar a MariaDB de MySQL fue probable es que no acaba de hacer por la alta dirección en Red Hat. Esto es mucho más probable que sea un movimiento de la comunidad de código abierto de Red Hat que evalúa y escucharon.

Considere esto, echar un vistazo atrás en casa de Jackie Yeaney ( …

[Lea más]
Plantilla para Procedimientos almacenados en MySQL – MariaDB

Conforme paso más tiempo programando para MySQL – MariaDB, más necesidad tengo del uso de plantillas, sobre todo porque vas adquiriendo ciertos conocimientos, trucos, etc, …. y de esta forma, no solo no aceleras la programación, sino que también la haces más profesional! Hoy os presento la plantilla para los procedimientos almacenados (stored procedures) que …

Continuar leyendo »

The post Plantilla para Procedimientos almacenados en MySQL – MariaDB appeared first on Manejando datos.

MariaDB y las distribuciones de Linux

Original post: http://anothermysqldba.blogspot.com/2013/11/mariadb-linux-distributions.html

Así que por ahora muchos de ustedes han visto las noticias sobre Google, SUSE y Red Hat / Fedora mudarse a MariaDB como base de datos predeterminada en lugar de MySQL.

MariaDB y SkySQL han hecho movimientos de negocios muy productivos este año. ¿Qué significa esto en realidad para la comunidad MySQL y la comunidad en general de código abierto?

Para empezar piensan volver a lo que hizo tan popular MySQL? Es fácilmente disponible en todas las principales distribuciones de Linux.

OpenSUSE y Fedora ya se están moviendo a MariaDB para el impulso a un movimiento centrado código abierto ha comenzado. Después de una migración de Red Hat Enterprise Linux que tiene MariaDB como la base de …

[Lea más]
Check de Nagios para el log de MySQL

En el log del MySQL podemos encontrar errores, como tablas corruptas, que de otra forma deberíamos de detectar en la capa de aplicación

Tomando de ejemplo una tabla corrupta, tendríamos en el log entradas similares a la siguiente por cada query que use dicha tabla:

130107 20:00:19 [ERROR] /usr/local/mysql/bin/mysqld: Table './db/tbl' is marked as crashed and should be repaired

Otros errores comunes, como por ejemplo el Sort aborted (una query con sort que no se ha podido completar o la hemos matado) podemos ignorar el error para que no nos vaya saltando la alerta de Nagios:

120913 10:58:03 [ERROR] /usr/local/mysql51/libexec/mysqld: Sort aborted

En el caso que tengamos un sistema de ficheros dedicado para el datadir del MySQL, se nos quejará que el directorio …

[Lea más]
Importador/Exportador para MySQL: mydumper y myloader

De sobra es conocido que mysqldump no es la mejor forma de hacer backups por lo básica que es la herramienta. Anteriormente ya hemos hablado de otras herramientas como mylvmbackup que hace un backup físico (datafiles) de la base de datos, vamos a ver el caso de mydumper.

Dicha herramienta la ha creado Domas Mituzas que según dice:

My current occupations:
Database Engineer at Facebook
Systems Engineer at Wikimedia Foundation (Wikipedia)

Para instalarla haremos:

cd /usr/local/src
wget https://launchpad.net/mydumper/0.5/0.5.2/+download/mydumper-0.5.2.tar.gz
tar xzf mydumper-0.5.2.tar.gz 
cd mydumper-0.5.2

Necesitaremos tener instalado …

[Lea más]
Comparar número de registros de dos bases de datos MySQL-MariaDB

La semana pasada me surgió la necesidad de comparar 2 bases de datos casi idénticas en MySQL. Como me corria un poco de prisa, decidí crear una consulta simple para ver si todo estaba bien: SELECT table_name, engine, row_format , SUM( CASE WHEN table_schema = "base_datos_1" THEN table_rows ELSE NULL END) AS "base_datos_1" , SUM( …

Continuar leyendo »

The post Comparar número de registros de dos bases de datos MySQL-MariaDB appeared first on Manejando datos.

Mensajes bonitos en MySQL-MariaDB con Common_schema

Una de las características que más me gusta de Common_schema es la posibilidad de ir escribiendo mensajes durante la ejecución de un procedimiento, y una vez concluido, mostrarlos, pero diferenciando un mensaje por cada registro. En definitiva, ejecutamos una tarea de un procedimiento almacenado, y vamos completando el mensaje. Hay un separador de línea que …

Continuar leyendo »

The post Mensajes bonitos en MySQL-MariaDB con Common_schema appeared first on Manejando datos.