<?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>Racker Hacker &#187; mysql</title>
	<atom:link href="http://rackerhacker.com/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://rackerhacker.com</link>
	<description>Words of wisdom from a server administrator</description>
	<lastBuildDate>Tue, 07 Feb 2012 14:07:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MySQLTuner mentioned at the O&#039;Reilly MySQL Conference</title>
		<link>http://rackerhacker.com/2011/04/15/mysqltuner-mentioned-at-the-oreilly-mysql-conference/</link>
		<comments>http://rackerhacker.com/2011/04/15/mysqltuner-mentioned-at-the-oreilly-mysql-conference/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 01:56:31 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=2271</guid>
		<description><![CDATA[If you push play, the video should scoot out to about the 14m40s mark where MySQLTuner appears on one of the slides. Thanks to Trent Hornibrook for letting me know! MySQLTuner mentioned at the O'Reilly MySQL Conference is a post from: Major Hayden's Racker Hacker blog. Thanks for following the blog via the RSS feed. [...]<p><a href="http://rackerhacker.com/2011/04/15/mysqltuner-mentioned-at-the-oreilly-mysql-conference/">MySQLTuner mentioned at the O'Reilly MySQL Conference</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p><iframe title="YouTube video player" width="560" height="349" src="http://www.youtube.com/embed/L1V5T5rknq0?rel=0#t=14m40s" frameborder="0" allowfullscreen></iframe></p>
<p>If you push play, the video should scoot out to about the 14m40s mark where MySQLTuner appears on one of the slides.  Thanks to <a href="http://twitter.com/#!/trenthornibrook">Trent Hornibrook</a> for letting me know!</p>
<p><a href="http://rackerhacker.com/2011/04/15/mysqltuner-mentioned-at-the-oreilly-mysql-conference/">MySQLTuner mentioned at the O'Reilly MySQL Conference</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2011/04/15/mysqltuner-mentioned-at-the-oreilly-mysql-conference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Monitor MySQL restore progress with pv</title>
		<link>http://rackerhacker.com/2010/11/24/monitor-mysql-restore-progress-with-pv/</link>
		<comments>http://rackerhacker.com/2010/11/24/monitor-mysql-restore-progress-with-pv/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 16:43:28 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[emergency]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=1951</guid>
		<description><![CDATA[The pv command is one that I really enjoy using but it's also one that I often forget about. You can't get a much more concise definition of what pv does than this one: pv allows a user to see the progress of data through a pipeline, by giving information such as time elapsed, percentage [...]<p><a href="http://rackerhacker.com/2010/11/24/monitor-mysql-restore-progress-with-pv/">Monitor MySQL restore progress with pv</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://linux.die.net/man/1/pv">pv</a> command is one that I really enjoy using but it's also one that I often forget about.  You can't get a much more concise definition of what pv does than this one:</p>
<blockquote><p>pv allows a user to see the progress of data through a pipeline, by giving information such as time elapsed, percentage completed (with progress bar), current throughput rate, total data transferred, and ETA.</p></blockquote>
<p>The usage certainly isn't complicated:</p>
<blockquote><p>To use it, insert it in a pipeline between two processes, with the appropriate options. Its standard input will be passed through to its standard output and progress will be shown on standard error.</p></blockquote>
<p>A great application of pv is when you're restoring large amounts of data into MySQL, especially if you're restoring data under duress due to an accidentally-dropped table or database.  (Who hasn't been there before?)  The standard way of restoring data is something we're all familiar with:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># mysql my_database &lt; database_backup.sql</pre></div></div>

<p>The downside of this method is that you have no idea how quickly your restore is working or when it might be done.  You could always open another terminal to monitor the tables and databases as they're created, but that can be hard to follow.</p>
<p>Toss in pv and that problem is solved:
</pre>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># pv database_backup.sql | mysql my_database
96.8MB 0:00:17 [5.51MB/s] [==&gt;                                ] 11% ETA 0:02:10</pre></div></div>

<p>When it comes to MySQL, your restore rate is going to be different based on some different factors, so the ETA might not be entirely accurate.</p>
<p><a href="http://rackerhacker.com/2010/11/24/monitor-mysql-restore-progress-with-pv/">Monitor MySQL restore progress with pv</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2010/11/24/monitor-mysql-restore-progress-with-pv/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A simple guide to redundant cloud hosting</title>
		<link>http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/</link>
		<comments>http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 00:41:16 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cloud servers]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[high availability]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[load balancing]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rackspace]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[slicehost]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=1771</guid>
		<description><![CDATA[Today, on my 28th birthday, I'm finally delivering on a promise to my readers which I made about two months ago. I've written a guide on how to host a web application redundantly in a cloud environment. While it's still a bit of a rough draft, it should be a good starting point for those [...]<p><a href="http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/">A simple guide to redundant cloud hosting</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Today, on my 28th birthday, I'm finally delivering on a promise to my readers which I made about two months ago.  I've <a href="/redundant-cloud-hosting-configuration-guide/">written a guide</a> on how to host a web application redundantly in a cloud environment.  While it's still a bit of a rough draft, it should be a good starting point for those who haven't worked in virtualized environments before.  Also, it may show some of the more experienced systems administrators a new way to do things.</p>
<p>The guide: <a href="/redundant-cloud-hosting-configuration-guide/">Redundant Cloud Hosting Guide</a></p>
<p>As always, if you find anything in the guide that needs improvement, I'm all ears. <img src='http://rackerhacker.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/">A simple guide to redundant cloud hosting</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Private network interfaces: the forgotten security hole</title>
		<link>http://rackerhacker.com/2010/03/01/private-network-interfaces-the-forgotten-security-hole/</link>
		<comments>http://rackerhacker.com/2010/03/01/private-network-interfaces-the-forgotten-security-hole/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 00:55:07 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[tcpwrappers]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=1263</guid>
		<description><![CDATA[Regardless of the type of hosting you're using - dedicated or cloud - it's important to take network interface security seriously. Most often, threats from the internet are the only ones mentioned. However, if you share a private network with other customers, you have just as much risk on that interface. Many cloud providers allow [...]<p><a href="http://rackerhacker.com/2010/03/01/private-network-interfaces-the-forgotten-security-hole/">Private network interfaces: the forgotten security hole</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Regardless of the type of hosting you're using - dedicated or cloud - it's important to take network interface security seriously.  Most often, threats from the internet are the only ones mentioned.  However, if you share a private network with other customers, you have just as much risk on that interface.</p>
<p>Many cloud providers allow you access to a private network environment where you can exchange data with other instances or other services offered by the provider.  The convenience of this access comes with a price: other instances can access your instance on the private network just as easily as they could on the public interface.</p>
<p>Here are some security tips for your private interfaces:</p>
<p><strong>Disable the private interface</strong><br />
This one is pretty simple.  If you have only one instance or server, and you don't need to communicate privately with any other instances, just disable the interface.  Remember to configure your networking scripts to leave the interface disabled after reboots.</p>
<p><strong>Use packet filtering</strong><br />
The actual mechanism will vary based on your operating system, but filtering packets is the one of the simplest ways to secure your private interface.  You can take some different approaches with them, but I find the easiest method is to allow access from your other instances and reject all other traffic.</p>
<p>For additional security, you can limit access based on ports as well as source IP addresses.  This could prevent an attacker from having easy access to your other instances if they're able to break into one of them.</p>
<p><strong>Configure your daemons to listen on the appropriate interfaces</strong><br />
If there are services that don't need to be listening on the private network, don't allow them to listen on your private interface.  For example, MySQL might need to listen on the private interface so the web server can talk to it, but apache won't need to listen on the private interface.  This reduces the profile of your instance on the private network and makes it a less likely target for attack.</p>
<p><strong>Use hosts.allow and hosts.deny</strong><br />
Many new systems administrators forget about how handy tcpwrappers can be for limiting access.  If your firewall is down in error, host.allow and hosts.deny could be an extra layer of protection.  It's important to ensure that the daemons you are attempting to control are build with tcpwrappers support.  Daemons like sshd support it, but apache and MySQL do not.</p>
<p><strong>Encrypt all traffic on the private network</strong><br />
Just because it's called a "private" network doesn't mean that your traffic can traverse the network privately.  You should always err on the side of caution and encrypt all traffic traversing the private network.  You can use ssh tunnels, stunnel, or the built-in SSL features found in most daemons.</p>
<p>This also brings up an important point: <strong>you should know how your provider's private network works</strong>.  Are there safeguards to prevent sniffing?  Could someone else possibly ARP spoof your instance's private IP addresses?  Is your private network's subnet shared among many customers?</p>
<p>With all of that said, it's also very important to have proper change control policies so that administrators working after you are fully aware of the security measures in place and why they are important.  This will ensure that all of the administrators on your instances will understand the security of the system and they should be able to make sensible adjustments later for future functionality.</p>
<p><a href="http://rackerhacker.com/2010/03/01/private-network-interfaces-the-forgotten-security-hole/">Private network interfaces: the forgotten security hole</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2010/03/01/private-network-interfaces-the-forgotten-security-hole/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MySQL: The total number of locks exceeds the lock table size</title>
		<link>http://rackerhacker.com/2010/02/16/mysql-the-total-number-of-locks-exceeds-the-lock-table-size-2/</link>
		<comments>http://rackerhacker.com/2010/02/16/mysql-the-total-number-of-locks-exceeds-the-lock-table-size-2/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 18:00:29 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=1173</guid>
		<description><![CDATA[If you're running an operation on a large number of rows within a table that uses the InnoDB storage engine, you might see this error: ERROR 1206 (HY000): The total number of locks exceeds the lock table size MySQL is trying to tell you that it doesn't have enough room to store all of the [...]<p><a href="http://rackerhacker.com/2010/02/16/mysql-the-total-number-of-locks-exceeds-the-lock-table-size-2/">MySQL: The total number of locks exceeds the lock table size</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>If you're running an operation on a large number of rows within a table that uses the InnoDB storage engine, you might see this error:</p>
<p><code>ERROR 1206 (HY000): The total number of locks exceeds the lock table size</code></p>
<p>MySQL is trying to tell you that it doesn't have enough room to store all of the row locks that it would need to execute your query.  The only way to fix it for sure is to adjust <code>innodb_buffer_pool_size</code> and restart MySQL.  By default, this is set to only 8MB, which is too small for anyone who is using InnoDB to do anything.</p>
<p><strong>If you need a temporary workaround,</strong> reduce the amount of rows you're manipulating in one query.  For example, if you need to delete a million rows from a table, try to delete the records in chunks of 50,000 or 100,000 rows.  If you're inserting many rows, try to insert portions of the data at a single time.</p>
<p>Further reading:</p>
<ul>
<li><a href="http://bugs.mysql.com/bug.php?id=15667">MySQL Bug #15667 - The total number of locks exceeds the lock table size</a></li>
<li><a href="http://mrothouse.wordpress.com/2006/10/20/mysql-error-1206/">MySQL Error 1206 &raquo; Mike R's Blog</a></li>
</ul>
<p><a href="http://rackerhacker.com/2010/02/16/mysql-the-total-number-of-locks-exceeds-the-lock-table-size-2/">MySQL: The total number of locks exceeds the lock table size</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2010/02/16/mysql-the-total-number-of-locks-exceeds-the-lock-table-size-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MySQL: The total number of locks exceeds the lock table size</title>
		<link>http://rackerhacker.com/2010/01/29/mysql-the-total-number-of-locks-exceeds-the-lock-table-size/</link>
		<comments>http://rackerhacker.com/2010/01/29/mysql-the-total-number-of-locks-exceeds-the-lock-table-size/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 13:12:21 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=1156</guid>
		<description><![CDATA[This problem has cropped up for me a few times, but I've always forgotten to make a post about it. If you're working with a large InnoDB table and you're updating, inserting, or deleting a large volume of rows, you may stumble upon this error: ERROR 1206 (HY000): The total number of locks exceeds the [...]<p><a href="http://rackerhacker.com/2010/01/29/mysql-the-total-number-of-locks-exceeds-the-lock-table-size/">MySQL: The total number of locks exceeds the lock table size</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>This problem has cropped up for me a few times, but I've always forgotten to make a post about it.  If you're working with a large InnoDB table and you're updating, inserting, or deleting a large volume of rows, you may stumble upon this error:</p>
<p><code>ERROR 1206 (HY000): The total number of locks exceeds the lock table size</code></p>
<p>InnoDB stores its lock tables in the main buffer pool.  This means that the number of locks you can have at the same time is limited by the <code>innodb_buffer_pool_size</code> variable that was set when MySQL was started.  By default, MySQL leaves this at 8MB, which is pretty useless if you're doing anything with InnoDB on your server.</p>
<p>Luckily, the fix for this issue is very easy: adjust <code>innodb_buffer_pool_size</code> to a more reasonable value.  However, that fix does require a restart of the MySQL daemon.  There's simply no way to adjust this variable on the fly (with the current stable MySQL versions as of this post's writing).</p>
<p>Before you adjust the variable, make sure that your server can handle the additional memory usage.  The <code>innodb_buffer_pool_size</code> variable is a server wide variable, not a per-thread variable, so it's shared between all of the connections to the MySQL server (like the query cache).  If you set it to something like 1GB, MySQL won't use all of that up front.  As MySQL finds more things to put in the buffer, the memory usage will gradually increase until it reaches 1GB.  At that point, the oldest and least used data begins to get pruned when new data needs to be present.</p>
<p><strong>So, you need a workaround without a MySQL restart?</strong></p>
<p>If you're in a pinch, and you need a workaround, break up your statements into chunks.  If you need to delete a million rows, try deleting 5-10% of those rows per transaction.  This may allow you to sneak under the lock table size limitations and clear out some data without restarting MySQL.</p>
<p>To learn more about InnoDB's parameters, visit the <a href="http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html">MySQL documentation</a>.</p>
<p><a href="http://rackerhacker.com/2010/01/29/mysql-the-total-number-of-locks-exceeds-the-lock-table-size/">MySQL: The total number of locks exceeds the lock table size</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2010/01/29/mysql-the-total-number-of-locks-exceeds-the-lock-table-size/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPMyAdmin 3.x hides the table indexes</title>
		<link>http://rackerhacker.com/2009/04/03/phpmyadmin-3x-hides-the-table-indexes/</link>
		<comments>http://rackerhacker.com/2009/04/03/phpmyadmin-3x-hides-the-table-indexes/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 00:51:48 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[phpmyadmin]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=835</guid>
		<description><![CDATA[Users of PHPMyAdmin 3.x may find that the table indexes are automatically hidden at the bottom of the page. I find this to be a huge annoyance since table indexes are tremendously important to the structure of the table. If you don't want to downgrade to PHPMyAdmin 2.x, just add the following line to the [...]<p><a href="http://rackerhacker.com/2009/04/03/phpmyadmin-3x-hides-the-table-indexes/">PHPMyAdmin 3.x hides the table indexes</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Users of PHPMyAdmin 3.x may find that the table indexes are automatically hidden at the bottom of the page.  I find this to be a huge annoyance since table indexes are tremendously important to the structure of the table.</p>
<p>If you don't want to downgrade to PHPMyAdmin 2.x, just add the following line to the top of your config.inc.php file:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$cfg</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'InitialSlidersState'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'open'</span><span style="color: #339933;">;</span></pre></div></div>

<p>This will cause the indexes to be displayed when you click <strong>Structure</strong> for a certain table.  By default, they are hidden.</p>
<p><em><strong>Sidenote:</strong> Some of you might be thinking: "Hey, you're a DBA, you should know MySQL queries without needing PHPMyAdmin."  You're right.  I do know how to get the job done without PHPMyAdmin, but I enjoy the way PHPMyAdmin allows me to visualize my table structures.  Also, it's a handy way to present data to others very quickly.</em></p>
<p><a href="http://rackerhacker.com/2009/04/03/phpmyadmin-3x-hides-the-table-indexes/">PHPMyAdmin 3.x hides the table indexes</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2009/04/03/phpmyadmin-3x-hides-the-table-indexes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL performance flow chart</title>
		<link>http://rackerhacker.com/2009/02/04/mysql-performance-flow-chart/</link>
		<comments>http://rackerhacker.com/2009/02/04/mysql-performance-flow-chart/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 17:00:29 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=756</guid>
		<description><![CDATA[As much as some people might disagree, optimizing MySQL isn't rocket science. There are some basic steps that every server administrator can follow to improve the performance of their MySQL server. I've outlined these steps in the flow chart included in this post. While it won't include all situations, it will give ideas to those [...]<p><a href="http://rackerhacker.com/2009/02/04/mysql-performance-flow-chart/">MySQL performance flow chart</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://cdn.cloudfiles.mosso.com/c8031/improvingmysqlperformance.pdf"><img alt="" src="http://cdn.cloudfiles.mosso.com/c8031/improvingmysqlperformance.jpg" title="Improving MySQL Performance flow chart" class="alignright" width="306" height="240" /></a><br />
As much as some people might disagree, optimizing MySQL isn't rocket science.  There are some basic steps that every server administrator can follow to improve the performance of their MySQL server.  I've outlined these steps in the flow chart included in this post.</p>
<p>While it won't include all situations, it will give ideas to those who are just starting down the path of MySQL optimization.  If you find any corrections or if you have suggestions for improvements, please let me know!</p>
<p><strong>UPDATE:</strong> I've received a lot of positive feedback via twitter and e-mail about the flow chart idea.  I'll try to work on some more charts soon and get them onto the site.  Let me know if there are specific topics that you're interested in.</p>
<p><a href="http://rackerhacker.com/2009/02/04/mysql-performance-flow-chart/">MySQL performance flow chart</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2009/02/04/mysql-performance-flow-chart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLTuner 1.0.0 is now available</title>
		<link>http://rackerhacker.com/2008/12/01/mysqltuner-100-is-now-available/</link>
		<comments>http://rackerhacker.com/2008/12/01/mysqltuner-100-is-now-available/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 00:31:43 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=622</guid>
		<description><![CDATA[It has finally arrived. MySQLTuner 1.0.0 is now available for download. Major improvements include full support for MySQL 5.1 and Solaris. You can review other changes in the changelog. As always, I'd like to personally thank everyone who has made this release possible. Your efforts have provided benefits from MySQL users worldwide, and they have [...]<p><a href="http://rackerhacker.com/2008/12/01/mysqltuner-100-is-now-available/">MySQLTuner 1.0.0 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>It has finally arrived.  MySQLTuner 1.0.0 is now available for <a href="http://mysqltuner.pl/">download</a>.  Major improvements include full support for MySQL 5.1 and Solaris.  You can review other changes in the <a href="http://wiki.mysqltuner.com/Changelog">changelog</a>.</p>
<p>As always, I'd like to personally thank everyone who has made this release possible.  Your efforts have provided benefits from MySQL users worldwide, and they have shown me how rewarding it is to maintain open source software.</p>
<p><a href="http://rackerhacker.com/2008/12/01/mysqltuner-100-is-now-available/">MySQLTuner 1.0.0 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/12/01/mysqltuner-100-is-now-available/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Importing Excel files into MySQL with PHP</title>
		<link>http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/</link>
		<comments>http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 19:42:45 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=601</guid>
		<description><![CDATA[If you have Excel files that need to be imported into MySQL, you can import them easily with PHP. First, you will need to download some prerequisites: PHPExcelReader - http://sourceforge.net/projects/phpexcelreader/ Spreadsheet_Excel_Writer - http://pear.php.net/package/Spreadsheet_Excel_Writer Once you've downloaded both items, upload them to your server. Your directory listing on your server should have two directories: Excel (from [...]<p><a href="http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/">Importing Excel files into MySQL with PHP</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>If you have Excel files that need to be imported into MySQL, you can import them easily with PHP.  First, you will need to download some prerequisites:</p>
<p>PHPExcelReader - <a href="http://sourceforge.net/projects/phpexcelreader/">http://sourceforge.net/projects/phpexcelreader/</a><br />
Spreadsheet_Excel_Writer - <a href="http://pear.php.net/package/Spreadsheet_Excel_Writer">http://pear.php.net/package/Spreadsheet_Excel_Writer</a></p>
<p>Once you've downloaded both items, upload them to your server.  Your directory listing on your server should have two directories: <code>Excel</code> <em>(from PHPExcelReader)</em> and <code>Spreadsheet_Excel_Writer-x.x.x</code> <em>(from Spreadsheet_Excel_Writer)</em>.  To work around a bug in PHPExcelReader, copy <code>oleread.inc</code> from the <code>Excel</code> directory into a new path:</p>
<p><code>Spreadsheet/Excel/Reader/OLERead.php</code></p>
<p>The PHPExcelReader code will expect <code>OLERead.php</code> to be in that specific location.  Once that is complete, you're ready to use the PHPExcelReader class.  I made an example Excel spreadsheet like this:</p>
<pre>Name                Extension   Email
----------------------------------------------------
Jon Smith           2001        jsmith@domain.com
Clint Jones         2002        cjones@domain.com
Frank Peterson      2003        fpeterson@domain.com</pre>
<p>After that, I created a PHP script to pick up the data and insert it into the database, row by row:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Excel/reader.php'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Spreadsheet_Excel_Reader<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setOutputEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CP1251'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exceltestsheet.xls'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$conn</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hostname&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;password&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;database&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$conn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span> <span style="color: #000088;">$x</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$x</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$extension</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$email</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;INSERT INTO mytable (name,extension,email) 
        VALUES ('<span style="color: #006699; font-weight: bold;">$name</span>',<span style="color: #006699; font-weight: bold;">$extension</span>,'<span style="color: #006699; font-weight: bold;">$email</span>')&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$sql</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>After the script ran, each row had been added to the database table successfully.  If you have additional columns to insert, just repeat these lines, using an appropriate variable for each column:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$variable</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$row_number</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$column_number</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>For more details, you can refer to a <a href="http://devzone.zend.com/article/3336-Reading-and-Writing-Spreadsheets-with-PHP">post in Zend's Developer Zone</a>.</p>
<p><a href="http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/">Importing Excel files into MySQL with PHP</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>MySQLTuner 0.9.9 is now available</title>
		<link>http://rackerhacker.com/2008/09/07/mysqltuner-099-is-now-available/</link>
		<comments>http://rackerhacker.com/2008/09/07/mysqltuner-099-is-now-available/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 02:05:03 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=421</guid>
		<description><![CDATA[MySQLTuner 0.9.9 is now available for download. There's a new wiki for the script at wiki.mysqltuner.com. The new wiki contains links to downloads, changelogs, and other details. If you want to know when the latest releases are available, there are multiple options: Follow RackerHacker on Twitter Sign up for the MySQLTuner mailing list Use the [...]<p><a href="http://rackerhacker.com/2008/09/07/mysqltuner-099-is-now-available/">MySQLTuner 0.9.9 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>MySQLTuner 0.9.9 is now available for <a href="http://mysqltuner.pl/">download</a>.  There's a new wiki for the script at <a href="http://wiki.mysqltuner.com">wiki.mysqltuner.com</a>.  The new wiki contains links to downloads, changelogs, and other details.</p>
<p>If you want to know when the latest releases are available, there are multiple options:</p>
<ul>
<li>Follow <a href="http://twitter.com/RackerHacker/">RackerHacker</a> on <a href="http://twitter.com/">Twitter</a></li>
<li>Sign up for the <a href="http://wiki.mysqltuner.com/MySQLTuner#Mailing_List">MySQLTuner mailing list</a></li>
<li>Use the <code>--checkversion</code> option when you run the script</li>
</ul>
<p><a href="http://rackerhacker.com/2008/09/07/mysqltuner-099-is-now-available/">MySQLTuner 0.9.9 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/09/07/mysqltuner-099-is-now-available/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQLTuner 0.9.8 is now available</title>
		<link>http://rackerhacker.com/2008/07/21/mysqltuner-098-is-now-available/</link>
		<comments>http://rackerhacker.com/2008/07/21/mysqltuner-098-is-now-available/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 17:17:14 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=336</guid>
		<description><![CDATA[MySQLTuner 0.9.8 is now available for download and it is full of new changes! So far, MySQLTuner has been downloaded almost 24,000 times. Thanks for making it so popular. Easy download! You can download it simply by running wget mysqltuner.pl. You will automatically be redirected to the script. Access servers remotely If you have multiple [...]<p><a href="http://rackerhacker.com/2008/07/21/mysqltuner-098-is-now-available/">MySQLTuner 0.9.8 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>MySQLTuner 0.9.8 is now available for <a href="http://rackerhacker.com/mysqltuner/">download</a> and it is full of new changes!  So far, MySQLTuner has been downloaded almost 24,000 times.  Thanks for making it so popular.</p>
<p><strong>Easy download!</strong><br />
You can download it simply by running <code>wget mysqltuner.pl</code>.  You will automatically be redirected to the script.</p>
<p><strong>Access servers remotely</strong><br />
If you have multiple servers that you need to tune and monitor, simply download MySQLTuner onto one machine.  You can run it against other servers by specifying a hostname, port, and login credentials.  Two new options are available: <code>--host</code> and <code>--port</code>.</p>
<p><strong>Pass login credentials on the command line</strong><br />
Two new options are available: <code>--user</code> and <code>--pass</code>.  You can pass a username and password on the command line to log in quickly.  This can be especially helpful in conjunction with cron.</p>
<p><strong>Manually set the amount of RAM and swap memory installed</strong><br />
I've received a few bug reports where users on certain virtual environments saw incorrect memory calculations when they ran MySQLTuner.  You can now set the current amount of RAM and swap memory installed with <code>--forcemem</code> and <code>--forceswap</code> respectively.  (Thanks to Jason Gill for the patch and the bug report!)</p>
<p><strong>Checking for updates is now optional</strong><br />
Some operating system distributions and environments can't allow for automatic update checking due to security concerns, so I've made update checks optional.  The <code>--skipversion</code> option has been removed and it was replaced with <code>--checkversion</code>.  <em>As a side note, the only data that I collected was the version number being run and the IP from which the update originated.  This data has only been used for aggregate statistical purposes.</em></p>
<p>As you might imagine, MySQLTuner 1.0 is just around the corner.  I've been holding out for the MySQL 5.1 GA release, but I may release the script sooner.  Don't worry - as soon as MySQL 5.1 becomes a GA release, I'll be hard at work to support any new optimization options which it provides.</p>
<p><a href="http://rackerhacker.com/2008/07/21/mysqltuner-098-is-now-available/">MySQLTuner 0.9.8 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/07/21/mysqltuner-098-is-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLTuner is now a Fedora 9 package!</title>
		<link>http://rackerhacker.com/2008/06/27/mysqltuner-is-now-a-fedora-9-package/</link>
		<comments>http://rackerhacker.com/2008/06/27/mysqltuner-is-now-a-fedora-9-package/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 17:16:56 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=317</guid>
		<description><![CDATA[Thanks to some work started by Ville Skyttä, MySQLTuner is now included in Fedora 9 repositories: # cat /etc/fedora-release Fedora release 9 (Sulphur) # yum info mysqltuner Loaded plugins: fastestmirror, priorities, refresh-packagekit Loading mirror speeds from cached hostfile * updates: mirrors.usc.edu * fedora: mirror.unl.edu * livna: mirrors.tummy.com Available Packages Name : mysqltuner Arch : noarch [...]<p><a href="http://rackerhacker.com/2008/06/27/mysqltuner-is-now-a-fedora-9-package/">MySQLTuner is now a Fedora 9 package!</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Thanks to <a href="https://bugzilla.redhat.com/show_bug.cgi?id=452172">some work started by Ville Skyttä</a>, MySQLTuner is now included in Fedora 9 repositories:</p>
<p><code># cat /etc/fedora-release<br />
Fedora release 9 (Sulphur)<br />
# yum info mysqltuner<br />
Loaded plugins: fastestmirror, priorities, refresh-packagekit<br />
Loading mirror speeds from cached hostfile<br />
 * updates: mirrors.usc.edu<br />
 * fedora: mirror.unl.edu<br />
 * livna: mirrors.tummy.com<br />
Available Packages<br />
Name       : mysqltuner<br />
Arch       : noarch<br />
Version    : 0.9.1<br />
Release    : 4<br />
Size       : 11 k<br />
Repo       : updates<br />
Summary    : MySQL high performance tuning script<br />
URL        : http://mysqltuner.com/<br />
License    : GPLv3+<br />
Description: MySQLTuner is a MySQL high performance tuning script written in perl that will provide you with a snapshot of a MySQL server's health. Based<br />
           : on the statistics gathered, specific recommendations will be provided that will increase a MySQL server's efficiency and performance.  The<br />
           : script gives you automated MySQL tuning that is on the level of what you would receive from a MySQL DBA.</code></p>
<p>In addition to Ville, I'd like to thank Jason Tibbitts for reviewing and approving the new package.</p>
<p><a href="http://rackerhacker.com/2008/06/27/mysqltuner-is-now-a-fedora-9-package/">MySQLTuner is now a Fedora 9 package!</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/06/27/mysqltuner-is-now-a-fedora-9-package/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL: ERROR 1040: Too many connections</title>
		<link>http://rackerhacker.com/2008/06/24/mysql-error-1040-too-many-connections/</link>
		<comments>http://rackerhacker.com/2008/06/24/mysql-error-1040-too-many-connections/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 17:00:47 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=315</guid>
		<description><![CDATA[If you run a fairly busy and/or badly configured MySQL server, you may receive something like this when attempting to connect: # mysql ERROR 1040: Too many connections MySQL is telling you that it is handling the maximum connections that you have configured it to handle. By default, MySQL will handle 100 connections simultaneously. This [...]<p><a href="http://rackerhacker.com/2008/06/24/mysql-error-1040-too-many-connections/">MySQL: ERROR 1040: Too many connections</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>If you run a fairly busy and/or badly configured MySQL server, you may receive something like this when attempting to connect:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># mysql
ERROR 1040: Too many connections</pre></div></div>

<p>MySQL is telling you that it is handling the maximum connections that you have configured it to handle.  By default, MySQL will handle 100 connections simultaneously.  This is very similar to the situation when Apache reaches the MaxClients setting.  You won't even be able to connect to MySQL to find out what is causing the connections to be used up, so you will be forced to restart the MySQL daemon to troubleshoot the issue.</p>
<p>What causes MySQL to run out of connections?  Here's a list of reasons that may cause MySQL to run out of available connections, listed in order of what you should check:</p>
<p><strong>Bad MySQL configuration</strong><br />
Verify that you have set MySQL's buffers and caches to appropriate levels for the type of data you're storing and the types of queries that you are running.  One quick way to check this information is via <a href="http://rackerhacker.com/mysqltuner/">MySQLTuner</a>.  The script will tell you how well your server is performing along with the corrections you should make.  Running the script only takes a few moments and it doesn't require a DBA to decipher the results.</p>
<p><strong>Data storage techniques</strong><br />
Remember that MySQL works best when moving vertically, not horizontally.  If you have a table with 20 columns, breaking it into two tables with 10 columns each will improve performance.  Even if you need to join the two tables together to get your data, it will still perform at a higher level.  Also, use the right data types for the right data.  If you're storing an integer only, don't use a CHAR or VARCHAR data type.  If your integer will be small, then use something like a TINYINT or SMALLINT rather than INT.  This means MySQL will use less memory, pull less data from the disk, and have higher performing joins.</p>
<p><strong>Slow queries</strong><br />
These are generally pretty easy to fix.  If you have queries that don't use indexes, or if queries run slowly with indexes in place, you need to rethink how you're pulling your data.  Should your data be split into multiple tables?  Are you pulling more data than you need?  Keep these questions in mind, enable the slow query log, and re-work your queries to find where the bottlenecks occur.</p>
<p><strong>Division of labor</strong><br />
Most people who use MySQL have a dynamic site written in a scripting language, like PHP, Perl or Python.  It's obvious that your server will need to do some work to parse the scripts, send data back to the client, and communicate with MySQL.  If you find that your server is overworked, consider moving MySQL to its own dedicated hardware.  Among many other things, this will reduce your disk I/O, allow you to better utilize memory, and it will help you when you need to scale even further.  Be sure to keep your MySQL server close to your web servers, however, as increased latency will only make your performance problem first.</p>
<p><strong>Right hardware</strong><br />
Do you have the right hardware for the job?  Depending on your budget, you may need to make the move for hardware that gives you better I/O throughput and more useable cores.  MySQL is a multi-threaded application, so it can utilize multiple cores to serve data quickly.  Also, writing logs, reading tables, and adjusting indexes are disk-intensive tasks that need fast drives to perform well.  When you look for a dedicated server for MySQL, be sure to choose multiple-core machines with low latency RAM, fast drives (SCSI/SAS), and a reliable network interface.</p>
<p>By reviewing these bottlenecks, you can reduce the load on your MySQL server without increasing your maximum connections.  Simply increasing the maximum connections <strong>is a very bad idea</strong>.  This can cause MySQL to consume unnecessary resources on your server and it may lead to an unstable system (crash!).</p>
<p><a href="http://rackerhacker.com/2008/06/24/mysql-error-1040-too-many-connections/">MySQL: ERROR 1040: Too many connections</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/06/24/mysql-error-1040-too-many-connections/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>MySQLTuner 0.9.1 available for Mandriva users</title>
		<link>http://rackerhacker.com/2008/06/21/mysqltuner-091-available-for-mandriva-users/</link>
		<comments>http://rackerhacker.com/2008/06/21/mysqltuner-091-available-for-mandriva-users/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 02:54:03 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mandriva]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=314</guid>
		<description><![CDATA[Thanks to some hard work from Oden Eriksson and Frederik Himpe, MySQLTuner 0.9.1 is available in a Mandriva package. MySQLTuner 0.9.1 available for Mandriva users is a post from: Major Hayden's Racker Hacker blog. Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.<p><a href="http://rackerhacker.com/2008/06/21/mysqltuner-091-available-for-mandriva-users/">MySQLTuner 0.9.1 available for Mandriva users</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Thanks to some hard work from Oden Eriksson and Frederik Himpe, MySQLTuner 0.9.1 is available in a <a href="http://rpmfind.net/linux/RPM/mandriva/devel/cooker/i586/media/contrib/release/mysqltuner-0.9.1-1mdv2009.0.noarch.html">Mandriva package</a>.</p>
<p><a href="http://rackerhacker.com/2008/06/21/mysqltuner-091-available-for-mandriva-users/">MySQLTuner 0.9.1 available for Mandriva users</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/06/21/mysqltuner-091-available-for-mandriva-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLTuner v0.9.1 is now available</title>
		<link>http://rackerhacker.com/2008/06/18/mysqltuner-v091-is-now-available/</link>
		<comments>http://rackerhacker.com/2008/06/18/mysqltuner-v091-is-now-available/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 02:53:58 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=312</guid>
		<description><![CDATA[MySQLTuner v0.9.1 is now available! This long-awaited update includes bug fixes, feature enhancements, and compatibility improvements. MySQLTuner now checks for fragmented tables When deletes or updates are made on tables, MySQL will often leave holes behind that it hopes to fill in later. If the size and quantity keep climbing, the holes can cause performance [...]<p><a href="http://rackerhacker.com/2008/06/18/mysqltuner-v091-is-now-available/">MySQLTuner v0.9.1 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>MySQLTuner v0.9.1 is <a href="http://rackerhacker.com/mysqltuner/">now available</a>!  This long-awaited update includes bug fixes, feature enhancements, and compatibility improvements.</p>
<p><strong>MySQLTuner now checks for fragmented tables</strong><br />
When deletes or updates are made on tables, MySQL will often leave holes behind that it hopes to fill in later.  If the size and quantity keep climbing, the holes can cause performance degradation for writes and reads.  Fragmentation can be corrected with <code>OPTIMIZE TABLE</code>, and the script recommends it if needed.</p>
<p><strong>Fixed a bug where zero-length passwords cause authentication to repeat</strong><br />
The script will now allow you to have a zero-length password, and it won't re-prompt for the password over and over again.</p>
<p><strong>Fixed a wget 1.11 timestamp bug</strong><br />
This can cause the version check to fail if the .wgetrc has timestamps enabled.</p>
<p><strong>Corrected a math error in the temporary table calculation</strong><br />
The script should now be able to more accurately determine the relative quantity of temporary tables created on disk.</p>
<p><strong>Fixed an error when the status variable <code>Open_tables</code> returned zero</strong><br />
The divide by zero error has been corrected.</p>
<p><strong>Added table cache changes in preparation for MySQL 6</strong><br />
It's still in the early stages, but MySQLTuner should have full support for MySQL 6 by the time it reaches RC status.</p>
<p><strong>Thanks for the contributions!</strong><br />
This update would not have been possible without help from Ville Skytta, Trent Hornibrook and Luuk Vosslamber.</p>
<p>To download the latest copy, visit the <a href="http://rackerhacker.com/mysqltuner/">MySQLTuner page</a>.</p>
<p><a href="http://rackerhacker.com/2008/06/18/mysqltuner-v091-is-now-available/">MySQLTuner v0.9.1 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/06/18/mysqltuner-v091-is-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remove backticks from MySQL dumps</title>
		<link>http://rackerhacker.com/2008/06/18/remove-backticks-from-mysql-dumps/</link>
		<comments>http://rackerhacker.com/2008/06/18/remove-backticks-from-mysql-dumps/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 17:00:01 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sed]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=307</guid>
		<description><![CDATA[I found myself in a peculiar situation last week. I'd been asked to downgrade a server from MySQL 4.1 to MySQL 3.23. Believe me, I tried to advise against the request, but I didn't succeed. I made a MySQL 3.23 compatible dump with --compatible=mysql323, but the dump came out with backticks around the database names. [...]<p><a href="http://rackerhacker.com/2008/06/18/remove-backticks-from-mysql-dumps/">Remove backticks from MySQL dumps</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>I found myself in a peculiar situation last week.  I'd been asked to downgrade a server from MySQL 4.1 to MySQL 3.23.  Believe me, I tried to advise against the request, but I didn't succeed.</p>
<p>I made a MySQL 3.23 compatible dump with <code>--compatible=mysql323</code>, but the dump came out with backticks around the database names.  This works with some 3.23 versions, but it doesn't work with others.  Apparently RHEL 3's MySQL 3.23 is one of those versions where it simply won't work.</p>
<p>This sed line came in handy to strip the backticks from the <code>USE</code> lines in the dump:</p>
<p><code>sed -e "s/^USE \`\(.*\)\`/USE \1/g"</code></p>
<p><a href="http://rackerhacker.com/2008/06/18/remove-backticks-from-mysql-dumps/">Remove backticks from MySQL dumps</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/06/18/remove-backticks-from-mysql-dumps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screencast topic requests?</title>
		<link>http://rackerhacker.com/2008/06/12/screencast-topic-requests/</link>
		<comments>http://rackerhacker.com/2008/06/12/screencast-topic-requests/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 16:00:14 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[screencasts]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=308</guid>
		<description><![CDATA[I've received some great feedback on my first screencast. The suggestions have been helpful, and the compliments have made me want to create more free screencasts. At this point, I'm opening it up to you - what would you like to learn? Of course, I'm still planning to make a full set of screencasts for [...]<p><a href="http://rackerhacker.com/2008/06/12/screencast-topic-requests/">Screencast topic requests?</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>I've received some great feedback on my first <a href="http://rackerhacker.com/2008/06/04/screencast-write-a-php-script-to-query-mysql/">screencast</a>.  The suggestions have been helpful, and the compliments have made me want to create more free screencasts.</p>
<p>At this point, I'm opening it up to you - what would you like to learn?  Of course, I'm still planning to make a full set of screencasts for the MySQL DBA certification, but that will come later.</p>
<p><a href="http://rackerhacker.com/2008/06/12/screencast-topic-requests/">Screencast topic requests?</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/06/12/screencast-topic-requests/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MySQL: Can&#039;t drop one or more of the requested users</title>
		<link>http://rackerhacker.com/2008/06/11/mysql-cant-drop-one-or-more-of-the-requested-users/</link>
		<comments>http://rackerhacker.com/2008/06/11/mysql-cant-drop-one-or-more-of-the-requested-users/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 23:59:37 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=300</guid>
		<description><![CDATA[MySQL has quite a few cryptic error messages, and this one is one of the best: mysql&#62; DROP USER 'forums'@'db1.myserver.com'; ERROR 1268 (HY000): Can't drop one or more of the requested users Naturally, I was quite interested to know why MySQL wasn't going to allow me to remove this user. There was nothing special about [...]<p><a href="http://rackerhacker.com/2008/06/11/mysql-cant-drop-one-or-more-of-the-requested-users/">MySQL: Can't drop one or more of the requested users</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>MySQL has quite a few cryptic error messages, and this one is one of the best:</p>
<p><code>mysql&gt; DROP USER 'forums'@'db1.myserver.com';<br />
ERROR 1268 (HY000): Can't drop one or more of the requested users</code></p>
<p>Naturally, I was quite interested to know why MySQL wasn't going to allow me to remove this user.  There was nothing special about the user, but then again, this wasn't a server that I personally managed, so I wasn't sure what kind of configuration was in place.</p>
<p>It's always a good idea to get your bearings, so I checked the current grants:</p>
<pre><code>mysql> SHOW GRANTS FOR 'forums'@'db1.myserver.com';
+----------------------------------------------------------------------+
| Grants for forums@db1.myserver.com                                   |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'forums'@'db1.myserver.com' WITH GRANT OPTION  |
+----------------------------------------------------------------------+
1 row in set (0.00 sec)</code></pre>
<p>The GRANT OPTION was causing my grief.  It was the only privilege that the user had on the server.  I revoked the privilege and attempted to drop the user yet again:</p>
<p><code>mysql&gt; REVOKE GRANT OPTION ON *.* FROM 'forums'@'db1.myserver.com';<br />
Query OK, 0 rows affected (0.00 sec)</p>
<p>mysql&gt; DROP USER 'forums'@'db1.myserver.com';<br />
Query OK, 0 rows affected (0.00 sec)</code></p>
<p>It's key to remember that revoking the GRANT OPTION is a completely separate process.  Revoking ALL PRIVILEGES doesn't include GRANT OPTION, so be sure to specify it separately:</p>
<p><code>mysql&gt; REVOKE ALL PRIVILEGES, GRANT OPTION ON *.* FROM 'user'@'host';</code></p>
<p><a href="http://rackerhacker.com/2008/06/11/mysql-cant-drop-one-or-more-of-the-requested-users/">MySQL: Can't drop one or more of the requested users</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/06/11/mysql-cant-drop-one-or-more-of-the-requested-users/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Backing up MySQL to Amazon&#039;s S3</title>
		<link>http://rackerhacker.com/2008/06/05/backing-up-mysql-to-amazons-s3/</link>
		<comments>http://rackerhacker.com/2008/06/05/backing-up-mysql-to-amazons-s3/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 00:18:49 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=306</guid>
		<description><![CDATA[I received an e-mail from Tim Linden about a post he made in his blog about backing up MySQL data to Amazon's S3. The article goes over installing the Net::Amazon::S3 Perl module via WHM (which is handy for the cPanel users). However, if you're not a cPanel user, you can install it via CPAN: # [...]<p><a href="http://rackerhacker.com/2008/06/05/backing-up-mysql-to-amazons-s3/">Backing up MySQL to Amazon's S3</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>I received an e-mail from <a href="http://www.timlinden.com/">Tim Linden</a> about a <a href="http://www.timlinden.com/blog/server/backup-mysql-amazon-s3/">post he made in his blog</a> about backing up MySQL data to <a href="http://en.wikipedia.org/wiki/Amazon_S3">Amazon's S3</a>.</p>
<p>The article goes over installing the Net::Amazon::S3 Perl module via WHM (which is handy for the cPanel users).  However, if you're not a cPanel user, you can install it via CPAN:</p>
<p><code># perl -MCPAN -e 'install Net::Amazon::S3'</code></p>
<p>If you'd rather install it through Webmin, go to the 'Others' section, and click 'Perl Modules'.</p>
<p>Also, Tim mentions configuring a <a href="http://www.rjonna.com/ext/s3fox.php">Firefox extension for accessing S3</a> that works very well.  However, I find myself using Safari most often, so I prefer to use <a href="http://www.jungledisk.com/">Jungle Disk</a> or <a href="http://www.panic.com/transmit/">Transmit</a> on my Mac.</p>
<p>Overall, it's a great post, and I'm glad Tim told me about it!</p>
<p><a href="http://rackerhacker.com/2008/06/05/backing-up-mysql-to-amazons-s3/">Backing up MySQL to Amazon's S3</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/06/05/backing-up-mysql-to-amazons-s3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLTuner v0.9.0 is now available</title>
		<link>http://rackerhacker.com/2008/04/06/mysqltuner-v090-is-now-available/</link>
		<comments>http://rackerhacker.com/2008/04/06/mysqltuner-v090-is-now-available/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 14:30:28 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=288</guid>
		<description><![CDATA[MySQLTuner v0.9.0 is now available. There is a bug fix and also a new feature! Fixed a bug in the enumeration/sizing of tables in MySQL 5 In MySQL 5 on some distributions, a NULL is returned for the storage engine and data length. Luuk Vosslamber quickly e-mailed me about the bug yesterday and it has [...]<p><a href="http://rackerhacker.com/2008/04/06/mysqltuner-v090-is-now-available/">MySQLTuner v0.9.0 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>MySQLTuner v0.9.0 is <a href="http://rackerhacker.com/mysqltuner/">now available</a>.  There is a bug fix and also a new feature!</p>
<p><strong>Fixed a bug in the enumeration/sizing of tables in MySQL 5</strong><br />
In MySQL 5 on some distributions, a NULL is returned for the storage engine and data length.  Luuk Vosslamber quickly e-mailed me about the bug yesterday and it has been fixed.</p>
<p><strong>MySQLTuner version checking</strong><br />
MySQLTuner will now check to see if a new version is available when the script runs.  You can disable the check with the <code>--skipversion</code> option if you do not wish to perform the check.</p>
<p>The version check does not submit any information about the server, the MySQL installation, or any of your MySQL data.  It simply queries a page on mysqltuner.com with the version number of your currently running script.  Based on the value returned by the page, MySQLTuner will alert you if a new version is available.</p>
<p>To download the new version right now, please go to the <a href="http://rackerhacker.com/mysqltuner/">project page </a>and use the download links.</p>
<p><a href="http://rackerhacker.com/2008/04/06/mysqltuner-v090-is-now-available/">MySQLTuner v0.9.0 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/04/06/mysqltuner-v090-is-now-available/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQLTuner v0.8.9 is now available</title>
		<link>http://rackerhacker.com/2008/04/05/mysqltuner-v089-is-now-available/</link>
		<comments>http://rackerhacker.com/2008/04/05/mysqltuner-v089-is-now-available/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 16:03:14 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=287</guid>
		<description><![CDATA[MySQLTuner v0.8.9 is now available.  There are a few bug fixes, performance improvements, and readability adjustments. Table enumeration and sizing can now be skipped I've received reports that MySQLTuner will stall while enumerating tables on servers that contain a lot of tables or a lot of large tables.  You can now use the --skipsize option [...]<p><a href="http://rackerhacker.com/2008/04/05/mysqltuner-v089-is-now-available/">MySQLTuner v0.8.9 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>MySQLTuner v0.8.9 is <a title="MySQLTuner v0.8.9" href="http://rackerhacker.com/mysqltuner/">now available</a>.  There are a few bug fixes, performance improvements, and readability adjustments.</p>
<p><strong>Table enumeration and sizing can now be skipped</strong><br />
I've received reports that MySQLTuner will stall while enumerating tables on servers that contain a lot of tables or a lot of large tables.  You can now use the <code>--skipsize</code> option to skip over the table enumeration process and let the script finish.  However, you will not be able to receive some recommendations since the script was unable to determine which storage engines are enabled.</p>
<p><strong>New table enumeration and sizing method for MySQL 5</strong><br />
The script now uses information_schema to enumerate tables and their sizes for MySQL 5 servers.  This has provided a drastic improvement in performance.</p>
<p><strong>Readability improvements</strong><br />
The recommendations for query_cache_limit and max_heap_table_size/tmp_table_size have been improved.</p>
<p>As always, I welcome your suggestions, bug reports, and questions!  Please feel free to drop a comment on this blog posting or send me an e-mail (it's in the script).  Also, don't forget to <a title="MySQLTuner Mailing List" href="http://rackerhacker.com/mysqltuner/">sign up for the MySQLTuner version announcement list</a>.</p>
<p><a href="http://rackerhacker.com/2008/04/05/mysqltuner-v089-is-now-available/">MySQLTuner v0.8.9 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/04/05/mysqltuner-v089-is-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Importing MySQL dumps made on 64-bit servers</title>
		<link>http://rackerhacker.com/2008/03/21/importing-mysql-dumps-made-on-64-bit-servers/</link>
		<comments>http://rackerhacker.com/2008/03/21/importing-mysql-dumps-made-on-64-bit-servers/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 17:51:56 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/2008/03/21/importing-mysql-dumps-made-on-64-bit-servers/</guid>
		<description><![CDATA[It's tough to find examples of dumps that can't be properly reimported on other servers. However, if you have a 64-bit server, and you make a MySQL dump file from it, you may see this issue when importing the dump on a 32-bit MySQL server: ERROR 1118 (42000) at line 1686: Row size too large. [...]<p><a href="http://rackerhacker.com/2008/03/21/importing-mysql-dumps-made-on-64-bit-servers/">Importing MySQL dumps made on 64-bit servers</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>It's tough to find examples of dumps that can't be properly reimported on other servers.  However, if you have a 64-bit server, and you make a MySQL dump file from it, you may see this issue when importing the dump on a 32-bit MySQL server:</p>
<p><code>ERROR 1118 (42000) at line 1686: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs</code></p>
<p>You really don't have any options in this situation.  You'll need to adjust your table on the 64-bit server for good and then make a new dump file, or you will just have to live with the fact that it can't be imported into a 32-bit instance of MySQL.</p>
<p><a href="http://rackerhacker.com/2008/03/21/importing-mysql-dumps-made-on-64-bit-servers/">Importing MySQL dumps made on 64-bit servers</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/03/21/importing-mysql-dumps-made-on-64-bit-servers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLTuner v0.8.6 is now available</title>
		<link>http://rackerhacker.com/2008/02/26/mysqltuner-v086-is-now-available/</link>
		<comments>http://rackerhacker.com/2008/02/26/mysqltuner-v086-is-now-available/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 03:24:52 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/2008/02/26/mysqltuner-v086-is-now-available/</guid>
		<description><![CDATA[Version 0.8.6 of MySQLTuner is now available. It contains a few bug fixes and readability improvements: Newlines are placed between the sections for increased readability Each section now contains extra lines to set the sections apart. It makes the output a little longer, but easier to read as well. Storage engine status color bug Even [...]<p><a href="http://rackerhacker.com/2008/02/26/mysqltuner-v086-is-now-available/">MySQLTuner v0.8.6 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Version 0.8.6 of MySQLTuner is <a href="http://mysqltuner.com/">now available</a>.  It contains a few bug fixes and readability improvements:</p>
<p><strong>Newlines are placed between the sections for increased readability</strong><br />
Each section now contains extra lines to set the sections apart.  It makes the output a little longer, but easier to read as well.</p>
<p><strong>Storage engine status color bug</strong><br />
Even if the --nocolor option was passed, the storage engine statuses were being shown in color.</p>
<p><strong>Excluded information_schema from storage engine calculations</strong><br />
The information_schema database was causing extra MEMORY tables to show up in the calculations. They're now excluded when the calculations are being made.</p>
<p>Shawn Ashlee has also been added as a contributor as he's been a constant help for the project.  He's recommended implementation ideas and he has worked to create internal MySQLTuner RPM's for use at Rackspace.  Thanks, Shawn!</p>
<p><a href="http://rackerhacker.com/2008/02/26/mysqltuner-v086-is-now-available/">MySQLTuner v0.8.6 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/02/26/mysqltuner-v086-is-now-available/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MySQLTuner v0.8.5 is now available</title>
		<link>http://rackerhacker.com/2008/02/11/mysqltuner-v085-is-now-available/</link>
		<comments>http://rackerhacker.com/2008/02/11/mysqltuner-v085-is-now-available/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 18:02:11 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqltuner]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/2008/02/11/mysqltuner-v085-is-now-available/</guid>
		<description><![CDATA[To get the latest copy, head over to the download page! Here's the changes from 0.8.0 to 0.8.5 for MySQLTuner: Fixed a copy/paste bug There was a bug in 0.8.0 that displayed "OK" in red rather than showing "!!". It affected the informational "--" outputs as well. Thanks to Nils Breunese for pointing out that [...]<p><a href="http://rackerhacker.com/2008/02/11/mysqltuner-v085-is-now-available/">MySQLTuner v0.8.5 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>To get the latest copy, head over to the <a href="http://mysqltuner.com/">download page</a>! Here's the changes from 0.8.0 to 0.8.5 for MySQLTuner:</p>
<p><strong>Fixed a copy/paste bug</strong><br />
There was a bug in 0.8.0 that displayed "OK" in red rather than showing "!!".  It affected the informational "--" outputs as well.  Thanks to Nils Breunese for pointing out that confusing bug!</p>
<p><strong>Fixed a data length calculation bug with MySQL 4.0</strong><br />
If the script was run against MySQL 4.0 servers, it would return the Max_data_length rather than Data_length, and this was returning some horribly incorrect results for the size of tables in use with certain storage engines.</p>
<p><strong>Fixed a key buffer calculation bug with MySQL 4.0</strong><br />
It's not possible to ask a MySQL 4.0 server about how much of the key buffer is in use, so the functionality for MySQL 4.0 now matches 3.23 for key buffer calculations.</p>
<p><strong>Added a notification for well-optimized servers</strong><br />
For situations where MySQLTuner can't make any recommendations for performance increases, it actually says so now.</p>
<p><strong>Version bump to 0.8.5</strong><br />
It's getting close to a full 1.0 release!</p>
<p><a href="http://rackerhacker.com/2008/02/11/mysqltuner-v085-is-now-available/">MySQLTuner v0.8.5 is now available</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/02/11/mysqltuner-v085-is-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

