Archive for the ‘mysql’ Category
Error con LOAD DATA LOCAL INFILE en MySql

Menudo bugazo de MySQLos hemos encontrado hoy! Este bug porque sí, porque lo es ya que tiene toda la pinta de ser un bicho nos ha traído de cabeza durante dos días. Si ya pensaba yo que esto de que Oracle salga de compras no nos iba a traer nada pero nada bueno, en fin webmaster of the universe os ponemos en antecedentes:
Estamos ultimando la v.3.9 del sistema de tiendas online ecOOmmerce.com en ella hemos incorporado una función que realiza las actualizador de precios y de stock semiautomatizado donde el cliente en base a un fichero bajo formato .csv (parecido al excel, realmente es un txt con campos separados por un signo) puede desde el backoffice de la aplicación actualizar los precios de una tacada.
El servidor web alojado en Hispalab corre Linux con Mysql versión 5.0.90 instalada. Nosotros disponemos acceso al Cpanel para administrar, si bien no podemos acceder a consola por SSH ni a través de Cpanel.
Intentamos hacer un típico LOAD DATA LOCAL INFILE para cargar datos de un fichero .csv en una tabla temporal de la base de datos que posteriormente será analizada por nuestra nueva función y actualizará los precios.
La sentencia es la típica, reportada en cientos y cientos de foros de desarrollo tanto en español como en lengua sajona:
LOAD DATA LOCAL INFILE ”/home/dominios/test/public_html/tmp/tarifatest.csv” INTO TABLE table01 FIELDS TERMINATED BY “;” LINES TERMINATED BY “\n”
Y desde la aplicación no recibimos error alguno, para acotar el tema vamos al Phpmyadmin a través de Cpanel y copypasteamos el comando, automáticamente nos escupe el siguiente error:
#1148 – The used command is not allowed with this MySQL version
Repasamos la sentencia de SQL mil quinientas veces y es entonces cuando el ingeniero de sistemas de Hispalab nos dice que no utilicemos el “LOCAL”. Nos documentamos y si, una vez el archivo está en servidor no hace falta utilizar el argumento “LOCAL” ahora bien, al modificar esta función nos encontramos con otro nuevo error:
#1045 – Access denied for user ’wwwtest’@'localhost’ (using password: YES)
Así que comenzamos primero desde PHP y luego desde FTP (no tenemos acceso a consola) ha realizar todo tipo de CHMODS y CHOWN para cambiar los permisos y propietarios de el archivo y la carpeta subida. No conseguimos nada más que perder el tiempo.
Desolados reportamos a Hispalab y al final y tras casi dos días de darnos cabezazos contra el teclado alguien vio la luz en Hispalab, ese LOCAL, ese LOCAL, lo probó en minúsculas “local” y… como bien dijo el “zasss…. todo funcionó”.
Impresionante, ni en la propia documentación de MySQL figura ni una sóla vez en minúsculas, puedes verlo en:
http://dev.mysql.com/doc/refman/5.1/en/load-data.html
En fin, hay queda este post por si alguna vez oss encontráis con semejante problema.
Cambiar clave root a Mysql por línea de comandos Windows
Esta guía ha sido realizada con una captura de Windows 2003 si bien una vez nos logamos a mysql como root los comandos son los mismos para cualquier sistema operativo que disponga de MySQL funcionando.
Vamos a cambiar la clave del root al sistema de bases de datos MySQL desde la línea de comando o símbolo de sistema de Windows, ten en cuenta que la clave Root del MySQL es la clave más potente y por norma general no puede ser cambiada mediante phpMyAdmin ni ningún otro sistema cómodo, este cambio debe realizarse desde la consola de sistema para ello deberás abrir un termina, si estás en Windows deberás abrir una ventana de sistema o ventana MS-DOS que te permita ejecutar el monitor de MySQL, para ello desde tu menú realiza la siguiente secuencia de clics hasta que te aparezca una venta de Símbolo de sistema:
Inicio > Todos los programas > Accesorios > Símbolo de sistema
Y partir de aquí, ejecuta los siguientes comandos (en negrita) pulsando la tecla enter tras escribirlos para que se ejecuten:
mysql -u root -p
A lo que el servidor te pedirá la clave actual de Root, introdúcela y pulsa enter
Ahora se te mostrará el prompt: “mysql>”
Debemos decirle a mysql que vamos a trabajar sobre la base de datos general, que se llama mysql y es la que contiene los privilegios de los diferentes usuarios.
Teclea el siguiente comando sin olvidarte el punto y coma del final:
use mysql;
Ahora hemos de ejecutar una sentencia Update de MySQL para modificar la clave del usuario root fíjate en el siguiente comando:
update user set password=PASSWORD(“nuevaclave”) where user=’root’;
Por ejemplo si la clave que queremos poner a root es “difiLisisisi89Ma” el comando sería:
update user set password=PASSWORD(“difiLisisisi89Ma”) where user=’root’;
Anótate bien esa clave y ahora vamos a recargar los privilegios en el servidor de base de datos con el comando Flush. Teclea:
FLUSH PRIVILEGES;
Y ahora a salir del monitor de MySQL
quit
Cambiar a minúsculas un campo de Mysql
Otro minuapunte de utilidad para los que trabajamos constantemente con bases de datos.
Para cambiar a minúsculas el texto contenido en un campo concreto de una base de datos Mysql lo puedes hacer si necesidad de PHP de por medio, con un comando directo de Mysql que puedes ejecutar desde la línea de comando de Mysql o desde phpMyAdmin.
Aquí os dejamos un ejemplo:
UPDATE nombre_tabla SET nombre_campo=LOWER(nombre_campo);


