簡體   English   中英

如何將mysql數據庫從heroku拉到本地機器

[英]How to pull mysql database from heroku to local machine

嗨我在heroku上托管的rails上有一個ruby,它使用mysql作為數據庫。

現在我必須將數據庫備份到本地計算機。 但我在備份時遇到問題。

為此我安裝了taps寶石,我正在使用以下命令

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

我引用此link1link2獲取更詳細的heroku文檔。

pg:pull命令僅適用於Heroku應用程序中的Postgres數據庫。 但是,您正在使用第三方MySQL提供程序。 您的數據庫托管在ClearDB服務器上,任何擁有正確憑據的人都可以使用它,包括Heroku上的應用服務器和開發機器。

即使沒有特殊的命令來拉動數據庫,你也不需要任何 - 普通的mysqldump應該這樣做。

mysqldump -h hostname.cleardb.com -u username heroku_database | mysql local_database

重要的免責聲明:必須正確配置您的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

運行$heroku config | grep ^DATABASE $heroku config | grep ^DATABASE會給你這樣的東西:

DATABASE_URL: mysql2://username:password@host/dbname?reconnect=true`

從那里你可以構造你的db dump命令:

mysqldump -h host -p -u username dbname | mysql local_database

這將提示您輸入從上一個命令收到的密碼。 如果您想創建一個自動包含heroku命令密碼的腳本,您可以執行以下操作:

mysqldump -u username --password=`heroku config | grep ^DATABASE | sed 's/.*[a-z0-9][a-z0-9]*:\([a-z][a-z0-9]*\).*/\1/'` -h host dbname | mysql cedric

通過這種方式,您可以擁有一個腳本,該腳本將導入數據庫而無需任何用戶輸入,但也不會將密碼公開給您的數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM