Como criar um banco de dados a partir do comando shell?

175

Estou procurando algo como createdb no PostgreSQL ou qualquer outra solução que me permita criar banco de dados com a ajuda de um comando shell. Alguma dica?

Koszikot
fonte

Respostas:

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

Onde filename.sql contém todo o sql para criar seu banco de dados. Ou...

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

Se você realmente deseja apenas criar um banco de dados.

Kris
fonte
2
Eu recebo este erro ERRO 1046 (3D000) na linha 27: Nenhum banco de dados selecionado quando executo o eco "create database databasename" | mysql -u -u nome de usuário -p comando
keerthi 15/03
@keerthi: talvez seu usuário não tenha privilégios em nenhum esquema existente?
Kris
2
É porque existem duas -ubandeiras
Stephen
@Kris Posso ler o nome do banco de dados no terminal e usar o valor da variável como nome do banco de dados em criar banco de dados.
CLIFFORD PY
@ Clifford: você pode usar um script sh simples (ba) usando argumentos normais do shell. ( stackoverflow.com/questions/23563043/shell-script-arguments ) Provavelmente merece sua própria pergunta.
Kris
213

Você quer dizer enquanto está no ambiente mysql?

create database testdb;

Ou diretamente da linha de comando:

mysql -u root -e "create database testdb"; 
Felix Kling
fonte
11
mysql -u root -e "cria banco de dados testdb"; Isso é o que eu estava procurando :) obrigado
koszikot
3
Caso você tenha uma senha, basta adicionar -p. Depois de pressionar enter, você será solicitado a sua senha. A seguir, é apresentado um exemplo usando meu usuário root (altere-o se você tiver um nome de usuário anoter) e também use o nome "oc_local" para o banco de dados (altere-o se desejar que seu banco de dados seja chamado de maneira diferente) - ----> mysql -u root -p -e "cria banco de dados oc_local";
Pablofiumara 12/11/2013
1
oi @koszikot - se é isso que você está procurando, você deve aceitá-la como a resposta correta :-)
thejohnbackes
1
Eu gosto de saber o que as opções de linha de comando fazem, para outros -e é o formato abreviado de --execute = statement. Encontre opções de linha de comando aqui dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
Anthony
70

Se você criar um novo banco de dados, é bom criar usuário com permissões apenas para esse banco de dados (se algo der errado, você não comprometerá o login e a senha do usuário root). Então, tudo junto ficará assim:

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

Onde:
base_user é o nome do usuário com todos os privilégios (provavelmente a raiz)
base_user_pass é a senha do base_user (falta de espaço entre -p e base_user_pass é importante)
new_db é o nome do banco de dados recém-criado
new_db_user é o nome do novo usuário com acesso somente para new_db
new_db_user_pass é a senha para new_db_user

jmarceli
fonte
Maciço. Acabei de adicionar esse excelente liner aos snippets do dashdocs. No caso de alguém tem uma senha de root com espaços: -p"root password here"funciona bem
hmedia1
37
mysqladmin -u$USER -p$PASSWORD create $DB_NAME

Substitua as variáveis ​​acima e você poderá seguir este oneliner. $ USER é o nome de usuário, $ PASSWORD é a senha e $ DB_NAME é o nome do banco de dados.

karlingen
fonte
1
voltou a esta pergunta muitos anos depois e percebeu que eu a havia votado: D
Isaac
20

Usar

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

Você será solicitado a fornecer a senha. Verifique também se o usuário do mysql que você usa possui privilégios para criar banco de dados.

Willa
fonte
12

O ist e a segunda resposta são bons, mas se alguém estiver procurando por um script ou se você quiser dinâmico, isto é (db / nome de usuário / senha na variável), então aqui:

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

Você pode usar o SQL na linha de comando:

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

Ou você pode usar mysqladmin:

mysqladmin create dbname
Lukáš Lalinský
fonte
2

Conecte-se ao DB usando o usuário base: mysql -u base_user -pbase_user_pass e execute as instruções CREATE DATABASE, CREATE USER e GRANT PRIVILEGES.

Aqui está um prático assistente da Web para ajudá-lo com as declarações www.bugaco.com/helpers/create_database.html

CaptZ-
fonte