MQSQL "too many connections"

I migrated our server to a Debian based system with MYSQL… I had no problems getting they system up and running… However, after the system runs for approx 18 to 24 hours. the MYSQL crashs with “too many connections”

In MYSQL I have it set for max_connections = 150 (I’ve even moved that to 300) To no avail…

I get to the point where MYSQL creates mysql-bin logs and will not restart until I purge these logs from the system.

Any help would be great…

You max connections are way too high. You do not need that many. Set it back to the default 15. That should be good for several thousand users.

The reason it’s set so high is so that I can last at least 20 hours before it crashs… Is there something I missed that causes the mysql-bin output and the “too many connections” error?

You do not need that many connections. You MySQL server is probably not configured to allow that many connections. there is no need for them to be that high. That number has nothing to do with the number of users connecting to Openfire. It is openfire’s connection to mysql to write data from teh cache to the database.

I agree… The Openfire needs only 25 (according to I think) max_connections set that high is not the issue… It’s the temporary fix…

What causes the server to get to the state where MYSQL dumps?

The only DB is Openfire

It would depend on how you have your dabase instal/configured. Openfire can be taxing on a database depending on level of use and the plugins installed. MySQL has different install configurations for the type of use. My guess is that you did not configure MySQL for robust enough settings. This does nto mean up the connection pool. Unfortunately I can not provide specifics for how to do this on your OS.

Let’s see if this helps… I’m using a LAMP server from http://virtualappliances.net and here is the my.cnf

The MySQL database server configuration file.

You can copy this to one of:

- “/etc/mysql/my.cnf” to set global options,

- “~/.my.cnf” to set user-specific options.

One can use all long options that the program supports.

Run program with --help to get a list of available options and with

–print-defaults to see which it would actually understand and use.

For explanations see

http://dev.mysql.com/doc/mysql/en/server-system-variables.html

This will be passed to all mysql clients

It has been reported that passwords should be enclosed with ticks/quotes

escpecially if they contain “#” chars…

Remember to edit /etc/mysql/debian.cnf when changing the socket location.

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

Here is entries for some specific programs

The following values assume you have at least 32M ram

This was formally known as [safe_mysqld]. Both versions are currently parsed.

[mysqld_safe]

socket = /var/run/mysqld/mysqld.sock

nice = 0

[mysqld]

* Basic Settings

user = mysql

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

port = 3306

basedir = /usr

datadir = /var/lib/mysql

tmpdir = /tmp

language = /usr/share/mysql/english

skip-external-locking

Instead of skip-networking the default is now to listen only on

localhost which is more compatible and is not less secure.

bind-address = 0.0.0.0

* Fine Tuning

key_buffer = 16M

max_allowed_packet = 16M

thread_stack = 128K

thread_cache_size = 8

Added these lines to help extend mysql between crashs!

max_connections = 300

table_cache = 1200

max_connect_errors = 999999

#thread_concurrency = 10

* Query Cache Configuration

query_cache_limit = 1M

query_cache_size = 16M

* Logging and Replication

Both location gets rotated by the cronjob.

Be aware that this log type is a performance killer.

#log = /var/log/mysql/mysql.log

Error logging goes to syslog. This is a Debian improvement :slight_smile:

Here you can see queries with especially long duration

#log_slow_queries = /var/log/mysql/mysql-slow.log

#long_query_time = 2

#log-queries-not-using-indexes

The following can be used as easy to replay backup logs or for replication.

#server-id = 1

log_bin = /var/log/mysql/mysql-bin.log

WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!

expire_logs_days = 10

max_binlog_size = 100M

#binlog_do_db = include_database_name

#binlog_ignore_db = include_database_name

* BerkeleyDB

Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.

skip-bdb

* InnoDB

InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.

Read the manual for more InnoDB related options. There are many!

You might want to disable InnoDB to shrink the mysqld process by circa 100MB.

#skip-innodb

* Security Features

Read the manual, too, if you want chroot!

chroot = /var/lib/mysql/

For generating SSL certificates I recommend the OpenSSL GUI “tinyca”.

ssl-ca=/etc/mysql/cacert.pem

ssl-cert=/etc/mysql/server-cert.pem

ssl-key=/etc/mysql/server-key.pem

[mysqldump]

quick

quote-names

max_allowed_packet = 16M

[mysql]

#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]

key_buffer = 16M

* NDB Cluster

See /usr/share/doc/mysql-server-*/README.Debian for more information.

The following configuration is read by the NDB Data Nodes (ndbd processes)

not from the NDB Management Nodes (ndb_mgmd processes).

[MYSQL_CLUSTER]

ndb-connectstring=127.0.0.1

* IMPORTANT: Additional settings that can override those from this file!

!includedir /etc/mysql/conf.d/

Hi Chris,

I assume that this is a fresh install, so the database schema is fine. Openfire uses Proxxol as the JDBC connection pool with 15 or 25 configured connections. Does “netstat -an|grep 3306” (change 3306 to your MySQL TCP port) return 25 connections (50 lines if you are running Openfire and MySQL on the same server) after startup and 100 connections after 10 hours?

There may be a MySQL connection timeout, setting it to 300 seconds should help a lot and cause exceptions in the Openfire error log. Do you see errors or interesting messages in the Openfire log files?

LG