<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>*drawcode &#187; wordpress</title>
	<atom:link href="http://blog.drawcode.com/index.php/tag/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.drawcode.com</link>
	<description>creative engineering, design and development</description>
	<lastBuildDate>Sat, 23 May 2009 19:51:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Python Script to Backup MySql Databases (WordPress or other databases)</title>
		<link>http://blog.drawcode.com/2009/02/10/python-script-to-backup-mysql-databases-wordpress-or-other-databases/</link>
		<comments>http://blog.drawcode.com/2009/02/10/python-script-to-backup-mysql-databases-wordpress-or-other-databases/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 06:38:51 +0000</pubDate>
		<dc:creator>drawk</dc:creator>
				<category><![CDATA[syndication]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.drawcode.com/?p=11</guid>
		<description><![CDATA[We have lots of blogs to manage and keep backed up so we employ Python scripts that are scheduled to run every day and backup the full database sets. Python is a great language because you can use it for web development (WSGI/Django/etc), game development, automation, systems administration, desktop apps and many other things.  We [...]]]></description>
			<content:encoded><![CDATA[<p>We have lots of blogs to manage and keep backed up so we employ Python scripts that are scheduled to run every day and backup the full database sets. Python is a great language because you can use it for web development (WSGI/Django/etc), game development, automation, systems administration, desktop apps and many other things.  We will have more python scripts here on how we use it to run things.  Keep in mind these are cross platform because we manage applications on all types of environments from Windows, to UNIX/Linux to OSX (same as *nix really).</p>
<h2>How to Use</h2>
<p>Use this script by scheduling it to run nightly or when you choose.  Then make a folder under it called target or change the location in the script.</p>
<p>The file that will export will be a complete sql dump and stamped like the following filename, it contains the zipped up database.sql file that is your backup:<br />
export-2009-02-03-Tuesday.zip</p>
<p>If you need to change settings to get flat files or other read on mysqldump utility to pass the options you need, currently it backs up in SQL format.</p>
<h2>The Script</h2>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">time</span>, <span style="color: #dc143c;">sys</span>, <span style="color: #dc143c;">zipfile</span>, <span style="color: #dc143c;">datetime</span>,<span style="color: #dc143c;">calendar</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">os</span> <span style="color: #ff7700;font-weight:bold;">import</span> sep
&nbsp;
<span style="color: #808080; font-style: italic;"># Script Parameters</span>
<span style="color: #808080; font-style: italic;"># Target Directory for final Zip files</span>
target_dir = r<span style="color: #483d8b;">'target'</span>
copy_dir = r<span style="color: #483d8b;">'copy'</span>
<span style="color: #808080; font-style: italic;"># The name of the sql file (this will be the same for all backups)</span>
file_name = <span style="color: #483d8b;">'databases.sql'</span>
<span style="color: #808080; font-style: italic;"># Authentication</span>
<span style="color: #dc143c;">user</span> = <span style="color: #483d8b;">'[YOUR USER]'</span>
password = <span style="color: #483d8b;">'[YOUR PASSWORD]'</span>
<span style="color: #808080; font-style: italic;"># The command for the mysql dump. This could include the entire path to the executable if mysqldump is not on the path environment variable</span>
dumpcmd = r<span style="color: #483d8b;">'mysqldump'</span>
<span style="color: #808080; font-style: italic;"># The host you want to connect to</span>
host = <span style="color: #483d8b;">'localhost'</span> 
&nbsp;
args = <span style="color: black;">&#91;</span>dumpcmd, <span style="color: #483d8b;">'-C'</span>, <span style="color: #483d8b;">'-f'</span>, <span style="color: #483d8b;">'--host=%s'</span> <span style="color: #66cc66;">%</span>host, <span style="color: #483d8b;">'--user=%s'</span> <span style="color: #66cc66;">%</span><span style="color: #dc143c;">user</span>, <span style="color: #483d8b;">'--password=%s'</span> <span style="color: #66cc66;">%</span>password, <span style="color: #483d8b;">'--result-file=%s'</span> <span style="color: #66cc66;">%</span>file_name, <span style="color: #483d8b;">'--all-databases'</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #dc143c;">os</span>.<span style="color: black;">chdir</span><span style="color: black;">&#40;</span>target_dir<span style="color: black;">&#41;</span>
<span style="color: #dc143c;">cmd</span> = <span style="color: #483d8b;">' '</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>args<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Running Command: %s'</span> <span style="color: #66cc66;">%</span><span style="color: #dc143c;">cmd</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>password, <span style="color: #483d8b;">'*'</span><span style="color: #66cc66;">*</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>password<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">cmd</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Below is for zipping the files and creating a redundant  backup</span>
<span style="color: #ff7700;font-weight:bold;">def</span> getZipFileName<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	<span style="color: #808080; font-style: italic;"># Set time variables (</span>
	<span style="color: #808080; font-style: italic;"># Note: you don't have to use some of them,</span>
	<span style="color: #808080; font-style: italic;"># but they make the script easier to understand</span>
	t = <span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span> g = <span style="color: #dc143c;">time</span>.<span style="color: black;">gmtime</span><span style="color: black;">&#40;</span>t<span style="color: black;">&#41;</span>
	year = g<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">;</span> month = g<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">;</span> day = g<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">try</span>:
		<span style="color: #dc143c;">datetime</span>.<span style="color: black;">date</span><span style="color: black;">&#40;</span>year, month, day+<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">except</span>:
		<span style="color: #808080; font-style: italic;"># Last day of the month, return month name</span>
		root = <span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'%Y'</span>, g<span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">access</span><span style="color: black;">&#40;</span>root, <span style="color: #dc143c;">os</span>.<span style="color: black;">F_OK</span><span style="color: black;">&#41;</span>:
			<span style="color: #dc143c;">os</span>.<span style="color: black;">mkdir</span><span style="color: black;">&#40;</span>root<span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>root, <span style="color: #483d8b;">'%s.zip'</span> <span style="color: #66cc66;">%</span><span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'%b'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'%w'</span>, g<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> == <span style="color: #ff4500;">0</span>:
		<span style="color: #808080; font-style: italic;"># Last day of week, return week number</span>
		cal_month = <span style="color: #dc143c;">calendar</span>.<span style="color: black;">monthcalendar</span><span style="color: black;">&#40;</span>year, month<span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">for</span> week <span style="color: #ff7700;font-weight:bold;">in</span> cal_month:
			<span style="color: #ff7700;font-weight:bold;">if</span> day <span style="color: #ff7700;font-weight:bold;">in</span> week:
				<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">'Week%i.zip'</span> <span style="color: #66cc66;">%</span>month.<span style="color: black;">index</span><span style="color: black;">&#40;</span>week<span style="color: black;">&#41;</span>
	<span style="color: #808080; font-style: italic;"># Just a regular weekday...</span>
	<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">'%s.zip'</span> <span style="color: #66cc66;">%</span><span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'%A'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Write the zip file</span>
zip_name = <span style="color: #483d8b;">'export-'</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">datetime</span>.<span style="color: black;">date</span>.<span style="color: black;">today</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">'-'</span> + getZipFileName<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
zip_file = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">abspath</span><span style="color: black;">&#40;</span>zip_name<span style="color: black;">&#41;</span>
<span style="color: #008000;">zip</span> = <span style="color: #dc143c;">zipfile</span>.<span style="color: black;">ZipFile</span><span style="color: black;">&#40;</span>zip_file, <span style="color: #483d8b;">'w'</span>, <span style="color: #dc143c;">zipfile</span>.<span style="color: black;">ZIP_DEFLATED</span><span style="color: black;">&#41;</span>
<span style="color: #008000;">zip</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span>file_name<span style="color: black;">&#41;</span>
<span style="color: #008000;">zip</span>.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Remove uncompressed sql file</span>
<span style="color: #dc143c;">os</span>.<span style="color: black;">remove</span><span style="color: black;">&#40;</span>file_name<span style="color: black;">&#41;</span>
to_path = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>copy_dir, zip_name<span style="color: black;">&#41;</span>
to_dir = sep.<span style="color: black;">join</span><span style="color: black;">&#40;</span>to_path.<span style="color: black;">split</span><span style="color: black;">&#40;</span>sep<span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">access</span><span style="color: black;">&#40;</span>to_dir, <span style="color: #dc143c;">os</span>.<span style="color: black;">F_OK</span><span style="color: black;">&#41;</span>:
	<span style="color: #dc143c;">os</span>.<span style="color: black;">makedirs</span><span style="color: black;">&#40;</span>to_dir<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">access</span><span style="color: black;">&#40;</span>to_path, <span style="color: #dc143c;">os</span>.<span style="color: black;">F_OK</span><span style="color: black;">&#41;</span>:
	<span style="color: #dc143c;">os</span>.<span style="color: black;">remove</span><span style="color: black;">&#40;</span>to_path<span style="color: black;">&#41;</span>
<span style="color: #dc143c;">shutil</span>.<span style="color: #dc143c;">copy</span><span style="color: black;">&#40;</span>zip_file, to_path<span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.drawcode.com/2009/02/10/python-script-to-backup-mysql-databases-wordpress-or-other-databases/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
