backup 3.10.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +10 -226
- data/lib/backup/database/mysql.rb +63 -6
- data/lib/backup/utilities.rb +2 -1
- data/lib/backup/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90a0ce4d50fcbf5dbc1ff35c6ceb182757b5b1ca
|
4
|
+
data.tar.gz: e6cd5b21bed38cd91d97dad2489d38107e33a387
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfec691ea4ad54ed847451247fbc26d8f476360075becea60416249a22805740284c18c5d5e6e16333dfa344402dd607feaf0d9b147b1763ff3ad580051d165c
|
7
|
+
data.tar.gz: d0b6389c651ef00d14833b03830864b90e1c71cdae7dbc17bb6f308d58c4b03c68c716e32c58048a24e442a1ddfcd9087ec801a2b827a9632bdeb18af6965d75
|
data/README.md
CHANGED
@@ -1,235 +1,19 @@
|
|
1
|
-
Backup
|
2
|
-
|
1
|
+
Backup v3.x
|
2
|
+
===========
|
3
3
|
|
4
4
|
Backup is a system utility for Linux and Mac OS X, distributed as a RubyGem, that allows you to easily perform backup
|
5
5
|
operations. It provides an elegant DSL in Ruby for _modeling_ your backups. Backup has built-in support for various
|
6
6
|
databases, storage protocols/services, syncers, compressors, encryptors and notifiers which you can mix and match. It
|
7
7
|
was built with modularity, extensibility and simplicity in mind.
|
8
8
|
|
9
|
-
|
9
|
+
[Installation][] · [Release Notes][] · [Documentation][]
|
10
10
|
|
11
|
-
**_Do not add `gem backup` to an application's `Gemfile`_**
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
$ [sudo] gem install backup
|
16
|
-
|
17
|
-
See [Installation](https://github.com/meskyanichi/backup/wiki/Installation) for more information about installing and
|
18
|
-
updating your installation of Backup.
|
19
|
-
|
20
|
-
See [Release Notes](https://github.com/meskyanichi/backup/wiki/Release-Notes) for changes in the latest version.
|
21
|
-
|
22
|
-
Backup supports Ruby versions 1.8.7, 1.9.2, 1.9.3 and 2.0.0.
|
23
|
-
|
24
|
-
## Overview
|
25
|
-
|
26
|
-
Backup allows you to _model_ your backup jobs using a Ruby DSL:
|
27
|
-
|
28
|
-
```rb
|
29
|
-
Backup::Model.new(:my_backup, 'Description for my_backup') do
|
30
|
-
# ... components here ...
|
31
|
-
end
|
32
|
-
```
|
33
|
-
|
34
|
-
The `:my_backup` symbol is the model's `trigger` and used to perform the job:
|
35
|
-
|
36
|
-
$ backup perform --trigger my_backup
|
37
|
-
|
38
|
-
Backup's _components_ are added to the backup _model_ to define the actions to be performed.
|
39
|
-
All of Backup's components are fully documented in the [Backup Wiki](https://github.com/meskyanichi/backup/wiki).
|
40
|
-
The following is brief overview of the components Backup provides:
|
41
|
-
|
42
|
-
### Archives and Databases
|
43
|
-
|
44
|
-
[Archives](https://github.com/meskyanichi/backup/wiki/Archives) create basic `tar` archives. Both **GNU** and **BSD**
|
45
|
-
`tar` are supported.
|
46
|
-
[Databases](https://github.com/meskyanichi/backup/wiki/Databases) create backups of one of the following supported databases:
|
47
|
-
|
48
|
-
- MySQL
|
49
|
-
- PostgreSQL
|
50
|
-
- MongoDB
|
51
|
-
- Redis
|
52
|
-
- Riak
|
53
|
-
|
54
|
-
Any number of Archives and Databases may be defined within a backup _model_.
|
55
|
-
|
56
|
-
### Compressors and Encryptors
|
57
|
-
|
58
|
-
Adding a [Compressor](https://github.com/meskyanichi/backup/wiki/Compressors) to your backup will compress all the
|
59
|
-
Archives and Database backups within your final archive package.
|
60
|
-
`Gzip`, `Bzip2` and other similar compressors are supported.
|
61
|
-
|
62
|
-
Adding a [Encryptor](https://github.com/meskyanichi/backup/wiki/Encryptors) allows you to encrypt your final backup package.
|
63
|
-
Both `OpenSSL` and `GPG` are supported.
|
64
|
-
|
65
|
-
Your final backup _package_ might look something like this:
|
66
|
-
|
67
|
-
```text
|
68
|
-
$ gpg --decrypt my_backup.tar.gpg --outfile my_backup.tar
|
69
|
-
$ tar -tvf my_backup.tar
|
70
|
-
my_backup/
|
71
|
-
my_backup/archives/
|
72
|
-
my_backup/archives/user_avatars.tar.gz
|
73
|
-
my_backup/archives/log_files.tar.gz
|
74
|
-
my_backup/databases/
|
75
|
-
my_backup/databases/PostgreSQL.sql.gz
|
76
|
-
my_backup/databases/Redis.rdb.gz
|
77
|
-
```
|
78
|
-
|
79
|
-
### Storages
|
80
|
-
|
81
|
-
Once your final backup package is ready, you can use any number of the following
|
82
|
-
[Storages](https://github.com/meskyanichi/backup/wiki/Storages) to store it:
|
83
|
-
|
84
|
-
- Amazon Simple Storage Service (S3)
|
85
|
-
- Rackspace Cloud Files (Mosso)
|
86
|
-
- Ninefold Cloud Storage
|
87
|
-
- Dropbox Web Service
|
88
|
-
- Remote Servers _(Available Protocols: FTP, SFTP, SCP and RSync)_
|
89
|
-
- Local Storage _(including network mounted locations)_
|
90
|
-
|
91
|
-
All of the above Storages _(except RSync)_ support:
|
92
|
-
|
93
|
-
- [Cycling](https://github.com/meskyanichi/backup/wiki/Cycling) to keep and rotate multiple copies
|
94
|
-
of your stored backups.
|
95
|
-
|
96
|
-
- [Splitter](https://github.com/meskyanichi/backup/wiki/Splitter) to break up a large
|
97
|
-
backup package into smaller files.
|
98
|
-
|
99
|
-
When using the RSync Storage, once a full backup has been stored, subsequent backups only need to
|
100
|
-
transmit the changed portions of the final archive to bring the remote copy up-to-date.
|
101
|
-
|
102
|
-
### Syncers
|
103
|
-
|
104
|
-
[Syncers](https://github.com/meskyanichi/backup/wiki/Syncers) are processed after your final backup archive has been
|
105
|
-
stored and allow you to perform file synchronization.
|
106
|
-
|
107
|
-
Backup includes two types of Syncers:
|
108
|
-
|
109
|
-
- `RSync`: Used to sync files locally, local-to-remote (`Push`), or remote-to-local (`Pull`).
|
110
|
-
- `Cloud`: Used to sync files to remote storage services like Amazon S3 and Rackspace.
|
111
|
-
|
112
|
-
A backup _model_ may contain _only_ Syncers as well.
|
113
|
-
|
114
|
-
### Notifiers
|
115
|
-
|
116
|
-
[Notifiers](https://github.com/meskyanichi/backup/wiki/Notifiers) are used to send notifications upon successful and/or
|
117
|
-
failed completion of your backup _model_.
|
118
|
-
|
119
|
-
Supported notification services include:
|
120
|
-
|
121
|
-
- Email _(SMTP, Sendmail, Exim and File delivery)_
|
122
|
-
- Twitter
|
123
|
-
- Campfire
|
124
|
-
- Presently
|
125
|
-
- Prowl
|
126
|
-
- Hipchat
|
127
|
-
- Pushover
|
128
|
-
- POST Request
|
129
|
-
- Nagios
|
130
|
-
|
131
|
-
|
132
|
-
## Generators
|
133
|
-
|
134
|
-
Backup makes it easy to setup new backup _model_ files with it's [Generator](https://github.com/meskyanichi/backup/wiki/Generator) command.
|
135
|
-
|
136
|
-
```
|
137
|
-
$ backup generate:model -t my_backup --archives --databases=postgresql,redis --compressors=gzip \
|
138
|
-
--encryptors=gpg --storages=sftp,s3 --notifiers=mail,twitter
|
139
|
-
```
|
140
|
-
|
141
|
-
Simply generate a new _model_ using the options you need, then update the configuration for each component using the
|
142
|
-
[Wiki](https://github.com/meskyanichi/backup/wiki) documentation.
|
143
|
-
|
144
|
-
The following is an example of a what this Backup _model_ might look like:
|
145
|
-
|
146
|
-
```rb
|
147
|
-
Backup::Model.new(:my_backup, 'Description for my_backup') do
|
148
|
-
split_into_chunks_of 250
|
149
|
-
|
150
|
-
archive :user_avatars do |archive|
|
151
|
-
archive.add '/var/apps/my_sample_app/public/avatars'
|
152
|
-
end
|
153
|
-
|
154
|
-
archive :log_files do |archive|
|
155
|
-
archive.add '/var/apps/my_sample_app/logs'
|
156
|
-
archive.exclude '/var/apps/my_sample_app/logs/exclude-this.log'
|
157
|
-
end
|
158
|
-
|
159
|
-
database PostgreSQL do |db|
|
160
|
-
db.name = "pg_db_name"
|
161
|
-
db.username = "username"
|
162
|
-
db.password = "password"
|
163
|
-
end
|
164
|
-
|
165
|
-
database Redis do |db|
|
166
|
-
db.name = "redis_db_name"
|
167
|
-
db.path = "/usr/local/var/db/redis"
|
168
|
-
db.password = "password"
|
169
|
-
db.invoke_save = true
|
170
|
-
end
|
171
|
-
|
172
|
-
compress_with Gzip
|
173
|
-
|
174
|
-
encrypt_with GPG do |encryption|
|
175
|
-
encryption.mode = :symmetric
|
176
|
-
encryption.passphrase = 'my_password'
|
177
|
-
end
|
178
|
-
|
179
|
-
store_with SFTP do |server|
|
180
|
-
server.username = "my_username"
|
181
|
-
server.password = "my_password"
|
182
|
-
server.ip = "123.45.678.90"
|
183
|
-
server.port = 22
|
184
|
-
server.path = "~/backups/"
|
185
|
-
server.keep = 5
|
186
|
-
end
|
187
|
-
|
188
|
-
store_with S3 do |s3|
|
189
|
-
s3.access_key_id = "my_access_key_id"
|
190
|
-
s3.secret_access_key = "my_secret_access_key"
|
191
|
-
s3.region = "us-east-1"
|
192
|
-
s3.bucket = "bucket-name"
|
193
|
-
s3.path = "/path/to/my/backups"
|
194
|
-
s3.keep = 10
|
195
|
-
end
|
196
|
-
|
197
|
-
notify_by Mail do |mail|
|
198
|
-
mail.on_success = false
|
199
|
-
|
200
|
-
mail.from = "sender@email.com"
|
201
|
-
mail.to = "receiver@email.com"
|
202
|
-
mail.address = "smtp.gmail.com"
|
203
|
-
mail.port = 587
|
204
|
-
mail.user_name = "sender@email.com"
|
205
|
-
mail.password = "my_password"
|
206
|
-
mail.authentication = "plain"
|
207
|
-
mail.encryption = :starttls
|
208
|
-
end
|
209
|
-
|
210
|
-
notify_by Twitter do |tweet|
|
211
|
-
tweet.consumer_key = "my_consumer_key"
|
212
|
-
tweet.consumer_secret = "my_consumer_secret"
|
213
|
-
tweet.oauth_token = "my_oauth_token"
|
214
|
-
tweet.oauth_token_secret = "my_oauth_token_secret"
|
215
|
-
end
|
216
|
-
end
|
217
|
-
```
|
218
|
-
|
219
|
-
The [Getting Started](https://github.com/meskyanichi/backup/wiki/Getting-Started) page provides a simple
|
220
|
-
walk-through to familiarize you with setting up, configuring and running a backup job.
|
221
|
-
|
222
|
-
## Suggestions, Issues, etc...
|
223
|
-
|
224
|
-
If you have any suggestions or problems, please submit an Issue or Pull Request using Backup's
|
225
|
-
[Issue Log](https://github.com/meskyanichi/backup/issues).
|
226
|
-
|
227
|
-
If you find any errors or omissions in Backup's documentation [Wiki](https://github.com/meskyanichi/backup/wiki),
|
228
|
-
please feel free to edit it!
|
229
|
-
|
230
|
-
Backup has seen many improvements over the years thanks to it's
|
231
|
-
[Contributors](https://github.com/meskyanichi/backup/contributors), as well as those who have help discuss issues and
|
232
|
-
improve the documentation, and looks forward to continuing to provide users with a reliable backup solution.
|
233
|
-
|
234
|
-
**Copyright (c) 2009-2013 [Michael van Rooijen](http://michaelvanrooijen.com/) ( [@meskyanichi](http://twitter.com/#!/meskyanichi) )**
|
12
|
+
**Copyright (c) 2009-2014 [Michael van Rooijen][] ( [@meskyanichi][] )**
|
235
13
|
Released under the **MIT** [License](LICENSE.md).
|
14
|
+
|
15
|
+
[Installation]: http://meskyanichi.github.io/backup/v3/installation
|
16
|
+
[Release Notes]: http://meskyanichi.github.io/backup/v3/release-notes
|
17
|
+
[Documentation]: http://meskyanichi.github.io/backup/v3
|
18
|
+
[Michael van Rooijen]: http://michaelvanrooijen.com
|
19
|
+
[@meskyanichi]: http://twitter.com/#!/meskyanichi
|
@@ -32,28 +32,48 @@ module Backup
|
|
32
32
|
attr_accessor :only_tables
|
33
33
|
|
34
34
|
##
|
35
|
-
# Additional "mysqldump" options
|
35
|
+
# Additional "mysqldump" or "innobackupex (backup creation)" options
|
36
36
|
attr_accessor :additional_options
|
37
37
|
|
38
|
+
##
|
39
|
+
# Additional innobackupex log preparation phase ("apply-logs") options
|
40
|
+
attr_accessor :prepare_options
|
41
|
+
|
42
|
+
##
|
43
|
+
# Default is :mysqldump (which is built in MySQL and generates
|
44
|
+
# a textual SQL file), but can be changed to :innobackupex, which
|
45
|
+
# has more feasible restore times for large databases.
|
46
|
+
# See: http://www.percona.com/doc/percona-xtrabackup/
|
47
|
+
attr_accessor :backup_engine
|
48
|
+
|
49
|
+
##
|
50
|
+
# If set the backup engine command block is executed as the given user
|
51
|
+
attr_accessor :sudo_user
|
52
|
+
|
53
|
+
##
|
54
|
+
# If set, do not suppress innobackupdb output (useful for debugging)
|
55
|
+
attr_accessor :verbose
|
56
|
+
|
38
57
|
def initialize(model, database_id = nil, &block)
|
39
58
|
super
|
40
59
|
instance_eval(&block) if block_given?
|
41
60
|
|
42
61
|
@name ||= :all
|
62
|
+
@backup_engine ||= :mysqldump
|
43
63
|
end
|
44
64
|
|
45
65
|
##
|
46
|
-
# Performs the mysqldump command and outputs
|
47
|
-
# in the +dump_path+ using +dump_filename+.
|
66
|
+
# Performs the mysqldump or innobackupex command and outputs
|
67
|
+
# the dump file in the +dump_path+ using +dump_filename+.
|
48
68
|
#
|
49
|
-
# <trigger>/databases/MySQL[-<database_id>].sql[.gz]
|
69
|
+
# <trigger>/databases/MySQL[-<database_id>].[sql|tar][.gz]
|
50
70
|
def perform!
|
51
71
|
super
|
52
72
|
|
53
73
|
pipeline = Pipeline.new
|
54
|
-
dump_ext = 'sql'
|
74
|
+
dump_ext = sql_backup? ? 'sql' : 'tar'
|
55
75
|
|
56
|
-
pipeline << mysqldump
|
76
|
+
pipeline << sudo_option(sql_backup? ? mysqldump : innobackupex)
|
57
77
|
|
58
78
|
model.compressor.compress_with do |command, ext|
|
59
79
|
pipeline << command
|
@@ -99,6 +119,10 @@ module Backup
|
|
99
119
|
Array(additional_options).join(' ')
|
100
120
|
end
|
101
121
|
|
122
|
+
def user_prepare_options
|
123
|
+
Array(prepare_options).join(' ')
|
124
|
+
end
|
125
|
+
|
102
126
|
def name_option
|
103
127
|
dump_all? ? '--all-databases' : name
|
104
128
|
end
|
@@ -130,6 +154,39 @@ module Backup
|
|
130
154
|
Utilities.configure { mysqldump val }
|
131
155
|
}
|
132
156
|
|
157
|
+
def sql_backup?
|
158
|
+
backup_engine.to_sym == :mysqldump
|
159
|
+
end
|
160
|
+
|
161
|
+
def innobackupex
|
162
|
+
# Creation phase
|
163
|
+
"#{ utility(:innobackupex) } #{ credential_options } " +
|
164
|
+
"#{ connectivity_options } #{ user_options } " +
|
165
|
+
"--no-timestamp #{ temp_dir } #{ quiet_option } && " +
|
166
|
+
# Log applying phase (prepare for restore)
|
167
|
+
"#{ utility(:innobackupex) } --apply-log #{ temp_dir } " +
|
168
|
+
"#{ user_prepare_options } #{ quiet_option } && " +
|
169
|
+
# Move files to tar-ed stream on stdout
|
170
|
+
"#{ utility(:tar) } --remove-files -cf - " +
|
171
|
+
"-C #{ File.dirname(temp_dir) } #{ File.basename(temp_dir) }"
|
172
|
+
end
|
173
|
+
|
174
|
+
def sudo_option(command_block)
|
175
|
+
return command_block unless sudo_user
|
176
|
+
|
177
|
+
"sudo -s -u #{ sudo_user } -- <<END_OF_SUDO\n" +
|
178
|
+
"#{command_block}\n" +
|
179
|
+
"END_OF_SUDO\n"
|
180
|
+
end
|
181
|
+
|
182
|
+
def quiet_option
|
183
|
+
verbose ? "" : " 2> /dev/null "
|
184
|
+
end
|
185
|
+
|
186
|
+
def temp_dir
|
187
|
+
File.join(dump_path, dump_filename + ".bkpdir")
|
188
|
+
end
|
189
|
+
|
133
190
|
end
|
134
191
|
end
|
135
192
|
end
|
data/lib/backup/utilities.rb
CHANGED
@@ -8,7 +8,8 @@ module Backup
|
|
8
8
|
NAMES = %w{
|
9
9
|
tar cat split sudo chown hostname
|
10
10
|
gzip bzip2 lzma pbzip2
|
11
|
-
mongo mongodump mysqldump
|
11
|
+
mongo mongodump mysqldump innobackupex
|
12
|
+
pg_dump pg_dumpall redis-cli riak-admin
|
12
13
|
gpg openssl
|
13
14
|
rsync ssh
|
14
15
|
sendmail exim
|
data/lib/backup/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael van Rooijen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|
@@ -501,17 +501,17 @@ require_paths:
|
|
501
501
|
- lib
|
502
502
|
required_ruby_version: !ruby/object:Gem::Requirement
|
503
503
|
requirements:
|
504
|
-
- -
|
504
|
+
- - ">="
|
505
505
|
- !ruby/object:Gem::Version
|
506
506
|
version: '0'
|
507
507
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
508
508
|
requirements:
|
509
|
-
- -
|
509
|
+
- - ">="
|
510
510
|
- !ruby/object:Gem::Version
|
511
511
|
version: '0'
|
512
512
|
requirements: []
|
513
513
|
rubyforge_project:
|
514
|
-
rubygems_version: 2.
|
514
|
+
rubygems_version: 2.2.2
|
515
515
|
signing_key:
|
516
516
|
specification_version: 4
|
517
517
|
summary: Provides an elegant DSL in Ruby for performing backups on UNIX-like systems.
|