0

My server has a max_connections value of 400 and a max_user_connections of 250. Since I am always connecting with the same user name, my effective max_connections is 250 instead of 400. To solve this, I though to connect with one username 50% of the time, and another username 50% of the time:

if(mt_rand(1,2) == 1){
  $con = mysqli_connect(DB_SERVER, DB_USER_1, DB_PASS) or die(mysql_error());
}
else{
  $con = mysqli_connect(DB_SERVER, DB_USER_2, DB_PASS) or die(mysql_error());
}

My question is, are there any downsides to doing this relating to the fact that the same person might alternate back and forth between different users? Or is this not a problem as the previous connection is "forgotten" and when the user refreshes we are starting a new connection and there is no relation to what user he/she connecting with last page refresh.

In general, is there a better way to deal with this?

2
  • Have you investigate php persistent connections?
    – Giovanni
    Commented May 30, 2015 at 8:10
  • Do you close ur connection after db server response?
    – Masoud
    Commented May 31, 2015 at 5:36

3 Answers 3

0

I would opt to increase the number of connections instead of owning two different users/configurations in the same host with same privileges.

Unless, there is a persistent connection, php itself will close the connection explicitly even though you do not close them yourself.

0

I think you have misdiagnosed the problem.

Do you really need that? Do you have 251 terminals trying to connect as your userid? Have you set the MaxClients (or whatever) so high that the web server is trying to connect that much, and failing to disconnect? Consider lowering that instead.

0

Perhaps you may want to experiment with setting those limits on the user account itself

You can allow 250 simultaneous connections for a specific user account

GRANT USAGE ON *.* TO myuser@myhost MAX_USER_CONNECTIONS 250;

You can throttle connection attempts by the hour as well

GRANT USAGE ON *.* TO myuser@myhost MAX_CONNECTIONS_PER_HOUR 250;

Those values are part of the mysql.user table (Columns 38 and 39 for MySQL 5.6)

+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Password               | char(41)                          | NO   |     |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | YES  |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
43 rows in set (0.06 sec)

mysql>

I mentioned this feature two years ago

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.