Назад | Перейти на главную страницу

Как создать задачу Capistrano для импорта резервной копии из производства в локальную базу данных разработки?

Я пытаюсь сделать что-то с задачей Capistrano, похожей на heroku db:pull функциональность, если вы с ней знакомы.

У меня удаленный сервер. На этом сервере у меня есть куча резервных копий в /path/db_backups/ папка. И в этой папке каждый день создается резервная копия базы данных.

Все, что я хочу сделать, это

  1. Загрузите последнюю резервную копию на клиентском компьютере в / path / to / backups_dir /
  2. Разверните его на месте.
  3. Импортируйте его в локальную базу данных mysql.

Кто-нибудь знает, как с этим справиться? Есть ли драгоценный камень, о котором я не знаю? Есть ли у вас под рукой сценарий?

это довольно старая тема, но вот как я справился с ней с Capistrano 3.

Это будет использовать ваш удаленный двоичный файл MySQL (например, тот, который находится на вашем веб-сервере). Вам не понадобится прямой доступ к серверу MySQL, но двоичный файл MySQL должен быть установлен на вашем удаленном сервере.

# ensure that the dump directory exists
%x{mkdir -p #{dump_dir}}

# run mysqldump command to backup the db from the remote server
args = "-u#{db_user} -p#{db_pass} -h#{db_host} #{db_name}"
dump = []

if fetch(:answer)== 'overwrite' then true else false end
# stream the output to local
output = capture(:mysqldump, args)
output.each_line do |line|
  dump << line
end

# write the streamed output to a file
File.open("#{dump_dir}/#{db_name}_#{stage}_#{date}.sql", 'w') do |file|
  file.puts(dump)
end

Затем импортируйте в любую базу данных MySQL с помощью %Икс

%x{mysql -u#{local_db_user} -p#{local_db_pass} -h#{local_db_host} #{local_db_name} < #{dump_dir}/#{db_name}_#{stage}_#{date}.sql}

Надеюсь, это поможет кому-то другому.