如何将mysql数据库从heroku拉到本地机器

时间:2015-02-26 07:33:17

标签: mysql ruby-on-rails ruby heroku

嗨我在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 link1link2以获取更详细的heroku文档。

3 个答案:

答案 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

通过这种方式,您可以拥有一个脚本,该脚本将导入数据库而无需任何用户输入,但也不会将密码公开给您的数据库。