创建、分配用户权限并从perl bash将转储加载到mysql会导致mysql错误;“未选择任何数据库”;

创建、分配用户权限并从perl bash将转储加载到mysql会导致mysql错误;“未选择任何数据库”;,mysql,sql,linux,bash,Mysql,Sql,Linux,Bash,我有一个bash,它创建一个数据库,为它分配用户权限,然后加载一个转储。我是在opensuse的一次聚会上做这件事的。使用了数据库名为=$1的参数 这是我的脚本中处理此问题的部分: echo "creating database" #(This is Line 22)create new database and configure grants mysql -hlocalhost -uroot -e "create database $1;" echo "select db, use" my

我有一个bash,它创建一个数据库,为它分配用户权限,然后加载一个转储。我是在opensuse的一次聚会上做这件事的。使用了数据库名为=$1的参数

这是我的脚本中处理此问题的部分:

echo "creating database"
#(This is Line 22)create new database and configure grants
mysql -hlocalhost -uroot -e "create database $1;"

echo "select db, use"
mysql -hlocalhost -uroot -e "use $1;"

echo "granting rights"
mysql -hlocalhost -uroot -e "grant all on $1.* to 'smic_db_root'@'localhost' identified by 
'sm_for_all_987';"

echo "loading dump"
#load the database dump
mysql -h localhost -uroot $1</opt/otrsadm/otrs_template.sql
如何在bash中选择数据库,以及何时需要这样做。由于错误消息引用的是第22行,所以我需要在内部的某个地方执行此操作。我试着加上1美元;像这样:

mysql -hlocalhost -uroot -e "create database $1; **use $1;** grant all on $1.* to 'smic_db_root'@'localhost' identified by 'sm_for_all_987';"

行为上没有区别

创建/授予命令不需要选择数据库。它们显式地在全局级别(create)或mysql数据库(grant)上工作。尝试进行一些调试以查看每个错误发生的位置

echo "creating database"
mysql .... 'create database ..';
echo "granting rights"
mysql .... 'grant ....';
echo "loading dump"
mysql .... < file.sql
echo“创建数据库”
mysql……”创建数据库;
呼应“授予权利”
mysql……”授予;
回显“加载转储”
mysql…

现在,错误消息并没有告诉您失败了什么,只是说明发生了什么。通过如上所述添加回音,您至少可以知道哪个阶段导致了哪些错误。

好的,我用结果更新了bash和帖子。这似乎仍然是关于选择数据库的问题。似乎$1设置不正确。尝试将查询字符串创建到一个var(
query=“..…$1..”
)中,并将其回显,以查看完整查询行在进入MySQL之前的外观。“use后面必须跟一个databasename”错误表示您的查询是
create;使用;将全部启用。*授予…
而不是
创建xyz;使用xyz;在xyz.*等上授予所有权限。
谢谢!是的,问题是参数没有正确地发布到bash。现在修好了!
echo "creating database"
mysql .... 'create database ..';
echo "granting rights"
mysql .... 'grant ....';
echo "loading dump"
mysql .... < file.sql