如何从bash提供mysql查询

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?

Pri*_*ley 38

试试这样:

echo "select 1" | mysql
Run Code Online (Sandbox Code Playgroud)


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)

  • +1我还想提一下,如果查询使用反引号,你需要引用开头标签:`mysql <<'END' (3认同)

小智 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建议的"这里"文件.


Sor*_*row 7

你试过mysql -e query吗?