www.mamboteam.com
www.elsotanillo.net
Home
jueves, 09 de septiembre de 2010
 
 
  • Español
  • English
  • Français
Menu Principal
Home
Windows
Linux
Fotos
Blog
Noticias RSS
Enlaces de interes
Frases Celebres
Mi Clave GPG
Cursos LPI de la UOC
Utilidades
Busqueda
Webmail
Diccionarios Online
El tiempo
Alicante, Spain
Temp.: 22°C
Sens. Térmica: 22°C
Humedad: 64%
Velocidad: 3 km/h
Direcc.:
Barom.: 1022.0 mb
VAR
Más detalles
Por gentileza de: 
¿Como encontraste la pagina web?
 
Web translation / Traduction web

british flagHi, I am translating some of the articles from Spanish to English. If you are interested in one particular article, drop me a line. Maybe you can help me. :)

Salut, je suis en train de traduire des articles d' Espagnol a Français, si tu veux un article, ecri moi. Peut-être tu peux m' aider. :)

Linux - Acceso a una BBDD mysql desde Bash PDF Imprimir E-Mail
Calificación del usuario: / 4
MaloBueno 
escrito por Juan Sierra Pons   
lunes, 22 de mayo de 2006
Compartelo:
Delicious
Meneame
Mister.Wong

Muchas veces necesitamos sacar algun dato o incluso modificar algun dato de una base de datos BBDD mysql desde nuestra consola.

Dividiremos el Script en 2 partes:

  1. Definicion de los parametros para la conexion a la BBDD mysql.
  2. Conexion y operacion a realizar sobre la BBDD: SELECT /UPDATE/DELETE, etc propiamente dicho.
ScriptConectaMysqlDesdeBash.sh
  1. #!/bin/sh
  2. ####Definimos lor parametros de conexion a la BBDD mysql
  3. SQL_HOST=localhost
  4. SQL_USER="usuario"
  5. SQL_PASSWORD="password"
  6. SQL_DATABASE="basededatos"
  7. ####Montamos los parametros de conexión.
  8. SQL_ARGS="-h $SQL_HOST -u $SQL_USER -p$SQL_PASSWORD -D $SQL_DATABASE -s -e"
  9. #### Montamos la sentencia SQL y la lanzamos
  10. mysql $SQL_ARGS "SELECT CURDATE();"
 

Habra que modificar las variables del script segun tengamos configurado la BBDD a la que queramos conectarnos.

Si lanzamos el script, este nos devolvera la siguiente salida:

elsotanillo:~/# ./ScriptConectaMysqlDesdeBash.sh
CURDATE()
2006-05-22

Comentarios
Añadir nuevoBuscarRSS
Luis - Tu script...   | 189.187.30.xxx | 2008-05-02 16:19:54
Juan,
Gracias por el Script, me ha sido de gran ayuda, no sabes cuanto estuve batallando.
Saludos.
luis - Ejecutar varias sentencias con   | 189.187.30.xxx | 2008-05-02 17:02:29
El Script hace una conexion, ejecuta la sentencia y se desconeta.
Pero si quiero mantener la conexion abierta para lanzar unas 3 sentencias SQL?

Gracias
Juan   | 87.219.131.xxx | 2008-05-02 17:37:04
Simplemente escribelas una detras de otra ya que estas se ejecutan secuencialmente.


Si tienes alguna duda me avisas.

Salu2
Luis - ejecucion secuencial   | 189.187.30.xxx | 2008-05-05 15:17:37
cierto, funciono a la perfeccion.
La respuesta me la manda a la salida standar claro esta, pero ne me deja mandar la respuesta a archivo, utilizo los ">" pero nada, dentro del script claro.
Alguna idea?
Luis - archivo .sql como parametro   | 189.187.30.xxx | 2008-05-05 17:40:28
Algo estoy haciendo mal porque quiero darle al Script como parametro una sentencia SQL pero en su archivo original, es decir .sql pero no lo agarra.
Son varias sentencias que tengo por separado y necesito que cada una se corra diario y me deje un TXT como respuesta.
Juan - RE: archivo .sql como parametr     | 87.219.131.xxx | 2008-05-11 16:14:01
Hola,

No tengo muy claro que es lo que quieres hacer.
Luis - Te posteo u explico   | 189.187.36.xxx | 2008-05-23 11:37:46
Ahi va el Script
$ cat ScriptConectaMysqlDe
sdeBash.sh
#!/bin/sh
SQL_HOST=localhost
SQL_USER="luis"
SQL_PASSWORD="Bfg03M90"
SQL_DATABASE="gesban"

SQL_ARGS="-h $SQL_HOST -u $SQL_USER -D $SQL_DATABASE -s -e"

mysql $SQL_ARGS "SELECT TCuenta.id_remesa, TCuenta.no_cuenta, TCuenta.gestor_asig, TRemesa.f_vence FROM TCuenta INNER JOIN TRemesa ON (TCuenta.id_remesa = TRemesa.id_remesa) WHERE (TCuenta.no_cuenta = $1) AND (TRemesa.f_vence > CURDATE());"

Hasta aqui.
Esta consulta y otras 5 mas las necesito ejecutar diario y que cada consulta me de el resultado en un archivo TXT.
Lo que ya tengo pensado hacer:
- con el CRON puedo hacer que los Scripst corran a determinada hora
- Ahorita los Scripts me dan el resultado deseado en la lasilda Standar PERO necesito que me lo mande a un archivo TXT y aparte que el nombre del archivo sea asi "remesa20080523.txt". La parte que dice "remesa" que siempre salga asi, pero la parte de...
Luis - Te posteo u explico   | 189.187.36.xxx | 2008-05-23 11:38:39
Ahi va el Script
-$ cat ScriptConectaMysqlDe
sdeBash.sh
-#!/bin/sh
-SQL_HOST=localhost
-SQL_USER="luis"
-SQL_PASSWORD="Bfg03M90"
-SQL_DATABASE="gesban"
-
-SQL_ARGS="-h $SQL_HOST -u $SQL_USER -D -$SQL_DATABASE -s -e"
-
-mysql $SQL_ARGS "SELECT TCuenta.id_remesa, TCuenta.no_cuenta, TCuenta.gestor_asig, TRemesa.f_vence FROM TCuenta INNER JOIN TRemesa ON (TCuenta.id_remesa = TRemesa.id_remesa) WHERE (TCuenta.no_cuenta = $1) AND (TRemesa.f_vence > CURDATE());"
-
Hasta aqui.
Esta consulta y otras 5 mas las necesito ejecutar diario y que cada consulta me de el resultado en un archivo TXT.
Lo que ya tengo pensado hacer:
- con el CRON puedo hacer que los Scripst corran a determinada hora
- Ahorita los Scripts me dan el resultado deseado en la lasilda Standar PERO necesito que me lo mande a un archivo TXT y aparte que el nombre del archivo sea asi "remesa20080523.txt". La parte que dice "remesa" que siempre salga asi, pero...
Luis - Te posteo u explico   | 189.187.36.xxx | 2008-05-23 11:41:38
Ahi va el Script

SQL_HOST=localhost
SQL_USER="luis"
SQL_PASSWORD="Bfg03M90"
SQL_DATABASE="gesban"

SQL_ARGS="-h $SQL_HOST -u $SQL_USER -D -$SQL_DATABASE -s -e"

mysql $SQL_ARGS "SELECT TCuenta.id_remesa, TCuenta.no_cuenta, TCuenta.gestor_asig, TRemesa.f_vence FROM TCuenta INNER JOIN TRemesa ON (TCuenta.id_remesa = TRemesa.id_remesa) WHERE (TCuenta.no_cuenta = $1) AND (TRemesa.f_vence > CURDATE());"

Hasta aqui.

Esta consulta y otras 5 mas las necesito ejecutar diario y que cada consulta me de el resultado en un archivo TXT.
Lo que ya tengo pensado hacer:
- con el CRON puedo hacer que los Scripst corran a determinada hora
- Ahorita los Scripts me dan el resultado deseado en la salida Standar PERO necesito que me lo mande a un archivo TXT y aparte que el nombre del archivo sea por ejemplo asi "remesa20080523.txt".
La parte que dice "remesa" no debe cambiar, pero la parte de la fecha esa si necesito que cambie cad...
Luis - Te posteo u explico   | 189.187.36.xxx | 2008-05-23 11:41:58
Ahi va el Script

SQL_HOST=localhost
SQL_USER="luis"
SQL_PASSWORD="Bfg03M90"
SQL_DATABASE="gesban"

SQL_ARGS="-h $SQL_HOST -u $SQL_USER -D -$SQL_DATABASE -s -e"

mysql $SQL_ARGS "SELECT TCuenta.id_remesa, TCuenta.no_cuenta, TCuenta.gestor_asig, TRemesa.f_vence FROM TCuenta INNER JOIN TRemesa ON (TCuenta.id_remesa = TRemesa.id_remesa) WHERE (TCuenta.no_cuenta = $1) AND (TRemesa.f_vence > CURDATE());"

Hasta aqui.
Luis - Me marca error al postearte el   | 189.187.36.xxx | 2008-05-23 11:49:07
Juan,
No te pude postear el scritp pero es basicamente el que pusiste.
La idea es correr 5 Querys diferentes y que cada uno me genere un archivo TXT y que el nombre del archivo sea la fecha en que se genero, algo asi: "remesa20080516.txt"
Los Querys ya los tengo y jalan bien, el resultado lo veo el pantalla.
Me falta que me genere el resultado en TXT. Me puedes orientar al respecto?
Saludos
Juan - re: Me marca error al posteart     | 87.219.131.xxx | 2008-05-25 13:48:04
Luis escribió:
Juan,
No te pude postear el scritp pero es basicamente el que pusiste.
La idea es correr 5 Querys diferentes y que cada uno me genere un archivo TXT y que el nombre del archivo sea la fecha en que se genero, algo asi: "remesa20080516.txt"
Los Querys ya los tengo y jalan bien, el resultado lo veo el pantalla.
Me falta que me genere el resultado en TXT. Me puedes orientar al respecto?
Saludos


Hola,
Tan solo tendrias que redirigir la salida del comando mysql a un fichero.
Por ejemplo:
mysql $SQL_ARGS "SELECT CURDATE();" >Salida.txt.

Espero que te ayude.

Salu2
Luis - Corrio a la perfeccion   | 189.166.37.xxx | 2008-05-31 08:16:31
Nos acercamos a la perfeccion, dijo un profeta.
Y asi lo creo porque solo con el apoyo de los mas sabios y cultos nos quitamos un poco la ignorancia.
Solo me falta que la salida me la de separado por comas, dejame lo investigo.

Gracias. Que tengas buen dia.
nerelaya - consultar y actualizar segun l   | 158.227.98.xxx | 2009-05-07 04:43:28
Hola!

Soy nueva utilizando script en linux y para el proyecto de fin de carrera estoy intentando realizar un script que a traves del crontab o cron se ejecute todos los dias a una hora determinada. Y el script deberia conectarse a la bbdd, realizar una consulta sobre una fecha y segun la fecha realizar una actualizacion en la tabla. La primera parte de conectarse a la bbdd la comprendo tal cual tu la has puesto y la consulta tambien, pero lo que no entiendo bien es como realizar la actualizacion de la tabla segun lo sucedido en la consulta anterior.

Es decir, si fecha_entrega >= fecha_actual y devuelto es null o diferente de S, yo quiero hacer que se actualice la variable devuelto.

Podrias indicarme si se puede hacer o no, igualar la consulta a una variable y segun la variable hacer la actualizacion? O como realizarlo?

Muchas gracias de antemano.
Juan - Si se puede     | 87.221.227.xxx | 2009-05-07 14:25:34
Hola, si que se puede hacer lo que dices. Podrias guardar la salida de la sentencia sql en una variable. Seria asi:

RESULTADO=`mysql $SQL_ARGS "SELECT CURDATE();"`

Luego podrias hacer las comprobaciones que quisieras y hacer el UPDATE correspondiente
nerelaya - guardar resultado de la consul   | 80.58.205.xxx | 2009-05-08 01:04:51
Hola!

Como se podria guardar el resultado de una consulta que te devuelva 5 valores, por ejemplo, para qie luego con un for ir recorriendo las variables y actualizando devuelto.

Es que no he visto ningun ejemplo con arrays.

Gracias.
nerelaya   | 80.58.205.xxx | 2009-05-08 01:05:13

nerelaya   | 80.58.205.xxx | 2009-05-08 01:08:02
Hola!

Como puedo guardar, por ejemplo, 5 valores q salgan de la tabla y luego hacer un for para recorrer los valores e ir haciendo la actualizacion de devuelto?

Es que no he encontrado ningun ejemplo con arrays, ni como se podria saber el tamaño de este para hacer el for.

Muchas gracias.
nerelaya - guardar mas de un resultado en   | 80.58.205.xxx | 2009-05-08 01:08:49
Hola!

Como puedo guardar, por ejemplo, 5 valores q salgan de la tabla y luego hacer un for para recorrer los valores e ir haciendo la actualizacion de devuelto?

Es que no he encontrado ningun ejemplo con arrays, ni como se podria saber el tamaño de este para hacer el for.

Muchas gracias.
nerelaya - intento de realizar un array   | 80.58.205.xxx | 2009-05-08 03:03:50
He realizado el siguiente codigo:

#!/bin/sh
####Definimos lor parametros de conexion a la BBDD mysql
SQL_HOST="localhost"
SQL_USER="root"
SQL_PASSWORD=""
SQL_DATABASE="biblio"
SQL_ARGS="-h $SQL_HOST -u $SQL_USER -p$SQL_PASSWORD $SQL_DATABASE -s -e"
#### Montamos la sentencia SQL y la lanzamos

cosa =$mysql $SQL_ARGS 'SELECT * FROM reserva;'
echo ${cosa[@]}

Para guardar los cinco valores en de la tabla en un array y luego visualizarlos. Pero me sale el siguiente error:

nita@nita-desktop:~$ ./prueba.sh
./prueba.sh: 10: cosa: not found
./prueba.sh: 11: Bad substitution

y cuando pongo:

declare -a cosa o typeset-a cosa

Tambien me pone que no encuentra declare y typeset.

Por otra parte, no entiendo luego como hacer el for y sacar los resultado 1 por 1, para hacer la actualizacion.

Podiras indicarme como realizarlo??

Muchas gracias de antemano.
nerelaya - URGENTE!!!   | 80.58.205.xxx | 2009-05-10 10:11:56
He seguido intentando hacer lo que necesito y no me sale el codigo que he hecho es este:

#!/bin/sh
####Definimos lor parametros de conexion a la BBDD mysql
SQL_HOST="localhost"
SQL_USER="root"
SQL_PASSWORD="ana"
SQL_DATABASE="biblio"
SQL_ARGS="-h $SQL_HOST -u $SQL_USER -p$SQL_PASSWORD $SQL_DATABASE -s -e"
#### Montamos la sentencia SQL y la lanzamos

cosa='mysql $SQL_ARGS "SELECT num_prestamo FROM prestamo where fecha_devolucion < sysdate() and devuelto'S'"'

for b in $cosa ;
do
mysql $SQL_ARGS "update prestamo set devuelto='S' where num_prestamo=$b"
done

Y me salen los siguientes errores:

ERROR 1054 (42S22) at line 1: Unknown column 'mysql' in 'where clause'
ERROR 1054 (42S22) at line 1: Unknown column '$SQL_ARGS' in 'where clause'
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"SELECT' at line 1
ERROR 1064...
Juan - RE:URGENTE!!!     | 87.221.226.xxx | 2009-05-10 15:55:06
Para ver lo que realmente ejecutas (modo debug) puedes ejecutar el script con de la siguiente forma:
sh -x tuscript.sh

Mandame la salida y asi podre echarte una mano con todos los datos.

Salu2.
nerelaya - solucionado   | 158.227.98.xxx | 2009-05-11 01:24:45
Al final no se como pero se me ejecuta y me funciona correctamente. El codigo me ha quedado de la siguiente manera:

#!/bin/sh
####Definimos lor parametros de conexion a la BBDD mysql
SQL_HOST="localhost"
SQL_USER="root"
SQL_PASSWORD="ana"
SQL_DATABASE="biblio"
SQL_ARGS="-h $SQL_HOST -u $SQL_USER -p$SQL_PASSWORD $SQL_DATABASE -s -e"
#### Montamos la sentencia SQL y la lanzamos

cosa=$(mysql $SQL_ARGS "SELECT num_prestamo FROM prestamo where fecha_devolucion < sysdate() and devuelto is null;"
for b in $cosa ;
do
mysql $SQL_ARGS "update prestamo set devuelto='N' where num_prestamo=$b;"
done

Muchas gracias por la ayuda.

Saludos.
nerelaya - poner script para que se ejecu   | 85.84.160.xxx | 2009-05-11 23:44:39
Hola!

Quiero poner el script que he hecho en el contrab para que se ejecute a una determinada hora todos los dias pero no se me ejecuta y donde hay que poner que es lo que quieres que se ejecute pongo: sh /home/nita/prueba.sh

Podrias indicarme que hago mal??
gracias
Juan - RE: poner script para que se e     | 195.57.192.xxx | 2009-05-12 00:05:01
Hola

Mira este enlace para ver la sintaxis a usar
http://www.elsotanillo.net/content/view/26/27/lang,es/
y para añadir el trabajo al crontab, ejecuta:
crontab -e
nerelaya - solucionado   | 158.227.98.xxx | 2009-05-13 01:40:55
Gracias por todo, ya he conseguido solucionarlo. Lo que me pasaba era que metia la sentencia pero luego no reiniciaba el crontab.
nerelaya - el ejemplo puesto por ti no me   | 158.227.98.xxx | 2009-05-07 05:41:59
He probado el ejemplo puesto por ti en la web y no me funciona.

Me deniega el acceso aunque he puesto correctamente el usuario y el password y me dice que no utiliza password, por eso a la linea tuya en la que montas los parametros de conexion he añadido -p $SQL_PASSWORD.

Aun asi, tampoco me funciona me aparece el copiright y un monton de lineas de explicacion pero no lo que a ti te sale. Sabrias cual es la causa?

gracias.
Juan - prueba a quitar el espacio     | 87.221.227.xxx | 2009-05-07 14:33:59
Sin ver los mensajes de error no puedo decirte cual es el problema, pero creo que esta entre el -p y el $SQL_PASSWORD. no tiene que haber espacio entre ellos:
"-p$SQL_PASSWORD"

He modificado el script original.

Si te sigue fallando enviame un copy&paste de la salida de error

Ya me diras.

Salu2
nerelaya - solucionado   | 80.58.205.xxx | 2009-05-08 01:12:42
Uno de los errores era ese, ya que lo ponia con una separacion. Y entonces, ya he conseguido que funciones.

((Siento que hayan salido dos mensajes iguales arriba, pero es que la web me decia que no se habian enviado))

Gracias.
avijo - GRACIAS   | 190.25.29.xxx | 2010-04-03 10:38:26
Mil gracias!!! se que es un post, ya con unos mesesitos jejeje pero me ha servido bastante y queria agradecer a los autores, saludos desde Colombia
Escribir comentario
Nombre:
Email:
 
Website:
Título:
Código UBB:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
 
Security Image
Por favor introduce el código anti-spam que puedes leer en la imagen.

Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved.

Modificado el ( martes, 01 de enero de 2008 )
 
< Anterior   Siguiente >
Frase celebre del día
Directorio temático de frases célebres
  • Miguel de Unamuno - 9/9/2010
    Antes hay que desconfiar del que busca razones por las que nos beneficia, que del que nos beneficia sin buscar razones.
Visitas
Imagenes
Linux Howtos
Visto en Barrapunto
Barrapunto
Sindícate
 
Top! Top!