首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将回显管插入Mysql shell失败。

将回显管插入Mysql shell失败。
EN

Stack Overflow用户
提问于 2017-12-12 03:46:04
回答 1查看 416关注 0票数 0

下面的代码是脚本的一部分,它的目的是复制本地网站(在我的Ubuntu16.04异种服务器环境中)。复制的站点的dir名称、DB用户名和DB实例名是相同的,在${domain}变量中表示,而${rps}保存Mysql根密码,${sps}保存重复站点的DB用户密码。

代码的第一部分工作正常(echoread)。第二部分失败(echo-|进入Mysql ):

代码语言:javascript
复制
echo "1/3: Please enter the domain of the site for duplication." && read domain
echo "2/3: Please enter the password for your Mysql root user." && read -s rps
echo "3/3: Please enter the password of the site's DB user." && read -s sps

echo "DROP USER IF EXISTS 'test'@'localhost';" | mysql -u root -p"${rps}
echo "DROP database IF EXISTS test;" | mysql -u root -p"${rps}
echo "CREATE USER 'test'@'localhost' IDENTIFIED BY \"${sps}\";" | mysql -u root -p"${rps}
echo "CREATE database test;" | mysql -u root -p"${rps}
echo "GRANT ALL PRIVILEGES ON test.* TO test@localhost;" | mysql -u root -p"${rps}

我回显和管道Mysql命令的原因是:

这样做是为了确保变量替换${sps}变量(变量替换不能在mysql中进行,因此必须在${sps shell外部执行并发送到mysql shell中)。

问题所在

所有回显管操作都会失败,它们会启动一个辅助提示。

我的问题

为什么回波管操作失败,也许这是一个正则表达式的问题?

进一步详情

完整的代码是可用的这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-12 09:12:55

我也投票结束这个问题,但由于我有时间,我想我会写一些更多的信息,可能有帮助。

代码示例中会出现一些小错误。

不建议您在终端中传递密码,因为系统上的所有用户都可以看到操作和密码。例如,使用一个对ps auxwww的简单请求。

一个更好的选择是使用mysql_config_editor创建一个安全的登录名,当从本地主机使用密码时不需要密码。然后,您可以使用类似于mysql --login-path=master的内容,而不需要密码。

如果您确实希望降低纯文本路径中显示的密码,则应该使用长语法,即:

代码语言:javascript
复制
mysql --password=plaintext --user=user --database=dbname < "mysql query"

代码语言:javascript
复制
echo "mysql query" | mysql --password=plaintext --user=user --database=dbname

代码语言:javascript
复制
mysql --password=plaintext --user=user --database=dbname << END

  mysql query to run;
  another mysql query to run;
  and another mysql query to run;

END

或者,最好地查看您的代码:

代码语言:javascript
复制
mysql --password=plaintext --user=user --database=dbname --execute='mysql query'

但是,你应该得到一个警告(我现在记不起是怎么说的了),关于密码在显而易见的地方。

要使用您的代码示例之一,脚本行应该是(不需要echo ):

代码语言:javascript
复制
mysql --user=root --password=${rps} --execute="DROP USER IF EXISTS 'test'@'localhost';"

现在,为什么您的代码失败(如您现在所知)。

问题是"${rps}之前。删除该"将有效--但我根本不会使用该代码,因为它还有其他潜在的问题。

例如,当脚本请求密码时,为root用户密码输入以下内容:

代码语言:javascript
复制
password; -e 'DROP ALL DATABASES'

这将导致删除所有数据库(如果语法正确的话)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47765037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档