rtbackup 0.1.21 → 0.1.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +66 -45
- data/advanced-configuration.md +11 -0
- data/backup_conf.sample.yml +44 -45
- data/bin/rtbackup +48 -2
- data/lib/server_backups/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9975ae069942cae2beab8186b5b78a22f23a1b70
|
4
|
+
data.tar.gz: 6556a498a682cdf0da406fe991fd689d76f68c2d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12e3b1c4abbfcec96872e6eed291396f629687ba4321887e4cfd9276dcb04b1ecd92acc0ceeb8519a2474502aa4fee04608f901019dd47fb3bb9ca503fcd7140
|
7
|
+
data.tar.gz: b67153abaa09eaaa1d46d23cb602e313471ceecdd9c70b76fa116833df24785637a3ab65b59c01cf1e4f259409fbf5e48af4c093368a953630cc7d9a921e4c12
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
|
4
|
+
rtbackup (0.1.21)
|
5
5
|
activesupport (~> 5.1)
|
6
6
|
aws-sdk-s3 (~> 1.8)
|
7
7
|
main (~> 6.2)
|
@@ -81,7 +81,7 @@ DEPENDENCIES
|
|
81
81
|
bundler (~> 1.16)
|
82
82
|
rake (~> 10.5)
|
83
83
|
rspec (~> 3.0)
|
84
|
-
|
84
|
+
rtbackup!
|
85
85
|
vcr (~> 4.0)
|
86
86
|
webmock (~> 3.3)
|
87
87
|
|
data/README.md
CHANGED
@@ -17,28 +17,46 @@ to a given point in time.
|
|
17
17
|
|
18
18
|
## Installation
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
### Alpine Linux
|
21
|
+
|
22
|
+
The following instructions work for Alpine Linux
|
23
|
+
|
24
|
+
```bash
|
25
|
+
apk add --no-cache ruby ruby-rake ruby-io-console ruby-bigdecimal ruby-json ruby-bundler \
|
26
|
+
tar gzip zlib zlib-dev dcron tzdata
|
27
|
+
|
28
|
+
cat > ~/.gemrc <<EOF
|
29
|
+
---
|
30
|
+
gem: --no-ri --no-rdoc
|
31
|
+
EOF
|
32
|
+
|
33
|
+
gem install rtbackup
|
34
|
+
|
35
|
+
```
|
23
36
|
|
24
37
|
### Ubuntu
|
25
38
|
|
26
39
|
```bash
|
27
40
|
|
28
|
-
sudo apt install ruby ruby-dev zlib1g-dev
|
29
|
-
sudo gem install
|
41
|
+
sudo apt-get install -y ruby ruby-dev zlib1g-dev
|
42
|
+
sudo gem install rtbackup
|
30
43
|
|
31
44
|
```
|
32
45
|
|
33
|
-
### Configure Mysql
|
46
|
+
### Configure Mysql Binary Logging
|
47
|
+
|
48
|
+
Make sure that binary logging is enabled on your mysql server. The following settings
|
49
|
+
need to be enabled in mysql configuration files. On Debian-based Linux distros this
|
50
|
+
means editing `/etc/mysql/mysql.conf.d/mysqld.cnf`, though Alpine Linux and others will
|
51
|
+
involve editing `/etc/mysql/my.cnf`.
|
34
52
|
|
35
|
-
Add the following to your `my.cnf`, or on Ubuntu you might want to add it to `/etc/mysql/mysql.conf.d/mysqld.conf`
|
36
53
|
```
|
37
54
|
[mysqld]
|
38
|
-
...
|
39
|
-
|
40
|
-
|
41
|
-
|
55
|
+
# ...
|
56
|
+
# Make sure that you know how to use this setting properly if you're using replication.
|
57
|
+
server-id = 1
|
58
|
+
log_bin = /var/log/mysql/mysql-bin # Make sure this matches the
|
59
|
+
# bin_log setting in your backup_conf.yml file.
|
42
60
|
```
|
43
61
|
|
44
62
|
Then restart mysql:
|
@@ -55,43 +73,46 @@ sudo usermod -a -G www-data ubuntu
|
|
55
73
|
sudo usermod -a -G mysql ubuntu
|
56
74
|
```
|
57
75
|
|
58
|
-
|
76
|
+
## Set up backup_conf.yml
|
77
|
+
|
78
|
+
Set up a configuration file with the following command:
|
59
79
|
|
60
|
-
|
80
|
+
```bash
|
81
|
+
rtbackup create_config
|
82
|
+
```
|
61
83
|
|
62
|
-
|
84
|
+
Now edit `~/.backup_conf.yml` and adjust it to fit your app's needs.
|
63
85
|
|
64
|
-
|
65
|
-
Alternatively you can put the file anywhere, and then specify the path to the file
|
66
|
-
using the `-c` parameter, or even pipe a config file in through stdin.
|
86
|
+
## Schedule backups to run.
|
67
87
|
|
68
|
-
|
69
|
-
rather than saving them to the filesystem.
|
88
|
+
Schedule your backups by running
|
70
89
|
|
71
90
|
```bash
|
72
|
-
|
91
|
+
rtbackup crontab
|
73
92
|
```
|
74
93
|
|
75
|
-
|
94
|
+
This will enable the recommended backup schedule:
|
76
95
|
|
77
|
-
*
|
96
|
+
* Hourly incremental backups from 1am to 11pm
|
97
|
+
* Daily full backups at midnight
|
98
|
+
* Weekly full backups on Sunday
|
99
|
+
* Monthly full backups on the first of the month
|
78
100
|
|
79
|
-
|
101
|
+
Full backups are all the same, but their retention periods differ.
|
80
102
|
|
103
|
+
Change the schedule by running the command:
|
104
|
+
|
105
|
+
```bash
|
106
|
+
crontab -e
|
81
107
|
```
|
82
108
|
|
83
|
-
|
84
|
-
|
85
|
-
# Once per week:
|
86
|
-
5 0 * * 0 /usr/local/bin/server_backup weekly
|
87
|
-
# Once per day:
|
88
|
-
5 0 * * 1-6 /usr/local/bin/server_backup daily
|
89
|
-
# And incremental backups once per hour
|
90
|
-
5 1-23 * * * /usr/local/bin/server_backup incremental
|
109
|
+
See the [crontab manual pages](https://linux.die.net/man/5/crontab) or look online for tutorials
|
110
|
+
on how to edit cron schedules.
|
91
111
|
|
92
|
-
|
112
|
+
That's all! Your backups are now scheduled. You may run `rtbackup daily` in order to get your first
|
113
|
+
full backup.
|
93
114
|
|
94
|
-
|
115
|
+
# Command line parameters
|
95
116
|
|
96
117
|
#### 1) For taking backups:
|
97
118
|
|
@@ -99,36 +120,36 @@ some examples
|
|
99
120
|
|
100
121
|
```bash
|
101
122
|
# Take a full backup and store it in the monthly backups location.
|
102
|
-
|
123
|
+
rtbackup monthly
|
103
124
|
|
104
125
|
# Take a full backup as normal, but instead of backing up all databases,
|
105
126
|
# only back up `mydatabase`.
|
106
|
-
|
127
|
+
rtbackup daily -d mydatabase
|
107
128
|
|
108
|
-
|
109
|
-
|
129
|
+
rtbackup daily -f # only back up the files, not the database(s)
|
130
|
+
rtbackup daily -b # only back up the database(s), not the files
|
110
131
|
|
111
132
|
# Take an incremental backup, but load the given configuration file.
|
112
|
-
|
133
|
+
rtbackup incremental -c /etc/my_backup_configuration.cnf
|
113
134
|
|
114
135
|
```
|
115
136
|
|
116
137
|
#### 2) List (or search) time zones for help with configuration
|
117
138
|
|
118
139
|
```bash
|
119
|
-
|
120
|
-
|
140
|
+
rtbackup zones # list all
|
141
|
+
rtbackup zones america # case insensitive search for zones containing a string
|
121
142
|
```
|
122
143
|
|
123
144
|
#### 3) Restore backups
|
124
145
|
|
125
146
|
```bash
|
126
147
|
# Restore up to the latest backup data available on s3
|
127
|
-
|
148
|
+
rtbackup restore
|
128
149
|
|
129
150
|
# Restore up to two days ago at 3pm in the configured
|
130
151
|
# time zone (see config file).
|
131
|
-
|
152
|
+
rtbackup restore --up_to='two days ago at 3:00 PM'
|
132
153
|
|
133
154
|
# To make it easier to decide what time your restore point
|
134
155
|
# should be, you can write the restore point time in any time
|
@@ -138,16 +159,16 @@ server_backup restore --up_to='two days ago at 3:00 PM'
|
|
138
159
|
# don't necessarily have to do any confusing time maths in order
|
139
160
|
# to restore back to what time it was before you made a mistake
|
140
161
|
# and updated a wordpress plugin. ;)
|
141
|
-
|
162
|
+
rtbackup restore --up_to='March 28 12:00 PM' --time_zone='Singapore'
|
142
163
|
|
143
164
|
```
|
144
165
|
|
145
166
|
```
|
146
167
|
NAME
|
147
|
-
|
168
|
+
rtbackup
|
148
169
|
|
149
170
|
SYNOPSIS
|
150
|
-
|
171
|
+
rtbackup (restore|zones) backup_type [options]+
|
151
172
|
|
152
173
|
PARAMETERS
|
153
174
|
backup_type (1 -> symbol(backup_type))
|
@@ -0,0 +1,11 @@
|
|
1
|
+
## Alternate configuration options
|
2
|
+
|
3
|
+
Alternatively you can put the file anywhere, and then specify the path to the file
|
4
|
+
using the `-c` parameter, or even pipe a config file in through stdin.
|
5
|
+
|
6
|
+
The latter option is useful if you'd like to keep passwords and keys in variables,
|
7
|
+
rather than saving them to the filesystem.
|
8
|
+
|
9
|
+
```bash
|
10
|
+
envsubst < back_conf.yml.tmpl | rtbackup daily -c -
|
11
|
+
```
|
data/backup_conf.sample.yml
CHANGED
@@ -1,31 +1,59 @@
|
|
1
1
|
###############################################################################
|
2
2
|
#
|
3
|
-
# Sample Backup
|
4
|
-
#
|
5
|
-
#
|
3
|
+
# Sample RT Backup Config File
|
6
4
|
#
|
7
5
|
###############################################################################
|
8
6
|
|
7
|
+
mysql:
|
8
|
+
host: 127.0.0.1
|
9
|
+
# Database to back up
|
10
|
+
database:
|
11
|
+
# MySql credentials
|
12
|
+
user: root
|
13
|
+
password:
|
14
|
+
# Path (with trailing slash) to mysql commands e.g. mysqldump
|
15
|
+
bin_path: /usr/bin/
|
16
|
+
# If you are using MySql binary logging:
|
17
|
+
# Path to the binary logs, should match the log_bin option in your my.cnf.
|
18
|
+
# Comment out if you are not using mysql binary logging
|
19
|
+
bin_log: /var/lib/mysql/mysql-bin
|
20
|
+
|
21
|
+
s3:
|
22
|
+
# S3 credentials
|
23
|
+
access_key_id: ASDFASDFASDFASDFASDF
|
24
|
+
secret_access_key: asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf
|
25
|
+
# Bucket in which to store your backups
|
26
|
+
# # Bucket in which to store your backups
|
27
|
+
bucket: mycompany-wpbackups
|
28
|
+
|
29
|
+
# The prefix under which to store and retrieve backups for this server
|
30
|
+
# e.g. my_app_name
|
31
|
+
prefix: myapp
|
32
|
+
|
33
|
+
# AWS region your bucket lives in.
|
34
|
+
# (I suspect you only need to specify this when your 'location' is in a different region.)
|
35
|
+
region: ap-southeast-2
|
36
|
+
|
37
|
+
# Optional. Defaults to /var/www
|
38
|
+
file_location: '/var/www/html'
|
39
|
+
# The time zone that you'd like backups to be kept in.
|
40
|
+
# Backup files will be named with a timestamp located in the given timezone.
|
41
|
+
time_zone: 'Sydney'
|
42
|
+
# Optional. Will attempt to determine from operating system
|
43
|
+
# defaults to the value of the `time_zone` property above.
|
44
|
+
system_time_zone: 'UTC'
|
45
|
+
|
9
46
|
logging:
|
10
47
|
# DEBUG, INFO, WARN, ERROR, FATAL
|
11
|
-
log_threshold: '
|
48
|
+
log_threshold: 'WARN'
|
12
49
|
# If set to true, logs to STDOUT and all the subsequent settings in this
|
13
50
|
# section will be ignored.
|
14
|
-
use_stdout:
|
51
|
+
use_stdout: ffalse
|
15
52
|
logfile_path: '/tmp/server_backup.log'
|
16
53
|
keep_files: 1
|
17
54
|
file_size:
|
18
55
|
kilobytes: 100
|
19
56
|
|
20
|
-
# Optional. Defaults to /var/www
|
21
|
-
file_location: 'spec/fixtures/www'
|
22
|
-
# The time zone that you'd like backups to be kept in.
|
23
|
-
# Backup files will be named with a timestamp located in the given timezone.
|
24
|
-
time_zone: 'Singapore'
|
25
|
-
# Optional. Will attempt to determine from operating system
|
26
|
-
# defaults to the value of the `time_zone` property above.
|
27
|
-
system_time_zone: 'Asia/Ho_Chi_Minh'
|
28
|
-
|
29
57
|
slack:
|
30
58
|
# Set up a new webhook at https://slack.com/apps/A0F7XDUAZ-incoming-webhooks
|
31
59
|
# Once configured, put the address here.
|
@@ -43,41 +71,12 @@ slack:
|
|
43
71
|
- U9ASDFASD
|
44
72
|
|
45
73
|
retention:
|
74
|
+
# How many hourly incremental backups to keep
|
46
75
|
incremental:
|
47
|
-
hours:
|
76
|
+
hours: 48
|
48
77
|
daily:
|
49
78
|
days: 6
|
50
79
|
weekly:
|
51
80
|
weeks: 3
|
52
81
|
monthly:
|
53
82
|
months: 11
|
54
|
-
|
55
|
-
mysql:
|
56
|
-
host: 127.0.0.1
|
57
|
-
# Database to back up
|
58
|
-
database:
|
59
|
-
# MySql credentials
|
60
|
-
user: root
|
61
|
-
password:
|
62
|
-
# Path (with trailing slash) to mysql commands e.g. mysqldump
|
63
|
-
bin_path: /usr/local/bin/
|
64
|
-
# If you are using MySql binary logging:
|
65
|
-
# Path to the binary logs, should match the log_bin option in your my.cnf.
|
66
|
-
# Comment out if you are not using mysql binary logging
|
67
|
-
bin_log: /var/tmp/mysql-bin
|
68
|
-
|
69
|
-
s3:
|
70
|
-
# S3 credentials
|
71
|
-
access_key_id: ASDFASDFASDFASDFASDF
|
72
|
-
secret_access_key: asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf
|
73
|
-
# Bucket in which to store your backups
|
74
|
-
# # Bucket in which to store your backups
|
75
|
-
bucket: myapp-backup-test
|
76
|
-
|
77
|
-
# The prefix under which to store and retrieve backups for this server
|
78
|
-
# e.g. my_app_name
|
79
|
-
prefix: my_test_app
|
80
|
-
|
81
|
-
# AWS region your bucket lives in.
|
82
|
-
# (I suspect you only need to specify this when your 'location' is in a different region.)
|
83
|
-
region: ap-southeast-1
|
data/bin/rtbackup
CHANGED
@@ -2,10 +2,23 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require 'fileutils'
|
5
|
-
|
6
|
-
|
5
|
+
require 'open3'
|
6
|
+
this_executable = File.expand_path(__FILE__)
|
7
|
+
this_dir = File.expand_path('..', File.dirname(__FILE__))
|
8
|
+
lib_dir = File.join(this_dir, 'lib')
|
7
9
|
$LOAD_PATH.unshift lib_dir if File.directory?(lib_dir)
|
8
10
|
|
11
|
+
CRONTAB = <<-EOF
|
12
|
+
# Once per month:
|
13
|
+
3 0 1 * * #{this_executable} monthly
|
14
|
+
# Once per week:
|
15
|
+
5 0 * * 0 #{this_executable} weekly
|
16
|
+
# Once per day:
|
17
|
+
5 0 * * 1-6 #{this_executable} daily
|
18
|
+
# And incremental backups once per hour
|
19
|
+
5 1-23 * * * #{this_executable} incremental
|
20
|
+
EOF
|
21
|
+
|
9
22
|
require 'server_backups'
|
10
23
|
require 'main'
|
11
24
|
require 'tmpdir'
|
@@ -133,6 +146,39 @@ Main do
|
|
133
146
|
'files_only').values)
|
134
147
|
end
|
135
148
|
end
|
149
|
+
mode 'crontab' do
|
150
|
+
params[:backup_type].ignore!
|
151
|
+
def run
|
152
|
+
this_executable = File.expand_path(__FILE__)
|
153
|
+
current_crontab, stderr, status = Open3.capture3('crontab -l')
|
154
|
+
if current_crontab =~ Regexp.new(this_executable)
|
155
|
+
puts "Backups appear to be scheduled already."
|
156
|
+
puts "Run crontab -e to modify the schedule, or crontab -l to show it or crontab -r to delete it."
|
157
|
+
else
|
158
|
+
CRONTAB.split("\n").each do |line|
|
159
|
+
`(crontab -l 2>/dev/null; echo "#{line}") | crontab -`
|
160
|
+
end
|
161
|
+
puts "Backups are scheduled."
|
162
|
+
puts "Run crontab -e to modify the schedule, or crontab -l to show it or crontab -r to delete it."
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
mode 'create_config' do
|
168
|
+
params[:backup_type].ignore!
|
169
|
+
def run
|
170
|
+
this_dir = File.expand_path('..', File.dirname(__FILE__))
|
171
|
+
conf_file = File.join(this_dir, 'backup_conf.sample.yml')
|
172
|
+
new_file = File.expand_path("~/.backup_conf.yml")
|
173
|
+
if File.exists?(new_file)
|
174
|
+
puts "#{new_file} already exists. Please remove it before creating a new one."
|
175
|
+
else
|
176
|
+
FileUtils.copy(conf_file, new_file)
|
177
|
+
puts "I've added a backup configuration file at #{new_file}."
|
178
|
+
puts "Please edit it and make sure that your settings are correct."
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
136
182
|
|
137
183
|
mode 'zones' do
|
138
184
|
params[:backup_type].ignore!
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rtbackup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Gannon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- LICENSE.txt
|
157
157
|
- README.md
|
158
158
|
- Rakefile
|
159
|
+
- advanced-configuration.md
|
159
160
|
- backup_conf.sample.yml
|
160
161
|
- bin/rtbackup
|
161
162
|
- crontab.txt
|