web-dev-qa-db-fra.com

script sh pour exécuter un script mysql avec une passe

Je voudrais exécuter un script mysql où l'utilisateur est invité à entrer le mot de passe de manière dynamique à partir de la ligne de commande, si possible avec un message Enter your $root password. Cependant, cela ne fonctionne pas comme prévu. Jusqu'ici j'ai

mysql -u root -p CREATE DATABASE IF NOT EXISTS Test

de plus, quand la base de données est créée, comment se déconnecter de mysql et revenir aux commandes bash?

3
Jocky Doe

Selon le docs

mysql -u root -p --execute="SELECT User, Host FROM mysql.user"

demande un mot de passe, exécute la commande donnée et retourne au shell (aucune déconnexion requise).

Si vous souhaitez plutôt créer votre propre invite, vous devez en faire un script:

#!/usr/bin/env bash

echo "Enter pwd"
read pwd
mysql -u root -p$pwd --execute="SELECT User, Host FROM mysql.user"

Veuillez noter qu'il ne doit y avoir aucun espace entre -p et $pwd car mysql considère alors $pwd comme étant le nom de la base de données.

Je ne le recommanderais pas car le mot de passe est ensuite affiché en texte clair dans le terminal, alors que mysql -p affiche des astérisques à la place.

7
PerlDuck

Scripter des requêtes MySQL peut être fait de plusieurs manières. La réponse de PerlDuck concerne déjà le paramètre -e ou --execute. Une autre solution consisterait à utiliser la commande source de MySQL elle-même pour exécuter un script SQL:

$ mysql -u root -p -e 'source foo.sql'
Enter password:
+------+-------------+
| a    | b           |
+------+-------------+
|    1 | hello world |
+------+-------------+
$ cat foo.sql
use foo_db;
SELECT * FROM foo_tb;

Une autre méthode consiste à rediriger le script dans mysql 's stdin:

$ Sudo mysql -u root -p < foo.sql
Enter password:
a   b
1   hello world

Notez la différence de formatage dans chaque cas. Bien sûr, vous pouvez aussi utiliser here-doc ou herestring pour obtenir les mêmes résultats, bien que l’utilisation d’un fichier texte permette d’exécuter de longues requêtes, tandis que la documentation ici et les chaînes ici sont plus utiles pour les instructions modérément courtes.

1