mysql - 使用 Capistrano 运行 mySql 命令

标签 mysql capistrano

我正在尝试使用 capistrano 来运行 mysql 命令。

如果我运行,在我的本地终端

mysql -u <username> -p <password> -h <server ip> <database name>

它连接到 mysql 并准备好接受命令。

但是如果我在 capistrano 任务中运行它....

execute "mysql -u <username> -p <password> -h <server ip> <database name>"

如果运行没有失败,就卡在那里。这是否意味着它已连接并等待命令?如果是这样,我将如何提供命令?

最佳答案

mysql 命令行客户端有几种不同的方法在命令行上提供查询。它可以使用 --execute/-e 标志接受它们,例如:

mysql --execute 'SELECT * FROM tbl' --user=user dbname

或者它可以通过管道或文件重定向从 STDIN 接受它们:

echo 'SELECT * FROM tbl' | mysql --user=user dbname
# Or:
mysql --user=user dbname < file_containing_queries.sql

对于您在 Capistrano 中的应用程序,通过 --execute 执行它们应该会很好。您可以用分号分隔多个语句,但一定要正确引用所有内容。整套 SQL 语句应该是一个带引号的字符串。

# In a Capistrano task:
execute "mysql -e'SELECT * FROM tbl1; SELECT * FROM tbl2;' -u <username> -p <password> -h <server ip> <database name>"

这可能是 Ruby 的替代 %q/%Q 引用的一个很好的用途,以避免在 SQL 语句中引用字符串文字的问题:

execute %q{mysql -e"SELECT * FROM tbl1 WHERE col='value'; SELECT * FROM tbl2 WHERE col='value';" -u user -ppasswd -hhost dbname}

在 Capistrano 中通过 SSH 启动 mysql 客户端时,客户端似乎已加载到服务器上并接受语句,但以交互方式提供它们会更加困难。为此,MySQL 提供了 --executeSTDIN 选项,因此最好使用它们。

关于mysql - 使用 Capistrano 运行 mySql 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26736977/

相关文章:

ruby-on-rails-3 - 即使使用 "set :use_sudo, false"Capistrano 也使用 sudo

ruby-on-rails - 部署期间预编译 Assets 失败

mysql - 在 phpmyadmin 中仅将几个值设置为要枚举的域

mysql - 将 Oracle 查询转换为 MySQL 查询。所有索引

mysql - 防止 Sails JS 水线创建用于关联的列

css - 在生产启动之前重写 css 文件中的 url 的最佳方法?

ruby-on-rails - 如何使用 capistrano 部署 rails sqlite3 数据库

ruby-on-rails - Capistrano 在 Windows 上的部署因 git 而失败

php - 将 Joomla 2.5 升级到 3.x

php - Mysql( Doctrine )正在重复计数结果,可能是由于分组依据,但无法弄清楚