script query ejecutar desde consulta consola comandos mysql shell ssh

query - mysql select shell script



¿Cómo ejecutar un comando MySQL desde un script de shell? (11)

Como se dijo anteriormente, puede usar -p para pasar la contraseña al servidor.

Pero yo recomiendo esto:

mysql -h "hostaddress" -u "username" -p "database-name" < "sqlfile.sql"

Tenga en cuenta que la contraseña no está allí. Luego le solicitará la contraseña. ENTONCES lo escribiría. Para que su contraseña no se conecte al historial de línea de comandos del servidor.

Esta es una medida de seguridad básica.

Si la seguridad no es una preocupación, simplemente eliminaría temporalmente la contraseña del usuario de la base de datos. Luego de la importación, vuelva a agregarlo.

De esta forma, cualquier otra cuenta que pueda tener que comparta la misma contraseña no se verá comprometida.

También parece que en su script de shell no está esperando / verificando si realmente existe el archivo que está tratando de importar. El script perl puede no estar terminado todavía.

¿Cómo puedo ejecutar un comando SQL a través de un script de shell para que pueda automatizarlo?

Quiero restaurar los datos que he recopilado en un archivo SQL utilizando un script de shell. Quiero conectarme a un servidor y restaurar datos. El comando funciona cuando se ejecuta por separado a través de la línea de comando SSH.

Este es el comando que uso:

mysql -h "server-name" -u root "password" "database-name" < "filename.sql"

Este es el código del script de shell que crea el archivo ds_fbids.sql y lo canaliza a mysql.

perl fb_apps_frm_fb.pl perl fb_new_spider.pl ds_fbids.txt ds_fbids.sql mysql -h dbservername -u username -ppassword dbname < ds_fbids.sql

¿Cuál es la forma correcta de hacer esto?


El núcleo de la pregunta ya se ha respondido varias veces, solo pensé que agregaría que los backticks (`s) se han multiplicado tanto en scripts de shell como en SQL. Si necesita usarlos en SQL para especificar una tabla o nombre de base de datos, deberá escapar de ellos en el script de shell de la siguiente manera:

mysql -p=password -u "root" -Bse "CREATE DATABASE /`${1}_database/`; CREATE USER ''$1''@''%'' IDENTIFIED BY ''$2''; GRANT ALL PRIVILEGES ON `${1}_database`.* TO ''$1''@''%'' WITH GRANT OPTION;"

Por supuesto, generar SQL a través de la entrada de usuarios concatenados (argumentos pasados) no debería hacerse a menos que confíe en la entrada del usuario. Sería mucho más seguro ponerlo en otro lenguaje de scripts con soporte para parámetros / escapando cadenas correctamente para la inserción en MySQL.


Olvidaste -p o --password= (este último es mejor legible):

mysql -h "$server_name" "--user=$user" "--password=$password" "--database=$database_name" < "filename.sql"

(Las comillas son innecesarias si está seguro de que sus credenciales / nombres no contienen espacio ni caracteres especiales del shell).

Tenga en cuenta que la página de manual también dice que proporcionar las credenciales en la línea de comando es inseguro. Entonces sigue el consejo de Bill sobre my.cnf.


Todas las respuestas anteriores son geniales. Si es un comando simple, de una línea sql que desea ejecutar, también puede usar la opción -e.

mysql -h <host> -u<user> -p<password> database -e / "SELECT * FROM blah WHERE foo=''bar'';"


Una consideración importante para acceder a mysql desde un script de shell utilizado en cron, es que mysql mira al usuario conectado para determinar un .my.cnf para cargar.

Eso no funciona con cron. También puede ser confuso si está utilizando su / sudo, ya que el usuario que inició sesión podría no ser el usuario con el que se está ejecutando.

Yo uso algo como:

mysql --defaults-extra-file=/path/to/specific/.my.cnf -e ''SELECT something FROM sometable''

Solo asegúrese de que la propiedad y los permisos del usuario y del grupo estén configurados de forma adecuada y ajustada en el archivo .my.cnf.


Usa esta sintaxis:

mysql -u $user -p$passsword -Bse "command1;command2;....;commandn"


-p usar el indicador -p para enviar una contraseña. Y es complicado porque no debe haber espacio entre -p y la contraseña.

$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"

Si usa un espacio después de -p hace que el cliente mysql le solicite de forma interactiva la contraseña, y luego interpreta el siguiente argumento del comando como un nombre de base de datos:

$ mysql -h "server-name" -u "root" -p "XXXXXXXX" "database-name" < "filename.sql" Enter password: <you type it in here> ERROR 1049 (42000): Unknown database ''XXXXXXXX''

En realidad, prefiero almacenar el usuario y la contraseña en ~ / .my.cnf para que no tenga que ponerlo en la línea de comandos:

[client] user = root password = XXXXXXXX

Entonces:

$ mysql -h "server-name" "database-name" < "filename.sql"

Re su comentario:

Ejecuto comandos mysql de modo por lotes como el anterior en la línea de comandos y en scripts de shell todo el tiempo. Es difícil diagnosticar lo que está mal con su script de shell, porque no ha compartido el script exacto ni ningún resultado de error. Le sugiero que edite su pregunta original anterior y proporcione ejemplos de lo que no funciona.

También cuando estoy solucionando un script de shell utilizo el indicador -x para poder ver cómo está ejecutando cada comando:

$ bash -x myscript.sh


Cómo ejecutar un script SQL, use esta sintaxis:

mysql --host= localhost --user=root --password=xxxxxx -e "source dbscript.sql"

Si usa el host como localhost, no necesita mencionarlo. Puedes usar esto:

mysql --user=root --password=xxxxxx -e "source dbscript.sql"

Esto debería funcionar para Windows y Linux.

Si el contenido de la contraseña contiene a ! (Signo de exclamación) debe agregar una / (barra invertida) delante de él.


#!/bin/sh #Procedures = update #Scheduled at : Every 00.05 v_path=/etc/database_jobs v_cnt=0 MAILTO="[email protected] [email protected] [email protected]" touch "$v_path/db_db_log.log" #test mysql -uusername -ppassword -h111.111.111.111 db_name -e "CALL functionName()" > $v_path/db_db_log.log 2>&1 if [ "$?" -eq 0 ] then v_cnt=`expr $v_cnt + 1` mail -s "db Attendance Update has been run successfully" $MAILTO < $v_path/db_db_log.log else mail -s "Alert : db Attendance Update has been failed" $MAILTO < $v_path/db_db_log.log exit fi


mysql -h "hostname" -u usr_name -pPASSWD "db_name" < sql_script_file

(use la ruta completa para sql_script_file si es necesario)

Si quieres redirigir el out put a un archivo

mysql -h "hostname" -u usr_name -pPASSWD "db_name" < sql_script_file > out_file


mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password

¿Cómo ejecuto una línea de comando con una contraseña segura? usa el editor de configuración !!!

A partir de mysql 5.6.6 puede almacenar la contraseña en un archivo config y luego ejecutar comandos cli como este ....

mysql --login-path=storedPasswordKey ....

--login-path reemplaza variables ... host, usuario Y contraseña. excelente derecho!