]>
Commit | Line | Data |
---|---|---|
1cc0573f JP |
1 | #!/usr/bin/python |
2 | ||
3 | import time | |
4 | import MySQLdb as sql | |
5 | import MySQLdb.cursors | |
6 | ||
7 | srvs = ['kitchen-sink', 'sliced-bread'] | |
8 | cxns, curs = {}, {} | |
9 | for s in srvs: | |
10 | cxns[s] = sql.connect(s, read_default_file='~/.my.cnf', cursorclass=sql.cursors.DictCursor) | |
11 | curs[s] = cxns[s].cursor() | |
12 | ||
13 | dbs = {} | |
14 | for s in srvs: | |
15 | curs[s].execute('SHOW DATABASES') | |
16 | dbs[s] = map(lambda elt: elt.values()[0], curs[s].fetchall()) | |
17 | if 'information_schema' in dbs[s]: | |
18 | dbs[s].remove('information_schema') | |
19 | ||
20 | all = [] | |
21 | for s in dbs.values(): | |
22 | all.extend(s) | |
23 | all = list(set(all)) | |
24 | all.sort() | |
25 | ||
26 | from pprint import pprint | |
27 | ||
28 | for db in all: | |
29 | if db < 'geofft': | |
30 | continue | |
31 | stat = {} | |
32 | tables = [] | |
33 | keys = [] | |
34 | for s in srvs: | |
35 | stat[s] = {} | |
36 | curs[s].execute('SHOW TABLE STATUS FROM `%s`' % db) | |
37 | r = curs[s].fetchall() | |
38 | for x in r: | |
39 | if x['Engine'] != 'MyISAM': | |
40 | continue | |
41 | tables.append(x['Name']) | |
42 | stat[s][x['Name']] = x | |
43 | keys.extend(x.keys()) | |
44 | keys = list(set(keys)) | |
45 | tables = list(set(tables)) | |
46 | ||
47 | for t in tables: | |
48 | verified = True | |
49 | for k in keys: | |
50 | if k in ['Check_time', 'Comment', 'Create_time', 'Update_time']: | |
51 | continue | |
52 | vals = {} | |
53 | for s in srvs: | |
54 | if not t in stat[s]: | |
55 | stat[s][t] = {} | |
56 | vals[s] = stat[s][t].get(k, None) | |
57 | v = list(set(vals.values())) | |
58 | if len(v) > 1: | |
59 | print '%s.%s[%s]: %s' % (db, t, k, str(vals)) | |
60 | verified = False | |
61 | print '%s.%s VERIFY' % (db, t), verified |