MySQL查询不是从bash执行,而是从MySQL客户端运行

使用UBUNTU 16。

MySQL查询bash中失败,但从MySQL客户端运行:

query=$(cat << EOF CREATE DATABASE \`${mysql_local_database}\` /*!40100 COLLATE \'utf8_hungarian_ci\' */; use \`${mysql_local_database}\`; GRANT SELECT, EXECUTE, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, UPDATE, LOCK TABLES ON \`${mysql_local_database}\`.* TO 'myuser'@'%'; FLUSH PRIVILEGES; EOF ) echo $query mysql -u ${mysql_local_user} -p${mysql_local_pass} -h localhost "${query}" 

执行bash脚本后出现以下错误:

  CREATE DATABASE `mydb` /*!40100 COLLATE 'utf8_hungarian_ci' */; use `mydb`; GRANT SELECT, EXECUTE, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, UPDATE, LOCK TABLES ON `mydb`.* TO 'user'@'%'; FLUSH PRIVILEGES; ERROR 1102 (42000): Incorrect database name 'CREATE DATABASE `mydb` /*!40100 COLLATE 'utf8_hungarian_ci' */' 

如果我在MySQL客户端(HeidiSQL)中执行打印的MySQL查询,它工作正常:

 CREATE DATABASE `mydb` /*!40100 COLLATE 'utf8_hungarian_ci' */; use `mydb`; GRANT SELECT, EXECUTE, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, UPDATE, LOCK TABLES ON `mydb`.* TO 'myuser'@'%'; FLUSH PRIVILEGES; /* Affected rows: 1 Found rows: 0 Warnings: 0 Duration for 4 queries: 0,000 sec. */ 

请告知如何解决它。

正如@yoonix指出的,是的,-e选项丢失了。

 mysql -u ${mysql_local_user} -p${mysql_local_pass} -h localhost - e "${query}" 

现在运作良好。 谢谢您的帮助!

我不是100%确定整理utf8_hungarian_ci部分,但我可以通过省略反斜杠和ticks来创build数据库而不出错,将create database行更改为:

 CREATE DATABASE $mysql_local_database /*!40100 COLLATE utf8_hungarian_ci */ ; use $mysql_local_database ; GRANT SELECT, EXECUTE, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, UPDATE, LOCK TABLES ON $mysql_local_database.* TO 'myuser'@'%'; FLUSH PRIVILEGES; 

并在这里添加了:

 mysql -u ${mysql_local_user} -p${mysql_local_pass} -h localhost -se "${query}"