我试图做一个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