lunes, 24 de septiembre de 2012

MySQL, el error 87 y cambiar ubicación de las bases de datos

Esta ha sido de las gordas. El objetivo era cambiar la ubicación de los archivos de datos de mi servidor de pruebas MySQL, el que tengo instalado en mi ordenador de casa. Obviamente, acceso total a cualquier parámetro de configuración. Si instalas con típico "sí, sí y sí" es normal que se cree una carpeta en C:/ProgramData/MySQL/MySQL Server 5.5/Data/ que es donde va a para el conjunto de nuestras bases de datos y los ficheros necesarios para INNODB. Bien, ya no lo quiero ahí, lo quiero en X:/Carpeta/MySQL/Data/ (lo de las barras invertidas es porque el my.ini lo pone, y creo que necesita, así). 

En realidad, es fácil, hay varios sitios que te dicen como hacerlo. Solo hay que cambiar una variable en el my.ini (recuerda, "estoy" en Windows):
#Path to the database root
datadir="X:/Carpeta/MySQL/Data/"
Por supuesto, con el servidor apagado, este cambio se tiene en cuenta al iniciarlo.

Pues me ha ocurrido una cosa graciosa. Todo viene de que tengo 2 discos y lo estaba cambiando del disco C al D, pongamos. Pues no iba. Me he puesto duro, he entrado en un terminal con cmd.exe y arrancaba con mysqld.exe. He retocado mil veces el my.ini, cambiando de sitio, poniendo barras en un sentido y en otro ('/' por '\'). Que no. Todo el rato, la salida de mysqld era llegar a la zona de innodb y 

120924 14:18:17  InnoDB: Operating system error number 87 in a file operation.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html
InnoDB: File name .\ib_logfile0
InnoDB: File operation call: 'aio read'.
InnoDB: Cannot continue operation.

Claro, ponte a leer lo que te dicen y como que no te enteras. Lo curioso es que la misma operación pero dentro del disco C, es decir, otra carpeta pero en el mismo disco, funciona.

Al final he conseguido la solución, me la ha dado Websofia, una línea más my.ini:

innodb_flush_method=normal
 
Muy acertadamente, ofrece enlaces a su particular investigación y en este enlace avisan de que hay un error gordo, un bug de esos, que hace que si tienes un disco GPT la cosa no chute. Los detalles más técnicos se van desgranando en esa página pero al principio ya describen lo que me ocurría a mí, un disco con más de 2GB en Windows, el disco D. En el disco C funcionaba porque se trataba de un particionamiento MBR normalito y corrientito, de los de toda la vida.

Como lo oyen, perdón, lo leen. Para encontrarlo fácil, fácil. Menos mal que soy de los que reinstalan solo si la desesperación me lleva a ver burros volando.