web-dev-qa-db-fra.com

MariaDB - ne peut pas définir max_connections et wait_timeout via my.cnf

J'ai du mal à définir les paramètres max_connections et wait_timeout dans /etc/my.cnf mais MariaDB ne semble pas lire les paramètres du fichier (il lit certains des autres, je n'ai pas tout vérifié).

Mon fichier /etc/my.cnf:

[mysqld]
#skip-grant-tables
datadir=/data/mysql
socket=/data/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# network
connect_timeout = 61
wait_timeout = 86400
max_connections = 100000
max_allowed_packet = 64M
max_connect_errors = 1000

# limits
tmp_table_size = 512M
max_heap_table_size = 256M
table_cache = 512

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
port = 3306
socket= /data/mysql/mysql.sock

Mais quand je vérifie les variables max_connections et wait_timeout dans MariaDB, cela montre la valeur par défaut:

MariaDB [(none)]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 214   |
+-----------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

Cependant, d'autres paramètres dans my.cnf sont corrects:

MariaDB [(none)]> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 67108864 |
+--------------------+----------+
1 row in set (0.00 sec)


MariaDB [(none)]> show variables like 'max_connect_errors';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 1000  |
+--------------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> show variables like 'connect_timeout';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| connect_timeout | 61    |
+-----------------+-------+
1 row in set (0.00 sec)

Je peux définir la variable max_connections à partir de la ligne de commande mysql mais elle se réinitialise elle-même lorsque je redémarre le service:

MariaDB [(none)]> set global max_connections := 10000;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 10000 |
+-----------------+-------+
1 row in set (0.00 sec)

Hower, pour wait_timeout cela ne fonctionne pas:

MariaDB [(none)]> set global wait_timeout = 86400;                                                                            Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show variables like 'wait_timeout';                                                                         +---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

le délai d'attente est défini comme une variable de session:

MariaDB [(none)]> SELECT * FROM information_schema.global_variables WHERE variable_name='wait_timeout' UNION SELECT * FROM information_schema.session_variables WHERE variable_name='wait_timeout';
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| WAIT_TIMEOUT  | 86400          |
| WAIT_TIMEOUT  | 28800          |
+---------------+----------------+
2 rows in set (0.00 sec)

Vérifié tous les fichiers my.cnf, aucun ne remplace les paramètres:

[/] # locate my.cnf
/etc/my.cnf
/etc/my.cnf.d
/etc/my.cnf~
/etc/my.cnf.d/client.cnf
/etc/my.cnf.d/mysql-clients.cnf
/etc/my.cnf.d/server.cnf
/root/.my.cnf

Système d'exploitation: RHEL 7

Version MariaDB: mariadb-server-5.5.47-1.el7_2.x86_64

6
Iokanaan Iokan

wait_timeout est un jeu de vis:

"Au démarrage du thread, la valeur wait_timeout de la session est initialisée à partir de la valeur globale wait_timeout ou de la valeur globale interactive_timeout, selon le type de client (tel que défini par l'option de connexion CLIENT_INTERACTIVE à mysql_real_connect ()). Voir aussi interactive_timeout."

max_connections prétend avoir une limite supérieure de 100000, mais je dirais que même 10000 est déraisonnablement grande. Est-ce que cela fonctionne pour mettre max_connections=1000 dans my.cnf?

Vous comprenez que vous devez, après avoir modifié my.cnf,

  1. redémarrer mysqld
  2. déconnectez et reconnectez pour voir le changement
  3. utilisation SHOW GLOBAL, pas SHOW, qui est par défaut SHOW SESSION.

L'interaction entre GLOBAL et SESSION (pour VARIABLES et STATUS) varie en fonction du paramètre. Pour beaucoup de choses, pas toutes , la session est initialisée à globale lorsque vous s'identifier. Et wait_timeout est probablement le plus original.

Avertissement

Si vous aviez 100 000 connexions exécutant chacune des complexes SELECTs nécessitant, disons, 3 tables tmp, alors vous pourriez avoir besoin de 100000 * 3 * 256 Mo = 76,8 To de [~ # ~] ram [~ # ~] pour gérer la table tmp! (256 Mo = min (tmp_table_size, max_heap_table_size)). C'est une bonne raison de ne pas mettre toutes ces choses si haut.

10
Rick James