Will a mysql restart flush the hosts cache (like FLUSH HOSTS)? - mysql

I'm getting "'host_name' is blocked because of many connection errors". I know the reason for the failed connections, and the cause is resolved.
To reset the condition, I assume that FLUSH HOSTS needs to be run at the remote host, but I don't have sufficient (RELOAD) privilege there.
If mysql is (ever) restarted on the remote host, will the hosts cache be cleared? (as if a FLUSH HOSTS had been run)
Otherwise, will the condition persist for some period of time? Or for ever?

I can not find documentation that the information in the host cache is cleared on MySQL restart.
I have been able to get an answer in practice with MySQL 5.5...
force a host to reach max_connect_errors (telnet hostname 3306 repeatedly until it fails)
verify MySQL client connections would fail with ERROR 1129 (HY000): Host '$hostname' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
restart MySQL
successfully connect with MySQL client after the restart.

Related

How to simulate MySQL many connection errors

I recently had an issue with my production systems in which a MySQL server was blocking the application server, due to connection errors, and gave the following error:
Host 'xx.xx.xx.xx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
I'd like to find a way to simulate this condition (or even trigger the actual condition on a non-production server), so I can respond to it properly. It's a pretty rare problem for my systems, but I'd still like to find a good way to respond to it.
You can avoid this problem by increase peer connections in mysql configurations
Logging to console/terminal with admin privileges
Flush all hosts using mysqladmin:
mysqladmin flush-hosts -u root -p
Open my.cnf (Linux) or my.ini (Windows) and change max_connect_error variable
max_connect_errors= 250000
Restart server with changes
To simulate error connection you can connect to MySQL server and then end connection before succesfull authentication. For example by netcat:
nc -i0.1 <hostname> 3306

Website connection error related with MySQL 4.1.24

I get an error on my website (MySQL with TCP/IP connection)
Can't connect to local MySQL server
It sounds easy, perhaps, but not so easy to solve as would seem. At first i verified that mysqld process is running. Then connected to SSH server and started /etc/init.d/mysqld restart, but nothing has changed. Also i checked is the server running, using telnet your-host-name tcp-ip-port-number, just in case, but MySQL does not work on this port and shows another error: telnet: Unable to connect to remote host: Connection refused
The last i have tried is to run mysql with the skip-networking option, and it did not help as well as other attempts above. Any suggestions would be very appreciated.
This error normally means that MySQL is not running on the system or that you are using a wrong TCP/IP port number while trying to connect to the mysqld server.
Try to connect to the mysqld daemon on the local machine and check by mysqladmin variables, which TCP/IP port is configured to use mysqld (variable port).
Perhaps you are running MySQL-server with no corresponding privileges for the directory holding the socket file. In this case, either change the privilege for the directory or restart mysqld
Also this discussion might be interesting for you: http://community.office365.com/en-us/f/172/p/266451/815406.aspx
Unfortunately, i am not a pro and my advices can help not much, but that all what i found about your issue
This sounds like you are being blocked by the firewall on the server. You can disable the firewall for a quick test:
service iptables stop
service iptables start
This article will show you how to apply rules to the firewall to allow mysql access.
http://www.cyberciti.biz/tips/linux-iptables-18-allow-mysql-server-incoming-request.html
If you have SELinux, you have another set of problems which I can't help you with.
Sounds to me permission issue.
Does it run on the local machine?
If yes, then it might me possible it isn't allowed to listen any port(security purposes: mostly on a linux based server). Otherwise, Network user might not have permission granted to access mysql over internet.
As you say, if it's a website, I would never allow user access mysql directly but only the server shall: possible security breach otherwise.(you don't want your database to be dropped, do you?)
Well still, proper answer to you question resides here: http://dev.mysql.com/doc/refman/5.1/en/grant.html
and this might help:
Host 'xxx.xx.xxx.xxx' is not allowed to connect to this MySQL server
Firstly, you should verify that MySQL is actually running by checking your processlist. On linux you could do that like this, note that you should see both mysqld_safe and then mysqld as two separate processes.
sudo ps auxwww|grep -i mysqld
If it is not running, I would check the MySQL error log for clues as to why it is not starting.
If you then verify that it is running, we can check to see what ports or unix sockets it is listening on like so. If this doesn't work, get the process ID of mysqld (not mysqld_safe) and try search for that with grep instead of 'mysql'
sudo netstat -anp|grep -i mysql
You'll obviously want to restart without skip-networking to see a TCP socket appear.
Based on the output of that, you should see both a unix socket and a tcp socket. Also check the address in the fourth column for the TCP socket, it will likely say either 127.0.0.1:3306 or 0.0.0.0:3306. The former means that you can only connect via localhost (127.0.0.1) and the latter means the connection will work on any IP address.
If you've gone through all of that and are still not sure why it is working, you could post the processlist and netstat outputs for further review, along with the exact settings you are using to try and connect to MySQL and indicate whether you are connecting from the same server (i.e. locally) or from another server over the network.
See also:
http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.html

mysql fails to allow remote connection

I have followed the steps here:
ERROR 1130 (HY000): Host '' is not allowed to connect to this MySQL server
Carried out this activity dozens of times and it worked -- now for some reason it is not
I have done:
Comment out bind-address in my.cnf and restart service
GRANT ALL PRIVILEGES ON . TO 'root'#'%';
FLUSH PRIVILEGES;
The only difference here is that MySQL is running in a VM under VirtualBox and I am connecting to the VM mysql instance via WIndows 7.
SSH and other services work fine...
The passwords are fine as they work when I connect via SSH...
My new modem/router possibly at fault, blocking outgoing or ingoing connections on port 3306???
I assume that traffic from a host to guest still goes through the router...but the thing is...my requests are certainly making to the MySQL server as the log file shows fail requests...
WTF amm I missing???
The error I receive: Error No. 1045
Access denied for user 'root'#'my-desktop' (Using Passowrd: YES)
You also have to edit my.cnf. Change:
bind-address = 127.0.0.1
to
#bind-address = 127.0.0.1
then restart mysql. Also, if you are going to allow outside access, create a user other than root. That's always a bad idea.
By default connection from outside are not allowed for security reasons.
Because exposing your database to the public internet is never a good idea, you will need to whitelist the IP address manually to allow connection.

MySQL / phpMyadmin: "many connection errors"

My app no longer connects to its DB and phpmyadmin says #1129 - Host 'xxx.xx.xx.xx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
mysql_error() prints out the same message. Could this be because of too many connections?
What causes this?
Open a command prompt (or shell in Linux) with administrative privilleges
Flush all hosts in MySQL using mysqladmin:
mysqladmin flush-hosts -u root -p
Open my.cnf (Linux) or my.ini (Windows) and change max_connect_errors variable to a large number. I used:
max_connect_errors= 1000000
Restart MySQL server
From the manual: http://dev.mysql.com/doc/refman/4.1/en/blocked-host.html
The number of interrupted connect
requests allowed is determined by the
value of the max_connect_errors system
variable. After max_connect_errors
failed requests, mysqld assumes that
something is wrong (for example, that
someone is trying to break in), and
blocks the host from further
connections until you execute a
mysqladmin flush-hosts command or
issue a FLUSH HOSTS statement. See
Section 5.1.3, “Server System
Variables”.
You could be having network problems connecting to your database.
We had this problem when using monit to monitor our DB server. Monit will cause connection errors if your config is of the form:
if failed port 3306 with timeout 15 seconds 2 times within 3 cycles then alert
Rather than
if failed port 3306 protocol mysql with timeout 15 seconds 2 times within 3 cycles then alert
The lack of 'protocol mysql' causes the connection error count to notch up.

Can anyone tell me why my web server cannot connect to a DB server?

Can't connect to MYSQL server error. The DB is a separate server.
http://dpaste.com/99702/
I typed nc dbserver 3306 and it returned:
[XXXXXX] 3306 (mysql) : Connection refused
Even in my GRANT options, I specified GRANT ALL TO *.* %...
My friend said that the web server is being prevented from establishing a TCP connection of any kind to that port.
I checked my.cnf, nothing special there. Could it be because of my IP tables?
Your friend is right. The remote server refused the connection. Either the MySQL server is not running, or something (a firewall?) is preventing the connection from going through.
It could well be the case that the host on which mysqld is hosted is not allowing connections on the default mysql port 3306. Also, additionally, you may want to ensure that mysqld is not running with the --skip-networking option, which sets mysqld to not listen for TCP/IP connections.