Configuración de MySQL para rendimiento

Written on August 3rd, 2008
.

En el desarrollo de aplicaciones contra bases de datos, la mayoría de las veces, necesitas unos valores de referencia para saber si las consultas o instrucciones que está procesando tu aplicación se están comportando como debiere. También si te toca administrar un servidor de bd y monitorearlo este post te será de gran ayuda.

En este sentido escribiré algunos de los parámetros que podemos monitorear para el caso de bases de datos MySQL.

Básicamente MySQL nos proporciona una serie de instrucciones SQL que nos devuelve información de estado y rendimiento del servidor, para que luego las evaluemos y decidamos que acción pertinente se lleva a cabo.

La instrucción básica que se usa en MySQL es

SHOW STATUS;

la cual nos devuelve una cantidad importante de estados de variables. Aquí explico las más importantes.

Threads_connected

Esta variable indica el número total de clientes que tienen una conexión abierta actualmente con el servidor.
Proporciona información en tiempo real de cuantos clientes están conectados con el servidor. Esto puede ser de ayuda para analizar el tráfico o decidir cuando es el mejor instante para reiniciar un servidor.

Created_tmp_disk_tables

Esta variable indica el número de tablas temporales que han sido creadas en disco frente a hacerlo en memoria.
El acceso a tablas en disco normalmente es más lento que acceder a ellas en memoria. Por tanto las consultas que usan la sintaxis CREATE TEMPORARY TABLE son más lentas si el valor de la esta variable es superior.

Read the rest of this entry »

Migración de datos de sqlite3 a MySQL

Written on July 4th, 2008
.

sqlite1 Migración de datos de sqlite3 a MySQL

Es algo común que estés desarrollando contra un gestor de bases de datos de “juguete” como puede ser sqlite3 y en un momento dado querer pasar a uno “de verdad” para probar cuanto rendimiento tiene tu app.

En este caso y como reza el título explico como hacer la migración de sqlite3 a MySQL, que resulta bastante trivial.

SQLite a MySql

  1. Se hace un dump de la bbdd que queremos
  2. sqlite3 BasedeDatosaExportar .dump .quit >fichero-dump.sql
  3. Ahora toca adaptarla a la sintaxis expecial de MySQL
    - Reemplazar ” (comillas dobles) por ` (acento grave)
    - Elimina “BEGIN TRANSACTION;” “COMMIT;“, y las líneas “sqlite_sequence
    - Substituye “autoincrement” con “auto_increment
  4. Y el fichero ya está listo para importar en MySQL.

Facil y bonito oye.

Script de corrección de CHARSETS utf-8 mal exportados

Written on July 23rd, 2007
.

Estuve esta tarde trabajando en la migración de la web de www.glug.es a Drupal 5, desde un Drupal 4.6, vamos todo un reto. He tenido una serie de complicaciones al exportar la base de datos ya que tiene un charset latin1_swedish_ci y un collate latin1 pero que no hay manera de que me lo exporte bien por lo que los acentos, las ñ y todo carácter que no estea en ASCII lo pilla mal, por lo que como soy un vago, pero un Vago Bueno™, me puse manos a la obra y me he currado un cutre script en bash que me convierte la gran base de datos de la web citada. Aquí os lo dejo para regocijo del personal:

#!/bin/bash
cp $1 $(basename $1 .sql)."orig.sql";
echo "";
echo "Script de corrección de CHARSETS utf-8 mal exportados";
echo "         ---- Creado por Fran Diéguez ---";
echo "               --- Versión 0.1 ---";

echo "Vocais Acentuadas...";
    echo "	- Efectuando substitución de á";
        sed "s/á/á/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
        sed "s/ã¡/á/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de é";
        sed "s/é/é/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1
        sed "s/ã©/é/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de í";
        sed "s/í/í/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
        sed "s/ã­/í/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
        sed "s/í/í/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ó";
        sed "s/ó/ó/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1
        sed "s/ã³/ó/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ó";
        sed "s/Ó/ó/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
        sed "s/ã“/ó/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ú";
        sed "s/ú/ú/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
        sed "s/ãº/ú/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
echo "Vocais acentuadas maiúsculas...";
    echo "	- Efectuando substitución de á";
        sed "s/Ã/á/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
        sed "s/Á/á/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de é";
        sed "s/É/é/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de í";
        sed "s/Í/í/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ó";
        sed "s/Ó/ó/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ú";
        sed "s/Ú/ú/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
echo "Vocais Especiais...";
    echo "	- Efectuando substitución de à";
        sed "s/Ã /à/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de õ";
        sed "s/õ/õ/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ü";
        sed "s/ü/ü/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
        sed "s/ã¼/ü/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ê";
        sed "s/ê/ê/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ô";
        sed "s/ô/ô/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de õ";
        sed "s/õ/õ/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ç";
        sed "s/ç/ç/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
echo "Letras especiais...";
    echo "	- Efectuando substitución de ñ";
        sed "s/ñ/ñ/g" $1 > temp.sql;
        sed "s/ã±/ñ/g" $1 > temp.sql;

        á±
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de º";
        sed "s/º/º/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ª";
        sed "s/º/º/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de z";
        sed "s/ã§/z/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
        ã§
echo "Signos de puntuación..."
    echo "	- Efectuando substitución de ¡";
        sed "s/¡/¡/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ¿";
        sed "s/¿/¿/g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
    echo "	- Efectuando substitución de ";
        sed "s/Â / /g" $1 > temp.sql;
        rm $1;
        mv temp.sql; $1;
echo "Todavía faltan algúns carácteres - sigo no traballo...";
echo "Para máis información vai a www.mabishu.com";