So I told myself "I wish I had a tool that installed plugins
instantly and painlessly, the way MySQL Sandbox installs a
server.
There you go. So yesterday I had enough of suffering and have put
together an installation script that does a good job of
installing several plugins with little or no effort.
OverviewHow does it work? For now, it's a separate script, but it
will soon end into SBtool, the Sandbox tool.
Plugins need different operations, and the difficult part is
finding a clear way of …
When you are importing large amounts of data from other sources
LOAD DATA is a common method of inserting data
into a table.
It is one of the old commands implemented in MySQL. As such it is
very fast, and it has been optimized for both MyISAM and
InnoDB.
All is well when you are loading data into a standalone server.
All is almost well when you are using replication. LOAD DATA used
to be a problem in old versions of MYSQL, prior to 4.1. With
recent versions of MySQL, it is replicated correctly, and
sometimes efficiently.
The trouble starts when the data file is big. The
definition of big and the amount of trouble that you can
get depends on many factors. That's why users may not realize
that this problem exists, even with fairly large files, and then
being hit by this disaster when the file is only a little larger
than the previous …
This is a Request for Input. Dual MySQL masters with MMM in a single datacentre are in common use, and other setups like DRBD and of course VM/SAN based failover solutions are conceptually straightforward also. Thus, achieving various forms of resilience within a single data-centre is doable and not costly.
Doing the same across multiple (let’s for simplicity sake limit it to two) datacentres is another matter. MySQL replication works well across longer links, and it can use MySQL’s in-built SSL or tools like stunnel. Of course it needs to be kept an eye on, as usual, but since it’s asynchronous the latency between the datacentres is not a big issue (apart from the fact that the second server gets up-to-date a little bit later).
But as those who have tried will know, having a client (application server) connection to a MySQL instance in a remote data-centre is a whole other matter, latency becomes a big issue and is generally …
[Read more]MySQL 5.1 introduces row based binary logging. In fact, the default binary logging format in GA versions of MySQL 5.1 is 'MIXED' STATEMENT*; The binlog_format variable can still be changed per sessions which means it is possible that some of your binary log entries will be written in a row-based fashion instead of the actual statement which changed data, even when the global setting on the master is to write binary logs in statement mode. The row-based format does offer advantages particularly if triggers or stored procedures are used, or if non deterministic functions like RAND() are used in DML statements.
A statement based replication slave can get out of sync with the master fairly easily, especially if data is changed on the slave. It is possible for a statement to execute successfully on a slave even if the data is not 100% in sync, so MySQL doesn't know anything is wrong. This isn't the case …
[Read more]
Have you ever run into a problem where MySQL replication did 95%
of what you needed but not the remaining 5% to solve a real
problem? Hacking the binlog is always a possibility, but it
typically looks like this example. Not a pretty sight.
Wouldn't it be easier if replication were a bunch of building
blocks you could recombine to create custom replicator
processes?
Tungsten 1.3 has a new feature called pipelines that
allows you to do exactly that. A pipeline consists of one
or more stages that tie together generic components to extract,
filter, store, and apply events, which is Tungsten
parlance for transactions. Each stage has a processing
thread, so multi-stage pipelines can process data independently
and without blocking. The stages also take care of
important but tedious issues like remembering the transactional …
Been asked a few times in the last few days about where my slides are from my MySQL keynote from *last* year.
Ooops.
Um, yeah. Sorry about that. Here’s a link to ‘The SmugMug Tale’ slides, and you can watch the video below:
Sorry for the extreme lag. I suck.
The important highlights go something like this:
- Use transactional replication. Without it, you’re dead in the water. You have no idea where a crashed slave was.
- Use a …
When replication runs out of sync first question you often ask is if someone could be writing to the slave. Of course there is read_only setting which is good to set in the slave but it is not set always and also users with SUPER privilege bypass it.
Looking into binary log is obvious choice - this is a good reason to have binary log on the slave if you do not need it for anything else. By default MySQL will only write statements which come to the server directly (not via replication thread) so you will know offender at once.
In many cases however log_slave_updates is
enabled which makes slave to write all updates to binary logs -
the ones executed directly on the host as well as coming through
replication thread. There is however a way to know which is which
- based on server_id.
Here is snippet from Slave binary log which has updates one on
Master and another on Slave directly:
…
[Read more]
I would like to announce a couple of new Tungsten versions
available for your database clustering enjoyment. As most
readers of this blog are aware, Tungsten allows users to create
highly available data services that include replicated copies,
distributed management, and application connectivity using
unaltered open source databases. We are continually
improving the software and have a raft of new features coming out
this year.
First, there is a new Tungsten 1.2.3 maintenance release
available in both commercial as well as open source
editions. You can get access to the commercial
version on the Continuent website, while the open
source version is available on SourceForge.
The Tungsten 1.2.3 release focuses on improvements for
MySQL …
We don’t often see this option configured (default: unlimited) but it might be a good idea to set it. What it does is limit the amount of disk space the combined relay logs are allowed to take up.
A slave’s IO_Thread reads from the master and puts the events into the relay log; the slave’s SQL_Thread reads from the relay log and executes the query. If/when replication “breaks”, unless it’s connection related it tends to be during execution of a query. In that case the IO_Thread will keep running (receiving master events and storing in the relay log). Beyond some point, that doesn’t make sense.
The reason for having two separate replication threads (introduced in MySQL 4.0) is that long-running queries don’t delay receiving more data. That’s good. But receiving data is generally pretty fast, so as long as that basic issue is handled, it’s not necessary (for performance) to have the IO_Thread run ahead that far. …
[Read more]Since the time that I’ve been using MySQL I have filed quite a few bug reports. Some of these have been fixed and many of the bug reports are actually new feature requests. While working with MySQL Enterprise Monitor I’ve probably filed more feature requests than bug reports.
That’s fine of course and my opinion of what is needed in MySQL or Merlin is one thing, yours or the MySQL developers is something else. We all have our own needs and find things missing which would solve our specific problems.
If I have ten feature requests open and only one could be added to the software I’d also like to be able to say: this feature is the most important one for me.
However, it seems to me that there is no easy way in the mysql bug tracker at the moment to group together different types of new feature requests into groups of related features and then see the different types of …
[Read more]