如何从bash提供mysql查询

我试图做一个bash脚本,创build一个mysql用户和数据库,但我找不到一个方法来提供到MySQL mysql,我想这样的格式:

mysql < echo "query" 

但是这是行不通的,看下面的例子:

 mysql --host=localhost --user=user --password=password < echo "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W'; CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost'; CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL PRIVILEGES ON 'testuser_qa' . * TO 'testuser'@'localhost';" 

如何提供MySQL的查询?

尝试像这样:

 echo "select 1" | mysql 
 mysql --batch --silent -e 'SHOW TABLES'; 

如果您打算输出输出,批处理和沉默是方便的

尝试使用这样的文件 :

 mysql --host=localhost --user=user --password=password << END CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W'; CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost'; CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL PRIVILEGES ON 'testuser_qa' . * TO 'testuser'@'localhost'; END 

或者将所有命令放在文本文件中并运行:

 mysql --host=localhost --user=user --password=password < commands.sql 

你的尝试不起作用的原因是因为<期望一个文件名,你给它一个字符串。 你将不得不做类似的事情

 echo "YOURQUERYSTRINGHERE">tmpfile mysql --host=localhost --user=user --password=password dbname <tmpfile 

肯的​​建议

  mysql --host=localhost --user=user --password=password -e "QUERY" dbname 

可以工作,但如果你尝试在查询中使用bash变量,你可能会陷入参数扩展的恶臭。 例如

 QUERY="select * from $MYTABLE WHERE name=\"silly@place.com\";" mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname 

可能不会做你期望的。 一种选择是使用

 echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname 

如果查询字符串包含适当的引用,这将起作用。 另外一个选择是dogbane建议的“here”文件。

你有没有试过mysql -e query

对于bash脚本中的大型查询,您可以尝试:

 read -d '' SQL_QUERY_1 << EOF SELECT prod.id as id, prod.title as title, comp.name as company, pho.id as photo_id, pho.image as photo_name FROM products as prod JOIN accounts as comp ON comp.id = prod.account_id JOIN photos as pho ON pho.id = prod.featured_photo_id; EOF echo ${SQL_QUERY_1} | mysql