如何从命令行强制MySQL命令不提示y/n?
我有一个shell脚本,它执行以下操作如何从命令行强制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
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