【问题标题】:How run t-sql commands on Azure SQL databases using Ansible如何使用 Ansible 在 Azure SQL 数据库上运行 t-sql 命令
【发布时间】:2021-07-23 15:39:16
【问题描述】:

我们需要使用托管在 Azure Linux VM 上的 Ansible 在 Azure SQL 数据库(不是托管实例数据库风格)上运行一系列 T-SQL 语句(以创建数据库对象和惰性数据)。

我们成功测试了我们可以从安装了 odbc 驱动程序的 Linux VM 运行 sql 命令。但是,当我们尝试使用 Ansible 从同一个 Linux 虚拟机运行 sql 脚本时,会出现连接超时错误。

Ansible 使用 ssh(端口 22)连接到远程主机。 SQL 服务器在端口 1433 上通信。

Ansible 是否支持我们正在尝试做的事情? 如果支持,请有人指出如何实现这一点。

谢谢

【问题讨论】:

    标签: sql-server azure ansible paas


    【解决方案1】:

    默认情况下,Ansible 同步运行任务,保持与远程节点的连接打开直到操作完成。 这意味着在 playbook 中,每个任务默认阻止下一个任务,这意味着后续任务在当前任务完成之前不会运行。这种行为会带来挑战。 例如,某项任务的完成时间可能比 SSH 会话允许的时间长,从而导致超时。 或者您可能希望在后台执行一个长时间运行的进程,同时同时执行其他任务。异步模式可让您控制长时间运行的任务的执行时间。

    异步:异步用于显式设置您希望应用于此任务的超时。我们可以为特定任务设置自定义超时,而不是依赖于连接方法超时。异步任务将一直运行,直到根据它们的异步值完成、失败或超时。

    Poll:poll 是一个值,playbook 将在任务完成、失败或超时之前一直执行该值。对于长时间运行的异步任务,最好设置 poll=0,这样 Ansible 可以在启动当前任务后立即跳转到下一个任务,而无需等待结果。

    重试次数:您希望重试检查作业状态的次数,直到它超时或被宣布为失败。例如,如果您设置了 retries=20,它会在每 10 秒(如果 poll=10)20 次后尝试检查作业状态。简而言之,它会等待任务完成总共 200 秒。

    这是一个例子。

    --- 
    - 
      hosts: dbhost
      name: "Import MySQL database"
      tasks: 
        - 
          async: 2100
          name: "Start database import"
          poll: 0
          register: import_db
          shell: "mysql {{ MYSQL_DATABASE }} < /backups/database_dump.sql"​
    

    你也可以参考 ansible 官方文档Asynchronous actions and polling

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2017-08-20
      • 1970-01-01
      相关资源
      最近更新 更多