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

如何从命令行强制MySQL命令不提示y/n?,mysql,database,Mysql,Database,我有一个shell脚本,它执行以下操作 mysql -uuser -ppass -e "DROP DATABASE IF EXISTS database" 但是,如果确定要执行此操作,则会出现提示[Y/N]。我需要一个脚本,所以有没有办法强迫它执行--文档中的强制选项谈到不因错误而停止 编辑:mysql客户端实际上不生成提示。原来我有一个生成提示的mysqladmin客户端调用。很明显,shell脚本正在等待Y/N响应,而不是MySQL客户端 您应该能够通过复制/粘贴直接执行该行 mysql

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

mysql -uuser -ppass -e "DROP DATABASE IF EXISTS database"
但是,如果确定要执行此操作,则会出现提示[Y/N]。我需要一个脚本,所以有没有办法强迫它执行<代码>--文档中的强制选项谈到不因错误而停止


编辑:
mysql
客户端实际上不生成提示。原来我有一个生成提示的
mysqladmin
客户端调用。

很明显,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

这些是真正的选项:请参见MySQL文档中的

更新日期2013-01-25美国东部时间16:48 我的下一个猜测是操作系统。为什么

如果您以
root
身份登录Linux,或者执行了
sudo
,则您无疑有权执行
删除数据库(如果存在)
。在操作系统级别,mysqld将尝试放弃数据库的文件夹

例如,如果datadir是
/var/lib/mysql
,如果存在rolando,则执行
删除数据库,mysqld将尝试运行
rm-rf/var/lib/mysql/rolando

如果您不是
root
sudo
'd的
root
,我希望操作系统响应该消息。事实上,当我没有以root用户身份登录并尝试
服务mysql stop
时,我看到一条来自操作系统的消息,要求删除一个PID文件

更新时间2013-01-25 16:54美国东部时间 也不会导致提示,密码除外。以下是它的所有选项:

[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
会提示删除数据库


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

可能需要在命令中输入“是”。提供了一个如何做到这一点的想法

yes | mysqladmin -u[username] -p[password] drop [database]
但这是另一个皱纹通过


通常,您可以使用-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

不,剧本没有问。肯定是MYSQL,你确定吗?我只是在命令提示符下测试了它,即使数据库真的存在,它也不会问。mysql客户端是否配置为
安全更新
(又称
I-am-a-dummy
)?那不是讽刺。这是一种真正的选择。只需运行
mysql--help | grep dummy
@rolandmysqldba,您的用户目录路径中可能有一个.my.cnf,它允许您无需提示即可执行。这不是这种情况下的标准做法。@JakeGould我没有用户安全更新。我仍然对该消息的来源感到好奇,因为在我整个MySQL DBA生涯中,我从未遇到过删除数据库的提示。我的第一个嫌疑犯是操作系统。我相信提示来自
mysqladmin
客户端。我不认为
mysql
命令行客户端会发出提示或等待按键继续。请发布提示yes或nospencer7593的消息,您可能是对的。在将数据库与查询的其余部分合并之前,我已经调用了
mysqladmin
来删除数据库。我正在再次测试它。如果是这样的话,我会删除这篇文章。做得好+1给你!!!(对不起,超出了我的限额,我欠你+1!!!)
mysql -u username -ppassword -D dbname -e "DROP DATABASE" 
[client]
host     = localhost
user     = username.
password = password
socket   = /var/lib/mysql/mysql.sock