]> andersk Git - sql.git/blame - libexec/daily_afs_backups
daily_afs_backups only dumps databases with changes since last dump; moved to /srv
[sql.git] / libexec / daily_afs_backups
CommitLineData
82981855
JP
1#!/usr/bin/python
2
3import os, sys
4import sql.db
5from sql.util import new_cursor, get_dbs, db_backup_pre, db_backup_mkdir
6from Queue import Queue, Empty
7import threading
8import subprocess
9
10MYSQLDUMP_ARGS = ['--compact', '--add-drop-table', '--add-locks',
11 '--create-options', '--disable-keys', '--dump-date',
12 '--extended-insert', '--quick',
13 '--no-autocommit', '--quote-names', '--routines',
14 '--single-transaction', '--triggers', '--force']
15
16finished = False
17queue = Queue()
18
19def consumer():
20 while True:
21 try:
22 next = queue.get(timeout=3)
23 print next[0] + ':',
24 log = sql.db.Backup.get_by(db=next[0])
25 if not log:
26 log = sql.db.Backup(db=next[0])
27 log.dump_path = next[1]
28 log.dump_date = sql.db.func.now()
29 db_backup_mkdir(next[1])
30 args = ['mysqldump', next[0]]
31 args.extend(MYSQLDUMP_ARGS)
32 p0 = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
33 p1 = subprocess.Popen(['gzip'], stdin=p0.stdout, stdout=file(next[1], 'w+'))
34 p1.wait()
35 err = p0.stderr.read()
36 if len(err):
37 log.dump_errnum = p0.returncode
38 log.dump_errstr = err
39 else:
40 log.dump_errnum = None
41 log.dump_errstr = None
42 log.save_or_update()
43 sql.db.session.flush()
44 print 'Done'
45 except (KeyboardInterrupt, SystemExit):
46 break
47 except Empty:
48 if finished:
49 break
50
51t_consumer = threading.Thread(target=consumer)
52t_consumer.start()
53
54def producer():
55 c = new_cursor('mysqldump')
56 for db in get_dbs(c):
57 log = sql.db.Backup.get_by(db=db)
58 if not log:
59 log = sql.db.Backup(db=db)
60 d = db_backup_pre(c, db)
61 if d[0]:
62 queue.put((db, d[1]))
63 log.skip_reason = None
64 log.skip_date = None
65 else:
66 log.skip_reason = d[1]
67 log.skip_date = sql.db.func.now()
68 log.save_or_update()
69 sql.db.session.flush()
70
71try:
72 producer()
73except KeyboardInterrupt:
74 sys.exit(1)
75finally:
76 finished = True
This page took 0.050122 seconds and 5 git commands to generate.