如何强制mysql命令行不提示y / n?

时间:2013-01-25 21:13:47

标签: mysql database

我有一个shell脚本执行以下操作

mysql -uuser -ppass -e "DROP DATABASE IF EXISTS database"

但是,如果您确定要这样做[Y / N],则会出现提示。我在脚本中需要这个,所以有没有办法强制它执行?文档中的--force选项说明了不能停止错误。

编辑:mysql客户端实际上不会生成提示。事实证明我有mysqladmin客户端调用正在生成提示。

3 个答案:

答案 0 :(得分:18)

很明显,shell脚本正在等待Y / N响应,而不是MySQL客户端。

您应该只需复制/粘贴

即可直接执行该行
mysql -uuser -ppass -e "DROP DATABASE IF EXISTS database"

在Linux命令提示符下。

如果您愿意,在出现此命令的地方,只需注释掉shell脚本中的Y / N响应。

我的下一个建议是让你看看你的my.cnf。

查看是否有[mysql][client]部分,其中包含以下内容:

[mysql]
i-am-a-dummy
safe-updates

[client]
i-am-a-dummy
safe-updates

这些是真正的选择:请参阅MySQL文档中的safe-updates and i-am-a-dummy

更新2013-01-25 16:48 EDT

我的下一个猜测是操作系统。为什么???

如果您以root登录Linux或执行sudo,则您拥有执行DROP DATABASE IF EXISTS的无可置疑的权利。在操作系统级别,mysqld会尝试丢弃数据库的文件夹。

例如,如果datadir为/var/lib/mysql且您执行DROp DATABASE IF EXISTS rolando;,则mysqld将尝试运行rm -rf /var/lib/mysql/rolando

如果您不是rootsudo并且root,我希望操作系统能够回复该消息。事实上,当我没有以root身份登录并尝试service mysql stop时,我已经看到来自操作系统的消息要求删除PID文件。

更新2013-01-25 16:54 EDT

除密码外,

mysqladmin也不会引起提示。以下是它的所有选项:

[root@***]# mysqladmin --help
mysqladmin  Ver 8.42 Distrib 5.1.47, for redhat-linux-gnu on x86_64
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Administration program for the mysqld daemon.
Usage: mysqladmin [OPTIONS] command command....
  -c, --count=#       Number of iterations to make. This works with -i
                      (--sleep) only.
  --debug-check       Check memory and open file usage at exit.
  --debug-info        Print some debug info at exit.
  -f, --force         Don't ask for confirmation on drop database; with
                      multiple commands, continue even if an error occurs.
  -C, --compress      Use compression in server/client protocol.
  --character-sets-dir=name
                      Directory for character set files.
  --default-character-set=name
                      Set the default character set.
  -?, --help          Display this help and exit.
  -h, --host=name     Connect to host.
  -b, --no-beep       Turn off beep on error.
  -p, --password[=name]
                      Password to use when connecting to server. If password is
                      not given it's asked from the tty.
  -P, --port=#        Port number to use for connection or 0 for default to, in
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
                      /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
                      memory).
  -r, --relative      Show difference between current and previous values when
                      used with -i. Currently only works with extended-status.
  -O, --set-variable=name
                      Change the value of a variable. Please note that this
                      option is deprecated; you can set variables directly with
                      --variable-name=value.
  -s, --silent        Silently exit if one can't connect to server.
  -S, --socket=name   The socket file to use for connection.
  -i, --sleep=#       Execute commands repeatedly with a sleep between.
  --ssl               Enable SSL for connection (automatically enabled with
                      other flags). Disable with --skip-ssl.
  --ssl-ca=name       CA file in PEM format (check OpenSSL docs, implies
                      --ssl).
  --ssl-capath=name   CA directory (check OpenSSL docs, implies --ssl).
  --ssl-cert=name     X509 cert in PEM format (implies --ssl).
  --ssl-cipher=name   SSL cipher to use (implies --ssl).
  --ssl-key=name      X509 key in PEM format (implies --ssl).
  --ssl-verify-server-cert
                      Verify server's "Common Name" in its cert against
                      hostname used when connecting. This option is disabled by
                      default.
  -u, --user=name     User for login if not current user.
  -v, --verbose       Write more information.
  -V, --version       Output version information and exit.
  -E, --vertical      Print output vertically. Is similar to --relative, but
                      prints output vertically.
  -w, --wait[=#]      Wait and retry if connection is down.
  --connect_timeout=#
  --shutdown_timeout=#

嘿,我保持正确

--force会提示DROP DATABASE

好吧我猜你找到了罪魁祸首。我今天学到了一些东西,因为我没有使用mysqladmin来删除数据库。

答案 1 :(得分:6)

可能必须管道“是”'进入命令。 This site提供了如何执行此操作的想法。

yes | mysqladmin -u[username] -p[password] drop [database]

但这是通过this post的另一个皱纹。

mysqladmin -u[username] -p[password] -f drop [database]

答案 2 :(得分:1)

通常,您可以使用-e选项从shell传递任何查询到mysql。

mysql -u username -ppassword -D dbname -e "DROP DATABASE" 

或者您可以将密码存储在my.cnf中,但不太安全。

[client]
host     = localhost
user     = username.
password = password
socket   = /var/lib/mysql/mysql.sock