使用终端内的mysql抑制警告消息,但用bash脚本编写密码

 用户3w7mnpewca 发布于 2023-02-08 13:45

当我尝试从终端内的MySQL上运行以下命令时:

mysql -u $user -p$password -e "statement"

执行按预期工作,但它总是发出警告:

警告:在命令行界面上使用密码可能不安全.

但是,我必须使用$password存储我的密码的环境变量()来执行上面的声明,因为我想在终端内的bash脚本中迭代地运行命令,我绝对不喜欢等待提示出现的想法并强迫我在一个脚本中输入50或100次密码.所以这是我的问题:

抑制警告是否可行?该命令正如我所说的那样正常工作,但当我循环并运行命令50或100次时,窗口变得非常混乱.

我是否应该遵守警告信息并且不在我的脚本中写入密码?如果是这种情况,那么每次提示迫使我这样做时,我是否必须输入密码?

跑步man mysql没有帮助,只说

--show-warnings
如果有任何声明,则会在每个声明后显示警告.此选项适用于交互式和批处理模式.

如果我没有遗漏某些东西,并且没有提及如何关闭功能.

我在OS X 10.9.1 Mavericks上,并使用自制的MySQL 5.6.

8 个回答
  • 如果您的MySQL客户端/服务器版本是5.6.xa,以避免WARNING消息使用mysql_config_editor工具:

    mysql_config_editor set --login-path=local --host=localhost --user=username --password
    

    然后你可以在你的shell脚本中使用:

    mysql --login-path=local  -e "statement"
    

    代替:

    mysql -u username -p pass -e "statement"
    

    2023-02-08 13:46 回答
  • 如果您希望在命令行中使用密码,我发现这适用于过滤掉特定的错误消息:

    mysqlcommand 2>&1 | grep -v "Warning: Using a password"
    

    它基本上将标准错误重定向到标准输出 - 并使用grep删除所有符合"警告:使用密码"的行.

    这样,您可以看到任何其他输出,包括错误.我将它用于各种shell脚本等.

    2023-02-08 13:46 回答
  • 一种方便(但同样不安全)的方法是使用:

    MYSQL_PWD=xxxxxxxx mysql -u root -e "statement"
    

    请注意,官方文档建议不要使用它.
    请参见6.1.2.1密码安全的最终用户指南(适用于5.6版的Mysql手册):

    将密码存储在MYSQL_PWD环境变量中

    这种指定MySQL密码的方法必须被认为是非常不安全的,不应该使用.某些版本的ps包含显示正在运行的进程环境的选项.在某些系统上,如果设置MYSQL_PWD,则密码将暴露给运行ps的任何其他用户.即使在没有这种版本的ps的系统上,假设用户没有其他方法可以检查过程环境也是不明智的.

    2023-02-08 13:46 回答
  • 这是我如何让我的每日mysqldump数据库备份的bash脚本更安全地工作.这是Cristian Porta伟大答案的扩展.

      首先使用mysql_config_editor(自带mysql 5.6+)来设置加密密码文件.假设您的用户名是"db_user".从shell提示符运行:

      mysql_config_editor set --login-path=local --host=localhost --user=db_user --password
      

      它会提示输入密码.输入后,用户/通行证将以加密方式保存home/system_username/.mylogin.cnf

      当然,将"system_username"更改为服务器上的用户名.

      从这个改变你的bash脚本:

      mysqldump -u db_user -pInsecurePassword my_database | gzip > db_backup.tar.gz
      

      对此:

      mysqldump --login-path=local my_database | gzip > db_backup.tar.gz
      

    没有更多暴露的密码.

    2023-02-08 13:46 回答
  • shell> mysql_config_editor set --login-path=local
         --host=localhost --user=localuser --password
    Enter password: enter password "localpass" here
    shell> mysql_config_editor set --login-path=remote
         --host=remote.example.com --user=remoteuser --password
    Enter password: enter password "remotepass" here
    

    要查看mysql_config_editor写入.mylogin.cnf文件的内容,请使用print命令:

    shell> mysql_config_editor print --all
    [local]
    user = localuser
    password = *****
    host = localhost
    [remote]
    user = remoteuser
    password = *****
    host = remote.example.com
    

    print命令将每个登录路径显示为一组行,以组标题开头,在方括号中指示登录路径名称,后跟登录路径的选项值。密码值被屏蔽,并且不会显示为明文。

    如前面的示例所示,.mylogin.cnf文件可以包含多个登录路径。这样,mysql_config_editor可以轻松设置多个“个性”以连接到不同的MySQL服务器。当调用客户端程序时,以后可以使用--login-path选项按名称选择其中任何一个。例如,要连接到本地服务器,请使用以下命令:

    shell> mysql --login-path=local
    

    要连接到远程服务器,请使用以下命令:

    shell> mysql --login-path=remote
    

    2023-02-08 13:48 回答
  • 我使用类似的东西:

    mysql --defaults-extra-file=/path/to/config.cnf
    

    要么

    mysqldump --defaults-extra-file=/path/to/config.cnf 
    

    config.cnf包含的位置:

    [client]
    user = whatever
    password = whatever
    host = whatever
    

    这允许您拥有多个配置文件 - 用于不同的服务器/角色/数据库.使用〜/ .my.cnf只允许你有一组配置(虽然它可能是一组有用的默认值).

    如果您使用的是基于Debian的发行版,并以root用户身份运行,则可以跳过上述内容并使用/etc/mysql/debian.cnf进入...:

    mysql --defaults-extra-file=/etc/mysql/debian.cnf

    2023-02-08 13:48 回答
  • 您还可以在脚本中运行mysql_config_editor,以在指定登录路径时传入密码

    expect -c "
    spawn mysql_config_editor set --login-path=$mySqlUser --host=localhost --user=$mySqlUser --password
    expect -nocase \"Enter password:\" {send \"$mySqlPassword\r\"; interact}
    "
    

    这将启动一个期望会话,该会话可以在脚本中用于与提示进行交互

    看这篇文章

    2023-02-08 13:48 回答
  • 最简单的方法是

    mysql -u root -pMYPASSWORD -e "show databases" 2>/dev/null
    

    2023-02-08 13:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有