rtbackup 0.1.21 → 0.1.22
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/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
|