如何创建 Capistrano 任务以将生产备份导入本地开发数据库?

如何创建 Capistrano 任务以将生产备份导入本地开发数据库?

heroku db:pull如果您熟悉的话,我正在尝试使用 Capistrano 任务来执行与其功能类似的操作。

我有一台远程服务器。在那台服务器上,我在文件夹中保存了一堆备份/path/db_backups/。该文件夹中每天都会备份数据库。

我只想

  1. 在客户端计算机上的 /path/to/backups_dir/ 下载最新备份
  2. 在本地解压。
  3. 将其导入到本地 mysql db。

有人知道处理这个问题的好方法吗?有没有我不知道的宝藏?你手边有脚本吗?

答案1

这是一个相当古老的话题,但这里是我使用 Capistrano 3 处理它的方法。

这将使用您的远程 MySQL 二进制文件(例如,来自您的 Web 服务器的二进制文件)。您不需要直接访问 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}

希望这能对其他人有所帮助。

相关内容