¿Cómo crear una base de datos desde el comando de shell?

175

Estoy buscando algo como createdb en PostgreSQL o cualquier otra solución que me permita crear una base de datos con la ayuda de un comando de shell. ¿Alguna pista?

koszikot
fuente

Respuestas:

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

Donde filename.sql contiene todos los sql para crear su base de datos. O...

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

Si realmente solo quieres crear una base de datos.

Kris
fuente
2
Recibo este error ERROR 1046 (3D000) en la línea 27: No se ha seleccionado ninguna base de datos cuando ejecuto echo "create database databasename" | mysql -u -u username -p command
keerthi
@keerthi: ¿tal vez su usuario no tenga privilegios en ningún esquema existente?
Kris
2
Es porque hay dos -ubanderas
Stephen
@Kris ¿Puedo leer el nombre de la base de datos desde la terminal y usar el valor de la variable como nombre de la base de datos en crear base de datos?
CLIFFORD PY
@Clifford: podría usar un script simple (ba) sh utilizando argumentos de shell normales. ( stackoverflow.com/questions/23563043/shell-script-arguments ) Probablemente merece su propia pregunta.
Kris
213

¿Te refieres al entorno mysql?

create database testdb;

O directamente desde la línea de comando:

mysql -u root -e "create database testdb"; 
Felix Kling
fuente
11
mysql -u root -e "crear base de datos testdb"; Eso es lo que estaba buscando :) gracias
koszikot
3
En caso de que tenga contraseña, simplemente agregue -p. Después de presionar enter, se le pedirá su contraseña. El siguiente es un ejemplo que usa mi usuario que es root (cámbielo si tiene otro nombre de usuario) y también usa el nombre "oc_local" para la base de datos (cámbielo si desea que se llame a su base de datos de otra manera): ----> mysql -u root -p -e "crear base de datos oc_local";
pablofiumara
1
hola @koszikot: si esto es lo que estabas buscando, debes aceptarlo como la respuesta correcta :-)
thejohnbackes
1
Me gusta saber qué hacen las opciones de línea de comando, para otros -e es la forma abreviada de --execute = declaración. Encuentre opciones de línea de comandos aquí dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
Anthony
70

Si crea una nueva base de datos, es bueno crear usuarios con permisos solo para esta base de datos (si algo sale mal, no comprometerá el inicio de sesión y la contraseña del usuario raíz). Entonces todo junto se verá así:

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'"

Donde:
base_user es el nombre del usuario con todos los privilegios (probablemente la raíz)
base_user_pass es la contraseña para base_user (la falta de espacio entre -p y base_user_pass es importante)
new_db es el nombre de la base de datos recién creada
new_db_user es el nombre del nuevo usuario con acceso solo para new_db
new_db_user_pass es la contraseña para new_db_user

jmarceli
fuente
Masivo. Acabo de agregar este gran revestimiento a los fragmentos de dashdocs. En caso de que alguien tenga una contraseña de root con espacios: -p"root password here"funciona bien
hmedia1
37
mysqladmin -u$USER -p$PASSWORD create $DB_NAME

Reemplace las variables anteriores y ya está listo para usar esta línea. $ USER es el nombre de usuario, $ PASSWORD es la contraseña y $ DB_NAME es el nombre de la base de datos.

karlingen
fuente
1
volví a esta pregunta muchos años después y noté que la había votado: D
Isaac
20

Utilizar

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

Se le pedirá la contraseña. También asegúrese de que el usuario mysql que usa tenga privilegios para crear una base de datos.

Willa
fuente
12

El ist y la segunda respuesta son buenas, pero si alguien está buscando tener un script o si desea dinámico, es decir (db / nombre de usuario / contraseña en variable), aquí:

#!/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
fuente
10

Puede usar SQL en la línea de comando:

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

O puedes usar mysqladmin:

mysqladmin create dbname
Lukáš Lalinský
fuente
2

Conéctese a la base de datos utilizando el usuario base: mysql -u base_user -pbase_user_pass y ejecute CREATE DATABASE, CREATE USER y GRANT PRIVILEGES Statements.

Aquí hay un útil asistente web para ayudarlo con las declaraciones www.bugaco.com/helpers/create_database.html

CaptZ-
fuente