When I talk about troubleshooting I like to repeat: "Don't grant
database access to everybody!" This can sound a bit weird having
one can give very limited read-only access.
But only if ignore the fact what even minimal privileges in MySQL
allows to change session variables, including those which control
server resources. My favorite example is "Kill MySQL server with
join_buffer_size". But before version 5.7 I could only recommend
this, but not demonstrate. Now, with help of memory summary
tables in Performance Schema, I can show how unprivileged user
can let your server to use great amount of swap.
At first lets create a user account with minimal privileges and
login.
$../client/mysql -ulj -h127.0.0.1 -P13001
Welcome to the MySQL monitor. Commands end with ; or
\g.
Your MySQL connection id is 10
Server version: 5.7.6-m16-debug-log Source distribution
…
Here is a list of my most useful tools that I use when doing
performance audits.
Please note, I am writing this mainly for myself, because I
sometimes end up trying to find them in my other blog post about
mastering indexing and this may save me
time as well as a few changes that have happened over the
years.
Regular Slow Log Report pt-query-digest slow_query.log
>slow.txt
All Queries (that use indexes) for a certain table
pt-query-digest slow_query.log --filter
'($event->{fingerprint} =~ m/^(!?select|update|delete)/)
&& ($event->{arg} =~ m/mytable /) ' --limit=100%
>mytable.txt
Longest Running Select Queries - most painful queries
with response time % right next to them. pt-query-digest
slow_query.log --filter '($event->{fingerprint} =~ …
In the wrong context, almost anything can be funny, and MySQL’s error codes are no exception. A few weeks ago, things got a little loopy at VividCortex headquarters as we discovered some definitions that could be taken more than one way.
How It Began
It started with ER_M_BIGGER_THAN_D
, which doesn’t
sound like an error at all. Anyone who knows alphabetical order
knows that M is bigger than D! Of course, the error is really
about an attempt to define a decimal or float column wrongly.
Next was ER_TOO_BIG_SCALE
, about which I tweeted “MongoDB doesn’t have this error, as far
as I know, but MySQL does.”
MongoDB doesn't have this error, as far as I know, but MySQL does.
ER_TOO_BIG_SCALE
…
[Read more]Virtual Hosting With PureFTPd And MySQL (Incl. Quota And Bandwidth Management) On CentOS 7.0 This document describes how to install a PureFTPd server that uses virtual users from a MySQL database instead of real system users. This is much more performant and allows to have thousands of ftp users on a single machine. In addition to that I will show the use of quota and upload/download bandwidth limits with this setup. Passwords will be stored encrypted as MD5 strings in the database.
Virtual Hosting With PureFTPd And MySQL (Incl. Quota And Bandwidth Management) On CentOS 7.0 This document describes how to install a PureFTPd server that uses virtual users from a MySQL database instead of real system users. This is much more performant and allows to have thousands of ftp users on a single machine. In addition to that I will show the use of quota and upload/download bandwidth limits with this setup. Passwords will be stored encrypted as MD5 strings in the database.
I just posted on the Server team's blog, an account on my recent only_full_group_by work. We have made significant improvements in 5.7.5, worth a look!
Wed, 2014-12-10 13:30mriddoch
One of the nice things about the "plug and play" approach of MaxScale is that people constantly find ways of using it that were not originally envisaged when we designed MaxScale. One such configuration that I have heard of from multiple sources is using monitoring outside of MaxScale itself. This post will discuss a little about how monitoring works and how it can be moved outside of MaxScale. In particular a simplified example will be presented which shows how to use the notification mechanism in Galera to control MaxScale's use of the nodes in a Galera cluster.
Monitoring Within MaxScale
Perhaps it is best to start with a little background as to what the function of the monitor plugin is within MaxScale, how they work and how the plugins communicate with the other components of MaxScale.
MaxScale monitors the servers for one reason only, so that it is able to feed the routing …
[Read more]Here’s an account of recent work which has kept me busy and excited for a few months. For those unfamiliar with the only_full_group_by sql mode, let me provide some context. I’ll use the world database, which can be downloaded from this MySQL Documentation page. You can find details on how to install the database on the same page. We have a table of countries and a table of languages spoken in each country. It’s a 1-to-N relationship: a country can have many languages so CountryLanguage.CountryCode is a foreign key referencing Country.Code:
mysql> desc Country; +----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | …[Read more]
Today at the #ukoug_tech14 I had the chance to attend to the Christo Kutrovky's session @kutrovsky (Pythian) about "Measuring Performance in Oracle Solaris & Oracle Linux". This session aimed to present how to measure system utilization in the Linux and Oracle Solaris operating systems and how to use these information for tuning and capacity planning. During this session we had a very good introduction to a bunch of performance monitoring tools that can be categorized in four categories (non exhaustive list of tool):
1. CPU:
- top
- vmstat
- time
- mpstat
2. Memory - RAM
2.1 Global
- /proc/meminfo
- vmstat
- ipcs
Disclaimer: Do this at your own risk! It doesn’t apply if you’re using Pluggable authentication and certainly won’t be usable if/when MySQL system tables are stored on InnoDB
Recover your root password with care!
What is the situation?
The situation is the classic “need to recover MySQL root password” but you cannot restart MySQL (because it is the master production server, or any other reason), which makes the –skip-grant-tables solution as a no-no possibility.
What can I do?
There is a workaround, which is the following:
- Launch another instance of mysqld, a small one (without innodb).
- Copy your user.[frm|MYD|MYI] files from the original datadir to the datadir of the new instance.
- Modify them and then copy …