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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144 | #!/export/home/www.netuni.nl/local/bin/python
import sys, os, getopt, getpass
import MySQLdb
def ohmysqldump(db, user, passwd, excluded, options, host=''):
conn = MySQLdb.connect(host='', db=db, user=user, passwd=passwd)
c = conn.cursor()
sql = 'show tables;'
c.execute(sql)
tables = c.fetchall()
conn.close()
arguments = [db]
for table in tables:
try:
if not table[0] in excluded:
arguments.append(table[0])
except:
print "You cannot exclude non-existing tables."
sys.exit(1)
arguments.insert(0, "mysqldump")
command = 'mysqldump'
os.execvp(command, arguments)
def usage():
print """
ohmysqldump is a wrapper for mysqldump including an option to dump a
mysqldatabase EXCEPT the listed tables.
Usage: [OPTIONS] [database] [tables]
-E, exclude Exclude the tables
The -p and --password options in mysqldump has an optional argument. This
technique isn't supported (consider -p database table. Is 'database' a
password? Or is it the name of the database?). You can store the password in
an optionfile (~/.my.cnf) or ohmysqldump will ask for it (twice).
All (other) options in mysqldump are supported.
"""
#mysqldump --help follows:
#os.execvp("mysqldump", ["mysqldump", "--help"])
def main():
shortoptions = "aAB#:?cCeEFOfh:lKntdpP:qQS:Tu:vVw:Xx"
longoptions = ["all", "debug=", "character-sets-dir=", "help", "complete-insert", \
"compress", "default-character-set=", "extended-insert", "add-drop-table", \
"add-locks", "allow-keywords", "delayed-insert", "master-data", "flush-logs", \
"force", "host=", "lock-tables", "no-autocommit", "disable-keys", \
"no-create-db", "no-create-info" "no-data", "opt", "password=", "port=", \
"quick", "quote-names", "socket=", "tab=", "user=", "verbose", "version", \
"where=", "xml", "first-slave" "fields-terminated-by=", \
"fields-enclosed-by=", "fields-optionally-enclosed-by=", \
"fields-escaped-by=", "lines-terminated-by=", "all-databases", \
"databases", "tables", "exclude"]
#Try to find additional info in the mysql option-files
f = os.popen("my_print_defaults client mysqldump")
myoptions = f.readlines()
f.close
for line in myoptions:
if len(line):
# Inject it into the commandline for easy parding by getopt
# Inject it in front so any commandline-parameters will override
# the optionfile
sys.argv.insert(1,line.replace("\n",""))
try:
opts, args = getopt.getopt(sys.argv[1:], shortoptions, longoptions)
except getopt.GetoptError:
#print "error"
# print help information and exit
usage()
sys.exit(2)
if not opts and not args:
usage()
sys.exit()
options = []
runohmy = 0
askpasswd = 0
db=""
user = ""
host=""
passwd = ""
for opt, arg in opts:
# Catch some options to handle here
if opt in ["-?", "--help"]:
usage()
elif opt in ["-E", "--exclude"]:
runohmy = 1
if len(args)>1:
db = args[0]
excluded = args[1:]
# Don' pass it along
continue
else:
usage()
sys.exit(1)
elif opt in ["-p", "--password"]:
if arg:
passwd = arg
else:
askpasswd = 1
elif opt in ["-u", "--user"]:
user = arg
elif opt in ["-h", "--host"]:
host = arg
elif opt in ["-V", "--version"]:
print "ohmysqldump v0.3"
os.execvp("mysqldump", ["mysqldump", "--version"])
if opt[2:]+"=" in longoptions:
options.append(opt+"="+arg)
elif opt[1:]+":" in shortoptions:
options.append(opt)
options.append(arg)
else:
options.append(opt+arg)
if not runohmy:
options.insert(0, "mysqldump")
command = 'mysqldump'
for arg in args:
options.append(arg)
os.execvp(command, options)
else:
if (not passwd and askpasswd):
passwd = getpass.getpass("password: ")
if not (user and (passwd and not askpasswd) and db and excluded):
usage()
sys.exit(1)
else:
ohmysqldump(db, user, passwd, excluded, options, host='')
if __name__ == "__main__":
main();
|
Comments
BUGFIX.
Sign in to comment