The MySQL general log is one of my favorite features for a
quick debug. I especially like the ability of starting and
stopping it on demand, which was introduced in MySQL 5.1.
However, using the general log has its drawbacks.
Today I was debugging a nasty bug that results from two
statements that should be applied sequentially, but that were
instead concurrent. These kind of problems are hard to cope with,
as they are intermittent. Sometimes all goes well, and you get
the expected result. And then, sometimes the statements fly on
different directions and I stare at the screen, trying to
understand where did they stray.
After some try-and-fail, I decided to enable the general log just
before the offending statements, and to turn it down immediately
after. Guess what? With the general log on, the test never
failed. What was an intermittently …
Sometimes you know for sure. And sometimes you wonder: Is this
server part of a replication system? And, most specifically, is
it an active slave?
The completeness of the answer depends on how much visibility you
have on the server.
If you can ask the DBA, and possibly have access to the server
data directory and configuration file, you can get a satisfactory
answer. But if your access is limited to SQL access, things get a
bit more complicated.
If you have the SUPER or REPLICATION_CLIENT privilege, then it's
easy, at least in the surface.
SHOW SLAVE STATUS will tell you if the slave is running. An empty
set means that the server was not configured as a slave.
The answer is not absolute, though. You need to read the output
of SHOW SLAVE STATUS to understand if replication is under
way.
For example, what is the difference between these two
listings?
## listing 1 …
[Read more]