web-dev-qa-db-fra.com

mysql ne démarre pas après avoir augmenté innodb_buffer_pool_size et innodb_log_file_size

Je suis cette solution ici https://stackoverflow.com/questions/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 et j'ai essayé d'augmenter mon innodb_buffer_pool_size à 4G et plus tard 1G (également 1024M) en plus de la taille du fichier journal, mais mysql ne commencera pas avec ces valeurs. Si je le remets à 512M, mysql démarre bien.

Comment puis-je resoudre ceci? Mon serveur est un 16 Go, et selon Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Pendant ce temps, j'ai également trouvé le journal des erreurs:

120529 10:29:32 mysqld_safe mysqld du fichier pid /var/run/mysqld/mysqld.pid terminé

120529 10:29:33 mysqld_safe Démarrage du démon mysqld avec des bases de données depuis/var/lib/mysql

120529 10:29:33 [Note] Le plugin 'FEDERATED' est désactivé.

120529 10:29:33 InnoDB: le segment de mémoire InnoDB est désactivé

120529 10:29:33 InnoDB: les mutex et les rw_locks utilisent des buildins atomiques GCC

120529 10:29:33 InnoDB: les tables compressées utilisent zlib 1.2.3

120529 10:29:33 InnoDB: Utilisation d'AIO natif Linux

120529 10:29:33 InnoDB: Initialisation du pool de tampons, taille = 1.0G

120529 10:29:33 InnoDB: initialisation terminée du pool de tampons

InnoDB: Erreur: le fichier journal ./ib_logfile0 est de taille différente 0 134217728 octets

InnoDB: que spécifié dans le fichier .cnf 0 268435456 octets!

18
giorgio79

Les deux réponses données par @ RickJames et @ drogart sont essentiellement les remèdes. (+1 pour chacun).

Dès le journal des erreurs que vous présentez, les deux dernières lignes indiquent:

InnoDB: Erreur: le fichier journal ./ib_logfile0 est de taille différente 0 134217728 octets

InnoDB: que spécifié dans le fichier .cnf 0 268435456 octets! "

À ce stade, il était évident que vous définissiez innodb_log_file_size à 256M (268435456) dans my.cnf tandis que les journaux de transactions InnoDB (ib_logfile0, ib_logfile1) étaient respectivement de 128M (134217728) chacun. En regardant le lien vers ma réponse StackOverflow dans votre question, vous avez dû faire ce qui suit:

Étape 01) Ajoutez ceci à my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Étape 02) Exécutez ces commandes dans le système d'exploitation

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Pour avoir confiance dans ce qui se passe, exécutez tail -f par rapport au journal des erreurs. Vous verrez un message vous indiquant quand chaque fichier journal innodb est créé.

19
RolandoMySQLDBA

Sur la base de l'erreur dans le journal, je suppose que vous avez fait cela:

  • fermer mysql
  • modifié my.cnf pour modifier la taille du fichier journal innodb
  • essayé de démarrer mysql (puis il a échoué)

Si vous modifiez la taille du fichier journal, vous devez supprimer les anciens fichiers journaux. Innodb ne démarrera pas correctement si les fichiers existants ne correspondent pas à la taille spécifiée dans le fichier de configuration. Si vous les déplacez ailleurs, innodb créera de nouveaux fichiers journaux de transactions de la bonne taille au démarrage.

Je recommanderais de déplacer les anciens fichiers vers un autre répertoire au lieu de simplement les supprimer, jusqu'à ce que le serveur soit opérationnel avec de nouveaux fichiers journaux et que tout semble OK.

4
drogart

Le buffer_pool doit être défini à environ 70% de disponible RAM si vous exécutez InnoDB uniquement.

La taille du journal n'a pas beaucoup d'importance. L'optimal est de le régler de telle sorte que (Uptime * innodb_log_file_size/Innodb_os_log_written) soit à peu près 3600 (1 heure).

Pour modifier la taille du journal, il faut

  1. fermer proprement mysqld
  2. supprimez la valeur dans my.cnf (my.ini)
  3. supprimer les fichiers journaux
  4. retstart - les nouveaux fichiers journaux seront reconstruits.
3
Rick James

Il peut également y avoir un problème dans la valeur fournie pour la taille du pool de mémoire tampon . comme c'est arrivé dans mon cas ...

En augmentant ou en diminuant innodb_buffer_pool_size, l'opération est effectuée en morceaux. La taille des morceaux est définie par le innodb_buffer_pool_chunk_size option de configuration, qui a une valeur par défaut de 128M. Pour plus d'informations, consultez Configuration de la taille de bloc de pool de mémoire tampon InnoDB .

La taille du pool de mémoire tampon doit toujours être égale ou multiple de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Si vous configurez innodb_buffer_pool_size à une valeur qui n'est pas égale ou multiple de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, la taille du pool de mémoire tampon est automatiquement ajustée à une valeur égale ou multiple de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances qui n'est pas inférieur à la taille de pool de mémoire tampon spécifiée.

Dans l'exemple, innodb_buffer_pool_size est défini sur 8G et innodb_buffer_pool_instances est réglé sur 16. innodb_buffer_pool_chunk_size est 128M, ce qui est la valeur par défaut.

8G est un innodb_buffer_pool_size valeur car 8G est un multiple de innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, qui est 2G.

1
SHIVI