嗨我在heroku上托管的rails应用程序上有一个ruby,它使用mysql作为数据库。
现在我必须将数据库备份到本地计算机。但是我在备份时遇到问题。
为此,我安装了taps
gem,我正在使用以下命令
heroku pg:pull mysql2://username@hostname.cleardb.com/heroku_database local_database --app my_app
但是它给出的错误为!Your app has no databases.
任何人都可以指导我如何将mysql数据库从heroku拉到本地机器。
修改
我使用了以下命令语法
heroku pg:pull <REMOTE_SOURCE_DATABASE> <LOCAL_TARGET_DATABASE>
并且为了获取REMOTE_SOURCE_DATABASE,我使用了以下命令
heroku config:get DATABASE_URL --app my_app
我提及this link1和link2以获取更详细的heroku文档。
答案 0 :(得分:7)
pg:pull
命令仅适用于Heroku应用中的Postgres数据库。但是,您正在使用第三方MySQL提供程序。您的数据库托管在ClearDB服务器上,并且任何拥有正确凭据的人都可以使用它,包括Heroku上的应用服务器和开发机器。
即使没有特殊的命令来提取数据库,你也不需要 - 普通mysqldump
应该这样做。
mysqldump -h hostname.cleardb.com -u username heroku_database | mysql local_database
答案 1 :(得分:1)
(重要免责声明: 必须正确配置 database.yml 才能实现此目的。我不负责任何因运行以下脚本而丢失的数据。)
对于 Ruby on Rails 用户......您可以考虑编写 Rake任务,如下面的 db:clone 任务。
我发现自己经常使用这个脚本从生产到开发。它比记住mysqldump语法更容易,更不用说涉及的所有用户名和密码...
从生产到开发克隆:
rake db:clone:production
从分段到开发克隆:
rake db:clone:staging
从生产克隆到分段:
rake db:clone:production_to_staging
这里的代码很有用(并且在设置database.yml时要小心):
namespace :db do
namespace :clone do
class << self
%w(development test staging production).each do |env|
define_method("#{env}_db") do
Rails.configuration.database_configuration[env]
end
end
end
def clone_db(from_db, to_db)
start_time = Time.now
puts "Cloning Remote DB...."
system("mysqldump -h#{from_db['host']} -u#{from_db['username']} -p#{from_db['password']} #{from_db['database']} | mysql #{to_db['database']} -u#{to_db['username']} -p#{to_db['password']}")
puts "Import Successful"
end_time = Time.now
puts "===================="
puts "Job Completed: #{end_time - start_time} Seconds"
end
task :staging => :environment do
clone_db(staging_db, development_db)
end
task :production => :environment do
clone_db(production_db, development_db)
end
task :production_to_staging => :environment do
clone_db(production_db, staging_db) if Rails.env.staging?
end
end
end
答案 2 :(得分:0)
运行...
foreach($testArray as $key)
{
if(strlen($key['display'])==1) {$i = 1;$j = 'A';}
...
将为您提供以下内容:
$heroku config | grep ^DATABASE
从那里你可以构建你的db dump命令:
DATABASE_URL: mysql2://username:password@host/dbname?reconnect=true`
这将提示您输入从上一个命令收到的密码。如果你想创建一个自动包含heroku命令密码的脚本,你可以这样做:
mysqldump -h host -p -u username dbname | mysql local_database
通过这种方式,您可以拥有一个脚本,该脚本将导入数据库而无需任何用户输入,但也不会将密码公开给您的数据库。