如何使用我的fab文件运行SQL查询,如下所示
def allow_webservers_for_db():
for ip in env.web_servers:
run('echo "GRANT ALL ON %s.* TO \'%s\'@\'%s\' IDENTIFIED BY \'%s\'; | mysql --user=%s --password=%s"' % (env.db_schema, env.db_web_user, ip, env.db_password, env.db_user, env.db_password), pty=True)
run('echo "UPDATE db SET host=\'%s\' where db=\'%s\'; | mysql --user=%s --password=%s --database=mysql"' % (ip, env.db_schema, env.db_web_user, env.db_password), pty=True)
run('echo "UPDATE user SET host=\'%s\' where user=\'%s\';| mysql --user=%s --password=%s --database=mysql"' % (ip, env.db_web_user, env.db_user, env.db_password), pty=True)
代码运行时没有错误,但没有做它必须做的事情。如果我将echo
生成的代码复制并粘贴到mysql终端mysql>
,则查询运行正常。
我在这里缺少什么?反正有没有更好的运行mysql查询?我也不想从文本文件加载它。
答案 0 :(得分:3)
你只是回应整个字符串。
但是你想要将第一部分回显到mysql的管道中。
删除最后一个"
并将其放在;
和|
之间。
第一行示例:
run('echo "GRANT ALL ON %s.* TO \'%s\'@\'%s\' IDENTIFIED BY \'%s\';" | mysql --user=%s --password=%s' ....