Назад | Перейти на главную страницу

Запрос 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 в клиенте MySQL (HeidiSQL), он будет работать нормально:

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% в части collate utf8_hungarian_ci, но мне удалось заставить ее создать базу данных без ошибок, опустив обратную косую черту и отметки, изменив строку создания базы данных на:

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;

а также добавил -se здесь:

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