Zmanda Recovery Manager

Zmanda Recovery Manager es una aplicación que nos permite realizar copias de seguridad de MySQL de forma sencilla.

Mediante ZRM podrás:

  • Programar backups completas e incrementales
  • Empezar inmediatamente un backup o posponer copias de seguridad programadas.
  • Elegir formas más lógicas o rápidas de hacer backups.
  • Realizar backupas que vayan mejor para el motor de almacenamiento y la configuración de MySQL.
  • Realizar backups remotos a través de un firewall.
  • Configurar compresión o encriptación.
  • Notificaciones por e-mail del estado de los backups e informes vía RSS.
  • Monitorización
  • Recuperación
  • Parseo de logs

Zmanda Recovery Manager

Recuperar datos en InnoDB

Data Recovery Toolkit for InnoDB es un conjunto de herramientas que comprueba los tablespaces de InnoDB y recuperan datos de un tablespaces dañado o de tablas que han sufrido drop o truncate.

Entre las características que ofrece nos encontramos con:

  • Soporte para REDUNDANT (anterior a MySQL 5.0) y COMPACT (posterior a MySQL 5.0).
  • Funciona con un tablespace único o un tablespaces de un fichero por tabla.
  • Recupera datos incluso cuando una página InnoDB has sido reasignada a otra tabla o fue parcialmente destruida.
  • Permite todos los tipos de datos de MySQL excepto BLOBs, SETs y BITs, aunque está previsto para la próxima versión.
  • Tiene un conjunto de filtros de datos para definir rangos de datos (para números), longitud de campos (para campos de longitud variable), juegos de caracteres (para strings), periodos de datos, etc…
  • Viene acompañado de una herramienta que permite definir tablas InnoDB, así no es necesario implementarlas directamente mediante sentencias SQL.
  • Los datos se devuelven en formato CSV por lo que luego pueden ser importados facilmente.

Data Recovery Toolkit for InnoDB

Vía / Homo-Adminus Blog

10 consejos para MySQL

Buenos consejos a tener en cuenta:

  • Ponle contraseña al usuario root y luego cámbiale de nombre: lo más normal es ponerle contraseña al usuario root, pero no nos sorprendamos si vemos un root sin password o con algo tan ridículo como root_1. Lo que si no se suele hacer mucho es cambiar el nombre al root y eso es una buena idea que habría que tener siempre en cuenta… pero que tampoco sea admin (como dice el artículo), sino algo más difícil de adivinar.
  • Oculta MySQL de Internet: MySQL no necesita estar accesible desde Internet, por lo que mejor evitar esa posibilidad.
  • Protege el directorio de instalación de MySQL de otros usuarios
  • No almacenes datos binarios: que MySQL lo permita no quiere decir que sea lo mejor hacerlo. MySQL envía los datos de una única vez, esto implica que hasta que no se envíe el campo completo, la aplicación no puede parsear la información. Es preferible almacenar los datos en el sistema de ficheros y almacenar en la BD un ruta hasta el fichero. Aunque yo casi recomendaría guardar en la BD una clave, para que mediante una lógica en la aplicación se pueda recuperar la ruta, así, si tenemos que modificar la ruta no tenemos que modificar todos los registros de la BD, tan solo la lógica del programa.
  • Usa SQL standard: MySQL ofrece posibilidades que no son del SQL estándar y que pueden aportarnos muchas ventajas, el problema es que nos limita a exportar nuestra aplicación a otras BD si en un futuro lo necesitamos. La solución es no ejecutar esas sentencias directamente, sino mediante una clase, que extienda de una clase genérica, así podremos simular esas funcionalidades de MySQL en otras BDs creando otras clases para cada motor de BD.
  • Crea tu propio generador de auto_increment: el auto_increment nos crea números consecutivos que podemos usar en nuestras tablas, pero con limitaciones, solo existe un auto_increment por tabla y son independientes de las tablas, por lo que distintas tablas pueden tener mismo id, lo cual puede no convenirnos en algunas circunstancias.
  • No mezcles código de presentación con el de acceso a BD: es el sistema MVC que siempre debemos usar.
  • Normalización y denormalización: la normalización nos permite tener una BD sin datos redundantes. Desafortunadamente, a veces esta pena el rendimiento, para lo cual, una vez normalizada la BD es conveniente denormalizarla.
  • Usa un pool de conexiones en el servidor Web o en el servidor de aplicaciones: la conexión a la BD es algo costoso, si compartimos conexión mediante un pool, ganaremos en rendimiento.
  • Mejoras tus queries con EXPLAIN SELECT: aunque es un comando difícil de seguir, nos puede ayudar mucho.

Ten MySQL Best Practices

Vía / Sheeri Kritzer Cabral

Nueva version de SQLYog

Cuando SQLyog pasó de ser un producto únicamente comercial, a disponer de una versión gratuita, anunciamos esta gran noticia, y ahora un año después comentamos la salida de una nueva versión, la 6.12.
sqlyog.png
Desde entonces, esta aplicación es la que he estado usando para trabajar y he de decir que es la que más me ha gustado. Y a partir de la versión 6, mucho más, ya que uno de los inconvenientes que tenía era el uso de Unicode, no permitía escribir o mostrar texto en otros idiomas como el chino, japonés o árabe, por lo que aparecían las famosas interrogaciones cuando encontraba caracteres no reconocidos.
Además, ahora trata mucho mejor el encode y el collation, pudiendo elegirlos fácilmente en la creación de la base de datos y la creación / edición de tablas.
Un gran producto a tener en cuenta.
SQLYog 6.12

mysqlslavesync: clona slaves en MySQL

mysqlslavesync es un script que permite clonar servidores slaves de MySQL (o maestros) para ponerlo en un nuevo servidor slave con mínima interacción.
Se conecta al nodo del origen y realiza un mysqldump o mysqlhotcopy para transferir los datos, recuperar los datos y poner a punto todos los parámetros para la replicación. Empezando entonces la replicación del nuevo slave con el master.
Se trata de una versión inicial, pero nos puede ayudar mucho a la hora de crear un nuevo slave, ya que en poco tiempo tendremos todo funcionando.
mysqlslavesync

mysqlsla: analiza los logs de MySQL

mysqlsla es una aplicación que nos puede ayudar bastante en el desarrollo de nuestas aplicaciones web con MySQL. Se trata de una aplicación que analiza los logs de MySQL (ficheros slow y general).
Además analiza los ficheros de logs raw: ficheros planos que contienen sentencias SQL. Por cada tipo de log genera un informe ordenable por los valores de métricas calculadas desde las queries del log.
Gracias a los informes podremos mejorar nuestro rendimiento modificando las opciones que creamos convenientes.
mysqlsla

Laboratorio: rownum en MySQL

Una característica bastante útil de Oracle es el rownum, que es el valor del índice de la fíla en el resultado de la consulta. Esta característica no existe en MySQL pero se puede implementar de forma sencilla de la siguiente manera.

select @rownum:=@rownum+1 rownum, t.*
from tabla t, (SELECT @rownum:=0) r

Otra característica interesante de Oracle es rowid, un id que referencia de forma única una fila de una tabla. Por ahora en MySQL no existe, por lo que tendremos que buscar otras alternativas a su uso, dependiendo del problema que tengamos (en la mayoría de los casos se soluciona con un campo autoincremental).

|

Outer joins en SQL

Hace días que llevo pensando en explicar cómo hacer un outer join en SQL (MySQL y Oracle), y hoy he encontrado unos diagramas que explican los diferentes tipos de joins que podemos hacer (MySQL).

El outer join se usa cuando queremos que obtener todos los campos de una tabla que cumplen una condición y los campos de otra tabla que coinciden con los de la primera tabla.

outerjoin.png

Imaginamos que tenemos una tabla de palabras en inglés y una tabla de traduciones:

Tabla : palabras
id / palabra
1 / bird
2 / flower
3 / sky
4 / tree
Tabla: traducciones
id / traduccion / idioma
1 / pájaro     / es
3 / cielo      / es

Se trata de tener la tabla de palabras y sus correspondientes traducciones (en este caso solo lo he hecho para español, pero se podrían incluir registros para otros idiomas). Si nos fijamos veremos que un join normal no lo podremos hacer porque si igualamos el id de palabras y traducciones habrá registros que no se mostrarán en la tabla de palabras porque no existen sus correspondientes en la tabla de traducciones. Por ello deberemos ejecutar las siguientes instrucciones en MySQL y Oracle:

/* MySQL */
SELECT *
FROM palabras
LEFT OUTER JOIN traducciones
ON palabras.id = traducciones.id
/* Oracle */
SELECT palabra, traduccion
FROM palabras, traducciones
WHERE palabras.id = traducciones.id (+)

Echadle un vistazo al resto de representaciones gráficas de los joins porque son muy aclaratorias.

A Visual Explanation of SQL Joins

|

Nueva versión de HeidiSQL

heidisql.pngComo ya comentamos en otra ocasión, HeidiSQL es un cliente para MySQL que permite manejar y visualizar las bases de datos y las tablas de MySQL.

Acaban de sacar la versión 3.1 RC1, ofreciendo las siguientes novedades:

  • Mejora importante de rendimiento
  • Soporte para codificaciones de caracteres y collations de bases de datos y tablas.
  • Mejoras en los diálogos y las columnas de las tablas.
  • Ayuda que contiene queries, palabras clave, …
  • Optimización del export
  • Reemplazo de las listas de control por VirtualTreeView, el cual permite mover columnas, recordar posiciones y tamaños entre sesiones y mucho más.

HeidiSQL 3.1 RC1

Consejos para una configuración correcta de la arquitectura de MySQL

Más consejos para tener una configuración más adecuada de MySQL, en este caso desde el punto de vista de la arquitectura.

  • Instala MySQL en su propia partición de disco duro.
  • Cada servidor de MySQL debe tener us propio directorio de administración, directorio de logs, scripts, …
  • Situa los ficheros de datos y los ficheros de logs binarios en discos y controladores separados si es posible, nunca tengas los ficheros de datos y los que sirven para recuperarlos en el mismo lugar físico.
  • Haz copia de seguridad de tus ficheros de configuración.
  • Cambia la configuración de tu base de datos poco a poco para ir como se va comportando.
  • Antes de actualizar MySQL asegurate de conocer los cambios de la release y estudia que las aplicaciones sean compatibles con la nueva versión.
  • Comprueba de vez en cuando la recuperación de backups
  • Intenta usar programas para monitorizar y controlar tu MySQL.

The MySQL Optimal Configuration Architecture