![](/img/trans.png)
[英]How to import a big database from Heroku to local mysql or sqlite3?
[英]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
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.