【问题标题】:how to order query execution with opscode chef and database cookbook如何使用 opscode chef 和数据库说明书订购查询执行
【发布时间】:2013-09-19 02:13:43
【问题描述】:

我正在寻求有关在我的厨师食谱中定义优先级的帮助。

配方应该在数据库中导入一个 sql 转储,然后对数据库执行 2 个 mysql 查询。

我正在使用 Chef Solo。

第一个 mysql_database 操作:查询导入转储效果很好 但是其他两个查询似乎什么也没做,因为转储似乎仍在数据库中导入数据,并且运行时数据不存在。随机执行?

我的食谱:

mysql_database node['wp-dev']['database'] do
    connection ({:host => "localhost", :username => 'root', 
                 :password => node['mysql']['server_root_password']})
    #NOW THE SQL SCRIPT importing the dump - WORKING
    sql { ::File.open("/tmp/database.sql").read }
    #NOW THE 2 QUERIES - Not working at first Run
    sql "UPDATE WORKING QUERY WHEN COPIED IN MYSQL 1"
    sql "UPDATE WORKING QUERY WHEN COPIED IN MYSQL 2"
    action :query
end

我不知道如何解决这个问题,或者如何使用 only_if 在运行查询之前检查导入是否完成。

【问题讨论】:

  • sql代码在哪里?
  • 这是非常简单的查询,我认为 sql 代码不是问题,因为生成的查询在复制/粘贴到 mysql 时效果很好。
  • @user2793488 你有解决这个问题的办法吗?
  • 我也遇到过同样的问题。它是由延迟连接关闭引起的。查询本身是有序的(当使用两个数据库资源时)。我尝试安装基本架构,然后安装一些用户数据。第二个查询在第一个查询之前关闭了连接(问题:为什么他们使用2个连接?)..这导致mysql在最后一个之前执行第二个。但是,mysql_database_provider 在代码中调用close。奇怪的问题,修复之前无法使用。

标签: chef-recipe cookbook chef-infra


【解决方案1】:

一种解决方案是使用不同的 mysql_datase 块,其中一个在完成时通知另一个。

mysql_database 'insertTestData' do
   connection mysql_connection_info
   database_name node['some']['database']
   sql { ::File.open(/somePath/testData.sql).read }
   action :nothing
end


mysql_database 'createTables' do
   connection mysql_connection_info
   database_name node['some']['database']
   sql { ::File.open(/somePath/tableCreate.sql).read }
   action :query
   notifies :query,"mysql_database[insertTestData]"
end

【讨论】:

    【解决方案2】:

    您需要为正在执行的每个 sql 语句创建一个单独的 mysql_database 块。您不能在同一个查询中包含多个 sql 查询。

    【讨论】:

    • 我也这样做了,但我遇到了同样的问题,mysql_database 块似乎是“并行”执行的。当第一个执行(转储导入)时,第二个尝试对数据库执行查询,但导入未完成。之间,多个 sql 语句似乎也可以工作:我在日志中有“正在执行的查询”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 2013-01-17
    • 2012-04-14
    相关资源
    最近更新 更多