<?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>PlanetMysql.ru - информация о СУБД MySQL &#187; best practices</title>
	<atom:link href="http://planetmysql.ru/category/best-practices/feed/" rel="self" type="application/rss+xml" />
	<link>http://planetmysql.ru</link>
	<description>Блог о самой популярной СУБД MySQL</description>
	<lastBuildDate>Thu, 24 May 2012 14:20:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Replication stars</title>
		<link>http://datacharmer.blogspot.com/2011/11/replication-multiple-masters-stars.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=replication-stars</link>
		<comments>http://datacharmer.blogspot.com/2011/11/replication-multiple-masters-stars.html#comments</comments>
		<pubDate>Fri, 04 Nov 2011 15:58:00 +0000</pubDate>
		<dc:creator>Giuseppe Maxia</dc:creator>
				<category><![CDATA[best practices]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[challenge]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[conflict]]></category>
		<category><![CDATA[conflict prevention]]></category>
		<category><![CDATA[continuent]]></category>
		<category><![CDATA[HA]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[multi-master]]></category>
		<category><![CDATA[multiple]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[tungsten]]></category>

		<guid isPermaLink="false">http://planetmysql.ru/?guid=2345620fec80c8df7f16aaeb1176674c</guid>
		<description><![CDATA[Working with replication, you come across many topologies, some of them sound and established, some of them less so, and some of them still in the realm of the hopeless wishes. I have been working with replication for almost 10 years now, and my wish l...]]></description>
			<content:encoded><![CDATA[Working with replication, you come across many topologies, some of them sound and established, some of them less so, and some of them still in the realm of the hopeless wishes. I have been working with replication for almost 10 years now, and my wish list grew quite big during this time. In the last 12 months, though, while working at Continuent, some of the topologies that I wanted to work with have moved from the cloud of wishful thinking to the firm land of things that happen.  My quest for star replication starts with the most common topology. One master, many slaves. <table border="0""><tr><td> <img src="http://lh6.ggpht.com/-ZdubvXSXpyI/TrPFPlH8WJI/AAAAAAAABNw/ndLQKrtpCms/replication_1_master_slave.png?imgmax=800" alt="Replication 1 master slave" title="master slave" border="0" width="257" height="219" /> <p align="center"><i>Fig 1. Master/Slave topology</i></p></td><td> <img src="http://lh6.ggpht.com/-xnqiEpTqtgw/TrPFYQfZ-vI/AAAAAAAABOw/NlJOp9ob3bw/replication_legend.png?imgmax=800" alt="Replication legend" title="replication_legend.png" border="0" width="184" height="163" /> <p align="center"><i>Legend</i></p></td></tr></table>It looks like a star, with the rays extending from the master to the slaves. This is the basis of most of the replication going on mostly everywhere nowadays, and it has few surprises. Setting aside the problems related to failing over and switching between nodes, which I will examine in another post, let's move to another star.  <table border="0"><tr><td> <img src="http://lh5.ggpht.com/-brhLZb3Io7Y/TrPFQuS791I/AAAAAAAABN4/QCglBzIn9gc/replication_2_fan_in_slave.png?imgmax=800" alt="Replication 2 fan in slave" title="fan-in slave" border="0" width="249" height="207" /> <p align="center"><i>Fig 2. Fan-in slave, or multiple sources</i></p></td></tr></table>The <i>multiple source replication</i>, also known as <i>fan-in</i> topology, has several masters that replicate to the same slave. For years, this has been forbidden territory for me. But <a href="http://tungsten-replicator.org">Tungsten Replicator</a> allows you to <a href="http://datacharmer.blogspot.com/2011/08/usability-improvements-in-tungsten-204.html">create multiple source topologies easily</a>. This is kind of uni-directional, though. I am also interested in topologies where I have more than one master, and I can retrieve data from multiple points.  <table border="0"><tr><td> <img src="http://lh4.ggpht.com/-0G1Zum3dA5M/TrPFRpamPaI/AAAAAAAABOA/RsKItTUdB5U/replication_3_all_to_all_three_nodes.png?imgmax=800" alt="Replication 3 all to all three nodes" title="all to all three nodes" border="0" width="240" height="186" /> <p align="center"><i>Fig 3. all-to-all three nodes</i></p></td><td> <img src="http://lh3.ggpht.com/-NLK6ERpxbmM/TrPFSuahrdI/AAAAAAAABOI/MzI6_cH4e2U/replication_4_all_to_all_four_nodes.png?imgmax=800" alt="Replication 4 all to all four nodes" title="all to all four nodes" border="0" width="295" height="239" /> <p align="center"><i>Fig 4. All-to-all four nodes</i></p></td></tr></table>Tungsten <a href="http://code.google.com/p/tungsten-replicator/wiki/TRCMultiMasterInstallation#Multi-Master_Installation">Multi-Master Installation</a> solves this problem. It allows me to create topologies where every node replicates to every other node. Looking at the three-node scheme, it appears a straightforward solution. When we add one node, though, we see that the amount of network traffic grows quite a lot. The double sided arrows mean that there is a replication service at each end of the line, and two open data channels. When we move from three nodes to four, we double the replication services and the channels needed to sustain the scheme.  For several months, I was content with this. I thought: it is heavy, but it works, and it's way more than what you can do with native replication, especially if you consider that you can have <a href="http://scale-out-blog.blogspot.com/2011/08/practical-multi-master-replication.html">a practical way of preventing conflicts using Shard Filters</a>.  But that was not enough. Something kept gnawing at me, and from time to time I experimented with Tungsten Replicator huge flexibility to create new topologies. But the star kept eluding me. Until … Until, guess what? a customer asked for it. The problem suddenly ceased to be a personal whim, and it became a business opportunity. Instead of looking at the issue in the idle way I often think about technology, I went at it with practical determination. What failed when I was experimenting in my free time was that either the pieces did not glue together the way I wanted, or I got an endless loop. Tungsten Replicator has a set of components that are conceptually simple. You deploy a pipeline between two points, open the tap, and data starts flowing in one direction. Even with multiple masters replication, the principle is the same. You deploy many pipes, and each one has one purpose only.   <table border="0"><tr><td> <img src="http://lh5.ggpht.com/-vz42MY4fGwQ/TrPFT4Me36I/AAAAAAAABOQ/AJ2ZI2VkGc8/replication_5_star_topology_3_rays.png?imgmax=800" alt="Replication 5 star topology 3 rays" title="star topology 3 rays" border="0" width="267" height="230" /> <p align="center"><i>Fig 5. All-masters star topology</i></p></td></tr></table>In the star topology, however, you need to open more taps, but not too many, as you need to avoid the data looping around. The recipe, as it turned out, is to create a set of bi-directional replication systems, where you enable the central node slave services to get changes only from a specific master, and the slave services on the peripheral nodes to accept changes from any master. It was as simple as that.   There are, of course, benefits and drawbacks with a star topology, compared to a all-replicate-to-all design. In the star topology, we create a single point of failure. If the central node fails, replication stops, and the central node needs to be replaced. Instead, the all-to-all design has no weaknesses. Its abundance of connections makes sure that, if a node fails, the system continues working without any intervention. There is no need for fail-over.    <table border="0"><tr><td> <img src="http://lh4.ggpht.com/-5Kmmu6-vfoc/TrPFXD9sBlI/AAAAAAAABOo/rL9Lu2AZz7M/replication_6_all_to_all_extending.png.png?imgmax=800" alt="Replication 6 all to all extending png" title="all to all extending" border="0" width="317" height="331" /> <p align="center"><i>Fig 6. extending an all-to-all topology</i></p></td><td> <img src="http://lh3.ggpht.com/-QXoDHeUhoa8/TrPFWKqLGmI/AAAAAAAABOg/TZcUBUFOVg4/replication_7_star_extending.png?imgmax=800" alt="Replication 7 star extending" title="star extending" border="0" width="315" height="321" /> <p align="center"><i>Fig 7. Extending a star topology</i></p></td></tr></table>However, there is a huge benefit in the node management. If you need to add a new node, it costs two services and two connections, while the same operation in the all-to-all replication costs 8 services and 8 connections.  With the implementation of this topology, a new challenge has arisen. While conflict prevention by sharding is still possible, this is not the kind of scenario where you want to apply it. We have another conflict prevention mechanism in mind, and this new topology is a good occasion make it happen.  YMMV. I like the additional choice. There are cases where a all-replicate-to-all topology is still the best option, and there are cases where a star topology is more advisable.<div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/16959946-651168652658416419?l=datacharmer.blogspot.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=30594&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=30594&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2011/11/04/replication-stars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick recipes for database cluster building</title>
		<link>http://datacharmer.blogspot.com/2011/09/quick-recipes-for-database-cluster.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=quick-recipes-for-database-cluster-building</link>
		<comments>http://datacharmer.blogspot.com/2011/09/quick-recipes-for-database-cluster.html#comments</comments>
		<pubDate>Fri, 16 Sep 2011 21:33:24 +0000</pubDate>
		<dc:creator>Giuseppe Maxia</dc:creator>
				<category><![CDATA[best practices]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[cookbook]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[multi-master]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[recipes]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[topology]]></category>
		<category><![CDATA[tungsten]]></category>

		<guid isPermaLink="false">http://planetmysql.ru/?guid=9e109c2937cb04f8db5bb007b715b594</guid>
		<description><![CDATA[One lesson learned in more than two decades working in this industry is that most of the IT professionals are impatient, want to achieve results immediately, and, most importantly, they don't read documentation. Much as the average geek is happy to answer many requests with a dismissive RTFM, the same geeks are not as diligent when it comes to learning about new or updated technologies.For this reason, there is a kind of documentation that is very much appreciated by busy and impatient professionals: cookbooks. And I am not talking about food. Geeks are not known for being cooks (1) and they like fast food. I am talking about collection of technical recipes, short articles where a problem is briefly stated, and a direct solution is shown.Working with Tungsten Replicator, I am constantly amazed at all the things you can do with it, and at the same time, I am amazed at how so few people read the documentation. Since I want more users to be aware of the goodies, and being aware of the geeks' aversion to regular docs, I have started putting together a Tungsten Replicator Cookbook, where users can quickly find the recipe to build their cluster of choice.The problem is stated in one short paragraph, and the solution is outlined with code in the shortest possible way. Can't get any lazier than this! Or maybe you can, but I haven't reached that level yet. I hope I have found a good balance.Some of the recipes that the cookbook offers are:Install a master / slave clusterInstall a master slave directory with customized parametersInstall more than one Tungsten Replicator in one hostInstall a direct slave with parallel replicationTaking over replication from a MySQL slave in direct modeInstall bi-directional replicationInstall bi-directional replication with additional slaveInstall a three masters replicationInstall a four masters replicationModify one or more properties with the installerAdd one slave to an existing masterIn addition to the cookbook, we have inaugurated a sample of another popular literary genre, namely Troubleshooting recipes.When things go wrong (and they usually do when you are dealing with something new, you want a quick answer to your problem. These troubleshooting items are aimed at making such quick answer readily available. Both projects are moving targets. We will adjust as the project grows. Contributions and comments are welcome. If you have suggestions on how to improve these documents, you can use the mailing list.(1) With some notable exception, I must say. I have a reputation as a good cook. But then, I represent a minority in so many ways.]]></description>
			<content:encoded><![CDATA[One lesson learned in more than two decades working in this industry is that most of the IT professionals are impatient, want to achieve results immediately, and, most importantly, they <i>don't read documentation</i>. Much as the average geek is happy to answer many requests with a dismissive <a href="http://en.wikipedia.org/wiki/RTFM">RTFM</a>, the same geeks are not as diligent when it comes to learning about new or updated technologies.For this reason, there is a kind of documentation that is very much appreciated by busy and impatient professionals: cookbooks. And I am not talking about food. Geeks are not known for being cooks <sup><small>(1)</small></sup> and they like fast food. I am talking about collection of technical recipes, short articles where a problem is briefly stated, and a direct solution is shown.Working with Tungsten Replicator, I am constantly amazed at all the things you can do with it, and at the same time, I am amazed at how so few people read the <a href="http://continuent.com/downloads/documentation">documentation</a>. Since I want more users to be aware of the goodies, and being aware of the geeks' aversion to regular docs, I have started putting together a <a href="http://code.google.com/p/tungsten-replicator/wiki/TungstenReplicatorCookbook">Tungsten Replicator Cookbook</a>, where users can quickly find the recipe to build their cluster of choice.The problem is stated in one short paragraph, and the solution is outlined with code in the shortest possible way. Can't get any lazier than this! Or maybe you can, but I haven't reached that level yet. I hope I have found a good balance.Some of the recipes that the cookbook offers are:<ul><li>Install a master / slave cluster</li><li>Install a master slave directory with customized parameters</li><li>Install more than one Tungsten Replicator in one host</li><li>Install a direct slave with parallel replication</li><li>Taking over replication from a MySQL slave in direct mode</li><li>Install bi-directional replication</li><li>Install bi-directional replication with additional slave</li><li>Install a three masters replication</li><li>Install a four masters replication</li><li>Modify one or more properties with the installer</li><li>Add one slave to an existing master</li></ul>In addition to the cookbook, we have inaugurated a sample of another popular literary genre, namely <a href="http://code.google.com/p/tungsten-replicator/wiki/Troubleshooting">Troubleshooting</a> recipes.When things go wrong (and they usually do when you are dealing with something new, you want a quick answer to your problem. These troubleshooting items are aimed at making such quick answer readily available. Both projects are moving targets. We will adjust as the project grows. Contributions and comments are welcome. If you have suggestions on how to improve these documents, you can use the <a href="http://groups.google.com/group/tungsten-replicator-discuss">mailing list</a>.<sup><small>(1)</small></sup> <small>With some notable exception, I must say. I have a reputation as a good cook. But then, I represent a minority in so many ways. </small><div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/16959946-5220115591318568666?l=datacharmer.blogspot.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=30020&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=30020&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2011/09/17/quick-recipes-for-database-cluster-building/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OTN MySQL conference slides</title>
		<link>http://ronaldbradford.com/blog/otn-mysql-conference-slides-2010-11-03/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=otn-mysql-conference-slides</link>
		<comments>http://ronaldbradford.com/blog/otn-mysql-conference-slides-2010-11-03/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 17:28:21 +0000</pubDate>
		<dc:creator>Ronald Bradford</dc:creator>
				<category><![CDATA[best practices]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[laouc]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[Oracle/MySQL Conferences]]></category>
		<category><![CDATA[OTN]]></category>
		<category><![CDATA[OTN LA]]></category>
		<category><![CDATA[presentations]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[south america]]></category>
		<category><![CDATA[South America OTN LAD Tour 2010]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=3333</guid>
		<description><![CDATA[2010 has been the first year I have re-presented any of my developed MySQL presentations. Historically I have always created new presentations, however Paul Vallee gave me some valuable advice at UC 2010.  In the past two weeks I&#8217;ve traveled to seven countries in South America on the OTN LA tour where I have been speaking about and promoting MySQL.
My three current presentations have been improved and even simplified,  more future improvements are planned.  There is definitely a benefit in repeating a good presentation multiple times.
My SQL Idiosyncrasies That Bite OTN
View more presentations from Ronald Bradford.

MySQL Best Practices &#8211; OTN
MySQL Scalability Mistakes &#8211; OTN]]></description>
			<content:encoded><![CDATA[<p>2010 has been the first year I have re-presented any of my developed MySQL presentations. Historically I have always created new presentations, however <a href="http://www.pythian.com/news/author/pvallee/">Paul Vallee</a> gave me some valuable advice at UC 2010.  In the past two weeks I&#8217;ve traveled to seven countries in South America on the <a href="http://ronaldbradford.com/blog/mysql-south-america-tour-2010-09-13/">OTN LA tour</a> where I have been speaking about and promoting MySQL.</p>
<p>My three current presentations have been improved and even simplified,  more future improvements are planned.  There is definitely a benefit in repeating a good presentation multiple times.</p>
<div><strong><a href="http://www.slideshare.net/ronaldbradford/my-sql-idiosyncrasies-that-bite-otn" title="My SQL Idiosyncrasies That Bite OTN">My SQL Idiosyncrasies That Bite OTN</a></strong>
<div>View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ronaldbradford">Ronald Bradford</a>.</div>
</div>
<div><strong><a href="http://www.slideshare.net/ronaldbradford/mysql-best-practices-otn" title="MySQL Best Practices - OTN">MySQL Best Practices &#8211; OTN</a></strong></div>
<div><strong><a href="http://www.slideshare.net/ronaldbradford/mysql-scalability-mistakes-otn" title="MySQL Scalability Mistakes - OTN">MySQL Scalability Mistakes &#8211; OTN</a></strong></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=26364&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=26364&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2010/11/03/otn-mysql-conference-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Best Practices for DBAs and Developers</title>
		<link>http://ronaldbradford.com/blog/mysql-best-practices-for-dbas-and-developers-2010-10-12/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql-best-practices-for-dbas-and-developers</link>
		<comments>http://ronaldbradford.com/blog/mysql-best-practices-for-dbas-and-developers-2010-10-12/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 20:47:30 +0000</pubDate>
		<dc:creator>Ronald Bradford</dc:creator>
				<category><![CDATA[ACE Director]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[Oracle/MySQL Conferences]]></category>
		<category><![CDATA[OTN]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[South America OTN LAD Tour 2010]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=3319</guid>
		<description><![CDATA[This is one of the MySQL presentations I&#8217;m doing on the OTN LAD Tour in South America, starting today in Lima, Peru.
MySQL Best Practices for DBAs and Developers
Learn the right techniques to maximize your investment in MySQL by knowing the best practices for DBAs and Developers.  Understand what subtle differences between MySQL and other RDBMS products are essential to understand in order to maximize the benefits and strengths of MySQL.  We will be covering areas including the minimum MySQL configuration, ideal SQL, MySQL security and schema optimizations.

MySQL Configuration default settings including SQL_MODE
Documenting, formatting and future proofing your SQL
Developing and reviewing all SQL paths
MySQL physical and user security
The best schema optimizations
Essential Monitoring and Instrumentation
The locking essentials for different storage engines
Managing your Disk I/O with optimal storage and access

MySQL Best Practices &#8211; OTN LAD Tour]]></description>
			<content:encoded><![CDATA[<p>This is one of the MySQL presentations I&#8217;m doing on the <a href="http://www.cloug.org/14.html">OTN LAD Tour</a> in South America, starting today in Lima, Peru.</p>
<h3>MySQL Best Practices for DBAs and Developers</h3>
<p>Learn the right techniques to maximize your investment in MySQL by knowing the best practices for DBAs and Developers.  Understand what subtle differences between MySQL and other RDBMS products are essential to understand in order to maximize the benefits and strengths of MySQL.  We will be covering areas including the minimum MySQL configuration, ideal SQL, MySQL security and schema optimizations.</p>
<ul>
<li>MySQL Configuration default settings including SQL_MODE
<li>Documenting, formatting and future proofing your SQL
<li>Developing and reviewing all SQL paths
<li>MySQL physical and user security
<li>The best schema optimizations
<li>Essential Monitoring and Instrumentation
<li>The locking essentials for different storage engines
<li>Managing your Disk I/O with optimal storage and access
</ul>
<div><strong><a href="http://www.slideshare.net/ronaldbradford/mysql-best-practices-otn-lad-tour" title="MySQL Best Practices - OTN LAD Tour">MySQL Best Practices &#8211; OTN LAD Tour</a></strong></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=26146&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=26146&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2010/10/13/mysql-best-practices-for-dbas-and-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book review : SQL Antipatterns</title>
		<link>http://datacharmer.blogspot.com/2010/09/book-review-sql-antipatterns.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=book-review-sql-antipatterns</link>
		<comments>http://datacharmer.blogspot.com/2010/09/book-review-sql-antipatterns.html#comments</comments>
		<pubDate>Thu, 23 Sep 2010 17:21:00 +0000</pubDate>
		<dc:creator>Giuseppe Maxia</dc:creator>
				<category><![CDATA[best practices]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[SQL Antipatterns, by Bill KarwinI remember that when I finished reading The Lord Of The Rings, I felt a pang of disappointment. "What? Already finished? What am I going to read now? What can give me the same pleasure and sense of accomplishment that these wonderful pages have given me?"That's how I felt when I came to the last page of SQL Antipatterns. And, no, Bill Karwin doesn't tell imaginary tales from a fictitious world. This book is full of very real and very practical advice, but all the material is presented with such grace and verve that I could not put it down until the very end. I read it cover to cover in just a few hours, and I savored every page.What is this Antipatterns, anyway? The title may deceive a casual bookshop browser into believing that it's about some philosophical database theory. Digging further, you realize that it's a collection of best practice in database handling, but told from the side of the bad practice. Every chapter starts with the story of a disaster, followed by an explanation of why it happened, and how to recognize the symptoms. Along the way, you learn what people do to fix the problem when they don't understand where exactly the trouble comes from. And then comes the best practice section, where you are told of several ways of fixing the problem for good.It's a pleasure from the start. When I read the introductory stories, I recognized mistakes that I have witnessed in my past experience and some that I made myself. It was a fascinating sequence of "look at this mess!", "Here is what you shouldn't do", "It happens when ...", and "this is what you should do".The more I read, the more I wanted to read. And after a few chapters, a pattern appeared among the Antipatterns. The stories are not a casual collection of database mistakes. There is a thread. Most of the stories tell you what happens when you violate the relational theory principles, and the best practice solutions focus on how to apply relational principles in real life.The relationship between the horror stories and the relational database theory becomes apparent when you get to the appendix. In other books, you can often skip the appendixes as a reminder of something that you know already. Not here. If you skip this one, you will miss a sort of Ellery Queen ending, where the detective puts together all the pieces of the mystery for the amazed audience.I feel I would do a disservice to Bill if I revealed more about the book. I may have already spoiled some of the surprise by disclosing the inner structure of the book. But certainly I won't give away any of the juicy stories that make this book an invaluable tool for every database professional.I can only say this. When I read a technical book, I usually find something wrong, or debatable, or some technical solution that I could improve upon. Not in this book. I completely agree with the theory and the practice that is suggested from start to finish. My QA ego suffers at the idea of not having found anything wrong, but this slight disappointment is more than compensated by the pleasure of reading such a beautiful book. Well done, Bill! I am already queuing to buy your next one!]]></description>
			<content:encoded><![CDATA[<h3>SQL Antipatterns, by Bill Karwin</h3><br />I remember that when I finished reading The Lord Of The Rings, I felt a pang of disappointment. "What? Already finished? What am I going to read now? What can give me the same pleasure and sense of accomplishment that these wonderful pages have given me?"<br />That's how I felt when I came to the last page of <a href="http://www.pragprog.com/titles/bksqla/sql-antipatterns">SQL Antipatterns.</a> And, no, Bill Karwin doesn't tell imaginary tales from a fictitious world. This book is full of very real and very practical advice, but all the material is presented with such grace and verve that I could not put it down until the very end. I read it cover to cover in just a few hours, and I savored every page.<br /><br />What is this Antipatterns, anyway? The title may deceive a casual bookshop browser into believing that it's about some philosophical database theory. Digging further, you realize that it's a collection of best practice in database handling, but told from the side of the bad practice. Every chapter starts with the story of a disaster, followed by an explanation of why it happened, and how to recognize the symptoms. Along the way, you learn what people do to fix the problem when they don't understand where exactly the trouble comes from. And then comes the best practice section, where you are told of several ways of fixing the problem for good.<br />It's a pleasure from the start. When I read the introductory stories, I recognized mistakes that I have witnessed in my past experience and some that I made myself. It was a fascinating sequence of "look at this mess!", "Here is what you shouldn't do", "It happens when ...", and "this is what you should do".<br />The more I read, the more I wanted to read. And after a few chapters, a pattern appeared among the Antipatterns. The stories are not a casual collection of database mistakes. There is a thread. Most of the stories tell you what happens when you violate the relational theory principles, and the best practice solutions focus on how to apply relational principles in real life.<br />The relationship between the horror stories and the relational database theory becomes apparent when you get to the appendix. In other books, you can often skip the appendixes as a reminder of something that you know already. Not here. If you skip this one, you will miss a sort of Ellery Queen ending, where the detective puts together all the pieces of the mystery for the amazed audience.<br /><br />I feel I would do a disservice to Bill if I revealed more about the book. I may have already spoiled some of the surprise by disclosing the inner structure of the book. But certainly I won't give away any of the juicy stories that make this book an invaluable tool for every database professional.<br />I can only say this. When I read a technical book, I usually find something wrong, or debatable, or some technical solution that I could improve upon. Not in this book. I completely agree with the theory and the practice that is suggested from start to finish. My QA ego suffers at the idea of not having found anything wrong, but this slight disappointment is more than compensated by the pleasure of reading such a beautiful book. Well done, Bill! I am already queuing to buy your next one!<div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/16959946-1218696660574448158?l=datacharmer.blogspot.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=25969&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=25969&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2010/09/23/book-review-sql-antipatterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Successful MySQL Scalability Presentation</title>
		<link>http://ronaldbradford.com/blog/successful-mysql-scalability-presentation-2010-09-17/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=successful-mysql-scalability-presentation</link>
		<comments>http://ronaldbradford.com/blog/successful-mysql-scalability-presentation-2010-09-17/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 19:33:32 +0000</pubDate>
		<dc:creator>Ronald Bradford</dc:creator>
				<category><![CDATA[best practices]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=3288</guid>
		<description><![CDATA[Last night I was the invited guest at the SF MySQL Meetup. In my presentation &#8220;Successful MySQL Scalability&#8221; I talked about a set of principles to ensure appropriate system architecture, data availability and best practices to build an ideal solution for your business.  The presentation was also live streamed and is available ]]></description>
			<content:encoded><![CDATA[<p>Last night I was the invited guest at the <a href="http://www.sfmysql.org/calendar/14367514">SF MySQL Meetup</a>. In my presentation &#8220;Successful MySQL Scalability&#8221; I talked about a set of principles to ensure appropriate system architecture, data availability and best practices to build an ideal solution for your business.  The presentation was also live streamed and is available <a href="<a href="http://www.ustream.tv/recorded/9621339">online</a>.</p>
<div><strong><a href="http://www.slideshare.net/ronaldbradford/successful-my-sql-scalability-pdf" title="Successful MySQL Scalability">Successful MySQL Scalability</a></strong></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=25892&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=25892&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2010/09/17/successful-mysql-scalability-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving MySQL Productivity &#8211; From Design to Implementation</title>
		<link>http://ronaldbradford.com/blog/improving-mysql-productivity-from-design-to-implementation-2010-07-01/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=improving-mysql-productivity-from-design-to-implementation</link>
		<comments>http://ronaldbradford.com/blog/improving-mysql-productivity-from-design-to-implementation-2010-07-01/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 22:18:55 +0000</pubDate>
		<dc:creator>Ronald Bradford</dc:creator>
				<category><![CDATA[best practices]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Kaleidoscope 2010]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[odtug]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[Oracle/MySQL Conferences]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[ROI]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=2999</guid>
		<description><![CDATA[My closing presentation at the dedicated MySQL track at ODTUG Kaleidoscope 2010 discussed various techniques and best practices for improving the ROI of developer resources using MySQL.  Included in the sections on Design, Security, Development, Testing, Implementation, Instrumentation and Support were also a number of horror stories of not what to do, combined with practical examples of improving productivity.
Increasing MySQL Productivity
View more presentations from Ronald Bradford.
]]></description>
			<content:encoded><![CDATA[<p>My closing presentation at the dedicated <a href="http://www.odtugkaleidoscope.com/MySQL.html">MySQL track</a> at ODTUG Kaleidoscope 2010 discussed various techniques and best practices for improving the ROI of developer resources using MySQL.  Included in the sections on Design, Security, Development, Testing, Implementation, Instrumentation and Support were also a number of horror stories of not what to do, combined with practical examples of improving productivity.</p>
<div><strong><a href="http://www.slideshare.net/ronaldbradford/increasing-mysql-productivity" title="Increasing MySQL Productivity">Increasing MySQL Productivity</a></strong>
<div>View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ronaldbradford">Ronald Bradford</a>.</div>
</div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=25181&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=25181&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2010/07/02/improving-mysql-productivity-from-design-to-implementation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Practices: Additional User Security</title>
		<link>http://ronaldbradford.com/blog/best-practices-additional-user-security-2010-06-03/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=best-practices-additional-user-security</link>
		<comments>http://ronaldbradford.com/blog/best-practices-additional-user-security-2010-06-03/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 16:12:50 +0000</pubDate>
		<dc:creator>Ronald Bradford</dc:creator>
				<category><![CDATA[best practices]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=2842</guid>
		<description><![CDATA[By default MySQL allows you to create user accounts and privileges with no password. In my earlier MySQL Best Practices: User Security I describe how to address the default installation empty passwords.
For new user accounts, you can improve this default behavior  using the SQL_MODE variable, with a value of NO_AUTO_CREATE_USER.  As detailed via the 5.1 Reference Manual

NO_AUTO_CREATE_USER
Prevent the GRANT statement from automatically creating new users if it would otherwise do so, unless a nonempty password also is specified.

Having set this variable I attempted to show the error of operation to demonstrate in my upcoming &#8220;MySQL Idiosyncrasies that bite&#8221; presentation.
Confirm Settings

mysql&#62; show global variables like 'sql_mode';
+---------------+---------------------+
&#124; Variable_name &#124; Value               &#124;
+---------------+---------------------+
&#124; sql_mode      &#124; NO_AUTO_CREATE_USER &#124;
+---------------+---------------------+
1 row in set (0.00 sec)

mysql&#62; show session variables like 'sql_mode';
+---------------+---------------------+
&#124; Variable_name &#124; Value               &#124;
+---------------+---------------------+
&#124; sql_mode      &#124; NO_AUTO_CREATE_USER &#124;
+---------------+---------------------+
1 row in set (0.00 sec)

Create error condition

mysql&#62; CREATE USER superuser@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql&#62; GRANT ALL ON *.* TO superuser@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql&#62; exit

What the? Surely this isn&#8217;t right.

$ mysql -usuperuser

mysql&#62; SHOW GRANTS;
+--------------------------------------------------------+
&#124; Grants for superuser@localhost                         &#124;
+--------------------------------------------------------+
&#124; GRANT ALL PRIVILEGES ON *.* TO 'superuser'@'localhost' &#124;
+--------------------------------------------------------+

mysql&#62; SELECT VERSION();
+-----------+
&#124; VERSION() &#124;
+-----------+
&#124; 5.1.39    &#124;
+-----------+

Well that&#8217;s broken functionality.
What should happen as described in Bug #43938 is a cryptic message as reproduced below.

mysql&#62; GRANT SELECT ON foo.* TO 'geert12'@'localhost';
ERROR 1133 (42000): Can't find any matching row in the user table
mysql&#62; GRANT SELECT ON *.* TO geert12@localhost IDENTIFIED BY 'foobar';
Query OK, 0 rows affected (0.00 sec)

It seems however that the user of CREATE USER first nullifies this expected behavior.]]></description>
			<content:encoded><![CDATA[<p>By default MySQL allows you to create user accounts and privileges with no password. In my earlier <a href="http://ronaldbradford.com/blog/mysql-best-practices-user-security-2010-05-21/">MySQL Best Practices: User Security</a> I describe how to address the default installation empty passwords.</p>
<p>For new user accounts, you can improve this default behavior  using the SQL_MODE variable, with a value of NO_AUTO_CREATE_USER.  As detailed via the <a href="http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_no_auto_create_user">5.1 Reference Manual</a><br />
<i><br />
NO_AUTO_CREATE_USER</p>
<p>Prevent the GRANT statement from automatically creating new users if it would otherwise do so, unless a nonempty password also is specified.<br />
</i></p>
<p>Having set this variable I attempted to show the error of operation to demonstrate in my upcoming &#8220;MySQL Idiosyncrasies that bite&#8221; presentation.</p>
<h3>Confirm Settings</h3>
<pre>
mysql> show global variables like 'sql_mode';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| sql_mode      | NO_AUTO_CREATE_USER |
+---------------+---------------------+
1 row in set (0.00 sec)

mysql> show session variables like 'sql_mode';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| sql_mode      | NO_AUTO_CREATE_USER |
+---------------+---------------------+
1 row in set (0.00 sec)
</pre>
<h3>Create error condition</h3>
<pre>
mysql> CREATE USER superuser@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON *.* TO superuser@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
</pre>
<p>What the? Surely this isn&#8217;t right.</p>
<pre>
$ mysql -usuperuser

mysql> SHOW GRANTS;
+--------------------------------------------------------+
| Grants for superuser@localhost                         |
+--------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'superuser'@'localhost' |
+--------------------------------------------------------+

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.1.39    |
+-----------+
</pre>
<p>Well that&#8217;s broken functionality.</p>
<p>What should happen as described in <a href="http://bugs.mysql.com/bug.php?id=43938">Bug #43938</a> is a cryptic message as reproduced below.</p>
<pre>
mysql> GRANT SELECT ON foo.* TO 'geert12'@'localhost';
ERROR 1133 (42000): Can't find any matching row in the user table
mysql> GRANT SELECT ON *.* TO geert12@localhost IDENTIFIED BY 'foobar';
Query OK, 0 rows affected (0.00 sec)
</pre>
<p>It seems however that the user of CREATE USER first nullifies this expected behavior.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24942&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24942&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2010/06/03/best-practices-additional-user-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Best Practices: User Security</title>
		<link>http://ronaldbradford.com/blog/mysql-best-practices-user-security-2010-05-21/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql-best-practices-user-security</link>
		<comments>http://ronaldbradford.com/blog/mysql-best-practices-user-security-2010-05-21/#comments</comments>
		<pubDate>Fri, 21 May 2010 18:36:37 +0000</pubDate>
		<dc:creator>Ronald Bradford</dc:creator>
				<category><![CDATA[best practices]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[permission]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=2800</guid>
		<description><![CDATA[It is critical that you do not use the default MySQL installation security, it&#8217;s simply insecure.
Default Installation
When installed, MySQL enables any user with physical permissions to the server to connect to the MySQL via unauthenticated users. MySQL also provides complete access to all super user privileges via the ‘root’ user with no default password. 

$ mysql -uroot
mysql&#62; SELECT host,user,password FROM mysql.user;
+--------------+------+-------------------------------------------+
&#124; host         &#124; user &#124; password                                  &#124;
+--------------+------+-------------------------------------------+
&#124; localhost    &#124; root &#124;                                           &#124;
&#124; server.local &#124; root &#124;                                           &#124;
&#124; 127.0.0.1    &#124; root &#124;                                           &#124;
&#124; localhost    &#124;      &#124;                                           &#124;
&#124; server.local &#124;      &#124;                                           &#124;
+--------------+------+-------------------------------------------+

What you see here are two types of users. 

The ‘root’ user which has MySQL super user privileges for your server or ‘localhost’ connections with no password. 
Unauthenticated users indicated by the blank ‘user’ column

The absolute minimum you should do, is run the provided optional command for immediate improvements  mysql_secure_installation. When running this command, you’re prompted for the following
options —  the output has been trimmed for presentations purposes. 

$ mysql_secure_installation
Enter current password for root (enter for none):
Set root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

If you revisit permissions now, you’ll see what you would expect from a more initially secure installation. 

mysql&#62; SELECT host,user,password FROM mysql.user;
+-----------+------+-------------------------------------------+
&#124; host      &#124; user &#124; password                                  &#124;
+-----------+------+-------------------------------------------+
&#124; localhost &#124; root &#124; *FDAF706717E70DB8DDAD0C5214B13770E1A80B0E &#124;
+-----------+------+-------------------------------------------+

This is only the first step to hardening your MySQL instance and server.
Recommendations
The following are my recommendations for the minimum MySQL security permissions:

Always set a MySQL ‘root’ user password
Change the MySQL ‘root’ user id to a different name, e.g. ‘dba’
Only enable SUPER privileges to dba accounts, and only ever for ‘localhost’.
Application user permissions should be as restrictive as possible.
Never use ‘%’ for a hostname
Never use ALL TO *.*
Ideally the application should have at least two types of users, a read/write user and a read user.

There is a lot more information about physical Operating System security and the MySQL permission/privilege model to be discussed.  One product I know of that help is SecuRich &#8211; The MySQL Security Package featuring roles, password history and many other cool functionalities.
References
A recent post by Lance Miller quoted the following.

I cant tell you how many times in the past 18 months that I’ve found real enterprises running vulnerable databases with default passwords, weak passwords and no real permissions management. It’s bad enough that the stats right now are this (so I guess I can tell you):
- 9 out of 10 organizations have a Microsoft SQL Database with a blank “sa” password (or an sa password of “sa”, “sql” or “password”)
- 9 out of 10 organizations have a Postgres Database with a default password
- 9 out of 10 organizations have a Sybase Database with a default password

The article didn&#8217;t include MySQL however some organizations don&#8217;t change the default password, probably not 9 of 10 in my experience.]]></description>
			<content:encoded><![CDATA[<p>It is critical that you do not use the default MySQL installation security, it&#8217;s simply insecure.</p>
<h3>Default Installation</h3>
<p>When installed, MySQL enables any user with physical permissions to the server to connect to the MySQL via unauthenticated users. MySQL also provides complete access to all super user privileges via the ‘root’ user with no default password. </p>
<pre>
$ mysql -uroot
mysql> SELECT host,user,password FROM mysql.user;
+--------------+------+-------------------------------------------+
| host         | user | password                                  |
+--------------+------+-------------------------------------------+
| localhost    | root |                                           |
| server.local | root |                                           |
| 127.0.0.1    | root |                                           |
| localhost    |      |                                           |
| server.local |      |                                           |
+--------------+------+-------------------------------------------+
</pre>
<p>What you see here are two types of users. </p>
<ul>
<li>The ‘root’ user which has MySQL super user privileges for your server or ‘localhost’ connections with no password. </li>
<li>Unauthenticated users indicated by the blank ‘user’ column</li>
</ul>
<p>The absolute minimum you should do, is run the provided optional command for immediate improvements <b> mysql_secure_installation</b>. When running this command, you’re prompted for the following<br />
options —  the output has been trimmed for presentations purposes. </p>
<pre>
$ mysql_secure_installation
Enter current password for root (enter for none):
Set root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
</pre>
<p>If you revisit permissions now, you’ll see what you would expect from a more initially secure installation. </p>
<pre>
mysql> SELECT host,user,password FROM mysql.user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *FDAF706717E70DB8DDAD0C5214B13770E1A80B0E |
+-----------+------+-------------------------------------------+
</pre>
<p>This is only the first step to hardening your MySQL instance and server.</p>
<h3>Recommendations</h3>
<p>The following are my recommendations for the minimum MySQL security permissions:</p>
<ul>
<li>Always set a MySQL ‘root’ user password
<li>Change the MySQL ‘root’ user id to a different name, e.g. ‘dba’
<li>Only enable SUPER privileges to dba accounts, and only ever for ‘localhost’.
<li>Application user permissions should be as restrictive as possible.
<li>Never use ‘%’ for a hostname
<li>Never use ALL TO *.*
<li>Ideally the application should have at least two types of users, a read/write user and a read user.
</ul>
<p>There is a lot more information about physical Operating System security and the MySQL permission/privilege model to be discussed.  One product I know of that help is <a href="http://www.securich.com/">SecuRich</a> &#8211; The MySQL Security Package featuring roles, password history and many other cool functionalities.</p>
<h3>References</h3>
<p>A recent post by <a href="https://www.infosecisland.com/">Lance Miller</a> quoted the following.</p>
<p><i><br />
I cant tell you how many times in the past 18 months that I’ve found real enterprises running vulnerable databases with default passwords, weak passwords and no real permissions management. It’s bad enough that the stats right now are this (so I guess I can tell you):<br />
- 9 out of 10 organizations have a Microsoft SQL Database with a blank “sa” password (or an sa password of “sa”, “sql” or “password”)<br />
- 9 out of 10 organizations have a Postgres Database with a default password<br />
- 9 out of 10 organizations have a Sybase Database with a default password<br />
</i></p>
<p>The article didn&#8217;t include MySQL however some organizations don&#8217;t change the default password, probably not 9 of 10 in my experience.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24832&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24832&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://planetmysql.ru/2010/05/21/mysql-best-practices-user-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

