Codership’s Galera Cluster Best Practices Webinar for MySQL DBAs and DevOps Part One is now available to watch here
db4free.net was born in 2005 (which makes it older than Twitter or Google Chrome) when MySQL 5.0 was in early development. 11 years went by but one thing always remained the same: the 5 in MySQL’s major version number. MySQL versions went from 5.0 to 5.1 to 5.5, 5.6 and recently to 5.7. There was always this 5.something.
While this 5 will stay around for a bit longer, it is not alone anymore.
Now there is a duplicate of the db4free.net website at
where you can create a database on a newly set up MySQL 8.0 server!
MySQL 8.0 is in very early development, the first Development Milestone Release (MySQL 8.0.0 DMR) has just been released on September, 12. It will take several months until there will be a final release.
db4free.net makes it easy to try new features early. The …
[Read more]In a previous blog post we discussed several approaches to sharding. The most flexible one, sharding using metadata, is also the most complex one to implement. You need to design the meta-database, and build high availability not only for your application data but also for the metadata. On top of that, you need to design your application so it will be aware of the complex database infrastructure beneath - it has to query metadata first and then it has to be directed to a correct shard to read or write data. You will also have to build tools to manage and maintain the metadata. Migrating data requires caution so it has to be done carefully. You also have to make sure that any operations on the production databases are mirrored in the metadata. For instance, have you taken a slave out of rotation? This should be reflected in the metadata. Have you added a new …
[Read more]This blog post will discuss how to use the MySQL super_read_only system variable.
It is well known that replica servers in a master/slave configuration, to avoid breaking replication due to duplicate keys, missing rows or other similar issues, should not receive write queries. It’s a good practice to set
read_only=1
on slave servers to prevent any (accidental) writes. Servers acting as replicas will NOT be in read-only mode automatically by default.
Sadly,
read_only
has an historical issue: users with the SUPER privilege can override the setting and could still run DML queries. Since Percona Server 5.6.21 and MySQL 5.7.8, however, you can use the
super_read_only
feature to extend the
read_only…[Read more]
One of the main tasks that any DBA has to deal with is certainly
data retention. Especially when your developers like to store
logging and tracking information inside the database. This is not
something that I would recommend (don't try it at home!) but when
you're late to the party (read: someone had taken this path
before you joined) , then you'll have to live with it.
Data retention in MySQL is usually applied by partitioning the
table by RANGE on a selected column, usually containing the row
creation timestamp. New partitions are created in advance for the
coming days or weeks or months, and a script is used that will
run nightly and drop partitions that are older than a set
retention.
There are many tools that can be used to automate data retention;
I have chosen the excellent pdb-parted, a nice and cozy perl
script that you can find in the PalominoDB repository on GitHub
(since PalominoDB is no longer in existence, …
A new Group Replication plugin labs release has came out, a little over a week ago. Exciting news! This shows that the team has been working hard to shape up the plugin so that it meets the required feature set, performance and quality standards to be released as GA.…
I have a new blog post on blog.booking.com describing MariaDB 10.1 Optimistic Parallel Replication (with benchmark results):
Evaluating MySQL Parallel Replication Part 4: More Benchmarks in Productionhttp://blog.booking.com/evaluating_mysql_parallel_replication_4-more_benchmarks_in_production.html
If you want to know more about MySQL/MariaDB Parallel Replication and if you are attending
Optimiser is the brain of the RDBMS. Optimiser decides the right access method , algorithms , join order and right index to be used for better execution of the query. This blog is made to shed some lights on Cost based optimiser in MySQL 5.7. The cost or statistics are stored in the data dictionary .
What is cost-based optimization ?
- The cost model is based on estimates of cost various operations occur during query execution.
- The optimizer has a set of default “cost constants” it will make decision on execution plans.
- In MySQL 5.7, the optimizer has addition a database of cost estimates to use during the execution plan.
- These cost estimates are stored in server_cost & engine_cost tables in MySQL schema. For more details Cost Model
MySQL …
[Read more]
If there is something that I love about information technology is
the incredible amount of unpredictable ways that bugs can bite
you where and when you less expect it.
This one I'm about to describe is a serious one, yet there has
been a very quiet response from Percona bug team at Launchpad,
where I first submitted it (because we use Percona server here).
If you have read my other posts you know by now that I am a
laz... err, busy guy so bear with me if only today I have
verified that this is, in fact, an upstream bug and have raised a
bug to Oracle too.
It affects 5.6.33, latest version at the time of this
article.
Anyways, the bug started to manifest itself in the form of
complete stalls of our main cluster, which was happening at
different times and apparently in a way that was unrelated to the
amount of traffic hitting the master. When stalling, system
CPU time was topping 100% of total available …
With MySQL 8.0, we are bringing in an important change in the way user management DDLs are executed.
Background
User management DDLs cover following user management actions:
- Creating user/role (CREATE USER [IF NOT EXISTS] / CREATE ROLE [IF NOT EXISTS])
- Altering user account properties (ALTER USER [IF EXISTS])
- Dropping user/role from database (DROP USER [IF EXISTS] / DROP ROLE [IF EXISTS])
- Granting/Revoking privileges to/from a user/role (GRANT/REVOKE)
Each of these administrative action can handle multiple entities as a part of single command.…