Je voudrais écrire un script * .sh pour exécuter plusieurs commandes MySQL.
Actuellement, ce que je peux faire est quelque chose comme ceci
mysql -h$Host -u$user -p$password -e "drop database $dbname;"
mysql -h$Host -u$user -p$password -e "create database $dbname;"
mysql -h$Host -u$user -p$password -e "another MySQL command"
...
Existe-t-il un moyen d'éviter de taper "mysql -h $ Host -u $ user -p $ password -e" chaque fois que je veux exécuter une commande MySQL?
Je pense que vous pouvez exécuter des instructions MySQL à partir d'un fichier texte, par exemple
voici le fichier cmds.txt qui contient les commandes MySQL:
select colA from TableA;
select colB from TableB;
select colC from TableC;
Pour les exécuter à l'aide du script Shell, tapez
mysql -h$Host -u$user -p$password db_dbname < cmds.txt
De cette façon, vous séparez vos commandes MySQL de votre script Shell.
Vous souhaiterez peut-être que votre script affiche des informations de progression. Pour cela, vous pouvez invoquer mysql avec l'option "--verbose".
Pour plus d'informations, voir https://dev.mysql.com/doc/refman/5.6/en/mysql-batch-commands.html
Vous pouvez utiliser une seule requête multiple:
mysql -h$Host -u$user -p$password -e "drop database $dbname;create database $dbname;another MySQL command;"
Écrivez simplement toutes vos requêtes séparées par ;
. Ils seront exécutés l'un après l'autre.
Notez que vous pouvez également utiliser un document ICI pour avoir les requêtes dans le même script:
mysql -h$Host -u$user -p$password db_dbname <<'EOF'
select colA from TableA;
select colB from TableB;
select colC from TableC;
EOF
Notez que j'ai utilisé 'EOF'
plutôt que EOF
dans la première ligne afin d'empêcher le contenu du script de désactiver la substitution de paramètres (en particulier le `
peut être problématique)
Notez également qu'il ne devrait y avoir aucun espace avant le EOF
final (sauf si vous utilisez <<-
plutôt que <<
- dans ce cas, les premiers caractères de tabulation sont supprimés):
mysql -h$Host -u$user -p$password db_dbname <<- 'EOF'
↠select colA from TableA;
↠select colB from TableB;
↠select colC from TableC;
↠EOF
(Remplacez le ↠
avec un caractère de tabulation).
Pour plus d'informations sur la syntaxe doc HERE, voir la documentation bash .
Il y a plusieurs façons, sous Linux, vous avez:
Depuis le mysql cli:
mysql> source mycmds.sql
Utilisation de tuyaux:
echo "SELECT ..; INSERT ..;" | mysql ...
Exécution de commandes à partir d'un fichier à l'aide de canaux ou de redirection:
cat file.sql | mysql ... OR mysql .. < file.sql