mysqldumpsplit.py
MySQL Dump og split Hejsa.. Laver dagligt backup af en mysql server, ved at lave et mysql dump. Det hele funker sådan set fint, men nu er dumpet oppe og fylde over 1½ gigabyte. Egentlig heller ikke noget problem, før der skal hives en lille del af backuppen ind igen .. Og så er der jo mulighed for at hente en tekstfil-splitter, og splitte tekstfilerne manuelt, og så videre. Er det ikke muligt at få mysqldump til selv at splitte dumpfilen til en selvvalgt størrelse ?
Size 1.5 kB - File type text/python-sourceFile contents
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
"""USAGE: %(__file__)s [-b <backuppath>]
read mysqldump from stdin and dump each tables in database
in seperate files in directory named <backuppath>/<database>.<timestamp>/<tablenames>.sql
"""
import os
import sys
import datetime
backuppath = "./"
if "-b" in sys.argv[1:]:
try:
backuppath = sys.argv[2].strip()
if backuppath.endswith("/"):
pass
else:
backuppath += os.path.sep
except IndexError:
print __doc__ % vars()
sys.exit(0)
if not os.path.isdir(backuppath):
print __doc__ % vars()
print "backuppath is not a directory"
sys.exit(0)
timestamp = datetime.datetime.now().isoformat()
headPart = []
dirname = ""
headFlag = True
newTable = False
databasePattern = "Database:"
tablePattern = "-- Table structure for table "
for line in sys.stdin.readlines():
if not dirname and databasePattern in line:
database = line.split(":")[2].strip()
dirname = backuppath + database + "_" + timestamp
os.mkdir(dirname)
if tablePattern in line:
newTable = True
tablename = line.replace(tablePattern, "").strip().strip("`") + ".sql"
output = open(dirname + os.path.sep + tablename, "w")
if headFlag:
if newTable:
headFlag = False
headPart = "".join(headPart)
else:
headPart.append(line)
continue
if newTable:
output.write(headPart)
newTable = False
output.write(line)
Click here to get the file