<?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>Hack Admin &#187; Database</title>
	<atom:link href="http://www.hackadmin.com/tag/database/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hackadmin.com</link>
	<description></description>
	<lastBuildDate>Tue, 16 Mar 2010 21:31:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Identifying Slow MySQL queries</title>
		<link>http://www.hackadmin.com/2010/02/13/identifying-slow-mysql-queries/</link>
		<comments>http://www.hackadmin.com/2010/02/13/identifying-slow-mysql-queries/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 17:34:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Aashish]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[querry]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.hackadmin.com/?p=213</guid>
		<description><![CDATA[MySQL can sometimes create big problems on a server when you have users abusing it.
This article will teach you how to correctly identify the queries that are creating a problem for your server.]]></description>
			<content:encoded><![CDATA[<p>Article by <a href="http://www.hackadmin.com/aashish/">Aashish</a></p>
<p>MySQL can sometimes create big problems on a server when you have users abusing it.<br />
This article will teach you how to correctly identify the queries that are creating a problem for your server.</p>
<p><span id="more-213"></span><br />
MySQL can log those queries that are taking longer then X seconds but this future is not turned on by default.<br />
Here’s how you turn it on:<br />
Login to your server as root<br />
Open my.cnf with your favorite editor. Example:<br />
vim /etc/my.cnf</p>
<p>Into the [mysqld] section add the fallowing lines<br />
log-slow-queries = /var/log/mysql-slow.log<br />
long_query_time = 3</p>
<p>This is just an example. You can use any file name that you want and you can modify the long_query_time to any value. In this example I will be logging to /var/log/mysql-slow.log any queries that are taking longer then 3 seconds.</p>
<p>Go ahead and save the configuration.<br />
For vim: CTRL+X and YES</p>
<p>Now we have to actually create the log file.<br />
touch /var/log/mysql-slow.log</p>
<p>Now we are changing the owner of the file so that mysql and actually write to it.<br />
chown mysql.root /var/log/mysql-slow.log</p>
<p>Now we restart mysql<br />
service mysql restart</p>
<p>It should restart successfully. If it doesn’t check that you didn’t brake my.cnf by examining the error file in your data directory.</p>
<p>Wait a few minutes and then examine the slow queries log<br />
A few examples on how to do it:</p>
<p>cat /var/log/mysql-slow.log<br />
tail /var/log/mysql-slow.log<br />
tail -50 /var/log/mysql-slow.log</p>
<p>After you have identified the offending query go ahead and optimize or remove it.<br />
Again test the results by looking at your server load and the mysql slow queries log.</p>
<p>After you fixed all the problems go ahead and comment the slow queries logging as it will slow your server a bit if you leave it on. my.cnf should now look similar to this:</p>
<p>#log-slow-queries = /var/log/mysql-slow.log<br />
#long_query_time = 3</p>
<p>And don’t forget to restart MySQL after this.</p>
<p>service mysql restart</p>
<p>Hope this helps ! </p>
<p>Install MySQL Performance Tuning Primer Script</p>
<p>Tuning the performance of MySQL can be a really hard job to do.<br />
There are many things to consider and no two servers are identical so there is no universal solution.<br />
Tuning Primer is a script that will help you tune your mysql installation by providing very healthy recommendations based on past mysql records.<br />
For the script to be efficient you must run the mysql server for at least 48 hours.<br />
Installation is extremely simple:</p>
<p>Download the script<br />
wget http://day32.com/MySQL/tuning-primer.sh</p>
<p>Change the permissions for the file<br />
chmod 755 tuning-primer.sh</p>
<p>Run it<br />
./tuning-primer.sh</p>
<p>Apply the sugesttions</p>
<p>                    Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackadmin.com/2010/02/13/identifying-slow-mysql-queries/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Beauty of mysqlcheck</title>
		<link>http://www.hackadmin.com/2009/06/22/the-beauty-of-mysqlcheck/</link>
		<comments>http://www.hackadmin.com/2009/06/22/the-beauty-of-mysqlcheck/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 23:45:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Repair]]></category>
		<category><![CDATA[checking all mysql tables in a database]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[mysqlcheck]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[slave]]></category>

		<guid isPermaLink="false">http://www.hackadmin.com/?p=37</guid>
		<description><![CDATA[I manage a ton of mysql databases, from single wordpress instances, to clusters, to systems that have a core data structure that selectively replicates out to as many as 50 systems.   Fortunately, or maybe not, they seldom have issues and after setup, other than disk space issues, I seldom have to touch them.
Recently, as I [...]]]></description>
			<content:encoded><![CDATA[<p>I manage a ton of mysql databases, from single wordpress instances, to clusters, to systems that have a core data structure that selectively replicates out to as many as 50 systems.   Fortunately, or maybe not, they seldom have issues and after setup, other than disk space issues, I seldom have to touch them.</p>
<p>Recently, as I was migrating a set of DBs from an aquired company onto new hardware in a new location, I ran across a DB that seemed to consistently become corrupt.  It was usually the larger tables and typically on the slave system.  At first, it was bad enough that I blamed the hardware.  So the box was replaced and things went well for a while.  Recently the head developer for this system came to me with corrupted tables.  He was seeing the output in his code and was feeding me the tables so that I could repair them.  We did them one by one and it became clear that I really needed to check the whole DB.</p>
<p><span id="more-37"></span>It would have been relatively simple to throw together a script to do this, but I was apparenlty feeling lazy and did a google search instead.  Low an behold, I ran across a utility that I have read about countless times in the past, and I&#8217;m sure at some point I had actually run.   mysqlcheck.  I believe this nice little script has been packaged with mysql since the late 3.x strains.</p>
<p>At any rate, I think I&#8217;m documenting it here so that I won&#8217;t forget 6 months from now when I need the same functionality again.</p>
<p>So, on the system in question, I had about 20 instances and only one of them needed to be checked.  This is a big deal as the check script, or the repair command, or the optimize command will lock up your tables when it does it&#8217;s work and there were 19 web/data instances running on this box that I didn&#8217;t want to bother.  The check script is smart enough to handle this situation with the &#8211;databases flag.  Simply add the names of the instances that you want the check after that flag and you&#8217;re off.</p>
<p>Obviously, you want to do your best to stop traffic to the instances you intend to repair.  Can you get away with not doing this?  Well sure, remember however that the check, repair and optimize functions will lock up the tables in question when they do their work.  What does this mean?  Well, it means that none of your inbound querys will be run, they will queue up behind the repair functions until those functions finish.  In a really bad scenario, it&#8217;s possible that each of your querys will be bound to an apache instance and your web server will start eating up memory and potentially crash the whole box.  Thus, it&#8217;s in your best interest to stop as much traffic as possible before you start.</p>
<p>In my case, the usage of mysqlcheck looked like this:</p>
<p>mysqlcheck -uroot -pxxxxx &#8211;auto-repair &#8211;optimize &#8211;databases broken_db</p>
<p>The output is fantastic, it tells you where it&#8217;s at and what is broken or ok.  If you don&#8217;t want to see the output, if you intend to run from cron or whatever, there is a &#8211;silent option as well.</p>
<p>At any rate, leave it to mysql to simplify your admin a bit.  Run the mysqlcheck without any options and you&#8217;ll see all the options.  Takes 5 minutes to read through them.</p>
<p>That&#8217;s it, happy mysql&#8217;ing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackadmin.com/2009/06/22/the-beauty-of-mysqlcheck/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>When to use MySQL BlackHole Tables</title>
		<link>http://www.hackadmin.com/2008/06/14/when-to-use-mysql-blackhole-tables/</link>
		<comments>http://www.hackadmin.com/2008/06/14/when-to-use-mysql-blackhole-tables/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 18:09:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[BlackHole Table Type]]></category>
		<category><![CDATA[data dump]]></category>
		<category><![CDATA[data import]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[mysql server]]></category>
		<category><![CDATA[relay]]></category>
		<category><![CDATA[slave]]></category>
		<category><![CDATA[table types]]></category>

		<guid isPermaLink="false">http://www.hackadmin.com/2008/06/14/when-to-use-mysql-blackhole-tables/</guid>
		<description><![CDATA[We read about the black hole table type a long time ago and it&#8217;s kind of been a running joke &#8211; why in the hell would somebody want to insert into a black hole?  Many times it&#8217;s been suggested as the solution to all of our data problems&#8230; Just swap out all the InnoDB [...]]]></description>
			<content:encoded><![CDATA[<p>We read about the black hole table type a long time ago and it&#8217;s kind of been a running joke &#8211; why in the hell would somebody want to insert into a black hole?  Many times it&#8217;s been suggested as the solution to all of our data problems&#8230; Just swap out all the InnoDB tables for black hole and ta daaa!!!  No more capacity issues.</p>
<p>So as you might guess it was merely coincidence when we discovered it&#8217;s functionality.  Here&#8217;s the scenario:</p>
<p><span id="more-10"></span>1 DRBD/HA Master MySQL Server<br />
1 DRBD/HA Relay Slave<br />
20 Standalone Slaves</p>
<p>We found with one of our applications that it made alot of sense to keep some tables local and pull some from the master.  The tables that were kept locally on the 20 web serving boxes are rolled up every 10 minutes and their data is sent on for processing.  The tables that are replicated are slave to the Relay Slave, our middle man.</p>
<p><img src="http://www.hackadmin.com/wp-content/uploads/2008/06/bh.png" alt="bh.png" /></p>
<h3>So where does black hole fit in?</h3>
<p>We actually figured it out on the initial import of data.  The beginning database size was around 2GB.  We did the full import to the master and at the time, the relay slave was configured with InnoDB tables.  In addition, we were doing the dump as data infile.   Using data infile in a replication scenario works as follows.</p>
<ol>
<li>The entire file is imported to the master.</li>
<li>Once the file is completed on the master, the relay slave then begins to import the data.</li>
<li>Once the relay slave has completed the file, then the slaves begin to load the data.</li>
</ol>
<p>In our case these files were quite large.  What we discovered was, for each file we were going to have a hella long wait before it every got to the slaves (which is where we actually needed the data).  The solution?  Don&#8217;t write the data to the middle man.  Since binloging is enabled on the relay slave, all of the associated SQL commands are being passed from the Master to the Relay Slave.  Since we never planned on using the Relay Slave in any capacity other than passing on data, there&#8217;s no need to write the commands to disk.  Hence, Black Hole.  All of the SQL replication commands are executed on the Relay Slave, but the are basically sent to /dev/null so you save the write time.</p>
<p>The utility of this setup really stood out when using data infile because of the size of the files, it was really easy to see the lag in the middle.  It will probably not be as important with standard inserts and updates to the master as those happen rather quickly.  However, in the event of a problem, should we have to restore a table or whatever, we know moving forward we are going to save that write time in the middle and possible spare some downtime.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackadmin.com/2008/06/14/when-to-use-mysql-blackhole-tables/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
