Skip to content

Instantly share code, notes, and snippets.

@willb
Created August 29, 2012 21:00
Show Gist options
  • Save willb/3518892 to your computer and use it in GitHub Desktop.
Save willb/3518892 to your computer and use it in GitHub Desktop.
Backup script for SQLite databases
#!/usr/lib/env ruby
# Acquires a shared lock on a SQLite database file and copies it to a backup
# usage: backup-db.rb DBFILE.db BACKUPFILE.db
# author: William Benton ([email protected])
# Public domain.
require 'sqlite3'
require 'fileutils'
def backup_db(db_file, backup_file)
begin
db = SQLite3::Database.new(db_file)
db.transaction(:immediate) do |ignored|
# starting a transaction with ":immediate" means we get a shared lock
# and thus any db writes (unlikely!) complete before we copy the file
FileUtils.cp(db_file, backup_file, :preserve=>true)
end
ensure
db.close
end
end
backup_db(ARGV[0], ARGV[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment