DROP USER SE EXISTE erro de sintaxe na CLI do MySQL

0

Eu uso o Ubuntu 16.04 com o Bash e o MySQL Ver 14.14 Distrib 5.7.21, para Linux (x86_64) usando o wrapper EditLine.

Eu tento criar uma pilha de banco de dados para um webapp (WordPress) diretamente da linha de comando e compartilho aqui a melhor maneira que eu conheço para fazer isso e o problema que tenho com ela (uma resposta pode oferecer uma maneira melhor). / p>

Eu tento executar o seguinte código CLI do MySQL no qual eu uso para criar um usuário autorizado, todo privilegiado + uma instância de banco de dados com o mesmo nome:

cat <<-EOF | mysql -u root -p"$dbrootp_1"
    DROP USER IF EXISTS "$domain"@"localhost";
    DROP DATABASE IF EXISTS "$domain";
    CREATE USER "$domain"@"localhost" IDENTIFIED BY "$dbuserp_1";
    CREATE DATABASE "$domain";
    GRANT ALL PRIVILEGES ON "$domain".* TO "$domain"@"localhost";
EOF

Execução gera o seguinte erro:

ERROR 1064 (42000) at line 2: You have an error in your SQL syntax;

Check the manual that corresponds to your MySQL server version for the right syntax to use near '"example.com"' at line 1

Estou confuso com este erro: o problema está na linha 1 ou na linha 2? Qual é o erro de sintaxe aqui? Eu devo usar expansão variável.

Atualizar de acordo com a resposta

Usuário l0b0 , tentei trabalhar com ${x} em vez de "$x" , como você mostrou, mas infelizmente gera o erro:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-law.co.il@localhost' at line 1.

Saída do cat sem dados de piping para o mysql:

DROP USER IF EXISTS example.com@localhost;
DROP DATABASE IF EXISTS example.com;
CREATE USER example.com@localhost IDENTIFIED BY MYPASSWORD;
CREATE DATABASE example.com;
GRANT ALL PRIVILEGES ON example.com.* TO example.com@localhost;
    
por user9303970 05.03.2018 / 02:54

1 resposta

1

Como aponta o @jordanm, dentro do aqui os documentos são literais, não sintáticos. Então você quer

mysql -u root -p"$dbrootp_1" <<-EOF
    DROP USER IF EXISTS ${domain}@localhost;
    DROP DATABASE IF EXISTS ${domain};
    CREATE USER ${domain}@localhost IDENTIFIED BY ${dbuserp_1};
    CREATE DATABASE ${domain};
    GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;
EOF

Se você tiver caracteres especiais em $domain ou $dbuserp_1 , precisará citá-los em backticks :

mysql -u root -p"$dbrootp_1" <<-EOF
    DROP USER IF EXISTS \'${domain}\'@localhost;
    DROP DATABASE IF EXISTS \'${domain}\';
    CREATE USER \'${domain}\'@localhost IDENTIFIED BY \'${dbuserp_1}\';
    CREATE DATABASE '${domain}';
    GRANT ALL PRIVILEGES ON \'${domain}\'.* TO \'${domain}\'@localhost;
EOF
    
por 05.03.2018 / 04:00