Si hallas algún error en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.
Solución:
Necesitas usar el -p
bandera 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 -p
hace que el cliente mysql le solicite la contraseña de forma interactiva, 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:
ERROR 1049 (42000): Unknown database 'XXXXXXXX'
En realidad, prefiero almacenar el usuario y la contraseña en ~/.my.cnf para no tener que ponerlo en la línea de comandos:
[client]
user = root
password = XXXXXXXX
Entonces:
$ mysql -h "server-name" "database-name" < "filename.sql"
Re tu comentario:
Ejecuto comandos mysql en modo por lotes como el anterior en la línea de comandos y en scripts de shell todo el tiempo. Es difícil diagnosticar qué está mal con su secuencia de comandos de shell, porque no ha compartido la secuencia de comandos exacta ni ningún resultado de error. Le sugiero que edite su pregunta original anterior y proporcione ejemplos de lo que sale mal.
Además, cuando estoy resolviendo problemas con un script de shell, uso el -x
bandera para que pueda ver cómo está ejecutando cada comando:
$ bash -x myscript.sh
Utilice esta sintaxis:
mysql -u $user -p$passsword -Bse "command1;command2;....;commandn"
Todas las respuestas anteriores son geniales. Si lo que desea ejecutar es un comando sql simple de una línea, también puede usar la opción -e.
mysql -h -u -p database -e
"SELECT * FROM blah WHERE foo='bar';"
Tienes la opción de confirmar nuestra labor escribiendo un comentario o dejando una valoración te damos la bienvenida.