我想直接用bash而不是mysql终端更新一些表 通常的方法是使用此处的doc string在bash中使用ebedded sql命令。
mysqlword="xyzzy"
tmpdb="yyyy"
mysql -u root -p$mysqlword <<EOF
USE ${tmpdb};
UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');
EOF
尝试其他方式做同样的工作。
mysqlword="xyzzy"
tmpdb="yyyy"
mysql -u root -p$mysqlword -e"USE ${tmpdb};"
sql="UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');"
mysql -u root -p$mysqlword -e"$sql"
ERROR 1046 (3D000) at line 1: No database selected
我在mysql -u root -p$mysqlword -e"USE ${tmpdb};"
之前选择了mysql -u root -p$mysqlword -e"$sql"
数据库,如何解决?
答案 0 :(得分:2)
每次打开连接时都必须USE
数据库。所以你必须结合这两个命令:
mysqlword="xyzzy"
tmpdb="yyyy"
sql="USE ${tmpdb}; UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');"
mysql -u root -p$mysqlword -e"$sql"
答案 1 :(得分:1)
您可以通过以下几种方式修复/简化:
直接在UPDATE语句中引用数据库名称:
sql="UPDATE wp_posts SET ${tmpdb}.post_content = replace(post_content, 'domain1', 'domain2');"
如果你的版本是mysql&gt; = 5.6.6,请使用mysql_config_editor
将登录凭据放入.mylogin.cnf文件中。它将节省输入,密码将被加密。
e.g。
mysql_config_editor --login-path=root --user=root --host=localhost --password
设置后,您的bash命令将更简单(更安全)
tmpdb=yyyy
sql="UPDATE wp_posts SET ${tmpdb}.post_content = replace(post_content, 'domain1', 'domain2');"
mysql --login-path=root -e "$sql"
或者,因为这里不需要变量,
mysql --login-path=root -e "UPDATE wp_posts SET yyyy.post_content = replace(post_content, 'domain1', 'domain2');"