Archive for MySQL
Given a server running MySQL with a high connection creation rate, if you receive the following notifications:
WARNING: found MySQL connection failure ((2003, "Can't connect to MySQL server on '127.0.0.1' (110)")), retrying query..
And however, the server is working well, and it is possible to query the server at the address/port provided, then it is possible that there is a full “back log TCP” problem.
This TCP incoming connection accept rate depends on the size of the queue (the size of the current backlog) and how much time a connection stays in the queue (for example, the server may be lagging behind picking connections from the queue).
In the case of MySQL, default value for back log is set to 50. This way we can have up to 50 connections waiting to be accepted.
Note this value has nothing to do with “max_connections” which is the number of concurrent connections, already accepted, that the server is going to work with.
Let’s say “back_log” is the queue to get inside a place, and “max_connections” is the place’s capacity.
Possible problem solution
Assuming there are not other problems causing this 2003 code, that is, that:
- There’s no firewall blocking certain operations, not all, for example a burst rate limit.
- There is not a routing problem that is causing connections to work only sometimes.
If this is not the case, and the server is working, but from time to time some connections get rejected without a reason, and there are available connections (running SHOW PROCESSLIST), then follow next steps:
- Update file /etc/mysql/my.cnf, and inside section [mysqld] add the following declaration:
back_log = 200
- After that, restart mysql (you need to, this value does not take effect after a reload).
>> service mysql restart
- Then, connect and run the following instruction: SHOW VARIABLES to check if backlog is correctly configured .
Using Core-Admin to configure back_log
Doing this configuration with Core-Admin is really easy. You only have to:
- Load MySQL management tool (from inside the machine’s view).
- Now, click on “Options”:
- After that, click on “Configure”:
- Then the configuration panel will appear. Now there, you can configure he back log value needed.
Do you need to create a MySQL account along with a database and link those two together for some service or application?
Creating a secured MySQL account limited to its database is just as easy as:
>> python >>> from core_admin_agent import database >>> database.create_mysql_account ("db_user", "db_name", "db_pass")