MySQL Error 1045 (28000) en Gentoo: Resuelto

Después de varias semanas de pelearme con el dichoso error 1045 (28000) al momento de conectarme, y de también recibir algunos consejos del panda, hoy por la mañana por fin pude entrar a MySQL en Gentoo.

El problema

Después de instalar, usaba emerge –config para crear las bases de datos del sistema y ponerle password al usuario root. Me decía que escribiera el password, que confirmara y después solamente “Done”. Sin embargo, siempre que quería entrar con mysql -u root -p y darle el password, me salía el error arriba mencionado. Reinstalé fácil unas 20 veces (sí, con portage), e incluso bajé los binarios y hasta el código fuente y lo compilé, pero seguía teniendo el mismo problema.

Buscando información

Me acabé TODOS los mensajes del foro de MySQL referentes a este error, busqué cuanto resultado relevante me salía en google, pero las diversas soluciones que mostraban ahí simplemente no funcionaban. Incluso inicié el servicio con la opción –skip-grant-tables para poder entrar sin necesidad de usuarios o password, y sí, lograba entrar. Fue ahí donde me di cuenta de que la tabla user de la base de datos mysql estaba vacía… Se creaba, pero no se pasaban datos al momento de configurarlo.

Si configuraba con emerge, no me salía ningún mensaje de error; si lo hacía con mysql_install_db solo me decía que había fallado, pero no me decía cuál era el problema. Incluso con este último, las tablas sí se creaban, pero resultaba en lo mismo: ningún usuario (ni siquiera el root). Hasta llegué a pensar que quizá era un bug de Gentoo, pero muchos usuarios tenían el mismo problema en diferentes plataformas.

La solución

Por increíble que parezca, la solución era, como siempre, muy simple, pero muy mal documentada. Primero, ¿cómo di con ella? Me eché un clavado al script mysql_install_db y busqué el lugar donde estaba el mensaje de error que me enviaba; luego, fui a ver el if para saber qué comando estaba ejecutando y de ahí comenzó la iluminación divina.

No es nada del otro mundo intuir que si las tablas se crean pero no se llenan de datos, hay un problema con el segundo proceso. Dentro del script, me encontré esto:

fill_help_tables=”$pkgdatadir/fill_help_tables.sql”
create_system_tables=”$pkgdatadir/mysql_system_tables.sql”
fill_system_tables=”$pkgdatadir/mysql_system_tables_data.sql”

if { echo “use mysql;”; cat $create_system_tables $fill_system_tables; } | eval “$filter_cmd_line” | $mysqld_install_cmd_line > /dev/null

else
echo “Installation of system tables failed!”
echo
echo “Examine the logs in $ldata for more information.”

El punto conflictivo era el comando $fill_system_tables, que, como vemos en su definición, ejecuta mysql con el argumento mysql_system_tables_data.sql. Opté por borrar todas las base de datos (es instalación nueva) de /var/lib/mysql, iniciar el servicio sin grant tables, y ejecutar:

mysql mysql < mysql_system_tables_data.sql

Acto seguido, me sale una línea de error que antes no había visto: “Duplicated entry for “localhost”. El script mysql_install_db recibe este error y no continúa con la ejecución, pero nunca lo hace visible tampoco.

Se me hizo raro que el localhost estuviera duplicado, sobre todo porque ya antes el panda me había dicho que era bueno definir el nombre del host en /etc/hostname. Y ya lo había hecho, pero como no había tenido éxito, y XFCE me mostraba algunos errores al iniciar, siempre lo quitaba. ¡Ah! Pues el problema era que Gentoo pone por default el hostname como “localhost”, y mysql crea por default un usuario root para el localhost e intenta crear otro root para el hostname. Al tener el mismo valor, y siendo el campo host una llave primaria, los insert nunca se realizan (porque primero se hacen en una tabla temporal y después se pasan a la de user) y por ende nunca se crean usuarios. Configuré el hostname correctamente y también el /etc/hosts, y pensé que todo estaría bien, hasta que me di cuenta de que el comando /sbin/hostname seguía regresando “localhost”, y ese comando es el que el script de instalación usa para determinar el nombre del host…

Borré otra vez las tablas creadas con el último fallido mysql_install_db y reinicié la máquina. Ahora el hostname estaba correcto y XFCE ya estaba contento. Abro terminal, me hago root, y ejecuto mysql_install_db… ¡Éxito al fin!

Conclusión

Este error parece ser más común de lo que pensaba, pero las causas que lo provocan son diversas. Aprendí mucho, sí, y fue divertido, pero también es un hecho que deberían documentar más las razones por las que esto se presenta, y también mostrar los mensajes de error que se generan al estar ejecutando mysql_install_db, y en todo caso, también pasarlos al portage cuando se está configurando con emerge –config.

Debo ponerle siempre nombre a la máquina cada vez que instale Linux (lo curioso es que en todas las otras máquinas sí está todo bien configurado, pero como en Gentoo uno hace todo, se me había pasado, por eso solo en Gentoo me daba el error).

Ya escribí mi experiencia en los foros de MySQL (en inglés) a ver si a alguien le sirve de algo. Dejo aquí en el blog todo en español para posibles consultas futuras.

11 Replies to “MySQL Error 1045 (28000) en Gentoo: Resuelto”

  1. Yo creo que si debieras registrarlo como bug, algo asi como important, mysql can’t emerge if hostname = localhost as the script fails without report that user tables can’t be created. (an so on), http://bugs.gentoo.org/ o de paso agregarlo como notita en la pagina donde viene la receta de como instalar mysql en gentoo yo creo que es importante poner, pues tal cual como dices, no es sencillo encontrar que el hostname debe colocarse y ser diferente de localhost cuando se hace emerge mysql, valdria la pena se añadiera como notita despues del code 1.1 es decir antes de hacer emerge –config en http://www.gentoo.org/doc/en/mysql-howto.xml

    😀 al menos lograste dar con la causa…
    Salu2

  2. si he la neta no entiend nada pero se oye bien grave =P hay que documentarlo bien jeje
    oye de paso te dejo mi mail en el registro de este post para lo del screenShot ^^

  3. [quote post=”596″]Borré otra vez las tablas creadas con el último fallido mysql_install_db y reinicié la máquina. Ahora el hostname estaba correcto y XFCE ya estaba contento. Abro terminal, me hago root, y ejecuto mysql_install_db… ¡Éxito al fin![/quote]
    jajaja ke buena, lo decis con tanta felicidad que dan ganas de seguir programando!! jajjajaja
    oraleee…!!!

  4. puede un error diferir en cada máquina? lo digo porque edite el config.inc.php y le puse la clave que le configuré al root (al parecer no se guardó el día anterior cuando lo instalé todo) y ya no me ha vuelto a salir ningún error.

    yo desde luego de esto sé poco.

    saludos

    1. Sí. Puede que las configuraciones de cada máquina sean diferentes (de hecho casi siempre lo son para adecuarse a las necesidades del usuario), y por tanto los errores pueden deberse a diferentes causas. Hay sin embargo errores comunes que siempre ocurren por la misma razón.

  5. Amigo, has sido mi salvacion, tengo dias buscando por todos los foros (y aunque soy novato) he hecho todo lo que decian y nada. Mil gracias

  6. hola he logrado solucionar este error.
    Hoy instale mysql 5.1.44 y all momento de configurar las opciones de seguridad (modify security settings)llene mal los campos current root password le introduje una palabra lo que yo no sabia es que ese campo debe ir en blanco.
    y ya en los siguientes dos puse mi contraseña, ya cuando se estaba instalando la configuración me marco el error 1045 donde me decía que no tenia permisos.
    lo que hice de nuevo fue des instalar mysql y borrar la carpeta con el mismo nombre en c: después lo volví a instalar y al ejecutar mysql instance config wizar de lugar de elegir reconfigure instance elegí remove instance y le di ejecutar.
    después me aparecio un mensaje donde me decia que la instancia había sido removida.
    Después reinicie mi computadora y volvi a ejecutar mysql instance config wizar pero ahora si elegí reconfigure instance y al llegar a las opciones de seguridad (modify security settings) solo llene los campos new root password y confirm con mi contraseña. Aclaro no llenen el campo que dice current root pasword.
    despues de esto la instalacion fue exitosa y ahora ya puedo acceder.

    Espero y le sirva ami me funciono.

  7. Merilaim,

    wow muchas gracias probé con lo que a ti te funciono y milagro por fin me dejo finalizar la configuracion.

    Muchas gracias!!!!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.