我正在尝试执行一个原始的sql来创建一个几乎没有授权的用户,但我得到一个未定义的方法错误。我正在使用数据库厨师食谱的v4.0.9。
mysql_database[create random grants] action query
================================================================================
Error executing action `query` on resource 'mysql_database[create datadog grants]'
================================================================================
NoMethodError
-------------
undefined method `close' for nil:NilClass
Cookbook Trace:
---------------
/tmp/kitchen/cache/cookbooks/database/libraries/provider_database_mysql.rb:153:in `close_query_client'
Resource Declaration:
---------------------
# In /tmp/kitchen/cache/cookbooks/xxxx/recipes/xxxxxx.rb
156: mysql_database 'create random grants' do
157: connection mysql_connection_info
158: sql "GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO 'testuser'@'localhost' IDENTIFIED BY 'dummy';"
159: #sql 'SELECT 1'
160: action :query
161: end
162:
如果你使用database
cookbook,那么它很久以前就被弃用了 - 它上面的开发已经停止了2年多以前,它的存储库被存档了。
这是弃用消息:
这本食谱已被弃用。最初的目的是从最终用户那里抽象出数据库实现细节。事后看来,这是一个错误,因为很难/不可能为所有系统中的数据库建立通用接口。相反,我们计划将各个提供者移动到他们各自的烹饪书(mysql,postgresql,sqlite,sql_server)中,他们可以充分利用底层数据库系统的功能集。
我建议你远离这本食谱。
我处于相同的位置,我正在使用这个已弃用的食谱。为了运行该资源,您需要使用特定的食谱修订版 - depends 'database', '4.0.8'
因此,如果您将其添加到metadata.rb
,您的代码将起作用。
这是我身边的代码:
mysql_database 'create slave user' do
connection mysql_connection_info
sql "GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '#{slave_password_data_bag_item['password']}'"
action :query
end