Comment créer une base de données à partir de la commande shell?

175

Je recherche quelque chose comme createdb dans PostgreSQL ou toute autre solution qui me permettrait de créer une base de données à l'aide d'une commande shell. Des indices?

Koszikot
la source

Réponses:

172
cat filename.sql | mysql -u username -p # type mysql password when asked for it

Où filename.sql contient tout le sql pour créer votre base de données. Ou...

echo "create database `database-name`" | mysql -u username -p

Si vous ne voulez vraiment créer qu'une base de données.

Kris
la source
2
J'obtiens cette erreur ERROR 1046 (3D000) à la ligne 27: Aucune base de données sélectionnée lorsque j'exécute echo "create database databasename" | mysql -u -u username -p command
keerthi
@keerthi: peut-être que votre utilisateur n'a pas de privilèges sur un schéma existant?
Kris
2
C'est parce qu'il y a deux -udrapeaux
Stephen
@Kris Puis-je lire le nom de la base de données depuis le terminal et utiliser la valeur de la variable comme nom de la base de données dans la création de la base de données.
CLIFFORD PY
@Clifford: vous pouvez utiliser un simple script (ba) sh en utilisant des arguments shell normaux. ( stackoverflow.com/questions/23563043/shell-script-arguments ) Mérite probablement sa propre question.
Kris
214

Vous voulez dire alors que l'environnement mysql?

create database testdb;

Ou directement depuis la ligne de commande:

mysql -u root -e "create database testdb"; 
Félix Kling
la source
11
mysql -u root -e "créer la base de données testdb"; C'est ce que je cherchais :) merci
koszikot
3
Si vous avez un mot de passe, ajoutez simplement -p. Après avoir appuyé sur Entrée, votre mot de passe vous sera demandé. Ce qui suit est un exemple utilisant mon utilisateur qui est root (changez-le si vous avez un autre nom d'utilisateur) et il utilise également le nom "oc_local" pour la base de données (changez-le si vous voulez que votre base de données soit appelée d'une manière différente) - ----> mysql -u root -p -e "créer la base de données oc_local";
pablofiumara
1
salut @koszikot - si c'est ce que vous cherchiez, vous devriez l'accepter comme la bonne réponse :-)
thejohnbackes
1
J'aime savoir ce que font les options de ligne de commande, pour les autres -e est la forme abrégée de --execute = statement. Trouvez les options de ligne de commande ici dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
Anthony
70

Si vous créez une nouvelle base de données, il est bon de créer un utilisateur avec des autorisations uniquement pour cette base de données (si quelque chose ne va pas, vous ne compromettez pas le login et le mot de passe de l'utilisateur root). Donc, tout ensemble ressemblera à ceci:

mysql -u base_user -pbase_user_pass -e "create database new_db; GRANT ALL PRIVILEGES ON new_db.* TO new_db_user@localhost IDENTIFIED BY 'new_db_user_pass'"

Où:
base_user est le nom de l'utilisateur avec tous les privilèges (probablement la racine)
base_user_pass c'est le mot de passe de base_user (le manque d'espace entre -p et base_user_pass est important)
new_db est le nom de la base de données nouvellement créée
new_db_user est le nom du nouvel utilisateur avec accès uniquement pour new_db
new_db_user_pass c'est le mot de passe pour new_db_user

jmarceli
la source
Massif. Je viens d'ajouter cette super ligne aux extraits de dashdocs. -p"root password here"
Si
37
mysqladmin -u$USER -p$PASSWORD create $DB_NAME

Remplacez les variables ci-dessus et vous êtes prêt à utiliser cet oneliner. $ USER est le nom d'utilisateur, $ PASSWORD est le mot de passe et $ DB_NAME est le nom de la base de données.

Karlingen
la source
1
est revenu sur cette question plusieurs années plus tard et j'ai remarqué que j'avais voté pour: D
Isaac
20

Utilisation

$ mysqladmin -u <db_user_name> -p create <db_name>

Vous serez invité à entrer le mot de passe. Assurez-vous également que l'utilisateur mysql que vous utilisez dispose des privilèges pour créer la base de données.

Willa
la source
12

La ist et la 2ème réponse sont bonnes, mais si quelqu'un cherche à avoir un script ou si vous voulez dynamique ie (db / username / password dans la variable) alors ici:

#!/bin/bash



DB="mydb"
USER="user1"
PASS="pass_bla"

mysql -uroot -prootpassword -e "CREATE DATABASE $DB CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql -uroot -prootpassword -e "CREATE USER $USER@'127.0.0.1' IDENTIFIED BY '$PASS'";
mysql -uroot -prootpassword -e "GRANT SELECT, INSERT, UPDATE ON $DB.* TO '$USER'@'127.0.0.1'";
salah-1
la source
10

Vous pouvez utiliser SQL sur la ligne de commande:

echo 'CREATE DATABASE dbname;' | mysql <...>

Ou vous pouvez utiliser mysqladmin:

mysqladmin create dbname
Lukáš Lalinský
la source
2

Connectez-vous à la base de données en utilisant l'utilisateur de base: mysql -u base_user -pbase_user_pass Et exécutez les instructions CREATE DATABASE, CREATE USER et GRANT PRIVILEGES.

Voici un assistant Web pratique pour vous aider avec les déclarations www.bugaco.com/helpers/create_database.html

CaptZ-
la source