<?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>The MariaDB Blog</title>
	<atom:link href="http://blog.mariadb.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mariadb.org</link>
	<description></description>
	<lastBuildDate>Mon, 06 May 2013 20:39:58 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>On performance of JDBC drivers.</title>
		<link>http://blog.mariadb.org/on-performance-of-jdbc-drivers/</link>
		<comments>http://blog.mariadb.org/on-performance-of-jdbc-drivers/#comments</comments>
		<pubDate>Mon, 06 May 2013 14:51:16 +0000</pubDate>
		<dc:creator>Vladislav Vaintroub</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MariaDB Java Client]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1621</guid>
		<description><![CDATA[Back when the first version of the MariaDB Java Client was released, someone asked in the comments about the performance characteristics of the driver compared to ConnectorJ. I answered with hand-waving, saying that nobody does anything stupid, the performance of the drivers would be roughly the same, but I promised to measure it and tell&#8230; <a href="http://blog.mariadb.org/on-performance-of-jdbc-drivers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Back when the first version of the MariaDB Java Client was released, someone asked in the comments about the performance characteristics of the driver compared to ConnectorJ. I answered with hand-waving, saying that nobody does anything stupid, the performance of the drivers would be roughly the same, but I promised to measure it and tell the world one day. And now that day has come. The day where three MySQL JDBC drivers (ConnectorJ, MariaDB JDBC, and Drizzle JDBC) are compared against each other. Unlike the server, which gets benchmarking attention all the time, there is no standard benchmark for connectors, so I needed to improvise, while trying to keep the overhead of the server minimal. So I did something very primitive to start. I used my two favorite queries:</p>
<ul>
<li><code>DO 1</code> &#8212; this one does not retrieve a result set, and thus can be seen as a small &#8220;update&#8221;.</li>
<li><code>SELECT 1</code> &#8212; the minimal SELECT query.</li>
</ul>
<p>The test program runs a query N times, and if the query was a select, it retrieves all values from the result set, using <code>ResultSet.getObject(i)</code>, and calculates the queries-per-second value. (The best thing is that the test program is single-threaded, and how often does one get to run single-threaded tests? <img src='http://blog.mariadb.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   the test was run on my own workstation, which runs Windows Server 2008 R2, and I have <code>useConfigs=maxPerformance</code> in the URL for ConnectorJ.</p>
<h2>Results (Queries per second,  unprepared)</h2>
<table>
<thead>
<tr>
<th></th>
<th>ConnectorJ-5.1.24</th>
<th>MariaDB-JDBC-1.1.2</th>
<th>Drizzle-JDBC-1.3-SNAPSHOT</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>DO 1</b></td>
<td>19543</td>
<td>22104</td>
<td>15288</td>
</tr>
<tr>
<td><b>SELECT 1</b></td>
<td>17004</td>
<td>19305</td>
<td>13410</td>
</tr>
</tbody>
</table>
<p><a class="thumbnail" href="http://blog.mariadb.org/wp-content/uploads/2013/05/jdbc_fast_queries.png"><img class="alignnone size-full wp-image-1626" alt="jdbc_fast_queries" src="http://blog.mariadb.org/wp-content/uploads/2013/05/jdbc_fast_queries.png" width="481" height="299" /></a></p>
<p>&nbsp;</p>
<p>MariaDB JDBC appears to be a little faster (~10%) than  ConnectorJ, and much faster (~30%) than Drizzle JDBC.</p>
<p>Can ConnectorJ do better? I bet it can. Looking into profiler output &#8211; CPU profiling, instrumentation mode in NetBeans &#8211; for  a test that executes &#8220;SELECT 1&#8243; in a loop,  shows <code>com.mysql.jdbc.StatementImpl.findStartOfStatement()</code> taking 7.5% of runtime. Ok, instrumentation results should be taken with a grain of salt, however the single reason string search is used, is because - if an update (DML) statement is executed inside <code>ResultSet.executeQuery()</code>, it is rejected with an exception. This can be done differenty, I believe. If absolutely necessary, throwing an exception can be delayed, until the client finds out that the server sent an OK packet instead of a result set.</p>
<p>Even more interesting is the case with Drizzle JDBC. In theory, since the MariaDB driver has a Drizzle JDBC heritage, the performance characteristics should be similar, but they are not, so there must be a bug somewhere. It appears very easy to find, as according to profiler, 50.2% CPU time (take that number with a big grain of salt) is spent in a function that constructs a hexdump from a byte buffer. Looking at the <a href=" https://github.com/krummas/DrizzleJDBC/blob/master/src/main/java/org/drizzle/jdbc/internal/common/packet/commands/StreamedQueryPacket.java">source code</a>, we find following line that is unconditionally executed:</p>
<p><code>log.finest("Sending : " + MySQLProtocol.hexdump(byteHeader, 0));</code></p>
<p>While the result of the hexdump is never used (unless logging level is FINEST), the dump string is still created, using relatively expensive <code>Formatter</code> routines, concatenated with the String &#8220;Sending:&#8221;, and then thrown away&#8230; In Markus&#8217; defense, <code>hexdump()</code> is not his fault, it was contributed 3 years ago. But it remained undetected for 3 years. This bug is now filed  <a href="https://github.com/krummas/DrizzleJDBC/issues/21">https://github.com/krummas/DrizzleJDBC/issues/21</a> [UPDATE: this bug was resolved within hours  after reporting]</p>
<p>So, let&#8217;s check how much we can gain by putting the offending code into an <code>if (log.getLevel() == java.util.logging.Level.FINEST)</code> condition.<br />
The QPS from &#8220;DO 1&#8243; raises from 15288 to 19968 (30%), and for &#8220;SELECT 1&#8243; we have increase from 13410 to respectable 16824 (25%). Not bad for a single line fix.<br />
<a class="thumbnail" href="http://blog.mariadb.org/wp-content/uploads/2013/05/jdbc_fast_queries_drizzle_fix.png"><img class="alignnone size-full wp-image-1628" alt="jdbc_fast_queries_drizzle_fix" src="http://blog.mariadb.org/wp-content/uploads/2013/05/jdbc_fast_queries_drizzle_fix.png" width="481" height="299" /></a></p>
<p>While the one-liner makes the Drizzle JDBC faster, with slightly better numbers than ConnectorJ, it is still not as fast as MariaDB.</p>
<p>In the MariaDB JDBC connector, there were a couple of improvements to performance which were made since forking. One of the early improvements was to avoid copying data unnecessarily when sending, and to decrease the number of byte buffers.  Another improvement came recently, after profiling and finding that parsing Field packets is expensive (mostly due to the construction of Strings for column name, aliases, and etc&#8230;). The improvement was lazy parsing,  delaying string construction, and avoiding it entirely in most cases. For example, if column names are not used, and rows are accessed using integer indexes in <code>ResultSet.getXXX(int i)</code>, the metadata won&#8217;t be fully parsed. Also, perhaps there were some other fixes that I do not remember anymore. <img src='http://blog.mariadb.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Can we further increase the QPS?</h2>
<p>We can try. First, statements can be prepared. MariaDB and Drizzle so far only provide client-side prepared statements (ConnectorJ can do both client and server-side prepared statements) but using them saves having to convert the query to bytes, and JDBC escapes preprocessing. From now on I&#8217;ll stay just with &#8220;DO 1&#8243; which proved to be the fastest query. Trying it on MariaDB driver shows some minimal QPS increase 22104 (not prepared) vs 22183 (prepared), or 0.3%. Slightly more on ConnectorJ (19543 vs 20096, or 2.9%). Nothing revolutionary so far.</p>
<p>But, We still have not used all of the options in this (admittedly silly) quest for maximizing the performance of &#8220;DO 1&#8243;. Recall that ConnectorJ can support named pipes on Windows, which are allegedly much faster than TCP connections. Restart server with named pipe, set JDBC URL to &#8220;jdbc:mysql:///?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory&amp;namedPipePath=\\\\.\\Pipe\\MySQL&amp;user=root&amp;useConfigs=maxPerformance&#8221;, and rerun the test with 1000000 prepared queries. Now the QPS grew to <strong>29542</strong>! That is strong, and is a 33% improvement compared to the best result seen so far. Yet, unfortunately, still no cigar, since JVM dumps a stack trace when the named pipe connection is closed. This is a &#8220;Won&#8217;t fix&#8221; (chalked off as a JVM problem) MySQL bug <a title="Bug#62518" href="http://bugs.mysql.com/bug.php?id=62518">Bug#62518</a>, which renders named pipe support almost useless &#8211; though maybe there is a trick to shut up th JVM somehow in this case, but I do not know of such a trick.</p>
<h2>How fast is C client library in comparison?</h2>
<p>Out of curiosity, I also tested how the native client compares to JDBC. With the TCP protocol, it does slightly better than the fastest JDBC (MariaDB, prepared), but it is not a huge margin &#8211; 24063 QPS vs 22183 (8.5% difference), and I believe Java drivers could improve further.<br />
With named pipe, QPS is 33122, which is ~12% better than what ConnectorJ could do, if pipes worked properly there.</p>
<p>&nbsp;</p>
<h2>Accessing benchmark program</h2>
<p>I put the benchmark program on <a href="https://code.launchpad.net/~wlad-montyprogram/+junk/jdbc-bench">Launchpad</a>, together with the drivers. If you&#8217;re on Windows, and if you have a server running on port 3306, and the &#8216;root&#8217; user doesn&#8217;t have a password, you can just branch the repository and run bench_all.bat. Those of you who are using other operating systems, I trust you to be able to quickly rewrite the batch files as shell scripts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/on-performance-of-jdbc-drivers/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>MariaDB Java Client 1.1.2 Released</title>
		<link>http://blog.mariadb.org/mariadb-java-client-1-1-2-released/</link>
		<comments>http://blog.mariadb.org/mariadb-java-client-1-1-2-released/#comments</comments>
		<pubDate>Thu, 02 May 2013 21:58:56 +0000</pubDate>
		<dc:creator>Daniel Bartholomew</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MariaDB Java Client]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1615</guid>
		<description><![CDATA[The MariaDB project is pleased to announce the immediate availability of the MariaDB Java Client 1.1.2. This is a Stable (GA) release. See the Release Notes and Changelog for detailed information on this release and the About the MariaDB Java Client page in the AskMonty Knowledgebase for general information about the client. Download MariaDB Java&#8230; <a href="http://blog.mariadb.org/mariadb-java-client-1-1-2-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The MariaDB project is pleased to announce the immediate availability of the <a title="About the MariaDB Java Client" href="https://kb.askmonty.org/en/about-the-mariadb-java-client/" target="_blank">MariaDB Java Client 1.1.2</a>. This is a Stable (GA) release. See the <a title="MariaDB Java Client 1.1.2 Release Notes" href="https://kb.askmonty.org/en/mariadb-java-client-112-release-notes/">Release Notes</a> and <a title="MariaDB Java Client 1.1.2 Changelog" href="https://kb.askmonty.org/en/mariadb-java-client-112-changelog/">Changelog</a> for detailed information on this release and the <a title="About the MariaDB Java Client" href="https://kb.askmonty.org/en/about-the-mariadb-java-client/">About the MariaDB Java Client</a> page in the AskMonty Knowledgebase for general information about the client.</p>
<p style="text-align: center;"><a class="btn btn-large btn-primary" title="MariaDB Java Client 1.1.2 Downloads" href="https://downloads.mariadb.org/client-java/1.1.2/" target="_blank">Download MariaDB Java Client 1.1.2</a></p>
<p style="text-align: center;"><a class="btn btn-small btn-info" href="https://kb.askmonty.org/en/mariadb-java-client-112-release-notes/">Release Notes</a>  <a class="btn btn-small btn-info" href="https://kb.askmonty.org/en/mariadb-java-client-112-changelog/">Changelog</a>  <a class="btn btn-small btn-info" href="https://kb.askmonty.org/en/about-the-mariadb-java-client/">About the MariaDB Java Client</a></p>
<h3 id="bugs-fixed-in-this-release">Bugs fixed in this release</h3>
<p>MariaDB Java Client 1.1.2 is a bug fix release. Some of the bugs fixed include the following:</p>
<ul>
<li><code>PreparedStatement.getMetaData()</code> will now return correct ResultSet metadata, also prior to statement execution. In this case, to retrieve metadata, statement will be prepared on the server side. (<a href="https://mariadb.atlassian.net/browse/CONJ-21">CONJ-21</a>)</li>
</ul>
<ul>
<li>Performance enhancement : <code>Connection.getAutoCommit()</code> will not more issue not issue &#8220;<code>select @@autocommit</code>&#8221; query anymore. This information is also available in on status flags sent with OK/EOF protocol packets. Also, <code>Connection.setAutoCommit()</code> will be a no-op, if autocommit status is already the same as desired one (<a href="https://mariadb.atlassian.net/browse/CONJ-30">CONJ-30</a>)</li>
</ul>
<ul>
<li>Fixed several issues with CLOB datatype and <code>ResultSet.setCharacterStream()</code> -non-ASCII character could get lost after <code>setCharacterStream()</code>. CLOB was errneously sent to server as binary (using <code>_BINARY</code> introducer). (<a href="https://mariadb.atlassian.net/browse/CONJ-31">CONJ-31</a>)</li>
</ul>
<ul>
<li>CHAR BINARY and VARCHAR BINARY were errnously handled as binary type. They are now correctly treated as CHAR/VARCHAR with binary collation. (<a href="https://mariadb.atlassian.net/browse/CONJ-28">CONJ-28</a>)</li>
</ul>
<ul>
<li><code>Blob.getBinaryStream()</code> could return blob with incorrect size (<a href="https://mariadb.atlassian.net/browse/CONJ-31">CONJ-31</a>)</li>
</ul>
<ul>
<li>Fix server version string for MariaDB Server 10.0.2 (<a href="https://mariadb.atlassian.net/browse/CONJ-32">CONJ-32</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/mariadb-java-client-1-1-2-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Database Master-Slave Replication in the Cloud</title>
		<link>http://blog.mariadb.org/database-master-slave-replication-in-the-cloud/</link>
		<comments>http://blog.mariadb.org/database-master-slave-replication-in-the-cloud/#comments</comments>
		<pubDate>Wed, 01 May 2013 18:54:12 +0000</pubDate>
		<dc:creator>Daniel Bartholomew</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Jelastic]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PaaS]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1571</guid>
		<description><![CDATA[This is a guest post from Jelastic. Many developers use master-slave replication to solve a number of different problems, including problems with performance, supporting the backup of different databases, and as a part of a larger solution to alleviate system failures. Traditionally, master-slave replication is done with real servers, but it can also be done&#8230; <a href="http://blog.mariadb.org/database-master-slave-replication-in-the-cloud/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div class="alert alert-info">This is a guest post from <a href="http://jelastic.com">Jelastic</a>.</div>
<p>Many developers use master-slave replication to solve a number of different problems, including problems with performance, supporting the backup of different databases, and as a part of a larger solution to alleviate system failures. Traditionally, master-slave replication is done with real servers, but it can also be done with cloud database servers. This guest post from <a href="http://jelastic.com">Jelastic</a> (originally published <a href="http://blog.jelastic.com/2013/01/15/database-master-slave-replication-in-the-cloud/">here</a>) describes how to set up MariaDB master-slave replication using their Jelastic PaaS (Platform as a Service).</p>
<p><span id="more-1571"></span></p>
<h2>Replication Overview</h2>
<p>Master-slave replication enables data from one database server (the master) to be replicated to one or more other database servers (the slaves). The master logs the updates, which then ripple through to the slaves. The slave outputs a message stating that it has received the update successfully, thus allowing the sending of subsequent updates. Master-slave replication can be either synchronous or asynchronous. The difference is simply the timing of propagation of changes. If the changes are made to the master and slave at the same time, it is synchronous. If changes are queued up and written later, it is asynchronous.</p>
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication173.png"><img class="size-full wp-image-1588 aligncenter" alt="dbreplication173" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication173.png" width="497" height="279" /></a></p>
<p>Usage targets for replication in MariaDB include:</p>
<ul>
<li><strong>Scale-out solutions —</strong> spreading the load among multiple slaves to improve performance. In this environment, all writes and updates must take place on the master server. Reads, however, may take place on one or more slaves. This model can improve the performance of writes (since the master is dedicated to updates), while dramatically increasing read speed across an increasing number of slaves.</li>
<li><strong>Data security —</strong> as data is replicated to the slave, and the slave can pause the replication process, it is possible to run backup services on the slave without corrupting the corresponding master data.</li>
<li><strong>Analytics —</strong> live data can be created on the master, while the analysis of the information can take place on the slave without affecting the performance of the master.</li>
<li><strong>Long-distance data distribution —</strong> if a branch office would like to work with a copy of our main data, we can use replication to create a local copy of the data for their use without requiring permanent access to the master.</li>
</ul>
<p>Let’s examine a few examples on how we can use such replication and take advantage of it:</p>
<ul>
<li><strong>Backups:</strong> to use replication as a backup solution, replicate data from the master to a slave, and then back up the data slave. The slave can be paused and shut down without affecting the running operation of the master, so we can produce an effective snapshot of “live” data that would otherwise require the master to be shut down.</li>
<li><strong>Scale-out:</strong> we can use replication as a scale-out solution; that is, where we want to split up the load of database queries across multiple database servers, within some reasonable limitations. Because replication works from the distribution of one master to one or more slaves, using replication for scale-out works best in an environment where we have a high number of reads and low number of writes/updates. Most Web sites fit into this category, where users are browsing the Web site, reading articles, posts, or viewing products. Updates only occur during session management, or when making a purchase or adding a comment/message to a forum. Replication in this situation enables us to distribute the reads over the replication slaves, while still enabling our web servers to communicate with the replication master when a write is required.</li>
<li><strong>Spreading the load:</strong> there may be situations when we have a single master and want to replicate different databases to different slaves. For example, we may want to distribute different sales data to different departments to help spread the load during data analysis.</li>
<li><strong>Increasing the performance:</strong> as the number of slaves connecting to a master increases, the load, although minimal, also increases, as each slave uses a client connection to the master. Also, as each slave must receive a full copy of the master binary log, the network load on the master may also increase and create a bottleneck. If we are using a large number of slaves connected to one master, and that master is also busy processing requests (for example, as a part of a scale-out solution), then we may want to improve the performance of the replication process. One way to improve the performance of the replication process is to create a deeper replication structure that enables the master to replicate to only one slave, and for the remaining slaves to connect to this primary slave for their individual replication requirements.</li>
<li><strong>Failover alleviating:</strong> We can set up a master and a slave (or several slaves), and then write a script that monitors the master to check whether it is up. Then instruct our applications and the slaves to change master in case of failure.</li>
<li><strong>Security:</strong> we can use SSL for encrypting the transfer of the binary log required during replication, but both the master and the slave must support SSL network connections. If either host does not support SSL connections, replication through an SSL connection is not possible. Setting up replication using an SSL connection is similar to setting up a server and client using SSL. We must obtain (or create) a suitable security certificate that we can use on the master, and a similar certificate (from the same certificate authority) on each slave.</li>
</ul>
<p>Now let’s examine a simple example on how to configure master-slave replication on Jelastic PaaS.</p>
<h2>Create environments</h2>
<p><em>*The instructions below only mention MariaDB but they are fully suitable for MySQL database servers.</em></p>
<p>First of all we create two environments in Jelastic for our master and slave databases.</p>
<ol>
<li>Go to jelastic.com and sign up if we haven’t done it yet or log in with our Jelastic credentials by clicking the Sign In link on the page.</li>
<li>Ask Jelastic to create a new environment.<br />
<a href="http://blog.mariadb.org/wp-content/uploads/2013/05/alf-11.png"><img class="size-full wp-image-1573 aligncenter" alt="alf-11" src="http://blog.mariadb.org/wp-content/uploads/2013/05/alf-11.png" width="286" height="109" /></a></li>
<li>In the <strong>Environment topology</strong> dialog pick <strong>MariaDB</strong> as a database we want to use. Set the cloudlet limit and type the name of our first environment, for example, <em>masterbase</em>.<br />
<a href="http://blog.mariadb.org/wp-content/uploads/2013/05/replication1.png"><img class=" wp-image-1589 aligncenter" alt="replication1" src="http://blog.mariadb.org/wp-content/uploads/2013/05/replication1.png" width="919" height="529" /></a>Wait just a minute for our environment to be created.</p>
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/replication2.png"><img class="wp-image-1590 aligncenter" alt="replication2" src="http://blog.mariadb.org/wp-content/uploads/2013/05/replication2.png" width="973" height="137" /></a></p>
</li>
<li>In the same way create one more environment with MariaDB or just clone it. Let’s name it <em>slavebase</em>. BTW, it will be located on the other hardnode, which is even more secure and reliable for storing our data. Now we have two identical environments with two databases.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/replication4.png"><img class=" wp-image-1591 aligncenter" alt="replication4" src="http://blog.mariadb.org/wp-content/uploads/2013/05/replication4.png" width="971" height="228" /></a></p>
</li>
</ol>
<h2>Configure master database</h2>
<p>Let’s configure our master database now.</p>
<ol>
<li>Click the <strong>config</strong> button for our master database.<br />
<a href="http://blog.mariadb.org/wp-content/uploads/2013/05/replication5.png"><img class=" wp-image-1592 aligncenter" alt="replication5" src="http://blog.mariadb.org/wp-content/uploads/2013/05/replication5.png" width="803" height="234" /></a></li>
<li>Navigate to <strong>my.cnf</strong> file and add the following properties:
<pre>
server-id = 1
log-bin = mysql-bin
binlog-format=mixed
</pre>
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication15.png"><img class=" wp-image-1586 aligncenter" alt="dbreplication15" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication15.png" width="990" height="494" /></a></p>
<p>We use binlog format “mixed” (binlog-format=mixed) to allow a replication of operations with foreign keys.</p>
<p><strong>Note: Do not use binlog format “statement”</strong> (otherwise we will get errors later on!)</li>
<li>Save the changes and restart MariaDB in order to apply the new configuration parameters.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/replication7.png"><img class=" wp-image-1593 aligncenter" alt="replication7" src="http://blog.mariadb.org/wp-content/uploads/2013/05/replication7.png" width="800" height="227" /></a></p>
</li>
<li>Click the <strong>Open in browser</strong> button for <strong>MariaDB</strong>. When we created the database, Jelastic will have sent us an email with credentials to it. Log in using these credentials.</li>
<li>Navigate to the <strong>Replication</strong> tab and click on <strong>Add slave replication user</strong>.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication1.png"><img class=" wp-image-1574 aligncenter" alt="dbreplication1" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication1.png" width="1461" height="457" /></a></p>
</li>
<li>Specify the name and password for our slave replication user and click <strong>Go</strong>.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication2.png"><img class=" wp-image-1575 aligncenter" alt="dbreplication2" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication2.png" width="1920" height="535" /></a></p>
<p>Now our slave user is successfully created.</p>
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication3.png"><img class=" wp-image-1576 aligncenter" alt="dbreplication3" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication3.png" width="1364" height="840" /></a></p>
</li>
</ol>
<h2>Configure slave database</h2>
<p>Let’s go back to the Jelastic dashboard and configure our slave database.</p>
<ol>
<li>Click the <strong>config</strong> button for our slave database.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication4.png"><img class=" wp-image-1577 aligncenter" alt="dbreplication4" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication4.png" width="972" height="263" /></a></p>
</li>
<li>Navigate to the <strong>my.cnf</strong> file and add the following strings:
<pre>
server-id = 2
slave-skip-errors = all
</pre>
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication14.png"><img class=" wp-image-1585 aligncenter" alt="dbreplication14" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication14.png" width="677" height="393" /></a></p>
<p>We allow our slave database to skip all errors from the master (<code>slave-skip-errors = all</code>) in order not to stop normal slave operations in case of errors on the master. Don&#8217;t set this option during development as we want to see and catch all bugs, large and small, before moving our code from development to production. Production code should not have any big bugs, so setting this can be useful in that it allows replication to keep working through small, innocuous errors which could stop production and cost money (downtime, lost sales, etc&#8230;). This option can be dangerous however, so proceed with caution, and make regular backups.</li>
<li>Save the changes and restart our slave database server in order to apply the new configuration parameters.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication6.png"><img class=" wp-image-1578 aligncenter" alt="dbreplication6" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication6.png" width="972" height="268" /></a></p>
</li>
<li>Navigate to phpMyAdmin using the credentials which Jelastic sent us when we created the environment for our slave database.</li>
<li>Go to the <strong>Replication</strong> tab click <strong>configure</strong> for <strong>Slave replication</strong>.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication71.png"><img class=" wp-image-1587 aligncenter" alt="dbreplication71" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication71.png" width="1354" height="369" /></a></p>
</li>
<li>Configure our master server (enter the name, the password and the host of our slave replication user).
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication8.png"><img class=" wp-image-1579 aligncenter" alt="dbreplication8" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication8.png" width="1349" height="538" /></a></p>
<p>Now our master server is configured.</p>
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication9.png"><img class=" wp-image-1580 aligncenter" alt="dbreplication9" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication9.png" width="1350" height="406" /></a></p>
</li>
<li>Click on <strong>Control slave -&gt; Full start</strong> for the slave server in order to run <strong>Slave SQL</strong> and <strong>Slave IO</strong> threads.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication10.png"><img class=" wp-image-1581 aligncenter" alt="dbreplication10" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication10.png" width="1350" height="593" /></a></p>
</li>
<li>Check the slave status table to ensure that everything is ok.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication11.png"><img class=" wp-image-1582 aligncenter" alt="dbreplication11" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication11.png" width="1095" height="853" /></a></p>
</li>
</ol>
<h2>Check the results</h2>
<p>We have to ensure now that master-slave replication works for our databases.</p>
<ol>
<li>Let’s create a new database (e.g. <em>Jelastic</em>) in our master database.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication12.png"><img class=" wp-image-1583 aligncenter" alt="dbreplication12" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication12.png" width="1458" height="494" /></a></p>
</li>
<li>Navigate to the slave database and we’ll see that the new database was successfully replicated.
<p style="text-align: center;"><a href="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication13.png"><img class=" wp-image-1584 aligncenter" alt="dbreplication13" src="http://blog.mariadb.org/wp-content/uploads/2013/05/dbreplication13.png" width="1349" height="503" /></a></p>
</li>
</ol>
<h2>Connection to master-slave</h2>
<p>Here are two examples on how to connect to our master and slave databases from Java and PHP applications.</p>
<ol>
<li>Our first example is the code of a Java application which connects to our master and slave databases.
<p><strong>Database_config.cfg:</strong></p>
<pre>
master_host=jdbc:mysql://mariadb-master-host/mysql
master_username=root
master_password=abcABC123
slave_host=jdbc:mysql://mariadb-slave-host/mysql
slave_username=root
slave_password=abcABC123

driver=com.mysql.jdbc.Driver
</pre>
<p><strong>Dbmanager.java:</strong></p>
<pre class="pre-scrollable">
package com.jelastic.test;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DbManager {

private final static String createDatabase = "CREATE SCHEMA IF NOT EXISTS jelastic";
private final static String showDatabases = "SHOW DATABASES";

public Connection createMasterConnection() throws IOException, ClassNotFoundException, SQLException {
Connection masterConnection;
Properties prop = new Properties();
prop.load(new FileInputStream(System.getProperty("user.home") + "/database_config.cfg"));
String master_host = prop.getProperty("master_host").toString();
String master_username = prop.getProperty("master_username").toString();
String master_password = prop.getProperty("master_password").toString();
String driver = prop.getProperty("driver").toString();

Class.forName(driver);
masterConnection = DriverManager.getConnection(master_host, master_username, master_password);
return masterConnection;
}

public Connection createSlaveConnection() throws IOException, ClassNotFoundException, SQLException {
Connection slaveConnection;
Properties prop = new Properties();
prop.load(new FileInputStream(System.getProperty("user.home") + "/database_config.cfg"));
String slave_host = prop.getProperty("slave_host").toString();
String slave_username = prop.getProperty("slave_username").toString();
String slave_password = prop.getProperty("slave_password").toString();
String driver = prop.getProperty("driver").toString();

Class.forName(driver);
slaveConnection = DriverManager.getConnection(slave_host, slave_username, slave_password);
return slaveConnection;
}

public boolean runSqlStatementOnMaster() {
boolean execute = false;
Statement statement = null;
try {
statement = createMasterConnection().createStatement();
execute = statement.execute(createDatabase);
} catch (IOException ex) {
Logger.getLogger(DbManager.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(DbManager.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return execute;
}

public List&lt;String&gt; runSqlStatementOnSlave() {
List&lt;String&gt; stringList = new ArrayList&lt;String&gt;();
Statement statement = null;
ResultSet resultSet = null;
try {
statement = createSlaveConnection().createStatement();
resultSet = statement.executeQuery(showDatabases);
while (resultSet.next()) {
stringList.add(resultSet.getString(1));
}
} catch (IOException ex) {
Logger.getLogger(DbManager.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(DbManager.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return stringList;
}
}
</pre>
</li>
<li>Our second example is a connection to our master and slave databases in a PHP application:
<pre class="pre-scrollable">
&lt;?php
/* Master settings */
$master_server = "xx.xxx.x.xx";
$master_username = "root";
$master_password = "abcABC123"; /* Slave settings */
$slave_server = "xx.xxx.x.xx";
$slave_username = "root";
$slave_password = "abcABC123";$link_to_master = mysqli_connect(
$master_server,
$master_username,
$master_password,
'mysql');

if (!$link_to_master) {
printf("Unable to connect master database server. Error: %sn", mysqli_connect_error());
exit;
}

$link_to_slave = mysqli_connect(
$slave_server,
$slave_username,
$slave_password,
'mysql');

if (!$link_to_slave) {
printf("Unable to connect slave database server. Error: %sn", mysqli_connect_error());
exit;
}

print("
Creating database with name Jelastic on Master node ");

$result = mysqli_query($link_to_master, 'CREATE DATABASE JelasticX');

sleep (3);

print("
Checking if created database was replciated to slave ");

if ($result = mysqli_query($link_to_slave, 'SHOW DATABASES LIKE "JelasticX"')) {
$result_text = mysqli_fetch_array($result);
print ("
Replicated database is ".$result_text[0]);
}

mysqli_close($link_to_master);
mysqli_close($link_to_slave);
?&gt;
</pre>
</li>
</ol>
<h2>Conclusion</h2>
<p>Database replication with MariaDB adds redundancy, helps to ensure high availability, simplifies certain administrative tasks such as backups, may increase performance, and much more. It’s become easy to configure database replication in the cloud, only few minutes and everything is ready. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/database-master-slave-replication-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MariaDB Introduces Atomic Writes</title>
		<link>http://blog.mariadb.org/mariadb-introduces-atomic-writes/</link>
		<comments>http://blog.mariadb.org/mariadb-introduces-atomic-writes/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 11:37:18 +0000</pubDate>
		<dc:creator>Axel Schwenke</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SSD]]></category>
		<category><![CDATA[SysBench]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1556</guid>
		<description><![CDATA[When dealing with high performance, low latency storage devices, such as SSD cards, one finds bottlenecks in new places. This is a story about such a bottle neck and how to work around it. One unique feature of InnoDB is the double write buffer. This buffer was implemented to recover from half-written pages. This can&#8230; <a href="http://blog.mariadb.org/mariadb-introduces-atomic-writes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<figure id="attachment_1554" class="wp-caption thumbnail aligncenter" style="width: 600px;">
				<img class=" size-full wp-image-1554" alt="Sysbench OLTP, transactions per second" src="http://blog.mariadb.org/wp-content/uploads/2013/04/tps_rw.png" width="600" height="360" />
				<figcaption class="wp-caption-text">Sysbench OLTP, transactions per second</figcaption>
			</figure>
<p>When dealing with high performance, low latency storage devices, such as SSD cards, one finds bottlenecks in new places. This is a story about such a bottle neck and how to work around it.<span id="more-1556"></span></p>
<p>One unique feature of InnoDB is the double write buffer. This buffer was implemented to recover from half-written pages. This can happen in case of a power failure while InnoDB is writing a page (16KB = 32 sectors) to disk. On reading that page, InnoDB would be able to discover the corruption from the mismatch of the page checksum. However in order to recover, an intact copy of the page would be needed.</p>
<p>The double write buffer provides such a copy. Whenever InnoDB flushes a page to disk, it is first written to the double write buffer. Only when the buffer is safely flushed to disk, InnoDB writes the page to the final destination. When recovering, InnoDB scans the double write buffer and for each valid page in the buffer checks if the page in the data file is valid too.</p>
<p>Both the checksum calculation and the double writing consume time and thus reduce the performance of page flushing. The effect becomes visible only with fast storage and heavy write load. For testing it is possible to disable both features. However I strongly discourage from using this in a productive environment.</p>
<p>Currently, in order to use atomic writes, it is necessary to use the DirectFS file system, which is a part of the Fusion IO SDK. Wlad Vaintroub from Monty Program AB, in cooperation with FusionIO developers, implemented the necessary changes in InnoDB/XtraDB to use the new feature. If the all table spaces reside on directFS/FusionIO and thus support atomic writes, the new variable <b>innodb_use_atomic_writes=1</b> will switch to using atomic writes instead of the double write buffer. The patch is already in MariaDB-10.0.2 and will also be included in MariaDB 5.5.31. The user documentation of the feature is available in <a href="https://kb.askmonty.org/en/fusioniodirectfs-atomic-write-support/">this Knowlegde Base article</a>.</p>
<p>Now for numbers! First tests have shown that atomic writes are of little to no benefit for small data sets (data set fits into RAM). However with fast SSD one can now afford to have a much bigger data set (compared to RAM size) because reads and writes are much faster.</p>
<p>The following numbers are for the Sysbench OLTP benchmark, using a data set of 100GB (400 Mio rows in 16 tables) but only 16GB of RAM in the InnoDB buffer pool. Performance was of course slower than with the usual 10GB data set. Numbers:</p>
<table>
<tbody>
<tr>
<td></td>
<td>small data set (10G)</td>
<td>big data set (100G)</td>
</tr>
<tr>
<td>max ro tps</td>
<td>8000</td>
<td>3000</td>
</tr>
<tr>
<td>max rw tps</td>
<td>6000</td>
<td>1800</td>
</tr>
</tbody>
</table>
<p>For the big data set the following configurations have been compared:</p>
<ul>
<li>double write, InnoDB page checksum</li>
<li>atomic write, InnoDB page checksum</li>
<li>atomic write, XtraDB fast page checksum</li>
<li>atomic write, no page checksum</li>
</ul>
<table border="1">
<tbody>
<tr>
<th>Threads</th>
<th>double write</th>
<th colspan="2">atomic write</th>
<th colspan="2">atomic write + fast checksum</th>
<th colspan="2">atomic write + no checksum</th>
</tr>
<tr>
<td>1</td>
<td>159.81</td>
<td>164.34</td>
<td>+2.8%</td>
<td>179.68</td>
<td>+12.4%</td>
<td>184.72</td>
<td>+15.6%</td>
</tr>
<tr>
<td>2</td>
<td>316.65</td>
<td>343.21</td>
<td>+8.4%</td>
<td>378.61</td>
<td>+19.6%</td>
<td>391.72</td>
<td>+23.7%</td>
</tr>
<tr>
<td>4</td>
<td>544.05</td>
<td>635.26</td>
<td>+16.8%</td>
<td>699.6</td>
<td>+28.6%</td>
<td>726.55</td>
<td>+33.5%</td>
</tr>
<tr>
<td>8</td>
<td>830.37</td>
<td>1062.8</td>
<td>+28.0%</td>
<td>1176.8</td>
<td>+41.7%</td>
<td>1214.7</td>
<td>+46.3%</td>
</tr>
<tr>
<td>16</td>
<td>1054.7</td>
<td>1421.2</td>
<td>+34.7%</td>
<td>1570.7</td>
<td>+48.9%</td>
<td>1610.1</td>
<td>+52.7%</td>
</tr>
<tr>
<td>32</td>
<td>1208.3</td>
<td>1615.1</td>
<td>+33.7%</td>
<td>1736.6</td>
<td>+43.7%</td>
<td>1767.4</td>
<td>+46.3%</td>
</tr>
<tr>
<td>64</td>
<td>1286.9</td>
<td>1673.2</td>
<td>+30.0%</td>
<td>1793.2</td>
<td>+39.3%</td>
<td>1833.7</td>
<td>+42.5%</td>
</tr>
<tr>
<td>128</td>
<td>1266.2</td>
<td>1653.1</td>
<td>+30.6%</td>
<td>1824.5</td>
<td>+44.1%</td>
<td>1875.6</td>
<td>+48.1%</td>
</tr>
<tr>
<td>256</td>
<td>1139.4</td>
<td>1505</td>
<td>+32.1%</td>
<td>1586.3</td>
<td>+39.2%</td>
<td>1618.3</td>
<td>+42.0%</td>
</tr>
</tbody>
</table>
<p>Conclusions:</p>
<ul>
<li>enabling atomic writes yields 30% better write performance out of the box</li>
<li>using the fast checksum from XtraDB boosts this to nearly 50%</li>
<li>disabling checksums completely is only marginally better</li>
</ul>
<p>Benchmark details:</p>
<p>MariaDB-5.5.30 (lp trunk). Sysbench-0.5 (Lua enabled). Complex OLTP benchmark. 400 mio rows in 16 tables. 16GB InnoDB buffer pool, 4G redo logs.</p>
<p>As always the benchmark scripts and results are <a href="http://bazaar.launchpad.net/~ahel/maria/mariadb-benchmarks/files/head:/sysbench-runs/series36/" target="_blank">available to anybody</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/mariadb-introduces-atomic-writes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>MariaDB 10.0.2-alpha Now Available</title>
		<link>http://blog.mariadb.org/mariadb-10-0-2-alpha-now-available/</link>
		<comments>http://blog.mariadb.org/mariadb-10-0-2-alpha-now-available/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 04:37:05 +0000</pubDate>
		<dc:creator>Daniel Bartholomew</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MariaDB Releases]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1546</guid>
		<description><![CDATA[The MariaDB project is pleased to announce the immediate availability of MariaDB 10.0.2. This is an alpha release. See the release notes and changelog for details. Download MariaDB 10.0.2 Release Notes  Changelog  Overview of 10.0 APT and YUM Repository Configuration Generator About this Release MariaDB 10.0 is the development version of MariaDB. It is built on the MariaDB&#8230; <a href="http://blog.mariadb.org/mariadb-10-0-2-alpha-now-available/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The MariaDB project is pleased to announce the immediate availability of <a title="What is MariaDB 10.0?" href="https://kb.askmonty.org/en/what-is-mariadb-100" target="_blank">MariaDB 10.0.2</a>. This is an alpha release. See the <a title="MariaDB 10.0.2 Release Notes" href="https://kb.askmonty.org/en/mariadb-1002-release-notes">release notes</a> and <a title="MariaDB 10.0.2 Changelog" href="https://kb.askmonty.org/en/mariadb-1002-changelog" target="_blank">changelog</a> for details. </p>
<p style="text-align: center;"><a class="btn btn-large btn-primary" title="MariaDB 10.0.2 Downloads" href="https://downloads.mariadb.org/mariadb/10.0.2" target="_blank">Download MariaDB 10.0.2</a></p>
<p style="text-align: center;"><a class="btn btn-small btn-info" href="https://kb.askmonty.org/en/mariadb-1002-release-notes/">Release Notes</a>  <a class="btn btn-small btn-info" href="https://kb.askmonty.org/en/mariadb-1002-changelog/">Changelog</a>  <a class="btn btn-small btn-info" href="https://kb.askmonty.org/en/what-is-mariadb-100/">Overview of 10.0</a></p>
<p style="text-align: center; font-size: 0.8em;"><a title="APT and YUM Repository Configuration Generator" href="https://downloads.mariadb.org/mariadb/repositories/" target="_blank">APT and YUM Repository Configuration Generator</a></p>
<h3>About this Release</h3>
<p>MariaDB 10.0 is the development version of MariaDB. It is built on the MariaDB 5.5 series with backported features from MySQL 5.6 and entirely new features not found anywhere else.</p>
<p>This is the third 10.0-based release, and we are releasing it now to get it into the hands of any who might want to test it. Not all features planned for the MariaDB 10.0 series are included in this release. Additional features will be pushed in future releases. See the <a href="https://kb.askmonty.org/en/mariadb-1002-release-notes/">release notes</a> and <a href="https://kb.askmonty.org/en/mariadb-1002-changelog/">changelog</a> for details on what is new in this release.</p>
<div class="alert alert-error">
Do not use alpha releases on production systems.
</div>
<h3>User Feedback plugin</h3>
<p>MariaDB includes a User Feedback plugin. This plugin is disabled by default. If enabled, it submits basic, completely anonymous MariaDB usage information. This information is used by the developers to track trends in MariaDB usage to better guide development efforts. </p>
<p>If you would like to help make MariaDB better, please add &#8220;feedback=ON&#8221; to your my.cnf (my.ini on Windows) file! </p>
<p>See the <a title="User Feedback Plugin" href="http://kb.askmonty.org/en/user-feedback-plugin" target="_blank">User Feedback Plugin</a> page for more information. </p>
<h3>Quality</h3>
<p>The project always strives for quality, but in reality, nothing is<br />
perfect. Please take time to report any issues you encounter at: </p>
<p><a title="MariaDB JIRA" href="http://mariadb.org/jira" target="_blank">http://mariadb.org/jira</a> </p>
<p>We hope you enjoy MariaDB!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/mariadb-10-0-2-alpha-now-available/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SkySQL merges with Monty Program Ab, makers of MariaDB</title>
		<link>http://blog.mariadb.org/skysql-merges-with-monty-program-ab-makers-of-mariadb/</link>
		<comments>http://blog.mariadb.org/skysql-merges-with-monty-program-ab-makers-of-mariadb/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 11:38:37 +0000</pubDate>
		<dc:creator>Colin Charles</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[Monty Program Ab]]></category>
		<category><![CDATA[Planet MySQL]]></category>
		<category><![CDATA[skysql]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1542</guid>
		<description><![CDATA[SkySQL has signed a merger agreement with Monty Program Ab, creators of the popular MariaDB database. Read more about it, as it features important tidbits from Patrik Sallner (CEO, SkySQL Ab), Simon Phipps (CEO, MariaDB Foundation), and Michael &#8220;Monty&#8221; Widenius (CTO, MariaDB Foundation). A key takeaway is that SkySQL will work alongside &#38; collaborate closely&#8230; <a href="http://blog.mariadb.org/skysql-merges-with-monty-program-ab-makers-of-mariadb/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.skysql.com/">SkySQL</a> has <a href="http://www.skysql.com/news-and-events/press-releases/skysql-merges-with-mariadb-developers">signed a merger agreement</a> with <a href="http://montyprogram.com/">Monty Program Ab</a>, creators of the popular <a href="https://mariadb.org/">MariaDB</a> database. <a href="http://www.skysql.com/news-and-events/press-releases/skysql-merges-with-mariadb-developers">Read more about it</a>, as it features important tidbits from Patrik Sallner (CEO, SkySQL Ab), Simon Phipps (CEO, MariaDB Foundation), and Michael &#8220;Monty&#8221; Widenius (CTO, MariaDB Foundation).</p>
<p>A key takeaway is that SkySQL will work alongside &amp; collaborate closely with the <a href="https://mariadb.org/foundation/">MariaDB Foundation</a>, plus continue to invest in the development of the MariaDB server.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/skysql-merges-with-monty-program-ab-makers-of-mariadb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wikipedia adopts MariaDB</title>
		<link>http://blog.mariadb.org/wikipedia-adopts-mariadb/</link>
		<comments>http://blog.mariadb.org/wikipedia-adopts-mariadb/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 20:42:01 +0000</pubDate>
		<dc:creator>Colin Charles</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[Planet MySQL]]></category>
		<category><![CDATA[Wikipedia]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1539</guid>
		<description><![CDATA[This is a nice blog post from Asher Feldman, Site Architect, Wikipedia on how Wikipedia Adopts MariaDB. If you&#8217;re using English or German Wikipedia, or using Wikidata, you&#8217;re currently being served by MariaDB 5.5.]]></description>
				<content:encoded><![CDATA[<p>This is a nice blog post from Asher Feldman, Site Architect, Wikipedia on how <a href="http://blog.wikimedia.org/2013/04/22/wikipedia-adopts-mariadb/">Wikipedia Adopts MariaDB</a>. If you&#8217;re using English or German Wikipedia, or using Wikidata, you&#8217;re currently being served by MariaDB 5.5.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/wikipedia-adopts-mariadb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MariaDB Foundation Takes Next Steps To Community Governance</title>
		<link>http://blog.mariadb.org/mariadb-foundation-takes-next-steps-to-community-governance/</link>
		<comments>http://blog.mariadb.org/mariadb-foundation-takes-next-steps-to-community-governance/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 07:49:38 +0000</pubDate>
		<dc:creator>Colin Charles</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[MariaDB Foundation]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1534</guid>
		<description><![CDATA[The MariaDB Foundation, stewards of the community-maintained open source MariaDB database that is sweeping the Internet, announced today the next steps towards a community-managed governance structure. With the appointment of a new, enlarged Board of Directors and a new interim chief executive, the MariaDB Foundation is now on track to a fully member-led governance in&#8230; <a href="http://blog.mariadb.org/mariadb-foundation-takes-next-steps-to-community-governance/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p dir="ltr">The MariaDB Foundation, stewards of the community-maintained open source MariaDB database that is sweeping the Internet, announced today the next steps towards a community-managed governance structure. With the appointment of a new, enlarged Board of Directors and a new interim chief executive, the MariaDB Foundation is now on track to a fully member-led governance in the second half of 2013.</p>
<p dir="ltr">The Board members are now Rasmus Johansson, Andrew Katz, Simon Phipps, Michael “Monty” Widenius, and Jeremy Zawodny. The first act of the new interim Board was to appoint Johansson as Chair and Phipps as Secretary and Chief Executive Officer.</p>
<p dir="ltr">The Board bring together a wealth of experience. Johansson is an experienced leader within the MariaDB developer community. Katz is a well-known expert in open source legal matters and has been acting as COO of the Foundation until now. Phipps brings experience of IBM and Sun Microsystems as well as leadership in non-profit organisations such as the Open Source Initiative. Widenius is a veteran of the MariaDB and MySQL projects, having founded both. Zawodny is a long-time implementer of solutions using both the MySQL and MariaDB databases; he is currently at Craigslist and was formerly at Yahoo.</p>
<p dir="ltr">The interim Board plans to adopt a membership-based governance model that includes a diversity of stakeholders, similar to that used by the Eclipse Foundation, so has invited its Executive Director Mike Milinkovich to directly advise on governance matters. The Board aims to devise and publicly review suitable governance rules between now and July and then to have MariaDB Foundation members and contributors elect a new Board using those rules.</p>
<p dir="ltr">The Foundation invites companies wishing to contribute to the success of the MariaDB database project to contact them. Opportunities both for sponsorship and for engagement in the governance of the new Foundation are available. Please contact <em>foundation</em> at the mariadb org domain.</p>
<p><em>Press enquiries:</em>  press <em>at</em> mariadb org   (<a href="https://docs.google.com/a/webmink.com/document/d/1pmvY5yO5XQVlJLJ0iPBBFgYOUE7s_rO08D9LyO1sKQo/edit">release</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/mariadb-foundation-takes-next-steps-to-community-governance/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>MariaDB participates in Google Summer of Code 2013</title>
		<link>http://blog.mariadb.org/mariadb-participates-in-google-summer-of-code-2013/</link>
		<comments>http://blog.mariadb.org/mariadb-participates-in-google-summer-of-code-2013/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 15:28:56 +0000</pubDate>
		<dc:creator>Colin Charles</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[google summer of code]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[Planet MySQL]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1519</guid>
		<description><![CDATA[MariaDB is very happy to be accepted as a project in the Google Summer of Code 2013. This will be our first year participating and we&#8217;re stoked that we&#8217;re one of the accepted organizations. We have an ideas list as always, and we&#8217;re expecting to get some great mentors &#38; students to hack on some&#8230; <a href="http://blog.mariadb.org/mariadb-participates-in-google-summer-of-code-2013/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>MariaDB is very happy to be accepted as a project in the <a href="http://www.google-melange.com/gsoc/homepage/google/gsoc2013">Google Summer of Code 2013</a>. This will be our first year participating and we&#8217;re stoked that we&#8217;re one of the <a href="http://www.google-melange.com/gsoc/program/accepted_orgs/google/gsoc2013">accepted organizations</a>. We have an <a href="https://kb.askmonty.org/en/google-summer-of-code-2013/">ideas list</a> as always, and we&#8217;re expecting to get some great mentors &amp; students to hack on some new code for the MariaDB project (which now comprises not just the server, but Galera Cluster as well as the connectors). Watch this space for more information, but if you&#8217;re interested in hacking on MySQL, MariaDB, Galera Cluster or some of the Percona toolkit, and it&#8217;s a summer&#8217;s worth of work, this should be a lot of fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/mariadb-participates-in-google-summer-of-code-2013/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MariaDB well-represented at Percona Live MySQL Conference</title>
		<link>http://blog.mariadb.org/mariadb-well-represented-at-percona-live-mysql-conference/</link>
		<comments>http://blog.mariadb.org/mariadb-well-represented-at-percona-live-mysql-conference/#comments</comments>
		<pubDate>Tue, 09 Apr 2013 10:30:52 +0000</pubDate>
		<dc:creator>Colin Charles</dc:creator>
				<category><![CDATA[Conferences/Events]]></category>
		<category><![CDATA[mysqlconf]]></category>
		<category><![CDATA[Percona Live]]></category>
		<category><![CDATA[Planet MySQL]]></category>
		<category><![CDATA[santa clara]]></category>

		<guid isPermaLink="false">http://blog.mariadb.org/?p=1518</guid>
		<description><![CDATA[Team MariaDB will be at the Percona Live MySQL Conference &#38; Expo 2013, held in Santa Clara from April 22-25 2013. We will also be at the SkySQL Solutions Day held on April 26 2013 at the same venue, the Hyatt Santa Clara. We have talks, a booth in the DotOrg Pavilion, have a BoF&#8230; <a href="http://blog.mariadb.org/mariadb-well-represented-at-percona-live-mysql-conference/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Team MariaDB will be at the <a href="http://www.percona.com/live/mysql-conference-2013/">Percona Live MySQL Conference &amp; Expo 2013</a>, held in Santa Clara from April 22-25 2013. We will also be at the <a href="http://www.skysql.com/content/mysql-cloud-database-solutions-day-schedule">SkySQL Solutions Day</a> held on April 26 2013 at the same venue, the Hyatt Santa Clara. We have talks, a booth in the DotOrg Pavilion, have a BoF and we&#8217;re participating in the passport program.</p>
<p>Team MariaDB talks:</p>
<ol>
<li>(Monday) <a href="http://www.percona.com/live/mysql-conference-2013/sessions/advanced-query-optimizer-tuning-and-analysis">Advanced Query Optimizer Tuning &amp; Analysis</a>, a tutorial by Sergei Petrunia &amp; Timour Katchaounov</li>
<li>(Tuesday) <a href="http://www.percona.com/live/mysql-conference-2013/sessions/mariadb-cassandra-interoperability">MariaDB Cassandra Interoperability</a>, a talk by Sergei Petrunia &amp; Colin Charles</li>
<li>(Tuesday) <a href="http://www.percona.com/live/mysql-conference-2013/sessions/engine-independent-persistent-statistics-histograms-mariadb">Engine-independent persistent statistics with histograms in MariaDB</a>, a talk by Igor Babaev</li>
<li>(Tuesday) <a href="http://www.percona.com/live/mysql-conference-2013/sessions/replication-changes-mariadb">Replication Changes in MariaDB</a>, a talk by Michael &#8220;Monty&#8221; Widenius &amp; Sergei Golubchik</li>
<li>(Tuesday) a <a href="http://www.percona.com/live/mysql-conference-2013/sessions/bof-mariadb">BoF</a> at 7pm, in Ballroom F, where you can be sure to get black vodka!</li>
<li>(Wednesday) <a href="http://www.percona.com/live/mysql-conference-2013/sessions/mariadb-100-whats-new-project">MariaDB 10.0 &amp; What&#8217;s New With the Project</a>, a talk by Michael &#8220;Monty&#8221; Widenius &amp; Colin Charles</li>
<li>(Thursday) <a href="http://www.percona.com/live/mysql-conference-2013/sessions/storage-engines-and-other-plugins-whats-new">Storage Engines &amp; Other Plugins: What&#8217;s New?</a> a talk by Sergei Golubchik</li>
</ol>
<p>Many others are also speaking about MariaDB, and some of the team have talks that aren&#8217;t exactly related to MariaDB and those will be covered in another post.</p>
<p>In the meantime, what are you waiting for, <a href="http://perconalive-mysql-conference-expo-2013.eventbrite.com/">register now</a>! Use the code <strong>SponsorSQL</strong> to get 15% off the price as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mariadb.org/mariadb-well-represented-at-percona-live-mysql-conference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.mariadb.org/feed/ ) in 0.35404 seconds, on May 19th, 2013 at 8:43 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on May 19th, 2013 at 9:43 am UTC -->
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- Quick Cache Is Fully Functional :-) ... A Quick Cache file was just served for (  blog.mariadb.org/feed/ ) in 0.00109 seconds, on May 19th, 2013 at 9:25 am UTC. -->