Home |  MySQL Buzz |  FAQ |  Feeds |  Publique su blog |  Comentario |  Archivo |  Suscripción RSS RSS 2.0 Español English Deutsch Français Italiano 日本語 Русский Português
Showing entries 1 to 30 of 257 Próximo 30 Viejas entradas
Unidades para cambiar valores de MySQL en caliente
+0 Vote Up -0Vote Down

Mediante SET GLOBAL / SET SESSION podemos modificar ciertos valores de MySQL, pero no aceptan unidades:

mysql> set session max_allowed_packet=20M;
ERROR 1232 (42000): Incorrect argument type to variable 'max_allowed_packet'

En lugar de tener que calcularlo fuera del MySQL, podemos indicar la operación. Por ejemplo, para 20M podemos indicar 20*102*1024:

mysql> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 10485760 |
+--------------------+----------+
1 row in set (0.00 sec)

mysql> set session max_allowed_packet=20*1024*1024;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_allowed_packet';
  [Lea más...]
SHUTDOWN vs SIGTERM en un MySQL
+0 Vote Up -0Vote Down

Existe la creencia que mandar un SIGTERM a un mysqld no es la forma correcta de apagar un MySQL, en realidad es otra opción igual de válida.

En la documentación de MySQL referente al apagado del daemon podemos ver los pasos que se realizan:

  • Ya sea mediante el mysqladmin shutdown o cuando el mysqld recibe un SIGTERM se inicia el proceso de apagado
  • Si es un cliente que manda el shutdown (mysqldadmin shutdown) se crea un thread para gestionar el apagado del daemon. Si se manda el thread se puede crear o ser gestionado directamente por el handler del evento
  • A continuación deja de aceptar nuevas conexiones
  • Se matan todas las conexiones
  [Lea más...]
Exportación de bases de datos con mysqldump
+0 Vote Up -0Vote Down

Al exportar una base de datos con mysqldump y quererla reimportar deberemos vigilar si nos añade el use database por si queremos importarla con otro nombre.

Las opciones de mysqldump al respecto son:

$ mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

Para exportar una base de datos, podemos usar indistintamente mysqldump <db> o mysqldump –databases <db>, pero existe una pequeña diferencia:

Con la opción –databases podemos indicar más de una única base de datos, por lo que nos añadirá el comando use db antes de exportar

  [Lea más...]
analyze y optimize en MySQL slaves
+0 Vote Up -0Vote Down

En un MySQL con replicación, todo lo que acaba en el binlog se consideran modificaciones que se traspasan a los slaves para que sean modificados igual que el master.

En el caso de los analyze y optimize, no se ve tan claro como un UPDATE:

  • analyze: Actualiza la información que utiliza el optimizador sobre la distribución de las filas en la tabla
  • optimize: Elimina el espacio que ya no se usa: Cuando un dato es eliminado es marcado como eliminado en lugar de eliminar-se, con este comando recreamos la tabla eliminando el espacio no utilizado

Estos comandos acaban en el binlog, por lo que no hace falta tener estas tareas programadas en los slaves. Mediante el

  [Lea más...]
Timeouts de MySQL: wait_timeout vs interactive_timeout
+0 Vote Up -0Vote Down

En MySQL existen dos timeouts diferentes según si el cliente se identifica como una conexión interactiva o no. Las variables que definen estos timeouts son wait_timeout y interactive_timeout

Si definimos en el my.cnf los siguientes timeouts:

wait_timeout=60
interactive_timeout=90

Con el siguiente código PHP:

<?php
$link = mysql_connect('localhost', 'root', '');

print_r(mysql_fetch_assoc(mysql_query("show variables like 'wait%';")));

mysql_close($link);
?>

Obtendremos el valor de wait_timeout de la sessión no interactiva:

$ php wait.php
Array
(
    [Variable_name] => wait_timeout
    [Value] => 60
)

Pero

  [Lea más...]
Unknown table engine InnoDB
+0 Vote Up -0Vote Down

El error “Unknown table engine InnoDB” puede ser que tengamos el engine deshabilitado en el my.cnf con skip-innodb pero también puede ser que nos enfrentemos a problemas de memoria:

En el caso que en el my.cnf no tengamos el skip-innodb, deberemos comprobar el log del MySQL ya que nos podemos encontrar con:

120413 19:40:18  InnoDB: Error: cannot allocate 157302784 bytes of
InnoDB: memory with malloc! Total allocated memory
InnoDB: by InnoDB 7994352 bytes. Operating system errno: 12
InnoDB: Check if you should increase the swap file or
InnoDB: ulimits of your operating system.
InnoDB: On FreeBSD check you have compiled the OS with
InnoDB: a big enough maximum process size.
InnoDB: Note that in most 32-bit computers the process
InnoDB: memory space is
  [Lea más...]
Migrando un MySQL de cabina usando un master-slave
+0 Vote Up -0Vote Down

Toda migración acaba obteniendo una cierta complejidad si queremos minimizar el tiempo de corte y poder garantizar haya una “vuelta atrás” en caso de problemas. Vamos a ver una forma de migrar un MySQL master de un disco de una cabina a otro disco de otra cabina minimizando el tiempo de corte gracias a un slave que transformamos en master y volvemos a transformar en slave.

Suponiendo que tenemos un MySQL con un slave y queremos migrar de un disco en una cabina antigua a otro disco de una cabina nueva: Mientras se traspasan los datos podemos usar el slave como master y cuando acabe podemos sincronizar los dos MySQL y volver a dejar el MySQL con su rol habitual.

La hora de ruta sería la

  [Lea más...]
Posts publicados en MySQL High Performance
+0 Vote Up -0Vote Down

Como ya comenté anteriormente ahora mis esfuerzos de blogging se centran más en generar contenido para MySQL High Performance :) Para los que quieran un rápido listado de mis últimos posts, aquí lo tenéis:

  [Lea más...]
Ver los storage engines disponibles en MySQL
+0 Vote Up -0Vote Down

Un MySQL puede estar compilado para soportar varios STORAGE ENGINES, vamos a ver de los que disponemos y sus características:

El comando para ver el tipo de tablas que podemos usar en el MySQL es con SHOW STORAGE ENGINES o SHOW ENGINES:

mysql> show engines;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                        | Transactions | XA   | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ndbcluster | YES     | Clustered, fault-tolerant tables                               | YES          | NO   | NO         |
|
  [Lea más...]
Migrar de MS Access a MySQL con relaciones
+0 Vote Up -0Vote Down

He usado herramientas como MySQL Migration Toolkit (*) y Bullzip’s Access To MySQL, ambos hacen un excelente trabajo pero no exporta las relaciones entre tablas. Hacer esta tarea nos puede tomar varias horas (hasta ahora):

Escribí un código VBA para identificar las relaciones generando código MySQL con las sentencias de creación, esto puede ser muy útil después de la migración usando cualquier herramienta libre.

Option Explicit
'Copiar y pegar esta función en un módulo nuevo/existente de MS Access.

Public Sub printRelations()
    Dim sql, fk As String
    Dim i, j As Integer
    For i = 0 To CurrentDb.Relations.Count - 1
        sql = "ALTER TABLE `" & CurrentDb.Relations(i).ForeignTable & _
            "` ADD CONSTRAINT `" & CurrentDb.Relations(i).Name & "` FOREIGN KEY ("
  [Lea más...]
Mantener varios snapshots de MySQL online
+0 Vote Up -0Vote Down

En ciertas bases de datos dónde el tiempo de recuperación de una tabla es crítico podemos mantener un conjunto de snapshots online (penalizando el rendimiento del disco) con el fin de disponer de puntos de recuperación muy cercanos al estado actual. Vamos a ver como configurarlo usando mylvmbackup

Primero lo descargamos:

cd /usr/local/src
wget http://www.lenzg.net/mylvmbackup/mylvmbackup-0.13.tar.gz
tar xzf mylvmbackup-0.13.tar.gz

E instalamos normalmente:

cd mylvmbackup-0.13
make prefix=/usr/local/ install

A continuación deberemos indicar en el fichero de configuración (/etc/mylvmbackup.conf) los datos para acceder al MySQL:

[mysql]
user=root
password=passwdroot
host=localhost
port=3306
socket=/tmp/mysql.sock
mycnf=/etc/my.cnf

En la secciones

  [Lea más...]
MySQL necesita mejorar sus mensajes de error
+0 Vote Up -0Vote Down

Acabo de modificar una base de datos, no debió demorar las dos horas que demoré en realizar la tarea si no fuera por que MySQL no ha mejorado aun sus mensajes de error.

La tarea fue agregar una nueva clave foránea a una tabla existente, veamos como reproducir lo que me ha pasado:

-- Crear las tablas foo y bar
CREATE TABLE foo (
	id INTEGER NOT NULL PRIMARY KEY,
	bar_id INT NOT NULL
);
CREATE TABLE bar (
	id INTEGER NOT NULL PRIMARY KEY
);
-- Intentar crear una clave foránea
ALTER TABLE foo
	ADD FOREIGN KEY(bar_id) REFERENCES bar(ANY_FIELD) ;

Al ejecutar la ultima sentencia MySQL devuelve un error genérico que puede significar muchas cosas:

Error Code: 1005. Can't create table 'temp.#sql-4bd7_11' (errno: 150)

Todo hubiera sido mas fácil si me hubiera dado cuenta

  [Lea más...]
Que hay en MySQL Enterprise?
+0 Vote Up -0Vote Down

Muchos nos hemos hecho esa pregunta, Pedro Andrade y Manuel Contreras de Oracle nos aclaran el asunto, aqui los livestreams grabados del ultimo evento Joomla en Guatemala.

Watch live streaming video from desdeguate at livestream.com

Watch live streaming video from desdeguate at livestream.com

Valores auto_increment personalizados
+0 Vote Up -0Vote Down

En el Perú los formatos numéricos de las facturas es 001-000033 , la serie (001) cambia eventualmente pero el valor auto-incrementado es el mismo:

001-000034
001-000035
001-000036
...

Para manejar esto en MySQL he preparado una solución basada en otro articulo mio:

  • Crear la tabla para guardar los números actuales:
    CREATE TABLE _sequence
    (
        seq_name VARCHAR(50) NOT NULL PRIMARY KEY,
        seq_group VARCHAR(10) NOT NULL,
        seq_val INT UNSIGNED NOT NULL
    );
  • Crear una función para obtener el valor siguiente e incrementarlo:
    delimiter //
    DROP FUNCTION IF EXISTS getNextCustomSeq//
    CREATE FUNCTION getNextCustomSeq
    (
        sSeqName VARCHAR(50),
        sSeqGroup
  •   [Lea más...]
    Snapshots y procesos en MySQL
    +0 Vote Up -0Vote Down

    Al ver que un site se queda frito durante un minuto pero cuando entramos ya no queda ningún thread en el MySQL debemos investigar los logs.

    Si no existen errores en el log del daemon, para investigar el site bloqueado podemos ver que hay en el log de slow queries. Suponiendo el siguiente:

    (...)
    # Time: 120228 21:00:04
    # User@Host: systemadmin[systemadmin] @ localhost []
    # Query_time: 1.459100  Lock_time: 0.000034 Rows_sent: 0  Rows_examined: 0
    SET timestamp=1330441204;
    REPLACE INTO `sesiones` VALUES('ffff21568da68d024dead5b49b680000', '1234', '');
    # User@Host: systemadmin[systemadmin] @ localhost []
    # Query_time: 1.385580  Lock_time: 0.000032 Rows_sent: 0  Rows_examined: 0
    SET timestamp=1330441204;
    REPLACE INTO `sesiones` VALUES('fffffb70a60660f3d7deade5ca8d0000', '4321', '');
    # Time:
      [Lea más...]
    Replicación MySQL y la clausula LIMIT
    +0 Vote Up -0Vote Down

    Tal y como podemos encontrar en el manual del MySQL, el uso de LIMIT en queries que modifican tablas es inseguro en modo STATEMENT (por defecto). Si lo hacemos nos encontraremos en el log mensajes similares a:

    120123 19:06:01 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Statement: DELETE FROM casas
    		WHERE DATEDIFF(NOW(), casa_date) > 31 limit 1000
    

    Esto se debe a que aunque existan los mismos registros:

    master> select * from fib;
    +------+-------+
    | id   | valor |
    +------+-------+
    |    6 |     8 |
    |    7 |    13 |
    |
      [Lea más...]
    Certificación PHP en Zaragoza
    +1 Vote Up -0Vote Down
    Warp se encargará de impartir los cursos de PHP y MySQL que dan acceso a la certificación Zend PHP 5.3 a partir del 31 de enero de 2012, en el Centro de Tecnologías Avanzadas de Zaragoza. El curso está dirigido a aquellas personas que quieran aprender a programar portales web con dos de las herramientas más [...]
    SHOW OPEN TABLES de MySQL
    +0 Vote Up -0Vote Down

    Mediante SHOW OPEN TABLES podemos ver las tablas que están actualmente abiertas en la table cache y si esta en uso o si tiene threads a la espera a que otro libere el bloqueo.

    Si ejecutamos simplemente SHOW OPEN TABLES veremos por todas las bases de datos las tablas que están abiertas y si están en uso mediante la columna In_use:

    mysql> show open tables;
    +-------------+--------------------------------------------------------+--------+-------------+
    | Database    | Table                                                  | In_use | Name_locked |
    +-------------+--------------------------------------------------------+--------+-------------+
    | xxxxxx_utf8 | tmp_systemadmin.es                                     |      0 |           0 |
    (...)
    

    La columna Name_locked se

      [Lea más...]
    Instalación de MySQL Cluster (ndb)
    +0 Vote Up -0Vote Down

    Vamos a ver como instalar MySQL Cluster y sus características. No se trata de una solución de alta disponibilidad para el típico MySQL (con tablas MyISAM o InnoDB) sino que se trata de un storage engine transaccional con sus propias características: ndb

    El MySQL Cluster ndb ofrece una base de datos sin nada compartido con tres tipos de nodos diferenciados:

    • Nodo de gestión (ndb_mgmd): Permite la gestión del resto de nodos del cluster, arrancar y apagar nodos o hacer backups. Aunque se deba arrancar el primero puede fallar sin afectar al funcionamiento del cluster.
    • Nodo de datos (ndbd o ndbmtd): Almacena los datos los trata
      [Lea más...]
    Cuidado con los snapshots en MySQL
    +0 Vote Up -0Vote Down

    He visto algunas formas de hacer snapshots de MySQL que no deben hacerse así. Vamos a ver un ejemplo.

    Me han pasado scripts como el siguiente:

    /usr/sbin/xfs_freeze -f /var/mysql
    /usr/bin/ec2-create-snapshot -K $KEY -C $CERT vol-1111ff11 --description "SnapMysql"
    /usr/sbin/xfs_freeze -u /var/mysql
    

    En este caso se hace un snapshot de un EBS habiendo congelado previamente el sistema de ficheros, en este caso xfs. Si bien el snapshot tendrá los datos consistentes del sistema de ficheros, los datos que tenga el MySQL en memoria se perderán. Para hacer backups mediante snapshots de MySQL con XFS lo podemos hacer mediante mylvmbackup.

    En el caso que sea xfs deberemos indicar que

      [Lea más...]
    Fichero con el estado de InnoDB
    +0 Vote Up -0Vote Down

    Mediante SHOW INNODB STATUS podemos obtener ver los contadores de InnoDB, valores varios, estadísticas y las transacciones. Algunos de dichos valores nos puede interesar guardar un histórico para hacer un gráfico o ver su evolución. Mediante la opción innodb-status-file podemos simplificar el script de optención de datos.

    Mediante la opción –innodb-status-file indicamos al MySQL que escriba en el datadir el estado de InnoDB. El fichero en cuestión se llamará innodb_status.<PID%gt; por lo que el script deberá buscar primero el PID del mysqld para poder encontrar el fichero.

    De esta forma nos ahorramos tener que acceder al MySQL

      [Lea más...]
    Último certificado del año, MySQL 5.0 Developer
    +0 Vote Up -0Vote Down

    Justo cuando llegaba el final del año conseguí mi objetivo, el certificado MySQL 5.0 Developer. Ya tengo el pack completo :) La verdad es que este me ha parecido ligeramente más complicado que los anteriores, más que nada por mi poca experiencia con el lenguaje SQL. Pero para eso es están las certificaciones, para aprender.

    Ahora toca centrarse en aplicar lo aprendido y seguir mejorando poco a poco. Tengo muchos libros para leer en mi Kindle pero poco tiempo. He empezado por "MySQL High Availability" que a pesar de ser un poco pesado de leer en algunas partes y que son muy pesados con su librería de Python, es un buen libro para ampliar los conocimientos en replicación y alta disponibilidad.

    Fuera de la lectura técnica, ¿tenéis alguna recomendación para leer en este 2012? A mi me ha picado la curiosidad Metro 2033.

    Lock wait timeout exceeded; Try restarting transaction
    +0 Vote Up -0Vote Down

    Al ejecutar una query en un MySQL contra una tabla con el engine InnoDB nos podemos encontrar con el error:

    ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
    

    La variable innodb_lock_wait_timeout permite definir el tiempo va a esperar una query a obterner un lock, por lo que podemos minimizar este error aumentando este timeout a costa de asumir que las queries pueden tener esta tiempo el thread bloqueado a la espera. Dependiendo del entorno quizá nos interesa incluso bajarlo para evitar que las queries se queden esperando (por ejemplo en entorno web). Vamos a ver como investigar este problema viendo las transacciones implicadas en un problema de este tipo.

    Primero

      [Lea más...]
    Readers’ Choice Awards 2011
    +0 Vote Up -0Vote Down

    Y salieron los premios anuales de la revista Linux Journal, me topé con algunas sorpresas y otras no tanto, y puedo resaltar los ganadores de algunas categorías que me interesan:

    • Mejor distribución de Linux: Ubuntu (faltaba mas)
    • Mejor entorno de escritorio: Gnome 3 (de verdad no esta tan mal)
    • Mejor navegador: Firefox  :/
    • Mejor gestor de base de datos: MySQL (seguido muy de cerca por PostgreSQL)
    • Mejor lenguaje de programación: Python? (creo que es hora de empezar con “esa nota”)
    • Mejor juego: World of Goo (creo que vale la pena las 20 fichas que cuesta)

    La lista es larga, son 45 categorías, les sugiero que le hechen un vistazo:

      [Lea más...]
    Eliminar numeros de linea con Vim
    +0 Vote Up -1Vote Down

    ¿Quién no ha buscado código fuente en la red? Algunos sitios comparten segmentos de codigo fuente incluyendo el numero de línea, sé que lo hacen intencionalmente por que disfruntan sabiendo que debemos darnos el trabajo de eliminar las numeraciones de linea para poder compilar el codigo brindado, ademas de fijarnos en otros detalles.

    Aqui una muestra clásica de un copy paste desde una pagina web hacia Vim (u otro editor):

    Para un segmento de codigo de unas cuantas

      [Lea más...]
    Probando UDFs para MySQL: Title Case
    +0 Vote Up -0Vote Down

    Conocemos “de sobra” lo que hacen las funciones LCASE y UCASE en MySQL, otros gestores también la implementan con alguna variación en el nombre pero con el mismo resultado.

    Pero que pasa si queremos una función que convierta un texto al tipo Titulo, conocido también como title case, es decir convertir “un texto arbitrario” en “Un Texto Arbitrario“, para este caso no existe la función

      [Lea más...]
    Mis bugs reportados de MySQL-Workbench
    +0 Vote Up -0Vote Down

    Hace algunos meses, mientras usaba MySQL Workbench 3.2.33, noté varios bugs los cuales reporté inmediatamente, Oracle ya publicó la versión 3.2.35 y está apunto de publicar la versión 3.2.36, no había recibido noticias acerca de mis reportes.

    Siempre es bueno colaborar a la mejora de herramientas libres, en este caso me dí cuenta de algunos detalles, incluso algunos de ellos pasarían desapercibidos. Pasado el tiempo ya, quise saber sobre mis bugs reportados y resulta que todos ya habían sido resueltos, y éstos son:

    60354    Workbench can’t open a stored procedure
    60557    Workbench closes without

      [Lea más...]
    Problema al emitir recibos de honorarios SUNAT
    +0 Vote Up -1Vote Down

    Hace unas horas me he afiliado a la emisión por recibos de honorarios de la SUNAT, y me he dado con la sorpresa que no se pueden emitir los recibos de honorarios y me imagino que también para otros casos.

    Sé que llamando a la misma SUNAT o enviando una queja puede demorar una eternidad, y busque una solución mientras el genio que ha programado esto lo solucione.

    Este es el punto donde se estanca, desde aquí no es posible avanzar mas:

    Deben usar Firefox (con firebug plugin) o Chrome para que puedan seguir adelante, con los siguientes pasos (a prueba de tontos), lo voy a decir una vez

      [Lea más...]
    ¿Donde comprar libros baratos?
    +0 Vote Up -1Vote Down

    Mientras sitios como Amazon ofrecen una variedad de libros única en la red, también existen los otros donde podemos encontrar libros usados a bajo costo y finalmente podamos tener el gusto de leer el libro original. Algunos dirán que es una tontería comprar libros antiguos sobre computación, bueno… cada quien con sus gustos.

    Por ejemplo siempre he querido tener los cuatro tomos de la documentación de Visual C++ 6.0 edición impresa de mas de 1200 paginas cada uno, o los libros de David Kruglinski, Jeff Prosise o Herbert Schildt… una delicia para quienes aman coleccionar verdaderos clásicos.

    En Amazon también podemos comprar libros usados a menor precio, pero hay sitios dedicados a vender libros usados (aunque ahora también venden nuevos), les dejo una lista de sitios en los que he comprado (y compro periódicamente) gran

      [Lea más...]
    Hace bastante tiempo que no escribo aquí y creo que es necesario dar...
    +0 Vote Up -0Vote Down

    Hace bastante tiempo que no escribo aquí y creo que es necesario dar una explicación a las personas que me siguen, aunque no sean muchas ;)

    Mi vida laboral ha vuelto a dar un cambio importante, el segundo en lo que voy de año. Desde Octubre he entrado a trabajar en Percona como Support Engineer lo cual, bajo mi punto de vista, es un salto profesional grandísimo y le estoy muy agradecido a Ewen Fortune por esta oportunidad. Ahora mismo tengo de todo en mi vida, pero no tiempo libre ;) Los que me conocen bien saben que en cuanto tengo un reto por delante no puedo dejar de trabajar y esforzarme dando lo mejor de mi, por lo que estos meses están siendo muy intensos. Mucha lectura, estudio y práctica para poder alcanzar el nivel de profesionalidad y conocimiento que tanto hacen destacar a Percona.

    Seguiré

      [Lea más...]
    Showing entries 1 to 30 of 257 Próximo 30 Viejas entradas

    Planet MySQL © 1995-2008 MySQL AB, 2008-2010 Sun Microsystems, Inc.,
    2012, Oracle Corporation and/or its affiliates.
    Content reproduced on this site is the property of the respective copyright holders.
    It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.