web-dev-qa-db-fra.com

Avertissement mis en mémoire tampon: limites modifiées: max_connections: 214 (demandé 800)

Chaque fois que je redémarre MySQL, j'ai cet avertissement:

[Avertissement] Avertissement mis en mémoire tampon: limites modifiées: max_connections: 214 (demandé 800)

Je dois donc changer max_connections variable:

set global max_connections = 800;

Mais /etc/my.cf a max_connections ensemble:

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_connections = 800

J'ai également modifié mysqld.service:

# Start main service
ExecStart=/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf

J'ai également mis à jour les fichiers ouverts max de Centos de 1024 à 2000:

ulimit -Sa | grep "open files"
open files                      (-n) 2000

Mais le problème persiste.

Démarrage du journal Mysql:

150924 13:15:04 mysqld_safe mysqld from pid file 

/var/run/mysqld/mysqld.pid ended
150924 13:15:04 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2015-09-24 13:15:04 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-09-24 13:15:04 0 [Note] /usr/sbin/mysqld (mysqld 5.6.25) starting as process 29997 ...
2015-09-24 13:15:04 29997 [Warning] Buffered warning: Changed limits: max_open_files: 1024 (requested 5000)

2015-09-24 13:15:04 29997 [Warning] Buffered warning: Changed limits: max_connections: 214 (requested 800)

2015-09-24 13:15:04 29997 [Warning] Buffered warning: Changed limits: table_open_cache: 400 (requested 2000)

2015-09-24 13:15:04 29997 [Note] Plugin 'FEDERATED' is disabled.
2015-09-24 13:15:04 29997 [Note] InnoDB: Using atomics to ref count buffer pool pages
2015-09-24 13:15:04 29997 [Note] InnoDB: The InnoDB memory heap is disabled
2015-09-24 13:15:04 29997 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2015-09-24 13:15:04 29997 [Note] InnoDB: Memory barrier is not used
2015-09-24 13:15:04 29997 [Note] InnoDB: Compressed tables use zlib 1.2.3
2015-09-24 13:15:04 29997 [Note] InnoDB: Using Linux native AIO
2015-09-24 13:15:04 29997 [Note] InnoDB: Using CPU crc32 instructions
2015-09-24 13:15:04 29997 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2015-09-24 13:15:04 29997 [Note] InnoDB: Completed initialization of buffer pool
2015-09-24 13:15:04 29997 [Note] InnoDB: Highest supported file format is Barracuda.
2015-09-24 13:15:04 29997 [Note] InnoDB: 128 rollback segment(s) are active.
2015-09-24 13:15:04 29997 [Note] InnoDB: Waiting for purge to start
2015-09-24 13:15:04 29997 [Note] InnoDB: 5.6.25 started; log sequence number 24337684937
2015-09-24 13:15:04 29997 [Note] Server hostname (bind-address): '*'; port: 3306
2015-09-24 13:15:04 29997 [Note] IPv6 is available.
2015-09-24 13:15:04 29997 [Note]   - '::' resolves to '::';
2015-09-24 13:15:04 29997 [Note] Server socket created on IP: '::'.
2015-09-24 13:15:04 29997 [Note] Event Scheduler: Loaded 0 events
2015-09-24 13:15:04 29997 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.6.25'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL)

J'ai essayé toutes les solutions Google, mais le résultat est toujours le même ...

MySQL fonctionne sur CentOS Linux version 7.1.1503 (Core).

Merci!

16
Valerio Paoletti

Après avoir passé une heure ou deux face au même problème sur CentOS 7 avec MySQL 5.6.26, voici ma solution. En plus d'augmenter le nombre maximal de fichiers ouverts (pour l'utilisateur mysql), ce qui semble avoir déjà été fait, vous devez ajouter "LimitNOFILE = 65535" (ou similaire selon la limite que vous souhaitez définir) à votre fichier de définition mysql.service.

Donc, la solution complète pour moi était la suivante

ajoutez ces deux lignes à /etc/security/limits.conf

mysql hard nofile 65535
mysql soft nofile 65535

ajoutez cette ligne à /usr/lib/systemd/system/mysqld.service (dans la section [service])

LimitNOFILE=65535

puis redémarrez enfin et vérifiez que ces messages d'erreur ont disparu de votre journal des erreurs mysql.

EDIT: Merci à @SieGeL ci-dessous de me rappeler d'ajouter, si vous mettez à jour le fichier ".service" directement, vos modifications seront perdues lors de la mise à niveau. Pour conserver les modifications après une mise à niveau, utilisez une substitution systemd en créant un fichier conf supplémentaire dans /etc/systemd/system/mysqld.service.d

20
MNB

Je ne recommanderais pas de modifier le fichier systemd d'origine car il sera écrasé lors des mises à jour.

Pour modifier les limites, procédez comme suit:

mkdir /etc/systemd/system/mysqld.service.d

Dans ce répertoire, créez un nouveau fichier limits.conf et ajoutez ce qui suit à ce fichier:

[Service]
  LimitNOFILE = 65535

enfin rechargez systemd avec:

systemctl daemon-reload

et redémarrez mysqld pour activer le changement:

systemctl restart mysqld

Validez maintenant que la modification a réussi en utilisant la requête suivante:

mysql> show variables like '%file%';

Vous devriez trouver une ligne comme celle-ci:

| open_files_limit                      | 65535  

Voilà, de cette façon, vos modifications survivent aux mises à jour MySQL.

11
SieGeL