5 from mitsql.util import new_cursor, get_dbs, db_backup_pre, db_backup_mkdir
6 from Queue import Queue, Empty
10 MYSQLDUMP_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']
22 next = queue.get(timeout=3)
23 print "Consuming", next
25 log = db.Backup.get_by(db=next[0])
27 log = db.Backup(db=next[0])
28 log.dump_path = next[1]
29 log.dump_date = db.func.now()
30 db_backup_mkdir(next[1])
31 args = ['mysqldump', next[0]]
32 args.extend(MYSQLDUMP_ARGS)
35 p0 = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
36 p1 = subprocess.Popen(['gzip'], stdin=p0.stdout, stdout=file(next[1], 'w+'))
38 err = p0.stderr.read()
40 print "Error on", next
44 log.dump_errnum = p0.returncode
47 log.dump_errnum = None
48 log.dump_errstr = None
52 except (KeyboardInterrupt, SystemExit):
53 print "Got exit request"
61 t_consumer = threading.Thread(target=consumer)
65 c = new_cursor('mysqldump')
66 for dbname in get_dbs(c):
67 log = db.Backup.get_by(db=dbname)
69 log = db.Backup(db=dbname)
70 elif log.skip_date and log.skip_date.timetuple:
71 if time.mktime(log.skip_date.timetuple()) + 3600 > time.time():
72 # never recheck a db skipped in the past hour
74 d = db_backup_pre(c, dbname)
76 queue.put((dbname, d[1]))
77 log.skip_reason = None
80 log.skip_reason = d[1]
81 log.skip_date = db.func.now()
87 except KeyboardInterrupt: