niryariv / dbbackup

Simple Ruby script to backup a MySql database to Subversion

This URL has Read+Write access

dbbackup / dbbackup
100755 50 lines (37 sloc) 1.731 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env ruby
 
USAGE = 'dbbackup <environment> [--mysqldump-path=</full/path/to/mysqldump>] [--no-gzip] [--no-svn]'
 
require 'getoptlong'
require 'yaml'
 
begin
  RAILS_ROOT = File.dirname(__FILE__) + '/..'
  RAILS_ENV = ARGV[0]
  no_gzip = false ; no_svn = false ; mysqldump_path = `which mysqldump`.chomp
  
  opts = GetoptLong.new(
            ['--mysqldump-path', GetoptLong::REQUIRED_ARGUMENT],
            ['--no-gzip', GetoptLong::NO_ARGUMENT],
            ['--no-svn', GetoptLong::NO_ARGUMENT]
          ).each do |arg, val|
              mysqldump_path = val.gsub(/^=/,'') if arg == '--mysqldump-path'
              no_gzip = true if arg == '--no-gzip'
              no_svn = true if arg == '--no-svn'
            end
 
  #raise "env: #{RAILS_ENV} mysqldumppath: #{mysqldump_path} no_gzip: #{no_gzip} no_svn: #{no_svn}"
 
  dump_file = "#{RAILS_ROOT}/db/dump_#{RAILS_ENV}.sql"
  settings = YAML::load_file("#{RAILS_ROOT}/config/database.yml")[RAILS_ENV]
 
  raise "environment missing or not found in config/database.yml" if settings.nil?
  raise "Can't find mysqldump. Try running with --mysqldump_path=</full/path/to/mysqldump>" unless File.exists?(mysqldump_path)
 
 
  # Get going
  `#{mysqldump_path} -u #{settings['username']} --password=#{settings['password']} #{settings['database']} > #{dump_file}`
 
  unless no_gzip
    `gzip #{dump_file}`
    dump_file += '.gz'
  end
 
  raise "Failed to write '#{dump_file}'" if File.size?(dump_file).nil? or (File.mtime(dump_file) - Time.now) > 60
 
  unless no_svn
    `svn add #{dump_file}` if `svn st #{dump_file}`[0].chr == '?'
    `svn commit #{dump_file} -m '#{RAILS_ENV} database dump'`
  end
 
rescue Exception=>e
  puts "dbbackup: #{e}"
  puts "USAGE: #{USAGE}"
end