A tool for backing up remote MySQL databases
Muck is a tool which will backup & store MySQL dump files from remote hosts. Through a simple configuration file, you can add hosts & databaes which you wish to be backed up and Muck will connect to those hosts over SSH, grab a dump file using mysqldump
, gzip it and store it away on its own server.
sudo gem install muck
We recommend taht you create a user which will run your Muck services.
sudo useradd -r -m -d /opt/muck muck
You’ll need to make directories for configuration and storage.
sudo -u muck mkdir /opt/muck/config
sudo -u muck mkdir /opt/muck/storage
Finally, you’ll need to generate an SSH key pair which will be used for authenticating your requests to the servers you wish to backup. Password authentication is not supported in Muck.
sudo -u muck ssh-keygen -f /opt/muck/ssh-key
# Follow the instructions to generate a keypair. Do not add a passphrase.
We recommend storing your muck configuration in /opt/muck/config
. You should add a single file for each server you wish to backup. This is a full example file which includes all configuration options which are available. Sensible defaults are set too so most options can be skipped. The values in the example below are the current defaults.
server do
# The hostname of the server you wish to backup. Used to connect with SSH and
# the name of the directory used for storing the backups.
hostname "myserver.example.com"
# How often you wish to take a backup (in minutes)
frequency 60
ssh do
# The user that should connect to the server with SSH
username 'root'
# The SSH port
port 22
# The path to the SSH key that you will authenticate with
key "/opt/muck/ssh-key"
end
storage do
# Specifies the directory that backups will be stored for this server. You
# can use :hostname to insert the name of the hostname automatically and
# :database to insert the database name.
path "/opt/muck/data/:hostname/:database"
# The number of "master" bacups which should be kept before being archived.
keep 50
end
retention do
# How many hourly backups do you wish to keep?
hourly 24
# How many daily backups do you wish to keep?
daily 7
# How many monthly backups do you wish to keep?
monthly 12
# How many yearly backups do you wish to keep
yearly 8
end
database do
# The name of the database
name "example"
# The hostname (as accessed from the server) to connect to
hostname "127.0.0.1"
# The username to authenticate to MySQL with
username "root"
# The password to authenticate to MySQL with
password nil
end
# The database block above can be repeated within the context of the server
# to backup multiple databases from the same server.
end
The muck
command line tool can be used in two ways.
muck start
- this will run constantly (and can be backgrounded to turned into a service as appropriate). It will respect the frequency
option specified for a server and back all servers up whenever they are due for a backup.muck run
- this will take a backup from all servers & database and exit when complete.muck single [server] [database]
- this will run a backup for a given database (name) on a given server (hostname)The data directory will populate itself as follows:
data/master
- this stores each raw backup as it is downloaded (gzipped)data/hourly
- this stores the hourly backupsdata/daily
- this stores the daily backupsdata/monthly
- this stores the monthly backupsdata/yearly
- this stores the yearly backupsdata/manifest.yml
- this stores a list of each master backup with a timestamp and a sizeIf you wish to change the global defaults, you can create a file in your config directory which includes a defaults
block. This is the same as the server
block shown above however the word server
on the first line should be replaced with defaults
. Any values you add to the defaults block will be used instead of the system defaults.