dstrelau (owner)

Revisions

gist: 67564 Download_button fork
public
Description:
mysql backups with duplicity
Public Clone URL: git://gist.github.com/67564.git
Embed All Files: show embed
backup_user.sql #
1
2
CREATE USER 'backup'@'localhost';
GRANT SELECT, LOCK TABLES ON *.* TO 'backup'@'localhost';
duplicity_ctl #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash
 
export AWS_ACCESS_KEY_ID="XXX"
export AWS_SECRET_ACCESS_KEY="XXX"
AWS_BUCKET='XXX'
GPG_KEY="XXX"
 
DUPLICITY='/usr/bin/duplicity'
ARCHIVE_DIR='/var/cache/duplicity'
 
## DO NOT EDIT BEYOND THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING ##
 
S3_DEST="s3+http://${AWS_BUCKET}/"
ARGS="--encrypt-key=${GPG_KEY} --archive-dir=${ARCHIVE_DIR}"
 
mkdir -p ${ARCHIVE_DIR}
 
case "$1" in
'--backup')
if [ -n "${2}" ]; then
${DUPLICITY} ${ARGS} "${2}" "${S3_DEST}"
else
echo "usage: ${0} --backup source"
fi
;;
 
'--full')
if [ -n "${2}" ]; then
${DUPLICITY} full ${ARGS} "${2}" "${S3_DEST}"
else
echo "usage: ${0} --full source"
fi
;;
 
'--incremental')
if [ -n "${2}" ]; then
${DUPLICITY} incremental ${ARGS} "${2}" "${S3_DEST}"
else
echo "usage: ${0} --incremental source"
fi
;;
 
'--remove')
if [ -n "${2}" ]; then
${DUPLICITY} remove-older-than --force ${ARGS} "${2}" "${S3_DEST}"
else
echo "usage: ${0} --remove time"
fi
;;
 
 
'restore')
if [ -n "${2}" ]; then
${DUPLICITY} remove-older-than --force ${ARGS} "${S3_DEST}" "${2}"
else
echo "usage: ${0} --restore destination"
fi
;;
 
'--list')
${DUPLICITY} list-current-files ${ARGS} "${S3_DEST}"
;;
 
'--status')
${DUPLICITY} collection-status ${ARGS} "${S3_DEST}"
;;
 
*)
echo "$0 [--backup|--full|--incremental] source"
echo "$0 --remove time"
echo "$0 --restore destination"
echo "$0 [--list|--status]"
;;
esac
mysql_backup #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
 
case "$1" in
  '--full')
    FILE="/tmp/$(date +%s).sql" &&
    mysqldump -u backup --all-databases > ${FILE} &&
    /usr/local/bin/duplicity_ctl --full ${FILE} &&
    rm -f ${FILE}
    ;;
 
  '--incremental')
    FILE="/tmp/$(date +%s).sql" &&
    mysqldump -u backup --all-databases > ${FILE} &&
    /usr/local/bin/duplicity_ctl --backup ${FILE} &&
    rm -f ${FILE}
    ;;
 
  '--remove')
    /usr/local/bin/duplicity_ctl --remove 1M
    ;;
  *)
    exit 1
    ;;
esac
 
 
mysql_backup.cron #
1
2
3
4
5
6
# min hour day month weekday user cmd
0 0 * * * root /usr/local/bin/mysql_backup --incremental > /dev/null 2>&1
5 0 * * 0 root /usr/local/bin/mysql_backup --full > /dev/null 2>&1
10 0 1 * 0 root /usr/local/bin/mysql_backup --remove > /dev/null 2>&1