Crie um usuário e um banco de dados com o mesmo nome em uma linha

1

É assim que eu crio um usuário de banco de dados privilegiado, autorizado pelo MySQL, e uma instância de banco de dados correspondente com o mesmo nome, diretamente do Bash:

echo "CREATE USER "${domain}"@"localhost" IDENTIFIED BY \"${dbup}\";" | mysql -u root -p"${dbrp}"
echo "CREATE DATABASE ${domain};" | mysql -u root -p"${dbrp}"
echo "GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;" | mysql -u root -p"${dbrp}"

Os dois primeiros comandos podem ser mesclados em um comando?

    
por Arcticooling 16.01.2018 / 17:31

2 respostas

3

Use um "documento aqui", também conhecido como heredoc . por exemplo:

cat <<EOF | mysql -u root -p"${dbrp}"
CREATE USER '${domain}'@localhost IDENTIFIED BY '${dbup}';
CREATE DATABASE '${domain}';
GRANT ALL PRIVILEGES ON ${domain}.* TO '${domain}'@localhost;
EOF

Infelizmente, mysql ainda não suporta a reversão de CREATE USER ou CREATE DATABASE ou GRANT, etc (ele faz um commit implícito para operações DDL), caso contrário eu diria que você deve envolver todos esses comandos dentro de uma transação (de modo que se um falhar, todos falharão e tudo será revertido para a forma como estava).

    
por 16.01.2018 / 17:47
0

Por que não é ainda mais simples? O oneliner é suficiente.

[[email protected]][~]# mysql -e'show databases' | grep test_se          # not exists yet
[[email protected]][~]# domain=test_se
[[email protected]][~]# mysql -v -e"create database ${domain};grant all on ${domain}.* to ${domain}@localhost identified by 'mysuperpassw00rd'"
--------------
create database test_se
--------------

--------------
grant all on test_se.* to test_se@localhost identified by 'mysuperpassw00rd'
--------------

[[email protected]][~]# mysql -e'show databases' | grep test_se           # here we are!
test_se

Eu quase nunca uso create user , é inútil do meu ponto de vista, a menos que você precise adicionar o mesmo usuário a muitos DBs. Além disso, a concatenação com ; , como você pode ver, funciona muito bem.

Remova -v para desativar a saída detalhada.

    
por 16.01.2018 / 21:08