J'essaye de faire un script bash qui crée un utilisateur et une base de données mysql mais je ne peux pas trouver un moyen d'alimenter le sql en mysql, j'essaie avec ce format:
mysql < echo "query"
Mais cela ne fonctionne pas, voir l'exemple ci-dessous:
mysql --Host=localhost --user=user --password=password < echo "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W';
CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost';
CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON 'testuser_qa' . * TO 'testuser'@'localhost';"
Comment nourrir mysql avec les requêtes?
Essayez comme ceci:
echo "select 1" | mysql
mysql --batch --silent -e 'SHOW TABLES';
Batch et silent sont pratiques si vous prévoyez de diriger la sortie
Essayez d'utiliser un ici document comme ceci:
mysql --Host=localhost --user=user --password=password << END
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W';
CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost';
CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON 'testuser_qa' . * TO 'testuser'@'localhost';
END
Vous pouvez également placer toutes vos commandes dans un fichier texte et l'exécuter:
mysql --Host=localhost --user=user --password=password < commands.sql
La raison pour laquelle votre tentative n'a pas fonctionné est que le <
attend un nom de fichier et vous lui avez donné une chaîne. Il faudrait faire quelque chose comme
echo "YOURQUERYSTRINGHERE">tmpfile
mysql --Host=localhost --user=user --password=password dbname <tmpfile
la suggestion de ken de
mysql --Host=localhost --user=user --password=password -e "QUERY" dbname
peut fonctionner, mais si vous essayez d'utiliser des variables bash dans votre requête, vous pouvez tomber dans l'expansion des paramètres. par exemple
QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --Host=localhost --user=user --password=password -e "$QUERY" mydbname
peut ne pas faire ce que vous attendez. Une option est d'utiliser
echo "$QUERY"|mysql --Host=localhost --user=user --password=password mydbname
qui fonctionne si la chaîne de requête contient des guillemets appropriés. Une autre option est le document "ici" comme suggéré par dogbane.
As-tu essayé mysql -e query
?
Pour les grandes requêtes dans un script bash, vous pouvez essayer:
read -d '' SQL_QUERY_1 << EOF
SELECT prod.id as id, prod.title as title, comp.name as company, pho.id as photo_id, pho.image as photo_name
FROM products as prod
JOIN accounts as comp
ON comp.id = prod.account_id
JOIN photos as pho
ON pho.id = prod.featured_photo_id;
EOF
echo ${SQL_QUERY_1} | mysql