<?xml version="1.0" encoding="UTF-8"?>

<rss version='2.0' 
     xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
     xmlns:doap="http://usefulinc.com/ns/doap#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

    <channel>
        <!-- This XML Feed shows details for the page replication 
             and everything recently tagged replication -->
        <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/
          </creativeCommons:license>
        <title>replication on SWiK</title>
		<link>http://swik.net/replication</link>
        <doap:name>replication</doap:name>
        <doap:description></doap:description>
        <description></description> 
	  <!-- see doap:description for full description -->
        <link>http://swik.net/replication</link>
        
        <pubDate></pubDate>
        <lastBuildDate></lastBuildDate>
            
        <item>
            <title>MySQL Sandbox in Launchpad</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/MySQL+Sandbox+in+Launchpad/cha8g</link>
            <description>Quick painless install of side MySQL server in isolation. MySQL Sandbox is a tool for installing one or more MySQL servers in isolation, without affecting other servers</description>
            
            <pubDate>Fri, 10 Oct 2008 12:04:27 -0700</pubDate>
        </item>
            
        <item>
            <title>MySQL: RENAME TABLE on Transactional Tables Can Jeopardize Slave Data</title>
            <link>http://swik.net/MySQL/Planet+MySQL/MySQL%3A+RENAME+TABLE+on+Transactional+Tables+Can+Jeopardize+Slave+Data/cg8cq</link>
            <description>&lt;p&gt;Do you have a master-slave MySQL set up?  Ever do DDL changes on the master?  You may be hit with a serious data integrity bug.  Read on.&lt;/p&gt;
&lt;p&gt;One of our clients does a regular &lt;code&gt;rename tables&lt;/code&gt; on the master to keep the current table small and archive off old data.  We&amp;#8217;d occasionally be hit by a &amp;#8216;duplicate key&amp;#8217; error on the slave on the current table and have to resolve it manually.  Digging into the issue, I managed to replicate it on demand and filed bug 39675 with MySQL, which subsequently has been verified and slated for fix, though from what it seems only in version 6.0.  The bug affects all versions of MySQL from 4.1 to 6.0.&lt;/p&gt;
&lt;p&gt;In a nutshell, here is what happens. The &lt;code&gt;rename tables&lt;/code&gt; command only checks for pending transactions or locks in the current session.  If there is a pending transaction in another session on the table being renamed, the rename will succeed, but the order in which the transaction is written to the binlog will be different from the order in which the transactions were applied on the master.  This means that the data on the slave will now be out of sync for this table.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a test-case:&lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;http://www.pythian.com/blogs/1285/mysql-rename-table-on-transactional-tables-can-jeopardize-slave-data#more-1285&quot;&gt;(more&amp;#8230;)&lt;/a&gt;&lt;/p&gt;</description>
            
            <pubDate>Thu, 09 Oct 2008 18:13:27 -0700</pubDate>
        </item>
            
        <item>
            <title>Three ways to know when a MySQL slave is about to start lagging</title>
            <link>http://swik.net/MySQL/Planet+MySQL/Three+ways+to+know+when+a+MySQL+slave+is+about+to+start+lagging/cg8cp</link>
            <description>&lt;p&gt;The trouble with slave lag is that you often can&#039;t see it coming.  Especially if the slave&#039;s load is pretty uniform, a slave that&#039;s at 90% of its capacity to keep up with the master can be indistinguishable from one that&#039;s at 5% of its capacity.&lt;/p&gt;
&lt;p&gt;So how can you tell when your slave is nearing its capacity to keep up with the master?  Here are three ways:&lt;/p&gt;
&lt;p&gt;One: watch for spikes of lag.  If you have Cacti (and these &lt;a href=&quot;http://code.google.com/p/mysql-cacti-templates/&quot;&gt;Cacti templates for MySQL&lt;/a&gt;) you can see this in the graphs.  If the graphs start to get a little bumpy, you can assume that the iceberg is floating higher and higher in the water, so to speak.  (Hopefully that&#039;s not too strange a metaphor.)  As the slave&#039;s routine work gets closer and closer to its capacity, you&#039;ll see these spikes get bigger and &quot;wider&quot;.  The front-side of the spike will always be less than a 45-degree angle in ordinary operation[1] but the back-side, when the slave is catching up after lagging behind, will become a gentler and gentler slope.&lt;/p&gt;
&lt;p&gt;Two: deliberately make a slave fall behind, then see how fast it can catch up.  This is sort of related to Method One.  The goal here is to explicitly see how steep the backside of that slope is.  If you stop a slave for an hour, then start it again and it catches up in one hour, it is running at 1/2 of its capacity.  (In case that&#039;s confusing: if you stop it at noon and restart it at 1:00, and it&#039;s caught up again at 2:00, it played all statements from 12:00 to 2:00 in 1 hour, so it went at 2x speed.)&lt;/p&gt;
&lt;p&gt;Three: measure it more scientifically.  Use &lt;a href=&quot;http://www.percona.com/percona-lab.html&quot;&gt;our patched server&lt;/a&gt;, which gives you a USER_STATISTICS table.&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&quot;&gt;PLAIN TEXT&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;SQL:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;mysql&amp;gt; &lt;span&gt;SELECT&lt;/span&gt; * &lt;span&gt;FROM&lt;/span&gt; INFORMATION_SCHEMA.USER_STATISTICS &lt;span&gt;WHERE&lt;/span&gt; USER=&lt;span&gt;&#039;#mysql_system#&#039;&lt;/span&gt;\G&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;*************************** &lt;span&gt;1&lt;/span&gt;. row ***************************&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; USER: &lt;span&gt;#mysql_system#&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160;TOTAL_CONNECTIONS: &lt;span&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;CONCURRENT_CONNECTIONS: &lt;span&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; CONNECTED_TIME: &lt;span&gt;46188&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;BUSY_TIME: &lt;span&gt;719&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ROWS_FETCHED: &lt;span&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ROWS_UPDATED: &lt;span&gt;1882292&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;SELECT_COMMANDS: &lt;span&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;UPDATE_COMMANDS: &lt;span&gt;580431&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; OTHER_COMMANDS: &lt;span&gt;338857&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160; &amp;#160;COMMIT_TRANSACTIONS: &lt;span&gt;1016571&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160;ROLLBACK_TRANSACTIONS: &lt;span&gt;0&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can compare the BUSY_TIME to one-half the CONNECTED_TIME (because there are two replication threads on the slave) to see how much of the time the slave thread was actively processing statements.  If the slave threads are always running, you can just use the server&#039;s uptime instead.&lt;/p&gt;
&lt;p&gt;[1] There are cases where this isn&#039;t true, especially if you&#039;re monitoring Seconds_behind_master instead of using &lt;a href=&quot;http://www.maatkit.org/&quot;&gt;mk-heartbeat&lt;/a&gt;, which is immune to this anomaly.&lt;/p&gt;
    &lt;hr style=&quot;margin:0;height:1px&quot;/&gt;
    &lt;p&gt;Entry posted by Baron Schwartz |
      &lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/#comments&quot;&gt;8 comments&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;Add to: &lt;a href=&quot;http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;title=Three ways to know when a MySQL slave is about to start lagging&quot; title=&quot;Bookmark this post on del.icio.us&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png&quot; alt=&quot;delicious&quot;/&gt;&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;title=Three ways to know when a MySQL slave is about to start lagging&quot; title=&quot;Digg this post on Digg.com&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png&quot; alt=&quot;digg&quot;/&gt;&lt;/a&gt; | &lt;a href=&quot;http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;title=Three ways to know when a MySQL slave is about to start lagging&quot; title=&quot;Submit this post on reddit.com&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png&quot; alt=&quot;reddit&quot;/&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;T=Three ways to know when a MySQL slave is about to start lagging&quot; title=&quot;Vote for this article on Netscape&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif&quot; alt=&quot;netscape&quot;/&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.google.com/bookmarks/mark?op=add&amp;amp;bkmk=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;title=Three ways to know when a MySQL slave is about to start lagging&quot; title=&quot;Add to Google Bookmarks&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png&quot; alt=&quot;Google Bookmarks&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
            
            <pubDate>Thu, 09 Oct 2008 18:13:27 -0700</pubDate>
        </item>
            
        <item>
            <title>Setting up MySQL monitoring with Nagios</title>
            <link>http://swik.net/MySQL/Planet+MySQL/Setting+up+MySQL+monitoring+with+Nagios/cg8cn</link>
            <description>&lt;p&gt;It&amp;#8217;s been a while since my last post! I have a few half-written entries, but I figured I just get one out there so I don&amp;#8217;t appear to have dropped off the face of the planet &lt;img src=&quot;http://tomictech.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;)&quot; class=&quot;wp-smiley&quot;/&gt; &lt;/p&gt;
&lt;p&gt;Being more of a DBA than a sysadmin myself, I&amp;#8217;ve noticed that there is a surprising dearth of information regarding how to actually get nagios set up to monitor MySQL, especially if you&amp;#8217;re not experienced with nagios.&lt;/p&gt;
&lt;p&gt;In my own experience, MySQL monitoring often ends up being a homegrown thing, especially if you&amp;#8217;re a small shop. It is definitely a good idea to consolidate all of your monitoring, DB-related or not, into one solution: roll-your-own monitoring solutions can be brittle and burn you in the end. One example that comes to mind, a few years back i had a quick perl-based script to monitor replication and set it to mail a few people based on some threshold. Took me 1 hour to write and worked well enough, except, six months later, when some package upgrades were done on the machine I had the monitoring script running on, the mailer stopped working, and we found out the hard way about an alert situation with our replication.&lt;/p&gt;
&lt;h3&gt;Nagios&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.nagios.org/&quot;&gt;Nagios&lt;/a&gt; is something your systems/operations people are probably familiar with. In case &lt;strong&gt;you &lt;/strong&gt;are the systems/ops person, it&amp;#8217;s a 15-20 minute process to &lt;a href=&quot;http://nagios.sourceforge.net/docs/3_0/quickstart.html&quot;&gt;get nagios installed&lt;/a&gt; on a typical ubuntu machine. Make sure to set up nagios with the embedded perl interpreter in case you decide to make use of this feature in the future. Once you have it set up and monitoring, here&amp;#8217;s how you can set up nagios to monitor your mysql databases:&lt;/p&gt;
&lt;p&gt;You can grab some perl-based nagios plugins to monitor mysql here:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;http://tomictech.com/redir.aspx?URL=http%3A%2F%2Fwww.shinguz.ch%2FMySQL%2Fnagios-mysql-plugins-0.3.tar.gz&quot;&gt;http://www.shinguz.ch/MySQL/nagios-mysql-plugins-0.3.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Untar the plugins into /usr/local/nagios/libexec&lt;/p&gt;
&lt;p&gt;If you want to check out how a particular plugin is executed, run it from the command line as follows:&lt;/p&gt;
&lt;pre&gt;vmware@vmware-desktop:~/dl/nagios-mysql-plugins-0.3$ perl check_repl_mysql_seconds_behind_master.pl --help

SYNOPSIS

check_repl_mysql_seconds_behind_master.pl flags

DESCRIPTION

Nagios plugin to check how many seconds slave is behind master...

FLAGS

help, ?      Print this help.
host, h      Host where database is located (default localhost)
password, p  Password of user root (default &amp;gt;&amp;lt;)
port         Port where database listens to (default 3306)
user, u      User for connecting to the database (default root)
critical|c   Seconds for critical level (default 600)
warning|w    Seconds for warning level (default 60)

PARAMETERS

none
&lt;/pre&gt;
&lt;p&gt;As an example, let&amp;#8217;s say we want to monitor the lag of a particular replicator. Nagios operates on thresholds, the first stage being a warning, the second being a critical alert.&lt;/p&gt;
&lt;h3&gt;Adding a Nagios Command&lt;/h3&gt;
&lt;p&gt;In your /usr/local/nagios/etc/objects/commands.cfg file, add the following &amp;#8220;command&amp;#8221; entry &amp;#8212; you should see others like it. This specifies a type of command you will run on a given host:&lt;/p&gt;
&lt;pre&gt;# &#039;check_repl_mysql_seconds_behind_master&#039; command definition
define command{
command_name    check_repl_mysql_seconds_behind_master
command_line    $USER1$/check_repl_mysql_seconds_behind_master.pl --host=$HOSTADDRESS$ --password=$ARG1
}
&lt;/pre&gt;
&lt;p&gt;In this case we&amp;#8217;re just using most of the default parameters, but if we wanted to specify a different critical or warning threshold, we could add it with &amp;#8211;critical=$ARG2, etc.&lt;/p&gt;
&lt;p&gt;Then, if you&amp;#8217;re monitoring localhost (probably not in most cases) you would just add the following entry to /usr/local/nagios/etc/localhost.cfg:&lt;/p&gt;
&lt;pre&gt;define service{
use                             local-service         ; Name of service template to use
host_name                       localhost
service_description             MySQL Replication
check_command                   check_repl_mysql_seconds_behind_master!&quot;&amp;lt;password&amp;gt;&quot;
notifications_enabled           0
}
&lt;/pre&gt;
&lt;p&gt;If you want to add another host to be monitored from this nagios instance, you can specify a new configration file, say, db01.cfg and write that to your etc/objects directory. Then add an entry to /usr/local/nagios/etc/nagios.cfg as follows, after making the appropriate adjustments to the hostname in the service:&lt;/p&gt;
&lt;p&gt;cfg_file=/usr/local/nagios/etc/objects/db01.cfg&lt;/p&gt;
&lt;p&gt;If everything has been configured correctly, you should be able to restart nagios with /etc/init.d/nagios restart, and then go into your nagios console and see the configuration entries for your new command and service, and also see if your slaves are far behind &lt;img src=&quot;http://tomictech.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;-)&quot; class=&quot;wp-smiley&quot;/&gt; &lt;/p&gt;
&lt;p&gt;Once you have one service added in this way, adding new ones becomes a lot easier. I hope to investigate some more of the performance monitoring features of the nagios mysql plugins, but i&amp;#8217;ll leave that for a future blog post.&lt;/p&gt;</description>
            
            <pubDate>Thu, 09 Oct 2008 18:13:26 -0700</pubDate>
        </item>
            
        <item>
            <title>Does anybody really know what time it is?</title>
            <link>http://swik.net/MySQL/Planet+MySQL/Does+anybody+really+know+what+time+it+is%3F/cg8ch</link>
            <description>&lt;p&gt;This is a post about &lt;code&gt;SYSDATE()&lt;/code&gt; and &lt;code&gt;NOW()&lt;/code&gt; and &lt;code&gt;CURRENT_TIMESTAMP()&lt;/code&gt; functions in MySQL.&lt;/p&gt;
&lt;p&gt;Firstly, note is that of these three, only &lt;code&gt;CURRENT_TIMESTAMP()&lt;/code&gt; is part of the SQL Standard.  &lt;code&gt;NOW()&lt;/code&gt; happens to be an alias for &lt;code&gt;CURRENT_TIMESTAMP()&lt;/code&gt; in MySQL.&lt;/p&gt;
&lt;p&gt;Secondly, note that replication does not work well with non-deterministic functions.  And &amp;#8220;hey, what time is it?&amp;#8221; is non-deterministic.  Ask it twice, with a second apart between asking, and both times you get different results (with at least second precision).&lt;/p&gt;
&lt;p&gt;You can start to see the problem here&amp;#8230;.but there&amp;#8217;s more&amp;#8230;. &lt;a href=&quot;http://www.pythian.com/blogs/1295/does-anybody-really-know-what-time-it-is#more-1295&quot;&gt;(more&amp;#8230;)&lt;/a&gt;&lt;/p&gt;</description>
            
            <pubDate>Thu, 09 Oct 2008 18:13:26 -0700</pubDate>
        </item>
            
        <item>
            <title>Three ways to know when a MySQL slave is about to start lagging</title>
            <link>http://swik.net/User:dubrie/Restlesssoul+Starred+Items/Three+ways+to+know+when+a+MySQL+slave+is+about+to+start+lagging/cg79f</link>
            <description>&lt;p&gt;The trouble with slave lag is that you often can&#039;t see it coming.  Especially if the slave&#039;s load is pretty uniform, a slave that&#039;s at 90% of its capacity to keep up with the master can be indistinguishable from one that&#039;s at 5% of its capacity.&lt;/p&gt;
&lt;p&gt;So how can you tell when your slave is nearing its capacity to keep up with the master?  Here are three ways:&lt;/p&gt;
&lt;p&gt;One: watch for spikes of lag.  If you have Cacti (and these &lt;a href=&quot;http://code.google.com/p/mysql-cacti-templates/&quot;&gt;Cacti templates for MySQL&lt;/a&gt;) you can see this in the graphs.  If the graphs start to get a little bumpy, you can assume that the iceberg is floating higher and higher in the water, so to speak.  (Hopefully that&#039;s not too strange a metaphor.)  As the slave&#039;s routine work gets closer and closer to its capacity, you&#039;ll see these spikes get bigger and &quot;wider&quot;.  The front-side of the spike will always be less than a 45-degree angle in ordinary operation[1] but the back-side, when the slave is catching up after lagging behind, will become a gentler and gentler slope.&lt;/p&gt;
&lt;p&gt;Two: deliberately make a slave fall behind, then see how fast it can catch up.  This is sort of related to Method One.  The goal here is to explicitly see how steep the backside of that slope is.  If you stop a slave for an hour, then start it again and it catches up in one hour, it is running at 1/2 of its capacity.  (In case that&#039;s confusing: if you stop it at noon and restart it at 1:00, and it&#039;s caught up again at 2:00, it played all statements from 12:00 to 2:00 in 1 hour, so it went at 2x speed.)&lt;/p&gt;
&lt;p&gt;Three: measure it more scientifically.  Use &lt;a href=&quot;http://www.percona.com/percona-lab.html&quot;&gt;our patched server&lt;/a&gt;, which gives you a USER_STATISTICS table.&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;http://www.mysqlperformanceblog.com/#&quot;&gt;PLAIN TEXT&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;SQL:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;mysql&amp;gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;FROM&lt;/span&gt; INFORMATION_SCHEMA.USER_STATISTICS &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;WHERE&lt;/span&gt; USER=&lt;span style=&quot;color:#ff0000&quot;&gt;&#039;#mysql_system#&#039;&lt;/span&gt;\G&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight:bold;color:#26536A&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;*************************** &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;1&lt;/span&gt;. row ***************************&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;                  USER: &lt;span style=&quot;color:#808080;font-style:italic&quot;&gt;#mysql_system#&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight:bold;color:#26536A&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;     TOTAL_CONNECTIONS: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;CONCURRENT_CONNECTIONS: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight:bold;color:#26536A&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;        CONNECTED_TIME: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;46188&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;             BUSY_TIME: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;719&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight:bold;color:#26536A&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;          ROWS_FETCHED: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;          ROWS_UPDATED: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;1882292&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight:bold;color:#26536A&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;       SELECT_COMMANDS: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;       UPDATE_COMMANDS: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;580431&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight:bold;color:#26536A&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;        OTHER_COMMANDS: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;338857&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;   COMMIT_TRANSACTIONS: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;1016571&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight:bold;color:#26536A&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt; ROLLBACK_TRANSACTIONS: &lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;0&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can compare the BUSY_TIME to one-half the CONNECTED_TIME (because there are two replication threads on the slave) to see how much of the time the slave thread was actively processing statements.  If the slave threads are always running, you can just use the server&#039;s uptime instead.&lt;/p&gt;
&lt;p&gt;[1] There are cases where this isn&#039;t true, especially if you&#039;re monitoring Seconds_behind_master instead of using &lt;a href=&quot;http://www.maatkit.org/&quot;&gt;mk-heartbeat&lt;/a&gt;, which is immune to this anomaly.&lt;/p&gt;
    &lt;hr style=&quot;margin:0;height:1px&quot;&gt;
    &lt;p&gt;Entry posted by Baron Schwartz |
      &lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/#comments&quot;&gt;8 comments&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;Add to: &lt;a href=&quot;http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;title=Three%20ways%20to%20know%20when%20a%20MySQL%20slave%20is%20about%20to%20start%20lagging&quot; title=&quot;Bookmark this post on del.icio.us&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png&quot; alt=&quot;delicious&quot;&gt;&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;title=Three%20ways%20to%20know%20when%20a%20MySQL%20slave%20is%20about%20to%20start%20lagging&quot; title=&quot;Digg this post on Digg.com&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png&quot; alt=&quot;digg&quot;&gt;&lt;/a&gt; | &lt;a href=&quot;http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;title=Three%20ways%20to%20know%20when%20a%20MySQL%20slave%20is%20about%20to%20start%20lagging&quot; title=&quot;Submit this post on reddit.com&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png&quot; alt=&quot;reddit&quot;&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;T=Three%20ways%20to%20know%20when%20a%20MySQL%20slave%20is%20about%20to%20start%20lagging&quot; title=&quot;Vote for this article on Netscape&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif&quot; alt=&quot;netscape&quot;&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.google.com/bookmarks/mark?op=add&amp;amp;bkmk=http://www.mysqlperformanceblog.com/2008/10/08/three-ways-to-know-when-a-mysql-slave-is-about-to-start-lagging/&amp;amp;title=Three%20ways%20to%20know%20when%20a%20MySQL%20slave%20is%20about%20to%20start%20lagging&quot; title=&quot;Add to Google Bookmarks&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png&quot; alt=&quot;Google Bookmarks&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description>
            
            <pubDate>Thu, 09 Oct 2008 18:11:53 -0700</pubDate>
        </item>
            
        <item>
            <title>PostgreSQL warm standby on ZFS crack - Esoteric Curio</title>
            <link>http://swik.net/zfs/del.icio.us%2Ftag%2Fzfs/PostgreSQL+warm+standby+on+ZFS+crack+-+Esoteric+Curio/cg7qs</link>
            <description>Using PITR for PG replication</description>
            
            <pubDate>Thu, 09 Oct 2008 17:59:08 -0700</pubDate>
        </item>
            
        <item>
            <title>SILVERCODERS - Quality and Competence - SqlSync</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/SILVERCODERS+-+Quality+and+Competence+-+SqlSync/cg1s6</link>
            <description></description>
            
            <pubDate>Tue, 07 Oct 2008 09:48:12 -0700</pubDate>
        </item>
            
        <item>
            <title>The Proxy belt - Designing fail safe systems webinar</title>
            <link>http://swik.net/MySQL/Planet+MySQL/The+Proxy+belt+-+Designing+fail+safe+systems+webinar/cg065</link>
            <description>&lt;table border=&quot;0&quot;&gt;
&lt;tr&gt;&lt;td&gt;
&lt;p&gt;There is a free webinar today, &lt;b&gt;October 7, at 10am PDT (1pm EDT, 7pm CEST, 5pm UTC)&lt;/b&gt;, about &lt;a href=&quot;http://www.mysql.com/news-and-events/web-seminars/display-221.html&quot;/&gt;Designing Fail-Safe Systems with MySQL Proxy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&#039;s an interesting session to attend, for several reasons. 
&lt;ul&gt;
&lt;li&gt;Building a fail safe systems is the dream (and the nightmare) of every system architect. There are many solutions, not all of them are viable.&lt;/li&gt;
&lt;li&gt;This solution was implemented by a user, Clint Alexander, Internet Technologist for the Army Game Project. &lt;/li&gt;
&lt;/ul&gt; 
&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;
&lt;a href=&quot;http://www.mysql.com/news-and-events/web-seminars/display-221.html&quot;/&gt;&lt;img src=&quot;http://blogs.sun.com/datacharmer/resource/sakila_proxy_256x298.jpg&quot; border=&quot;0&quot;/&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The interesting part is that this session is not a theoretical disquisition, but a detailed technical and practical description of how to achieve fail safe in a heavy duty web project.
&lt;/p&gt;
&lt;p&gt;
In addition to the presenter, there will be several MySQL engineers as panelists, so you will be able to ask questions and get answers from the top experts.
&lt;/p&gt;
&lt;p&gt;And what is the &lt;i&gt;Proxy belt&lt;/i&gt;? That&#039;s a teaser for you. It&#039;s an interesting technological concept that has been probably been done already, but this is the first time that someone has actually tried it out in practice. The name is a cute description of what has been implemented. You will get the real info and a catchy picture in the presentation.&lt;/p&gt;</description>
            
            <pubDate>Tue, 07 Oct 2008 06:57:42 -0700</pubDate>
        </item>
            
        <item>
            <title>Preparing for Open SQL Camp</title>
            <link>http://swik.net/MySQL/Planet+MySQL/Preparing+for+Open+SQL+Camp/cgzl9</link>
            <description>&lt;table border=&quot;0&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;br/&gt;&lt;a href=&quot;http://www.opensqlcamp.org/&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_gVfZHGgf5LA/SOedWJ9fxXI/AAAAAAAAAR0/Tuh87unDJr8/s400/opensql_camp_2008.png&quot; alt=&quot;OpenSQL Camp 2008&quot; title=&quot;OpenSQL Camp 2008&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;/td&gt;&lt;td&gt;&lt;br/&gt;The &lt;a href=&quot;http://www.opensqlcamp.org/&quot;&gt;Open SQL Camp&lt;/a&gt; will take place in &lt;a href=&quot;http://tinyurl.com/3v324e&quot;&gt;Charlottesville, VA, USA&lt;/a&gt;, on &lt;b&gt;November 14, 15, and 16&lt;/b&gt;.&lt;br/&gt;Attendees are requested to &lt;a href=&quot;http://opensqlcamp.org/index.php?title=Events/2008/AttendeeList&quot;&gt;register&lt;/a&gt; in the event&#039;s Wiki, and if you are interested in presenting something, there is a &lt;a href=&quot;http://groups.google.com/group/opensqlcamp&quot;&gt;mailing list&lt;/a&gt; to discuss your intended topics.&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;I have proposed a topic about &lt;a href=&quot;http://opensqlcamp.org/index.php?title=Events/2008/Sessions#Giuseppe_Maxia&quot;&gt;the MySQL community driven replication monitoring project&lt;/a&gt;, a hackish solution to the old problem of replication monitoring, implemented entirely on the server side, without using system applications.</description>
            
            <pubDate>Mon, 06 Oct 2008 22:01:42 -0700</pubDate>
        </item>
            
        <item>
            <title>Remote replication using ZFS : Interconnectedness of all things</title>
            <link>http://swik.net/zfs/del.icio.us%2Ftag%2Fzfs/Remote+replication+using+ZFS+%3A+Interconnectedness+of+all+things/cgy23</link>
            <description></description>
            
            <pubDate>Mon, 06 Oct 2008 17:48:28 -0700</pubDate>
        </item>
            
        <item>
            <title>Home - Continuent</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/Home+-+Continuent/cgsje</link>
            <description></description>
            
            <pubDate>Sat, 04 Oct 2008 19:21:08 -0700</pubDate>
        </item>
            
        <item>
            <title>How to check MySQL replication integrity continually</title>
            <link>http://swik.net/MySQL/Planet+MySQL/How+to+check+MySQL+replication+integrity+continually/cgrpt</link>
            <description>I have recently added some features to Maatkit&amp;#8217;s mk-table-checksum tool that can make it easy to checksum the relevant parts of your data more frequently (i.e. continually, but not continuously).  This in turn makes it possible for you to find out much sooner if a slave becomes different from its master, and then you [...]</description>
            
            <pubDate>Sat, 04 Oct 2008 12:08:17 -0700</pubDate>
        </item>
            
        <item>
            <title>MySQL Replication Failures</title>
            <link>http://swik.net/MySQL/Planet+MySQL/MySQL+Replication+Failures/cgkfz</link>
            <description>&lt;p&gt;Over the weekend, I worked on a client&amp;#8217;s two computers, trying to get a slave in sync with the master. It was during this time that I began thinking about:&lt;/p&gt;
&lt;p&gt;a) how this never should have happened in the first place.&lt;/p&gt;
&lt;p&gt;b) how &amp;#8220;slave drift&amp;#8221; could be kept from happening.&lt;/p&gt;
&lt;p&gt;c) how this is probably keeping some businesses from using MySQL.&lt;/p&gt;
&lt;p&gt;d) how MySQL DBAs must spend thousands of hours a year wasting time fixing replication issues.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll be the first person to tell you that the replication under MySQL is pretty much dead-simple to set up. My only complaint is that it is annoying to type in the two-line &amp;#8220;CHANGE MASTER&amp;#8221; command to set up a new slave. Even so, it makes sense.&lt;/p&gt;
&lt;p&gt;It is also very easy, however, for a slave to end up with different data than the master server has. This can be caused by replication bugs, hardware problems, or by using non-deterministic functions. Without proper permissions, a user/developer/DBA can log into the slave server and mess the data up that way. This last is a database administrator problem, but it affects replication. There are probably other issues that astute readers will point out.&lt;/p&gt;
&lt;p&gt;I would like to point out one common issue that would probably be categorized as a replication bug. If the master crashes for whatever reason (say, a hosting company accidentally punches the power button on a master server) it will often cause corruption of the binary log.  When the master comes back up, the slave cries about a non-existent binary log position.&lt;/p&gt;
&lt;p&gt;Possible solutions:  &lt;a href=&quot;http://www.pythian.com/blogs/1273/mysql-replication-failures#more-1273&quot;&gt;(more&amp;#8230;)&lt;/a&gt;&lt;/p&gt;</description>
            
            <pubDate>Thu, 02 Oct 2008 09:28:23 -0700</pubDate>
        </item>
            
        <item>
            <title>MySQL :: MySQL 5.0 Reference Manual :: 14 High Availability and Scalability</title>
            <link>http://swik.net/drbd/del.icio.us+tag+feed/MySQL+%3A%3A+MySQL+5.0+Reference+Manual+%3A%3A+14+High+Availability+and+Scalability/cgfoi</link>
            <description></description>
            
            <pubDate>Wed, 01 Oct 2008 07:15:27 -0700</pubDate>
        </item>
            
        <item>
            <title>DRBD:What is DRBD</title>
            <link>http://swik.net/drbd/del.icio.us+tag+feed/DRBD%3AWhat+is+DRBD/cgazp</link>
            <description></description>
            
            <pubDate>Tue, 30 Sep 2008 04:13:56 -0700</pubDate>
        </item>
            
        <item>
            <title>HOWTO Heartbeat and DRBD - Gentoo Linux Wiki</title>
            <link>http://swik.net/drbd/del.icio.us+tag+feed/HOWTO+Heartbeat+and+DRBD+-+Gentoo+Linux+Wiki/cf6l9</link>
            <description></description>
            
            <pubDate>Mon, 29 Sep 2008 03:14:16 -0700</pubDate>
        </item>
            
        <item>
            <title>Will you use row-based replication by default?</title>
            <link>http://swik.net/MySQL/Planet+MySQL/Will+you+use+row-based+replication+by+default%3F/cf472</link>
            <description>&lt;table border=&quot;0&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;br/&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/replication-formats.html&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_gVfZHGgf5LA/SOAAMsozc1I/AAAAAAAAAQ8/o4hNa7US9ZU/s400/mysql51logo.jpg&quot; alt=&quot;MySQL 5.1&quot; title=&quot;MySQL 5.1&quot; border=&quot;0&quot; width=&quot;250&quot;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;/td&gt;&lt;td&gt;&lt;br/&gt;MySQL 5.1 introduces &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/replication-formats.html&quot;&gt;row based replication&lt;/a&gt;, a way of replicating data that fixes many inconsistencies of the statement based replication, the standard method used by MySQL so far.&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br/&gt;&lt;b&gt;The good&lt;/b&gt;: row based replication solves some problems when replicating the result of non deterministic functions, such as UUID() or NOW(). &lt;br/&gt;&lt;b&gt;The bad&lt;/b&gt;: row-based replication may break existing applications, where you count on the quirks of statement based replication to execute conditionally (updates base on &lt;i&gt;@@server_id&lt;/i&gt;, for example), and may perform badly on updates applied to very large tables.&lt;br/&gt;&lt;br/&gt;Currently, MySQL 5.1.28 has the &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/binary-log-mixed.html&quot;&gt;mixed mode&lt;/a&gt; enabled by default. When in this mode, binary logging switches to row-based when there is a risk of breaking replication. Except that there are some cases left out, like &lt;a href=&quot;http://bugs.mysql.com/bug.php?id=39701&quot;&gt;Bug#39701&lt;/a&gt; (&lt;i&gt;load_file()&lt;/i&gt;). &lt;br/&gt;Mixed mode is supposed to be the best of two worlds. You can run fast updates on large tables and not risking inconsistent results on non-deterministic functions. The recent &lt;a href=&quot;http://datacharmer.blogspot.com/2008/09/dsclosing-binlog-entries-with-row-based.html&quot;&gt;addition to mysqlbinlog&lt;/a&gt; allows an easy decoding of the ugly looking row-based statements. &lt;br/&gt;Would you switch to mixed mode or stay in statement mode? There are requests of reverting the default to statement based binlog format, to maintain compatibility with old applications.&lt;br/&gt;Personally, I would go for the mixed mode. But it depends on your applications and your personal experience. What&#039;s your take?</description>
            
            <pubDate>Sun, 28 Sep 2008 16:14:21 -0700</pubDate>
        </item>
            
        <item>
            <title>ChironFS - A filesystem must go on, even if it is hurt</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/ChironFS+-+A+filesystem+must+go+on%2C+even+if+it+is+hurt/cf43c</link>
            <description></description>
            
            <pubDate>Sun, 28 Sep 2008 15:15:08 -0700</pubDate>
        </item>
            
        <item>
            <title>Zumastor Linux Storage Project</title>
            <link>http://swik.net/zfs/del.icio.us%2Ftag%2Fzfs/Zumastor+Linux+Storage+Project/cf4e3</link>
            <description></description>
            
            <pubDate>Sun, 28 Sep 2008 10:15:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Virtual Machine Replication &amp; Failover with VMWare Server &amp; Debian Etch (4.0) | HowtoForge - Linux Howtos and Tutorials</title>
            <link>http://swik.net/drbd/del.icio.us+tag+feed/Virtual+Machine+Replication+%26+Failover+with+VMWare+Server+%26+Debian+Etch+%284.0%29+%7C+HowtoForge+-+Linux+Howtos+and+Tutorials/cfub5</link>
            <description></description>
            
            <pubDate>Thu, 25 Sep 2008 07:16:12 -0700</pubDate>
        </item>
            
        <item>
            <title>DRBD:What is DRBD</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/DRBD%3AWhat+is+DRBD/cfrq5</link>
            <description></description>
            
            <pubDate>Wed, 24 Sep 2008 14:14:25 -0700</pubDate>
        </item>
            
        <item>
            <title>AVS and ZFS, seamless? : The &quot;Availability Suite&quot;</title>
            <link>http://swik.net/zfs/del.icio.us%2Ftag%2Fzfs/AVS+and+ZFS%2C+seamless%3F+%3A+The+%22Availability+Suite%22/cfmyz</link>
            <description></description>
            
            <pubDate>Tue, 23 Sep 2008 11:11:29 -0700</pubDate>
        </item>
            
        <item>
            <title>Fighting MySQL Replication Lag</title>
            <link>http://swik.net/User:dubrie/Restlesssoul+Starred+Items/Fighting+MySQL+Replication+Lag/cfmed</link>
            <description>&lt;p&gt;The problem of MySQL Replication unable to catch up is quite common in MySQL world and in fact I &lt;a href=&quot;http://www.mysqlperformanceblog.com/2007/10/12/managing-slave-lag-with-mysql-replication/&quot;&gt;already wrote&lt;/a&gt; about it.   There are many aspects of managing mysql replication lag such as using proper hardware and configuring it properly.  In this post I will just look at couple of query design mistakes which result in low hanging fruit troubleshooting MySQL Replication Lag&lt;/p&gt;
&lt;p&gt;First fact you absolutely need to remember is MySQL Replication is single threaded, which means if you have any long running write query it clogs replication stream and  small and fast updates which go after it in MySQL binary log can&#039;t proceed.    It is either more than than just about queries - if you&#039;re using explicit transactions all updates from the transactions are buffered together and when dumped to binary log  as one big chunk which can&#039;t be interleaved by any other query execution. So if you have transaction containing millions of simple updates instead of one large update to help MySQL replication lag it is not going to work.&lt;/p&gt;
&lt;p&gt;This brings us to &lt;strong&gt;rule number one&lt;/strong&gt;  - if you care about replication latency you must not have any long running updates. Queries or transactions containing multiple update queries which  add up to long time.     I would keep the maximum query length at about 1/5th of the maximum replication lag you&#039;re ready to tolerate.  So  if you want your replica to be no more than 1 minute behind keep the longest update query to 10 sec or so.   This is of course rule of thumb depending on differences in master/slave configuration, their load and concurrency you  may need to keep the ratio higher or allow a bit longer queries. &lt;/p&gt;
&lt;p&gt;What should you do if you need to update a lot of rows ? Use Query Chopping - this can be running update/delete with LIMIT in the loop,   controlling maximum amount of values per batch in multiple row insert statement or Fetching data you&#039;re planning to update/delete and having multiple queries to delete it (see example below)&lt;/p&gt;
&lt;p&gt;This brings us to yet another rule for smart replication - do not make Slave to do more work than it needs to do. It is crippled by having to do all of this in single thread already - do not make it even harder.  If there is considerable effort needed to select rows for modification - spread it out and have separate select and update queries.  In such case slave will only need to run UPDATE&lt;br&gt;
Example:&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;http://www.mysqlperformanceblog.com/#&quot;&gt;PLAIN TEXT&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;SQL:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;&lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;UPDATE&lt;/span&gt; posts &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;SET&lt;/span&gt;  spam=&lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;WHERE&lt;/span&gt; body &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;LIKE&lt;/span&gt; &lt;span style=&quot;color:#ff0000&quot;&gt;&quot;%cheap rolex%&quot;&lt;/span&gt;; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This query will perform full table scan in MySQL 5.0 (even if there are no spam posts) which will load slave significantly.   You can replace it with:&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;http://www.mysqlperformanceblog.com/#&quot;&gt;PLAIN TEXT&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;SQL:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;&lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;SELECT&lt;/span&gt; id &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;FROM&lt;/span&gt; posts &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;WHERE&lt;/span&gt;  body &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;LIKE&lt;/span&gt; &lt;span style=&quot;color:#ff0000&quot;&gt;&quot;%cheap rolex%&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight:bold;color:#26536A&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;color:black;font-weight:normal;font-style:normal;color:#3A6A8B&quot;&gt;
&lt;div style=&quot;font-weight:normal&quot;&gt;&lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;UPDATE&lt;/span&gt; posts &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;SET&lt;/span&gt; spam=&lt;span style=&quot;color:#cc66cc;color:#800000&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;WHERE&lt;/span&gt; id &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;IN&lt;/span&gt; &lt;span style=&quot;color:#006600;font-weight:bold&quot;&gt;(&lt;/span&gt;list of ids&lt;span style=&quot;color:#006600;font-weight:bold&quot;&gt;)&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If there could be many ids matched on the first place you should also use query chopping and run update in chunks if application allows it. &lt;/p&gt;
&lt;p&gt;In MySQL 5.1 with row level replication you will not have selection process running on SLAVE but it will not do the chopping for you.&lt;/p&gt;
&lt;p&gt;In general this trick does not only work well for full table scan updates  but in general for cases when there are much more rows examined than modified.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;next common mistake&lt;/strong&gt; is using INSERT ... SELECT - which is in similar to what I just described but can be much worse as SELECT may end up being extremely complicated query.  It is best to avoid INSERT ... SELECT going through replication in 5.0 for many reasons (locking, long query time, waste of execution on slave).    Piping data through application is the best solution in many cases and is quite easy - it is trivial to write the function which will take SELECT query and the table to which store its result set and use in your application in all cases when you need this functionality.&lt;/p&gt;
&lt;p&gt;Finally &lt;strong&gt;you should not overload your replication&lt;/strong&gt; - Quite typically I see replication lagging when batch jobs are running.  These can load master significantly during their run time and make it impossible for slave to run the same load through single thread.   The solution in many cases is to simply space it out and slow down your batch job (such as adding sleep calls) to ensure there is enough breathing room for replication thread.&lt;/p&gt;
&lt;p&gt;You can also have controlled execution of batch job - this is when they will check slave lag every so often and pause if it becomes too large. This is a bit more complicated approach but it saves you from running around and adjusting your sleep behavior to keep the progress fast enough and at the same time keep replication from lagging.&lt;/p&gt;
&lt;p&gt;In many bad replication lags I&#039;ve seen simply following these simple rules would avoid a lot of problems and often save massive hardware purchases or development efforts based on assumption MySQL replication can&#039;t possibly keep up any more.&lt;/p&gt;
    &lt;hr style=&quot;margin:0;height:1px&quot;&gt;
    &lt;p&gt;Entry posted by peter |
      &lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/#comments&quot;&gt;4 comments&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;Add to: &lt;a href=&quot;http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;title=Fighting%20MySQL%20Replication%20Lag&quot; title=&quot;Bookmark this post on del.icio.us&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png&quot; alt=&quot;delicious&quot;&gt;&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;title=Fighting%20MySQL%20Replication%20Lag&quot; title=&quot;Digg this post on Digg.com&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png&quot; alt=&quot;digg&quot;&gt;&lt;/a&gt; | &lt;a href=&quot;http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;title=Fighting%20MySQL%20Replication%20Lag&quot; title=&quot;Submit this post on reddit.com&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png&quot; alt=&quot;reddit&quot;&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;T=Fighting%20MySQL%20Replication%20Lag&quot; title=&quot;Vote for this article on Netscape&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif&quot; alt=&quot;netscape&quot;&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.google.com/bookmarks/mark?op=add&amp;amp;bkmk=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;title=Fighting%20MySQL%20Replication%20Lag&quot; title=&quot;Add to Google Bookmarks&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png&quot; alt=&quot;Google Bookmarks&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description>
            
            <pubDate>Tue, 23 Sep 2008 08:27:30 -0700</pubDate>
        </item>
            
        <item>
            <title>Fighting MySQL Replication Lag</title>
            <link>http://swik.net/MySQL/Planet+MySQL/Fighting+MySQL+Replication+Lag/cfkm4</link>
            <description>&lt;p&gt;The problem of MySQL Replication unable to catch up is quite common in MySQL world and in fact I &lt;a href=&quot;http://www.mysqlperformanceblog.com/2007/10/12/managing-slave-lag-with-mysql-replication/&quot;&gt;already wrote&lt;/a&gt; about it.   There are many aspects of managing mysql replication lag such as using proper hardware and configuring it properly.  In this post I will just look at couple of query design mistakes which result in low hanging fruit troubleshooting MySQL Replication Lag&lt;/p&gt;
&lt;p&gt;First fact you absolutely need to remember is MySQL Replication is single threaded, which means if you have any long running write query it clogs replication stream and  small and fast updates which go after it in MySQL binary log can&#039;t proceed.    It is either more than than just about queries - if you&#039;re using explicit transactions all updates from the transactions are buffered together and when dumped to binary log  as one big chunk which can&#039;t be interleaved by any other query execution. So if you have transaction containing millions of simple updates instead of one large update to help MySQL replication lag it is not going to work.&lt;/p&gt;
&lt;p&gt;This brings us to &lt;strong&gt;rule number one&lt;/strong&gt;  - if you care about replication latency you must not have any long running updates. Queries or transactions containing multiple update queries which  add up to long time.     I would keep the maximum query length at about 1/5th of the maximum replication lag you&#039;re ready to tolerate.  So  if you want your replica to be no more than 1 minute behind keep the longest update query to 10 sec or so.   This is of course rule of thumb depending on differences in master/slave configuration, their load and concurrency you  may need to keep the ratio higher or allow a bit longer queries. &lt;/p&gt;
&lt;p&gt;What should you do if you need to update a lot of rows ? Use Query Chopping - this can be running update/delete with LIMIT in the loop,   controlling maximum amount of values per batch in multiple row insert statement or Fetching data you&#039;re planning to update/delete and having multiple queries to delete it (see example below)&lt;/p&gt;
&lt;p&gt;This brings us to yet another rule for smart replication - do not make Slave to do more work than it needs to do. It is crippled by having to do all of this in single thread already - do not make it even harder.  If there is considerable effort needed to select rows for modification - spread it out and have separate select and update queries.  In such case slave will only need to run UPDATE&lt;br/&gt;
Example:&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&quot;&gt;PLAIN TEXT&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;SQL:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;UPDATE&lt;/span&gt; posts &lt;span&gt;SET&lt;/span&gt;&amp;#160; spam=&lt;span&gt;1&lt;/span&gt; &lt;span&gt;WHERE&lt;/span&gt; body &lt;span&gt;LIKE&lt;/span&gt; &lt;span&gt;&quot;%cheap rolex%&quot;&lt;/span&gt;; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This query will perform full table scan in MySQL 5.0 (even if there are no spam posts) which will load slave significantly.   You can replace it with:&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&quot;&gt;PLAIN TEXT&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;SQL:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; id &lt;span&gt;FROM&lt;/span&gt; posts &lt;span&gt;WHERE&lt;/span&gt;&amp;#160; body &lt;span&gt;LIKE&lt;/span&gt; &lt;span&gt;&quot;%cheap rolex%&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;UPDATE&lt;/span&gt; posts &lt;span&gt;SET&lt;/span&gt; spam=&lt;span&gt;1&lt;/span&gt; &lt;span&gt;WHERE&lt;/span&gt; id &lt;span&gt;IN&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;list of ids&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If there could be many ids matched on the first place you should also use query chopping and run update in chunks if application allows it. &lt;/p&gt;
&lt;p&gt;In MySQL 5.1 with row level replication you will not have selection process running on SLAVE but it will not do the chopping for you.&lt;/p&gt;
&lt;p&gt;In general this trick does not only work well for full table scan updates  but in general for cases when there are much more rows examined than modified.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;next common mistake&lt;/strong&gt; is using INSERT ... SELECT - which is in similar to what I just described but can be much worse as SELECT may end up being extremely complicated query.  It is best to avoid INSERT ... SELECT going through replication in 5.0 for many reasons (locking, long query time, waste of execution on slave).    Piping data through application is the best solution in many cases and is quite easy - it is trivial to write the function which will take SELECT query and the table to which store its result set and use in your application in all cases when you need this functionality.&lt;/p&gt;
&lt;p&gt;Finally &lt;strong&gt;you should not overload your replication&lt;/strong&gt; - Quite typically I see replication lagging when batch jobs are running.  These can load master significantly during their run time and make it impossible for slave to run the same load through single thread.   The solution in many cases is to simply space it out and slow down your batch job (such as adding sleep calls) to ensure there is enough breathing room for replication thread.&lt;/p&gt;
&lt;p&gt;You can also have controlled execution of batch job - this is when they will check slave lag every so often and pause if it becomes too large. This is a bit more complicated approach but it saves you from running around and adjusting your sleep behavior to keep the progress fast enough and at the same time keep replication from lagging.&lt;/p&gt;
&lt;p&gt;In many bad replication lags I&#039;ve seen simply following these simple rules would avoid a lot of problems and often save massive hardware purchases or development efforts based on assumption MySQL replication can&#039;t possibly keep up any more.&lt;/p&gt;
    &lt;hr style=&quot;margin:0;height:1px&quot;/&gt;
    &lt;p&gt;Entry posted by peter |
      &lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/#comments&quot;&gt;4 comments&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;Add to: &lt;a href=&quot;http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;title=Fighting MySQL Replication Lag&quot; title=&quot;Bookmark this post on del.icio.us&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png&quot; alt=&quot;delicious&quot;/&gt;&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;title=Fighting MySQL Replication Lag&quot; title=&quot;Digg this post on Digg.com&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png&quot; alt=&quot;digg&quot;/&gt;&lt;/a&gt; | &lt;a href=&quot;http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;title=Fighting MySQL Replication Lag&quot; title=&quot;Submit this post on reddit.com&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png&quot; alt=&quot;reddit&quot;/&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;T=Fighting MySQL Replication Lag&quot; title=&quot;Vote for this article on Netscape&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif&quot; alt=&quot;netscape&quot;/&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.google.com/bookmarks/mark?op=add&amp;amp;bkmk=http://www.mysqlperformanceblog.com/2008/09/22/fighting-mysql-replication-lag/&amp;amp;title=Fighting MySQL Replication Lag&quot; title=&quot;Add to Google Bookmarks&quot;&gt;&lt;img src=&quot;http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png&quot; alt=&quot;Google Bookmarks&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
            
            <pubDate>Mon, 22 Sep 2008 22:24:33 -0700</pubDate>
        </item>
            
        <item>
            <title>Tungsten Replicator</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/Tungsten+Replicator/cfee9</link>
            <description></description>
            
            <pubDate>Sun, 21 Sep 2008 03:59:25 -0700</pubDate>
        </item>
            
        <item>
            <title>Tungsten Replicator 1.0 Alpha Is Released</title>
            <link>http://swik.net/MySQL/Planet+MySQL/Tungsten+Replicator+1.0+Alpha+Is+Released/cfai8</link>
            <description>The 1.0 Alpha of &lt;a href=&quot;http://community.continuent.com/community/tungsten-replicator&quot;&gt;Tungsten Replicator&lt;/a&gt; is out.  Actually it&#039;s been out since Tuesday but it&#039;s been a busy week.   Binary downloads are available &lt;a href=&quot;https://forge.continuent.org/frs/?group_id=26&quot;&gt;here&lt;/a&gt;. &lt;br/&gt;&lt;br/&gt;The Alpha release offers basic statement replication for &lt;a href=&quot;http://dev.mysql.com/downloads/mysql/5.0.html&quot;&gt;MySQL 5.0&lt;/a&gt; on Linux, Solaris, MacOSX, and Windows platforms.  The setup is very simple, and there are procedures for master failover as well as performing consistency checks.  If you work at it, you&#039;ll find bugs.  That&#039;s a promise, not a threat.  Please log them in the &lt;a href=&quot;https://forge.continuent.org/jira/browse/TREP?report=com.atlassian.jira.plugin.system.project:roadmap-panel&amp;amp;Itemid=90&quot;&gt;project JIRA&lt;/a&gt;.  We gladly accept feature requests, too.&lt;br/&gt;&lt;br/&gt;Meanwhile, the beta version is in development.  Among other nice features we will offer support for user-written SQL event extractors and appliers, MySQL row replication support, &lt;span&gt;lots&lt;/span&gt; of testing, and much more.</description>
            
            <pubDate>Fri, 19 Sep 2008 15:07:35 -0700</pubDate>
        </item>
            
        <item>
            <title>DRBD - Wikipedia, the free encyclopedia</title>
            <link>http://swik.net/drbd/del.icio.us+tag+feed/DRBD+-+Wikipedia%2C+the+free+encyclopedia/ce3tc</link>
            <description></description>
            
            <pubDate>Thu, 18 Sep 2008 03:01:33 -0700</pubDate>
        </item>
            
        <item>
            <title>Tungsten Replicator</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/Tungsten+Replicator/cezty</link>
            <description></description>
            
            <pubDate>Wed, 17 Sep 2008 04:04:07 -0700</pubDate>
        </item>
            
        <item>
            <title>Bringing Open Source Replication to the Oracle World</title>
            <link>http://swik.net/MySQL/Planet+MySQL/Bringing+Open+Source+Replication+to+the+Oracle+World/cet7z</link>
            <description>Replication is one of the most useful but also also one of the most arcane database technologies.   Every real database has it in some form.  Despite ubiquity, replication is complex to use and in the case of commercial databases quite expensive to boot.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://www.continuent.com&quot;&gt;We&lt;/a&gt; aim to change that.  On Tuesday we will be announcing replication support for &lt;a href=&quot;http://www.oracle.com/&quot;&gt;Oracle&lt;/a&gt;.  Oracle replication will be based on our open source &lt;a href=&quot;http://community.continuent.com/community/tungsten-replicator&quot;&gt;Tungsten Replicator&lt;/a&gt;, which is currently available in an alpha version for &lt;a href=&quot;http://www.mysql.com/&quot;&gt;MySQL&lt;/a&gt;.    Our goal is to provide replication that is accessible and usable by a wide range of users, especially those running lower-cost Oracle editions.&lt;br/&gt;&lt;br/&gt;It&#039;s not a coincidence that we chose to implement MySQL and Oracle replication at the same time.  MySQL has revolutionized the simplicity and accessibility of databases in general and replication in particular.   For example, MySQL users have created cost-effective read scaling solutions using master/slave replication for years.   &lt;a href=&quot;http://scale-out-blog.blogspot.com/2008/08/answering-montys-challenge-advanced.html&quot;&gt;MySQL replication is not free of problems&lt;/a&gt;, but there is no question MySQL AB helped by the community got a lot of the basics really right.&lt;br/&gt;&lt;br/&gt;On the other hand, Oracle replication products offer state-of-the-art solutions for availability, heterogeneous replication, application upgrade, and other problems, albeit for high-end users.  For example, &lt;a href=&quot;http://www.oracle.com/technology/products/dataint/htdocs/streams_fo.html&quot;&gt;Oracle Streams&lt;/a&gt; and &lt;a href=&quot;http://www.goldengate.com/solutions/highavail.html&quot;&gt;Golden Gate TDM&lt;/a&gt; offer very advanced solutions to the problem of data migration with minimal downtime.   The big problem with these solutions is not capabilities but administrative complexity and cost.&lt;br/&gt;&lt;br/&gt;Our initial cut at merging the two worlds is focused on creating a simple and usable database replication product that handles the following use cases for small to medium Oracle installations:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Basic data availability using extra copies of databases locally and off-site&lt;/li&gt;&lt;li&gt;Scaling reads using the MySQL read-scaling model&lt;/li&gt;&lt;li&gt;Performing zero-downtime upgrades and migrations using database replicas&lt;/li&gt;&lt;li&gt;Heterogeneous data migration between Oracle and MySQL as well as PostgreSQL (initially one-way only).&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;The big technical feature is that replication will work on all editions of Oracle, not just Enterprise Edition.   We expect to help Oracle users build economical new systems on the  scale-out model as well as off-load existing Oracle servers to avoid having to upgrade to more expensive licensing.&lt;br/&gt;&lt;br/&gt;An early adopter version will be available toward the end of the month.  The Oracle redo log extractor is commercial but all other capabilities are open source, so you can replicate from MySQL up to Oracle freely.   We are now looking for some select users who can really help propel the software forward.  If you would like to try out Oracle replication, contact &lt;a href=&quot;mailrobert.hodges@continuent.com&quot;&gt;me&lt;/a&gt; at &lt;a href=&quot;http://www.continuent.com/&quot;&gt;Continuent&lt;/a&gt;.</description>
            
            <pubDate>Mon, 15 Sep 2008 19:03:35 -0700</pubDate>
        </item>
                </channel>
</rss>
