<?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>Open Query blog &#187; replication</title>
	<atom:link href="http://openquery.com/blog/tag/replication/feed" rel="self" type="application/rss+xml" />
	<link>http://openquery.com/blog</link>
	<description>About MySQL, Drizzle, MariaDB and more!</description>
	<lastBuildDate>Sun, 29 Apr 2012 23:48:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>MySQL data backup: going beyond mysqldump</title>
		<link>http://openquery.com/blog/mysql-data-backup-mysqldump</link>
		<comments>http://openquery.com/blog/mysql-data-backup-mysqldump#comments</comments>
		<pubDate>Tue, 29 Mar 2011 00:25:12 +0000</pubDate>
		<dc:creator>arjen</dc:creator>
				<category><![CDATA[Good practice / Bad practice]]></category>
		<category><![CDATA[Software and tools]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[mmm]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[recovery]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[restore]]></category>
		<category><![CDATA[xtrabackup]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=1446</guid>
		<description><![CDATA[A user on a linux user group mailing list asked about this, and I was one of the people replying. Re-posting here as I reckon it&#8217;s of wider interest. &#62; [...] tens of gigs of data in MySQL databases. &#62; Some in memory tables, some MyISAM, a fair bit InnoDB. According to my &#62; understanding, [...]]]></description>
			<content:encoded><![CDATA[<p>A user on a linux user group mailing list asked about this, and I was one of the people replying. Re-posting here as I reckon it&#8217;s of wider interest.</p>
<p>&gt; [...] tens of gigs of data in MySQL databases.<br />
&gt; Some in memory tables, some MyISAM, a fair bit InnoDB. According to my<br />
&gt; understanding, when one doesn&#8217;t have several hours to take a DB<br />
&gt; offline and do dbbackup, there was/is ibbackup from InnoBase.. but now<br />
&gt; that MySQL and InnoBase have both been &#8216;Oracle Enterprised&#8217;, said<br />
&gt; product is now restricted to MySQL Enterprise customers..<br />
&gt;<br />
&gt; Some quick searching has suggested Percona XtraBackup as a potential<br />
&gt; FOSS alternative.<br />
&gt; What backup techniques do people employ around these parts for backups<br />
&gt; of large mixed MySQL data sets where downtime *must* be minimised?<br />
&gt;<br />
&gt; Has your backup plan ever been put to the test?</p>
<p>You should put it to the test regularly, not just when it&#8217;s needed.<br />
An untested backup is not really a backup, I think.</p>
<p>At  <a href="http://openquery.com/" target="_blank">Open Query</a> we tend to use dual master setups with MMM, other  replication slaves, mysqldump, and XtracBackup or LVM snapshots. It&#8217;s  not just about having backups, but also about general resilience,  maintenance options, and scalability. I&#8217;ll clarify:</p>
<ul>
<li>XtraBackup and LVM give you physical backups. that&#8217;s nice if you want to  recover or clone a complete instance as-is. But if anything is wrong,  it&#8217;ll be all stuffed (that is, you can sometimes recover InnoDB  tablespaces and there are tools for it, but time may not be on your  side). Note that LVM cannot snapshot between multiple volumes  consistently, so if you have your InnoDB ibdata/IBD files and iblog  files on separate spindles, using LVM is not suitable.</li>
</ul>
<ul>
<li>mysqldump for logical (SQL) backups. Most if not all setups should have  this. Even if the file(s) were to be corrupted, they&#8217;re still readable  since it&#8217;s plain SQL. You can do partial restores, which is handy in  some cases. It&#8217;ll be slower to load so having *only* an SQL dump of a  larger dataset is not a good idea.</li>
</ul>
<ul>
<li>some of the above backups  can and should *also* be copied off-site. that&#8217;s for extra safety, but  in terms of recovery speed it may not be optimal and should not be  relied upon.</li>
</ul>
<ul>
<li>having dual masters is for easier maintenance  without scheduled outages, as well as resilience when for instance  hardware breaks (and it does).</li>
</ul>
<ul>
<li>slaves. You can even delay a  slave (Maatkit has a tool for this), so that would give you a live  correct image even in case of a user error, provided you get to it in  time. Also, you want enough slack in your infra to be able to initialise  a new slave off an existing one. Scaling up at a time when high load is  already occurring can become painful if your infra is not prepared for  it.</li>
</ul>
<p><strong>A key issue to consider is this&#8230; if the dataset is  sufficiently large, and the online requirements high enough, you can&#8217;t  afford to just have backups. Why? Because, how quickly can you deploy  new suitable hardware, install OS, do restore, validate, put back  online?</strong></p>
<p><em>In many cases one or more aspects of the above list simply  take too long, so my summary would be &#8220;then you don&#8217;t really have a  backup&#8221;. Clients tend to argue with me on that, but only fairly briefly, until  they see the point: if a restore takes longer than you can afford, that  backup mechanism is unsuitable.</em></p>
<p>So, we use a combination of tools  and approaches depending on needs, but in general terms we aim for  keeping the overall environment online (individual machines can and will  fail! relying on a magic box or SAN to not fail *will* get you bitten)  to vastly reduce the instances where an actual restore is required.<br />
Into  that picture also comes using separate test/staging servers to not have  developers stuff around on live servers (human error is an important  cause of hassles).</p>
<p>In our training modules, we&#8217;ve combined the  backups, recovery and replication topics as it&#8217;s clearly all intertwined  and overlapping. Discussing backup techniques separate from replication  and dual master setups makes no sense to us. It needs to be put in  place with an overall vision.</p>
<p>Note that a SAN is not a backup strategy. And neither is replication on its own.</p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/mysql-data-backup-mysqldump/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cache pre-loading on mysqld startup</title>
		<link>http://openquery.com/blog/cache-preloading-mysqld-startup</link>
		<comments>http://openquery.com/blog/cache-preloading-mysqld-startup#comments</comments>
		<pubDate>Wed, 01 Dec 2010 06:08:58 +0000</pubDate>
		<dc:creator>arjen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[failover]]></category>
		<category><![CDATA[init-file]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[preload]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[slave]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=1414</guid>
		<description><![CDATA[The following quirky dynamic SQL will scan each index of each table so that they&#8217;re loaded into the key_buffer (MyISAM) or innodb_buffer_pool (InnoDB). If you also use the PBXT engine which does have a row cache but no clustered primary key, you could also incorporate some full table scans. To make mysqld execute this on [...]]]></description>
			<content:encoded><![CDATA[<p>The following quirky dynamic SQL will scan each index of each table so that they&#8217;re loaded into the key_buffer (MyISAM) or innodb_buffer_pool (InnoDB). If you also use the PBXT engine which does have a row cache but no clustered primary key, you could also incorporate some full table scans.</p>
<p>To make mysqld execute this on startup, create /var/lib/mysql/initfile.sql and make it be owned by mysql:mysql</p>
<pre>SET SESSION group_concat_max_len=100*1024*1024;
SELECT GROUP_CONCAT(CONCAT('SELECT COUNT(`',column_name,'`) FROM `',table_schema,'`.`',table_name,'` FORCE INDEX (`',index_name,'`)') SEPARATOR ' UNION ALL ') INTO @sql FROM information_schema.statistics WHERE table_schema NOT IN ('information_schema','mysql') AND seq_in_index = 1;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET SESSION group_concat_max_len=@@group_concat_max_len;
</pre>
<p>and in my.cnf add a line in the [mysqld] block</p>
<pre>init-file = /var/lib/mysql/initfile.sql
</pre>
<p>That&#8217;s all. mysql reads that file on startup and executes each line. Since we can do the whole select in a single (admittedly quirky) query and then use dynamic SQL to execute the result, we don&#8217;t need to create a stored procedure.</p>
<p>Of course this kind of simplistic &#8220;get everything&#8221; only really makes sense if the entire dataset+indexes fit in memory, otherwise you&#8217;ll want to be more selective. Still, you could use the above as a basis, perhaps using another table to provide a list of tables/indexes to be excluded &#8211; or if the schema is really stable, simply have a list of tables/indexes to be included instead of dynamically using information_schema.</p>
<p>Practical (albeit niche) application:</p>
<p>In a system with multiple slaves, adding in a new slave makes it   start  with cold caches, but since with loadbalancing it will pick up only  some of the load it often works out ok. However, some environments have dual  masters but the   application is not able to do read/write splits to  utilise slaves. In   that case all the reads also go to the active  master. Consequentially, the passive master will have relatively cold  caches (only rows/indexes that have been updated will be in memory) so in case of a failover the amount of disk reads for the many concurrent SELECT queries will go through the roof &#8211; temporarily slowing the effective performance to a dismal crawl: each query takes longer with the required additional disk access so  depending on the setup the server may even run out of connections which  in turn upsets the application servers. It&#8217;d sort itself out but a) it looks very bad on the frontend and b) it may take a number of minutes.</p>
<p>The above construct prevents that scenario, and as mentioned it can be used as a basis to deal with other situations. Not many people know about the init-file option, so this is a nice example.</p>
<p>If you want to know how the SQL works, read on. The original line is very long so I&#8217;ll reprint it below with some reformatting:</p>
<pre>SELECT GROUP_CONCAT(CONCAT(
  'SELECT COUNT(`',column_name,'`)
          FROM `',table_schema,'`.`',table_name,
          '` FORCE INDEX (`',index_name,'`)'
       ) SEPARATOR ' UNION ALL ')
  INTO @sql
  FROM information_schema.statistics
  WHERE table_schema NOT IN ('information_schema','mysql')
  AND seq_in_index = 1;</pre>
<p>The outer query grabs each regular db/table/index/firstcol name that exists in the server, writing out a SELECT query that counts all not-NULL values of the indexed column (so it must scan the index), forcing that specific index. We then abuse the versatile and flexible GROUP_CONCAT() function to glue all those SELECTs together, with &#8220;UNION ALL&#8221; inbetween. The result is a single very long string, so we need to tweak the maximum allowed group_concat output beforehand to prevent truncation.</p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/cache-preloading-mysqld-startup/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A day in the life of Datacenter Disasters</title>
		<link>http://openquery.com/blog/day-life-datacenter-disasters</link>
		<comments>http://openquery.com/blog/day-life-datacenter-disasters#comments</comments>
		<pubDate>Tue, 23 Nov 2010 05:07:13 +0000</pubDate>
		<dc:creator>Walter Heck</dc:creator>
				<category><![CDATA[Software and tools]]></category>
		<category><![CDATA[disaster]]></category>
		<category><![CDATA[mmm]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=1409</guid>
		<description><![CDATA[Open Query currently hosts a large part of our infrastructure at Linode. We are extremely happy with their performance, stability and support. Unfortunately any chain is only as strong as it&#8217;s weakest link. This week, there was a major thunderstorm near the Hurricane Electric datacenter (anyone else think that name is funny in combination with [...]]]></description>
			<content:encoded><![CDATA[<p>Open Query currently hosts a large part of our infrastructure at Linode. We are extremely happy with their performance, stability and support. Unfortunately any chain is only as strong as it&#8217;s weakest link. This week, there was a major thunderstorm near the Hurricane Electric datacenter (anyone else think that name is funny in combination with the event in case?) in fremont and through a massive powersurge, most of HE&#8217;s datacenter lost power. Among the Linodes affected in our infrastructure were all of the machines involved in our MMM setup.</p>
<p>The masters came back up before the monitor, which is around the time I was alerted. Logging in, I noticed replication was broken on one of the masters, but the other master seemed healthy. Since the monitor was not up and it seemed like it could potentially be hours before it would, I decided it was time for manual action. Since our MMM setup doesn&#8217;t have slaves currently, I decided a good option would be to mimic MMM and move the virtual IP to the healthy server.</p>
<p>I executed the following manual commands to make the desired changes:</p>
<pre>$ ip addr add &lt;virtip&gt; dev eth0</pre>
<pre>$ /usr/sbin/arping -I eth0 -c 5 &lt;virtip&gt;</pre>
<p>That brought all our applications back online, which was the desired effect. I manually fixed replication by repositioning the masters. A while later, the monitor came up and automatically took over, bringing everything back to normal.</p>
<p>Everything went well, but it wasn&#8217;t until the next morning I realised there was a possible flaw in my logic (that din&#8217;t effect us, but I wanted to blog about it to make others realise): When replication stopped, master A was active. My commands above made master B the active master. Now, in theory it is possible that writes were sent to master A after replication broke, and commands that were sent to master B would presume those writes were executed there which they were not as replication didn&#8217;t execute them. This is one of those niche occasions where data-drift can occur without noticing it.</p>
<p>My recommendation is to not do what I did unless you are very certain your setup doesn&#8217;t suffer from this potential problem. If you do decide to use this trick however, make sure to use the maatkit mk-tablecheck and mk-tablesynch when all is well again to check for (and correct!) data drift.</p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/day-life-datacenter-disasters/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quest for Resilience: Multi-DC Masters</title>
		<link>http://openquery.com/blog/quest-resilience-multidc-masters</link>
		<comments>http://openquery.com/blog/quest-resilience-multidc-masters#comments</comments>
		<pubDate>Fri, 14 May 2010 01:07:57 +0000</pubDate>
		<dc:creator>arjen</dc:creator>
				<category><![CDATA[Software and tools]]></category>
		<category><![CDATA[datacentre]]></category>
		<category><![CDATA[DRBD]]></category>
		<category><![CDATA[failover]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[mmm]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[resilience]]></category>
		<category><![CDATA[SAN]]></category>
		<category><![CDATA[VM]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=1241</guid>
		<description><![CDATA[This is a Request for Input. Dual MySQL masters with MMM in a single datacentre are in common use, and other setups like DRBD and of course VM/SAN based failover solutions are conceptually straightforward also. Thus, achieving various forms of resilience within a single data-centre is doable and not costly. Doing the same across multiple [...]]]></description>
			<content:encoded><![CDATA[<p>This is a Request for Input. Dual MySQL masters with MMM in a single datacentre are in common use, and other setups like DRBD and of course VM/SAN based failover solutions are conceptually straightforward also. Thus, achieving various forms of resilience within a single data-centre is doable and not costly.</p>
<p>Doing the same across multiple (let&#8217;s for simplicity sake limit it to two) datacentres is another matter. MySQL replication works well across longer links, and it can use MySQL&#8217;s in-built SSL or tools like stunnel. Of course it needs to be kept an eye on, as usual, but since it&#8217;s asynchronous the latency between the datacentres is not a big issue (apart from the fact that the second server gets up-to-date a little bit later).</p>
<p>But as those who have tried will know, having a client (application server) connection to a MySQL instance in a remote data-centre is a whole other matter, latency becomes a big issue and is generally very noticeable on the front-end. One solution for that is to have application servers only connect to their &#8220;local&#8221; MySQL server.</p>
<p>So the question to you is, do you now have (or have you had in the past) a setup with MySQL masters in different datacentres, what did that setup look like (which additional tools and infra did you use for it), and what were your experiences (good and bad, solutions to issues, etc). I&#8217;m trying to gather additional expertise that might already be about, which can help us all. Please add your input! thanks</p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/quest-resilience-multidc-masters/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>relay-log-space-limit</title>
		<link>http://openquery.com/blog/relaylogspacelimit</link>
		<comments>http://openquery.com/blog/relaylogspacelimit#comments</comments>
		<pubDate>Wed, 24 Mar 2010 01:19:05 +0000</pubDate>
		<dc:creator>arjen</dc:creator>
				<category><![CDATA[Good practice / Bad practice]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[relay-log-space-limit]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=1201</guid>
		<description><![CDATA[We don&#8217;t often see this option configured (default: unlimited) but it might be a good idea to set it. What it does is limit the amount of disk space the combined relay logs are allowed to take up. A slave&#8217;s IO_Thread reads from the master and puts the events into the relay log; the slave&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>We don&#8217;t often see this option configured (default: unlimited) but it might be a good idea to set it. What it does is limit the amount of disk space the combined relay logs are allowed to take up.</p>
<p>A slave&#8217;s IO_Thread reads from the master and puts the events into the relay log; the slave&#8217;s SQL_Thread reads from the relay log and executes the query. If/when replication &#8220;breaks&#8221;, unless it&#8217;s connection related it tends to be during execution of a query. In that case the IO_Thread will keep running (receiving master events and storing in the relay log). Beyond some point, that doesn&#8217;t make sense.</p>
<p>The reason for having two separate replication threads (introduced in MySQL 4.0) is that long-running queries don&#8217;t delay receiving more data. That&#8217;s good. But receiving data is generally pretty fast, so as long as that basic issue is handled, it&#8217;s not necessary (for performance) to have the IO_Thread run ahead that far.</p>
<p>So you can set something like relay-log-space-limit=256M. This prevents slave disk space from getting gobbled up in some replication failure scenarios. The data will still be available in the logs on the master (provided of course the log expiration there isn&#8217;t too short &#8211; replication monitoring is still important!).</p>
<p>Conclusion: the relay log as a cache. Don&#8217;t leave it at &#8220;Unlimited&#8221;, that&#8217;s inefficient (and potentially problematic) use of resources. If you do run out of diskspace, the relay log can get corrupted &#8211; then you have to reposition, which will re-read the data from the master anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/relaylogspacelimit/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trivia: identify this replication failure</title>
		<link>http://openquery.com/blog/trivia-identify-replication-failure</link>
		<comments>http://openquery.com/blog/trivia-identify-replication-failure#comments</comments>
		<pubDate>Wed, 28 Oct 2009 08:09:54 +0000</pubDate>
		<dc:creator>arjen</dc:creator>
				<category><![CDATA[Good practice / Bad practice]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[open query]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[slave]]></category>
		<category><![CDATA[trivia]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=1087</guid>
		<description><![CDATA[We got good responses to the &#8220;identify this query profile&#8221; question. Indeed it indicates an SQL injection attack. Obviously a code problem, but you must also think about &#8220;what can we do right now to stop this&#8221;. See the responses and my last note on it below the original post. Got a new one for [...]]]></description>
			<content:encoded><![CDATA[<p>We got good responses to the &#8220;<a href="http://openquery.com/blog/trivia-identify-query-profile">identify this query profile</a>&#8221; question. Indeed it indicates an SQL injection attack. Obviously a code problem, but you must also think about &#8220;what can we do right now to stop this&#8221;. See the responses and my last note on it below the original post.</p>
<p><strong>Got a new one for you!</strong></p>
<p>You find a system with broken replication, could be a slave or one in a dual master setup. the IO thread is still running. but the SQL thread is not and the last error is (yes the error string is exactly this, very long &#8211; sorry I did not paste this string into the original post &#8211; updated later):</p>
<blockquote><p><em>&#8220;Could not parse relay log event entry. The possible reasons are: the master&#8217;s binary log is corrupted (you can check this by running &#8216;mysqlbinlog&#8217; on the binary log), the slave&#8217;s relay log is corrupted (you can check this by running &#8216;mysqlbinlog&#8217; on the relay log), a network problem, or a bug in the master&#8217;s or slave&#8217;s MySQL code. If you want to check the master&#8217;s binary log or slave&#8217;s relay log, you will be able to know their names by issuing &#8216;SHOW SLAVE STATUS&#8217; on this slave.&#8221;</em></p></blockquote>
<p>In other similar cases the error message is about something else but the query it shows with it makes no sense. To me, that essentially says the same as the above.</p>
<p>The server appears to have been restarted recently.</p>
<p>What&#8217;s wrong, and what&#8217;s your quickest way to get replication going again given this state?</p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/trivia-identify-replication-failure/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>MySQL University session Oct 22: Dual Master Setups With MMM</title>
		<link>http://openquery.com/blog/mysql-university-session-oct-22-dual-master-setups-mmm</link>
		<comments>http://openquery.com/blog/mysql-university-session-oct-22-dual-master-setups-mmm#comments</comments>
		<pubDate>Wed, 21 Oct 2009 22:52:17 +0000</pubDate>
		<dc:creator>Walter Heck</dc:creator>
				<category><![CDATA[Software and tools]]></category>
		<category><![CDATA[dual master]]></category>
		<category><![CDATA[failover]]></category>
		<category><![CDATA[loadbalancing]]></category>
		<category><![CDATA[mmm]]></category>
		<category><![CDATA[multi-master]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[MySQL University]]></category>
		<category><![CDATA[Open Query]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[Walter Heck]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=1052</guid>
		<description><![CDATA[This Thursday (October 22nd, 13:00 UTC), Walter Heck (of Open Query) will present Dual Master Setups With MMM. MMM (Multi-Master Replication Manager for MySQL) is a set of flexible scripts to perform monitoring/failover and management of MySQL master-master replication configurations (with only one node writable at any time). Session slides (PDF). The toolset also has [...]]]></description>
			<content:encoded><![CDATA[<p>This Thursday (October 22nd, 13:00 UTC), Walter Heck (of Open Query) will present <a href="http://forge.mysql.com/wiki/Dual_Master_Setups_With_MMM">Dual Master Setups With MMM</a>. MMM (Multi-Master Replication Manager for MySQL) is a set of flexible scripts to perform monitoring/failover and management of MySQL master-master replication configurations (with only one node writable at any time). Session <a href="http://forge.mysql.com/w/images/0/05/DualMasterSetupsWithMMM.pdf">slides</a> (PDF).</p>
<p>The toolset also has the ability to read balance standard master/slave configurations with any number of slaves, so you can use it to move virtual IP addresses around a group of servers depending on whether they are behind in replication. For more<br />
information, see <a href="http://mysql-mmm.org/">mysql-mmm.org</a>.</p>
<p>For MySQL University sessions you point your browser <a href="http://webmeeting.dimdim.com/portal/JoinForm.action?confKey=mysqluniversity">here</a>. You need a browser with a working Flash plugin. You may register for a Dimdim account, but you don&#8217;t have to.</p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/mysql-university-session-oct-22-dual-master-setups-mmm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Open Query training days in Australia</title>
		<link>http://openquery.com/blog/open-query-training-days-australia</link>
		<comments>http://openquery.com/blog/open-query-training-days-australia#comments</comments>
		<pubDate>Fri, 02 Oct 2009 04:36:46 +0000</pubDate>
		<dc:creator>arjen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[brisbane]]></category>
		<category><![CDATA[canberra]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[course]]></category>
		<category><![CDATA[dba]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[melbourne]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[ndb]]></category>
		<category><![CDATA[open query]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[sydney]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=996</guid>
		<description><![CDATA[The favourite Open Query course modules as well as reworked and brand new ones, with November/December 2009 dates for Brisbane, Sydney, Canberra and Melbourne listed below. You can register for days/modules individually, to suit your time, budget and current needs. Your trainers are Sean, Ray and Arjen (see OQ people). For the Canberra and Melbourne [...]]]></description>
			<content:encoded><![CDATA[<p>The favourite Open Query course modules as well as reworked and brand new ones, with November/December 2009 dates for Brisbane, Sydney, Canberra and Melbourne listed below. You can <a href="http://openquery.com/training/contact">register</a> for days/modules individually, to suit your time, budget and current needs. Your trainers are Sean, Ray and Arjen (see <a href="http://openquery.com/company/people">OQ people</a>).</p>
<p>For the Canberra and Melbourne days which are DBA/HA, registrations for all of the modules in a series before 15 October will receive a copy of the &#8220;High Performance MySQL&#8221; book (normal bookstore price is AUD 105).</p>
<p><a href="http://openquery.com/training/canberra">Canberra</a></p>
<ul>
<li>Thu 5 Nov: MySQL High Availability &#8211; Strategy and Tools</li>
<li>Fri 6 Nov: <a href="http://openquery.com/training/mysql_cluster">MySQL Cluster Workshop</a></li>
</ul>
<p><a href="http://openquery.com/training/sydney">Sydney</a></p>
<ul>
<li>Mon 9 Nov: <a href="http://openquery.com/training/mysql_optdesign">MySQL Optimisation by Design</a></li>
<li>Tue 10 Nov: <a href="http://openquery.com/training/storage_engines">MySQL Locking, Transactions &amp; Storage Engine Optimisation</a></li>
</ul>
<p><a href="http://openquery.com/training/brisbane">Brisbane</a></p>
<ul>
<li>Thu 19 Nov: MySQL Query Performance Optimisation and Tuning</li>
<li>Fri 20 Nov: MySQL Server Performance Optimisation and Tuning</li>
</ul>
<p><a href="http://openquery.com/training/melbourne">Melbourne</a></p>
<ul>
<li>Wed 9 Dec: <a href="http://openquery.com/training/mysql_installation_security_user_management">MySQL Installation, Security and User Management</a></li>
<li>Thu 10 Dec &#8211; Fri 11 Dec <a href="http://openquery.com/training/mysql_backup_recovery">MySQL Backup and Recovery</a> + <a href="http://openquery.com/training/mysql_replication">Replication Workshop</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/open-query-training-days-australia/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting ready for FrOScon 2009</title>
		<link>http://openquery.com/blog/ready-froscon-2009</link>
		<comments>http://openquery.com/blog/ready-froscon-2009#comments</comments>
		<pubDate>Thu, 20 Aug 2009 12:51:42 +0000</pubDate>
		<dc:creator>Walter Heck</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[froscon]]></category>
		<category><![CDATA[mmm]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Open Query]]></category>
		<category><![CDATA[preparing]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[volunteering]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=900</guid>
		<description><![CDATA[I arrived yesterday in St. Augustin, near Bonn in Germany. After a good day of hitchhiking (weather is beautiful here) I stayed with my Pakistani Couchsurfing host and we had an extremely interesting evening talking about the gigantic cultural differences between western civilization and Pakistani civilization. It beats staying in a hotel by about a [...]]]></description>
			<content:encoded><![CDATA[<p>I arrived yesterday in St. Augustin, near Bonn in Germany. After a good day of hitchhiking (weather is beautiful here) I stayed with my Pakistani <a href="http://www.couchsurfing.org">Couchsurfing</a> host and we had an extremely interesting evening talking about the gigantic cultural differences between western civilization and Pakistani civilization. It beats staying in a hotel by about a million points <img src='http://openquery.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This morning I headed to the <a href="http://www.froscon.org">FrOScon</a> HQ at the fachhochschule to help out with whatever was needed. Turns out that was a bit premature (misunderstanding on my part), so I have had some time to catch up on mail and give some more attention to my talk on Saturday. I&#8217;ll be helping out throughout the and the whole day tomorrow with things though.</p>
<p>I&#8217;ll be talking about <a href="http://mysql-mmm.org">MySQL MMM</a>, a project that I have invested quite a bit of time in getting to know. My talk will outline what MMM is, what it&#8217;s not and an example of our setup at <a href="http://openquery.com">Open Query</a>. It&#8217;s a full hour long, so it should be very interesting to be able to go into that much detail.</p>
<p>If you are near St. Augustin, make sure to come by for Froscon, as it&#8217;s schedule has some very interesting talks and you&#8217;ll also have a good chance to meet fellow MySQL-geeks in the OpenSQLCamp dev-room.</p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/ready-froscon-2009/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Replication fail with &#8220;There is no ‘username’@&#8217;host’ registered&#8221;</title>
		<link>http://openquery.com/blog/replication-fail-usernamehost-registered</link>
		<comments>http://openquery.com/blog/replication-fail-usernamehost-registered#comments</comments>
		<pubDate>Wed, 24 Jun 2009 02:59:56 +0000</pubDate>
		<dc:creator>arjen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[1449]]></category>
		<category><![CDATA[ERR_NO_SUCH_USER]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">http://openquery.com/blog/?p=822</guid>
		<description><![CDATA[This post doesn&#8217;t contain a tip, I&#8217;m asking the q and I don&#8217;t know the answer yet. Could just be a logic error on my part, in which case it was just a personal mystery and I thank you for helping! MySQL error 1449 “There is no ‘username’@'host’ registered” You can get a replication fail [...]]]></description>
			<content:encoded><![CDATA[<p>This post doesn&#8217;t contain a tip, I&#8217;m asking the q and I don&#8217;t know the answer yet. Could just be a logic error on my part, in which case it was just a personal mystery and I thank you for helping!</p>
<p><code>MySQL error 1449 “There is no ‘username’@'host’ registered”</code></p>
<p>You can get a replication fail with this error if you have triggers, views or stored routines that run as their creator (which is usual) but the slave does not have that user. So far so good.</p>
<p>We just encountered a replication fail on multiple slaves (i.e. not a single isolated mishap) with this error on an UPDATE statement accessing a single base table (i.e. no view), and no triggers defined or routines called in the query. Indeed the slave did not have the reported user (intentionally), but that shouldn&#8217;t have mattered. Creating the user allowed replication to continue successfully &#8211; that&#8217;s no surprise either.</p>
<p>The question is, what condition actually caused this error?</p>
<p>For ref, the original error message; obfucated but structurally unchanged:<br />
<code>[ERROR] Slave: Error ‘There is no ’someuser’@'%’ registered’ on query. Default database: ’somedb’. Query: ‘UPDATE `t1` SET `name` = ’some text string’, `description` = ‘another text string’, `date_taken` = ”, `place_taken` = ”, `modified` = ‘2009-06-24 12:06:16′, `updated_by` = 1, `modified_on` = 1245773176 WHERE `t1`.`id` = 361′, Error_code: 1449</code></p>
<p><strong>UPDATE (2009-06-26)</strong> <em>ok it was an Arjen fail, on a recheck of all the possible situations where permissions are checked (views, stored procs, triggers), I found that there&#8217;s 1 trigger in the entire system and it happens to be on this table. So, no bug and my mistake. Issue resolved! Thanks to all those helping!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://openquery.com/blog/replication-fail-usernamehost-registered/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
