Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment exécuter une commande MySQL à partir d'un script shell ?

Vous devez utiliser le -p drapeau pour envoyer un mot de passe. Et c'est délicat car vous ne devez pas avoir d'espace entre -p et le mot de passe.

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

Si vous utilisez un espace après -p il oblige le client mysql à vous demander le mot de passe de manière interactive, puis il interprète l'argument de commande suivant comme un nom de base de données :

$ 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 fait, je préfère stocker l'utilisateur et le mot de passe dans ~/.my.cnf pour ne pas avoir à le mettre du tout sur la ligne de commande :

[client]
user = root
password = XXXXXXXX

Ensuite :

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

Concernant votre commentaire :

J'exécute tout le temps des commandes mysql en mode batch comme ci-dessus sur la ligne de commande et dans des scripts shell. Il est difficile de diagnostiquer ce qui ne va pas avec votre script shell, car vous n'avez pas partagé le script exact ni aucune sortie d'erreur. Je vous suggère de modifier votre question d'origine ci-dessus et de fournir des exemples de ce qui ne va pas.

De plus, lorsque je dépanne un script shell, j'utilise le -x flag pour que je puisse voir comment il exécute chaque commande :

$ bash -x myscript.sh