mylvmbackup: copias de seguridad para MySQL

Ya hace tiempo hablé de mylvnbackup como utilidad para realizar copias de seguridad de MySQL cuando se trataba de entorno Linux. Esta vez hablaré con un poco más de profundidad aprovechando que acaban de lanzar la versión 0.10 de esta aplicación.
Esta aplicación bloqueará para lectura todas las tablas y vaciará el caché de disco del servidor, creando un snapshot del directorio de datos de MySQL, desbloqueando las tablas de nuevo. El snapshot toma poto tiempo y cuando se ha realizado el servidor puede continuar funcionando normalmente mientras que el fichero actual de backup continúa.
El snapshot se monta en un directorio temporal y se comprime usando el comando tar, con un formato de fichero así: YYYYMMDD_hhmmss_mysql.tar.gz.
mylvmbackup

Columnas virtuales en MySQL

MySQL está trabajando en un tipo nuevo de columnas las cuales pueden resultar muy útiles. Se trata de columnas virtuales, las cuales tienen un valor automático dependiente de una función.

Con un ejemplo se puede entender mejor:

create table t1 (
a enum('A','B','C'),
b int,
c virtual int as (if(a<>'A',null,b)) stored unique);

Como se puede ver, el campo c tendrá valor null si el campo a es distinto de ‘A’ y el valor del campo b en el resto de los casos.

¿Qué nos puede aportar esto?, pues mayor velocidad en queries que usen índices funcionales, simplicidad en queries usadas con frecuencia y el uso de índices basados en funciones.

También se podría hacer mediante el uso de triggers, pero si el dato se actualiza, este permanerá igual con triggers y cambiará automáticamente con el uso de las columnas virtuales. También se podrían usar vistas, pero es menos eficiente ya que se crean más objetos usando vistas.

Existen algunas restricciones como que solo se puede usar en MyISAM y InnoDB, pero aún así, estoy deseando poder echar mano a este tipo de columnas.

MySQL virtual columns preview

GreenSQL: proxy que protege MySQL de SQL injections

GreenSQL es un reverse proxy que se sitúa entre tu aplicación web y la BD de MySQL y evita que se realicen ataques de SQL injection en nuestra BD.
greensql.png
La lógica está basada en la evaluación de los comandos SQL usando una matriz de puntuación de riesgo, a parte de bloquear comandos de administración (DROP, CREATE, …).
Tiene muy buena pinta, claro que habría que hacer unas pruebas de rendimiento para ver si es más eficiente evitar los ataques mediante código o mediante GreenSQL.
GreenSQL

Sitellite: CMS en PHP, MySQL y Apache

Sitellite es un CMS realizado en PHP que accede a MySQL en Apache que ha sido probado en IE6+, Firefox 2+ y Safari 3, y que ofrece las siguientes características:

  • Multilenguaje
  • Editor WYSIWYG
  • Auto-save por si error en el navegador
  • Seguridad contra spam o ataques contra la sesión
  • Workflow de mensajes
  • Opciones SEO
  • y mucho más

Sitellite

ConstructrCMS: otro CMS en PHP

CMS hay muchos y cada día aparece uno nuevo, supongo que es porque cada cual hace las cosas a su manera y no hay un CMS que lo haga tal como uno quiere, por ello será por lo que los desarrolladores crean CMS nuevos. Lo cual nos lleva a que el mejor CMS que haya (Drupal, Joomla, …) no tiene que ser el que más nos guste.

En este caso se trata de ConstructrCMS, un CMS en PHP y MySQL que nos ofrece ente otras cosas:

  • URLs amigables
  • Cache
  • ACL
  • Login mediante hash vía link
  • TinyMCE integrado
  • Prototype y Scriptaculous
  • UTF-8
  • Uploads mediante FTP y sincronización automática después del FTP
  • Backend en distintos idiomas
  • Previsualizaciones
  • 404 personalizados

ConstructrCMS

Tareas típicas para el mantenimiento de MySQL

Tareas que se deberían ejecutar para el mantenimiento de la base de datos de MySQL:

  • Backup: hay que realizarlo de los ficheros de datos, ficheros de logs de transacciones, ficheros de configuración y logs binarios.
  • Limpiar los logs binarios: Se puede hacer mediante my.conf usando expire_logs_days o mediante la sentencia PURGE MASTER LOGS. Eso sí, no purgar los logs que necesiten los esclavos, ni borrarlos mediante un comando de un fichero (rm bin-log.*).
  • Optimizar las tablas: después de inserts y updates las tablas se llenan de espacio inútil, por lo que es necesario optimizar las tablas usando OPTIMIZE TABLE.
  • Vaciar la caché: cuando se ejecutan selects con tamaños diferentes de resultados, el cache se defragmenta, lo cual hace necesario que se vacie la cache (FLUSH QUERY CACHE).
  • Rotar los logs binarios: los logs binarios solo se rotan por tamaño, si quieres hacerlo en un determinado momento se debería usar la sentencia FLUSH LOGS.

Typical automated MySQL maintenance jobs

SQL Buddy: administrador web de MySQL

SQL Buddy es un administrador de MySQL que usa Ajax para cargar los datos por lo que el número de consultas disminuye. A parte de mostrar una interfaz sencilla de usar.
sqlbuddy.png
Permite importar y exportar datos, administración y gestión de tablas y algunos detalles más. No parece ser tan completo como phpMyAdmin, pero sí que es suficiente para lo que muchas veces necesitamos.
Es compatible con PHP 4.3+, MySQL 4+, Firefox, Safari, Opera 9.5 e Internet Explorer 7.
SQL Buddy

Drizzle: MySQL para la web

Drizzle es de lo que más se está hablando últimamente dentro de los blogs sobre MySQL. Se trata de un motor de base de datos pensado para la web. Basado en MySQL 6, pretende llegar a ser más rápido que MySQL y admitir mucha concurrencia.

En base inicial, creado por una comunidad de desarrolladores liderado por uno de los fundadores y desarrolladores iniciales de MySQL, elimina de MySQL6 los triggers, procedimientos almacenados, las vistas, control de acceso, caché de queries y prepared statements, tan solo MyISAM con índices FULLTEXT.

Tiene muy buena pinta, ahora a ver a qué llega el desarrollo.

Más información

Drizzle

Nueva versión de Sphinx

Sphinx es un buscador de texto bastante rápido y potente (pensado para bases de datos grandes), que permite ser integrado con otras bases de datos como MySQL.

Acaban de sacar la versión 0.9.8 después de 15 meses de trabajo (y justo después de que yo ayer me bajara la versión anterior y la instalara). Existen más de 70 nuevas características, de las cuales destacaría:

  • Soporte para libstemmer, permitiendo stemmers para nuevos lenguajes.
  • Posibilidad de eliminar elementos HTML.
  • Decodificar entidades HTML.
  • Añadidas nuevos modos de crear excerpts.
  • Mejorado el motor para obtener queries.
  • Nuevos modos de ordenación de resultados.
  • Nuevas APIs para Java, C y Ruby.

Sphinx

Flexviews: vistas materializadas en MySQL

Las vistas materializadas son aquellas vistas que se almacenan en una tabla de la base de datos. MySQL no provee de estas vistas, pero Flexviews lo simula mediante procedimientos almacenados que se ejecutan mediante triggers.
Flexviews