Есть ли рейк-задача для резервного копирования данных в вашей базе данных?

Есть ли рейк-задача для резервного копирования данных в вашей базе данных?

У меня уже есть резервная копия схемы, но я хочу сделать резервную копию данных. Это небольшая база данных MySQL.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
5
0
1 864
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Приведенный ниже сценарий является упрощенной версией, взятой из eycap, в частности из этот файл.

set :dbuser "user"
set :dbhost "host"
set :database "db"

namespace :db do
  desc "Get the database password from user"
  task :get_password do
    set(:dbpass) do
      Capistrano::CLI.ui.ask "Enter mysql password: "
    end
  end

  task :backup_name, :only => { :primary => true } do
    now = Time.now
    run "mkdir -p #{shared_path}/db_backups"
    backup_time = [now.year,now.month,now.day,now.hour,now.min,now.sec].join('-')
    set :backup_file, "#{shared_path}/db_backups/#{database}-snapshot-#{backup_time}.sql"
  end

  desc "Dump database to backup file"
  task :dump, :roles => :db, :only => {:primary => true} do
    backup_name
    run "mysqldump --add-drop-table -u #{dbuser} -h #{dbhost} -p#{dbpass} #{database} | bzip2 -c > #{backup_file}.bz2"
  end
end

Обновлено: Да, я думаю, я упустил тот момент, что вы искали задачу с граблями, а не задачу capistrano, но у меня нет граблей под рукой, извините.

У меня нет грабли для резервного копирования моей базы данных MySQL, но я написал сценарий на Ruby, чтобы сделать именно это для моей базы данных WordPress:

filename = 'wp-config.php'
def get_db_info(file)
  username = nil
  password = nil
  db_name = nil

  file.each { |line|
    if line =~ /'DB_(USER|PASSWORD|NAME)', '([[:alnum:]]*)'/
      if  == "USER"
        username = 
      elsif  == "PASSWORD"
        password = 
      elsif  == "NAME"
        db_name = 
      end
    end
  }

  if username.nil? || password.nil? || db_name.nil?
    puts "[backup_db][bad] couldn't get all needed info"
    exit
  end

  return username, password, db_name
end

begin
  config_file = open("#{filename}")
rescue Errno::ENOENT
  puts "[backup_db][bad] File '#{filename}' didn't exist"
  exit
else
  puts "[backup_db][good] File '#{filename}' existed"
end

username, password, db_name = get_db_info(config_file)
sql_dump_info = `mysqldump --user=#{username} --password=#{password} #{dbname}`
puts sql_dump_info

Вы должны быть в состоянии принять это и немного подрезать его, чтобы ввести свое имя пользователя / пароль / имя базы данных, чтобы он работал на вас. Я поместил его в свой crontab, чтобы он запускался каждый день, и не должно быть слишком много работы, чтобы преобразовать его для выполнения как rake-задачу, поскольку это уже код Ruby (может быть также хорошим учебным упражнением).

Расскажите, как это происходит!

В Google уже есть аа> несколькорешения. Я собираюсь предположить, что вы используете activerecord в качестве своей организации?

Если вы используете rails, вы можете посмотреть файл Rakefile, который он использует для активной записи, в \ ruby ​​\ lib \ ruby ​​\ gems \ 1.8 \ gems \ rails-2.0.2- \ lib \ tasks \ database.rake. Это дало мне много информации о том, как расширить общий Rakefile.

Вы можете взять задачи capistrano, которые предоставляет thelsdj, и добавить их в свой rake-файл. Затем немного измените его, чтобы он использовал соединение activerecord с базой данных.

Не забудьте добавить параметр «--routines» в mysqldump, если у вас есть какие-либо сохраненные процедуры в вашей базе данных, чтобы он также их резервировал.

Есть плагин под названием «задачи mysql», просто погуглите. Это просто rakefile - я нашел его очень простым в использовании.

На всякий случай, если люди все еще ищут решения, в настоящее время мы используем плагин ar_fixtures для резервного копирования нашей базы данных, в любом случае как части решения.

Он обеспечивает грабли db:fixtures:dump для задач. Это раскрывает все, что есть в YAML, в test / fixtures, поэтому его можно снова загрузить с помощью db:fixtures:load.

Мы используем это для резервного копирования перед каждым запуском функции. Мы также использовали это при переходе с sqlite3 на Postgres - это тонкость, очень полезная, поскольку несовместимость между диалектами SQL по большей части скрыта.

Всего наилучшего, D

Моя задача - создавать резервные копии mysql и циклически чередовать резервные копии.

#encoding: utf-8
#require 'fileutils'

namespace :mls do
  desc 'Create of realty_dev database backup'

  task :backup => :environment do
    backup_max_records = 4
    datestamp = Time.now.strftime("%Y-%m-%d_%H-%M")
    backup_dir = File.join(Rails.root, ENV['DIR'] || 'backups', 'db')
    backup_file_name = "#{datestamp}_#{Rails.env}_dump.sql"
    backup_file_path = File.join(backup_dir, "#{backup_file_name}")
    FileUtils.mkdir_p(backup_dir)

    #database processing
    db_config = ActiveRecord::Base.configurations[Rails.env]
    system "mysqldump -u#{db_config['username']} -p#{db_config['password']} -i -c -q #{db_config['database']} > #{backup_file_path}"
    raise 'Unable to make DB backup!' if ($?.to_i > 0)

    # sql dump file compression
    system "gzip -9 #{backup_file_path}"

    # backup rotation
    dir = Dir.new(backup_dir)
    backup_all_records = dir.entries.sort[2..-1].reverse
    puts "Created backup: #{backup_file_name}.gz"
    #redundant records
    backup_del_records = backup_all_records[backup_max_records..-1] || []

    # backup deleting too old records
    for backup_del_record in backup_del_records
      FileUtils.rm_rf(File.join(backup_dir, backup_del_record))
    end

    puts "Deleted #{backup_del_records.length} old backups, #{backup_all_records.length - backup_del_records.length} backups available"
    puts "Backup passed"
  end
end

=begin
 run by this command: " rake db:backup RAILS_ENV = "development" "
=end

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