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

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

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

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

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

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

1 ответ

Это довольно старая тема, но вот как я справился с ней с 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

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

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

Другие вопросы по тегам