Cra*_*ard 7 ruby mysql recipe chef-infra vagrant
我正在编写一个自动设置开发环境的厨师脚本.我可以创建一个数据库并授予权限,但我试图找到一种方法将mysql转储文件导入刚刚创建的数据库中.
我授予访问权限的代码是
ruby_block "Execute grants" do
block do
require 'rubygems'
Gem.clear_paths
require 'mysql'
m = Mysql.new('localhost', "root", node[:mysql][:server_root_password])
m.query("GRANT ALL ON *.* TO 'root'@'10.0.0.1' IDENTIFIED BY '#{node[:mysql][:server_root_password]}'")
m.query('FLUSH PRIVILEGES')
end
end
Run Code Online (Sandbox Code Playgroud)
我希望我能够做以下查询
#m.query("-u root -p root db_name < /project/db/import.sql")
但只是给了我一个错误.
我没有做太多的Ruby,所以很难弄明白.谁知道我怎么能这样做?
如果它是文件路径错误,并且您正在使用chef solo,请尝试使用solo.rb中指定的路径,如:
/tmp/chef-solo/site-cookbooks/path_to_file.sql
Run Code Online (Sandbox Code Playgroud)
作为一般说明,考虑使用数据库cookbook进行mysql用户和数据库管理任务.一旦设置了必要的cookbook依赖项,就可以将这样的代码放入主配方的default.rb中:
# externalize conection info in a ruby hash
mysql_connection_info = {
:host => "localhost",
:username => 'root',
:password => node['mysql']['server_root_password']
}
# drop if exists, then create a mysql database named DB_NAME
mysql_database 'DB_NAME' do
connection mysql_connection_info
action [:drop, :create]
end
# query a database from a sql script on disk
mysql_database "DB_NAME" do
connection mysql_connection_info
sql { ::File.open("/tmp/chef-solo/site-cookbooks/main/path/to/sql_script.sql").read }
action :query
end
#or import from a dump file
mysql_database "DB_NAME" do
connection mysql_connection_info
sql "source /tmp/chef-solo/site-cookbooks/main/path/to/sql_dump.sql;"
end
Run Code Online (Sandbox Code Playgroud)
没有测试过最后一个,因为在chef目录中存储数据库文件确实减慢了速度.
另请参阅:将SQL文件导入mysql
您可以从 MySQL 命令行客户端创建备份,但不能从 SQL 查询中创建备份。您需要从 shell 执行该命令。我相信该execute资源可能会为您带来帮助:
http://wiki.opscode.com/display/chef/Resources#Resources-Execute
| 归档时间: |
|
| 查看次数: |
9702 次 |
| 最近记录: |