tir*_*hen 29 mysql unix linux bash stdin
我正在尝试创建一个创建mysql用户和数据库的bash脚本,但我找不到将sql提供给mysql的方法,我正在尝试使用这种格式:
mysql < echo "query"
Run Code Online (Sandbox Code Playgroud)
但这不起作用,请参阅下面的示例:
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';"
Run Code Online (Sandbox Code Playgroud)
如何用查询提供mysql?
Ken*_*Ken 24
mysql --batch --silent -e 'SHOW TABLES';
Run Code Online (Sandbox Code Playgroud)
如果您计划管道输出,批处理和静默是很方便的
dog*_*ane 23
尝试使用这样的文档:
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
Run Code Online (Sandbox Code Playgroud)
或者将所有命令放在文本文件中并运行它:
mysql --host=localhost --user=user --password=password < commands.sql
Run Code Online (Sandbox Code Playgroud)
小智 11
你的尝试不起作用的原因是因为<期望一个文件名并且你给它一个字符串.你必须做类似的事情
echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile
Run Code Online (Sandbox Code Playgroud)
肯的建议
mysql --host=localhost --user=user --password=password -e "QUERY" dbname
Run Code Online (Sandbox Code Playgroud)
可以工作,但如果你尝试在查询中使用bash变量,你可能会违反参数扩展.例如
QUERY="select * from $MYTABLE WHERE name=\"silly@place.com\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname
Run Code Online (Sandbox Code Playgroud)
可能没做你期望的事.一种选择是使用
echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname
Run Code Online (Sandbox Code Playgroud)
如果查询字符串包含适当的引用,则有效.另一种选择是dogbane建议的"这里"文件.