Waiting for table metadata lock en MySql

metadata lock en mysql"Waiting for table metadata lock"... Este error nos lo encontramos en MySql al lanzar una consulta del tipo DDL. Se produce normalmente al lanzar una consulta para modificar un objeto que está siendo usado actualmente en nuestra base de datos. Empezaremos a lidiar con él a partir de la versión 5.5 de MySql y a consecuencia de la introducción de un nuevo tipo de bloqueos: "metadata locking".

MySql Query Profiling

MySQL ProfilerDesde la versión 5 de MySql se incorpora al cliente esta funcionalidad para conocer más al detalle los tiempos de ejecución de cada consulta. Si activamos esta opción podremos ver desglosadas las partes que la forman y en como se distribuye el tiempo total de la consulta. Para buscar problemas en determinados procesos o descubrir donde está el cuello de botella es un opción bastante útil..

Cuatro planteamientos distintos para migrar mysql cambiando de servidor

Migraciones con MySQL

Hay diferentes maneras de migrar de un servidor a otro una base de datos MySql. Hay factores como la versión, capacidad del servidor/res, volumen de datos, tiempo sin servicio y demás que nos limitan para elegir la mejor manera de hacerlo. También es otro factor si tenemos cluster, si migramos a un nuevo servidor etc. En este caso os expongo cuatro maneras de hacerlo para cambiar de servidor y/o versión..

Una tabla con datos de una base de datos MySQL con PrimeFaces (Paso a paso)

Imagen eliminada.Veremos cómo crear con PrimeFaces una tabla que mostrará datos de una base de datos MySQL. Además está tabla permitirá ordenar y filtrar y paginar los datos.

Nos basamos en el proyecto inicial creado en el post: "Primeros pasos con PrimeFaces, Eclipse y Tomcat (Paso a paso)"
 

Recursividad en MYSQL con Java

He sacado algunas cosas del baúl y las quiero compartir, en este caso se trata de una clase Java que permite ejecutar consultas recursivas en MySQL, la idea surgió a partir de una necesidad en primera instancia y luego me base en la forma en que DB2 la lleva a cabo. Tengo la idea de escribir algún articulo relacionado con recursividad en DB2 ya que es muy útil y por demás interesante..

Cómo evitar errores en SQL Server al concatenar campos con valores numéricos

cadena rota (concatenar en SQL)El operador para concatenar en SQL Server es '+', pero que este operador sirva también para sumar puede generar errores.

La solución es bastante simple, si lo que se quiere es concatenar, hay que convertir a cadena cualquier campo de tipo numérico que intervenga en la concatenación:
SELECT strNombre + ' tiene ' + cast(intEdad as varchar) + ' años'  FROM TablaEmpleados

Conectar con una base de datos MySQL remota

MySQL tiene algunas particularidades a la hora de realizar una conexión desde un cliente remoto que si no las sabemos nos pueden complicar un poco el acceso a una base de datos MySQL desde una máquina diferente a la que aloja la BD.

Con otras bases de datos, como Oracle o SQL Server, una vez que ningún firewall ni nada por el estilo nos impide acceder desde la máquina cliente a la servidora, con utilizar los datos de acceso de un usuario de base de datos normalmente ya se puede 'entrar'.

Con MySQL, aunque el acceso al puerto, normalmente el 3306, esté abierto, la base de datos puede estar configurada para no dejar pasar conexiones externas, y el resultado es el mismo que si el puerto estuviera cerrado por un firewall:

telnet mysql.dataprix.es 3306
Trying 188.166.233.199...
telnet: connect to address 188.166.233.199: Connection refused
telnet: Unable to connect to remote host

Si se obtiene este resultado conviene consultar en el servidor de MySQL el fichero 'my.cnf', ubicado normalmente en /etc en Linux, o el 'my.ini' ubicado normalmente en la raíz del directorio de datos en el que se ha instalado MySQL en sistemas Windows, y comprobar si contiene las variables bind-address o skip-networking.

Cómo controlar y reducir la fragmentación de tablas MySQL consultando information_schema

La fragmentación tiene lugar sobretodo en tablas donde hay mucho movimiento insert/delete. Este crece mucho cuando el volumen de datos de la tabla es muy variable en el tiempo: por ejemplo en tablas de control de transacciones, de logueos de usuarios, de tablas intermedias, etc. El primer sintoma de fragmentación sería lentitud en las consultas, principalmente perceptible en tablas con muchos registros..

MySql: Trigger de conexión para auditoría de conexiones

En mysql los triggers que existen son básicos y solo a nivel de tabla. No existe como en SqlServer o Oracle un trigger que permita cazar las conexiones que se abren y obtener cierta información complementaria referente a las sesiones.
Un mal ejemplo. Se puede dar el caso que en un entorno web tengamos un granja de servidores apache y por lo que sea a alguno se le va la olla. Empieza a abrir threads en nuestro mysql de forma masiva (por el motivo que sea) y nos colapsa el servidor porque no tenemos limitidas el número de conexiones simultaneas para ese usuario. ¿Que mal rollo no? Y si encima esto pasa cuando no estamos en la oficina nos podemos encontrar que no podemos saber mucho de lo que ha pasado, por ejemplo vemos el pico en cacti pero no tenemos detalle.


Para tener algo más y poder auditar cuando y quien abre conexiones, haremos lo siguiente:  

  1. Creamos schema un schema (o no).