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

18

Je suis cette solution ici /programming/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) dans 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 résoudre ça? 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 structures 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!

giorgio79
la source
Pouvez-vous s'il vous plaît partager les journaux d'erreurs pour cela ...
Abdul Manaf
Merci, j'ai réussi à le trouver. Je pense que ce sera plus facile. J'aurais également dû ajouter initialement que j'ai également augmenté la taille du fichier journal pour correspondre à l'augmentation du pool de tampons (j'ai ajouté ces informations maintenant).
giorgio79
Ok @ giorgio79 ...
Abdul Manaf
Essayez de supprimer le ou les fichiers journaux.
dezso
Avez-vous d'abord supprimé la taille du fichier journal? avez-vous supprimé toutes les bases de données en premier? Veuillez ajouter plus d'informations sur ce que vous avez fait exactement?
ALH

Réponses:

19

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 à 256 Mo (268435456) my.cnfalors que les journaux de transactions InnoDB ( ib_logfile0, ib_logfile1) étaient respectivement de 128 Mo (134217728) chacun. En regardant le lien vers ma réponse StackOverflow dans votre question, vous deviez 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 -fle journal des erreurs. Vous verrez un message vous indiquant quand chaque fichier journal innodb est créé.

RolandoMySQLDBA
la source
Merci, oui je ne les ai pas supprimés en premier. Je voulais juste voir comment se comporte mysql. Après avoir effectué l'étape 3, le redémarrage a fonctionné.
giorgio79
1
Je pense qu'il ne faut pas supprimer les fichiers journaux, mais plutôt les déplacer ailleurs et les supprimer un peu plus tard lorsque vous avez réussi à modifier la taille du fichier journal. Sinon, vous auriez des ennuis si MySQL plantait avant de s'exécuter service mysqld stop.
KajMagnus
4

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

  • fermer mysql
  • a 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.

drogart
la source
3

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

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

Pour modifier la taille du journal, il faut

  1. fermez proprement mysqld
  2. supprimez la valeur dans my.cnf (my.ini)
  3. supprimer les fichiers journaux
  4. retstart - les nouveaux fichiers journaux seront reconstruits.
Rick James
la source
Merci, oui, c'est aussi une bonne réponse. Je ne pouvais cependant en accepter qu'un. + 1d aussi.
giorgio79
1

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 de bloc est définie par l' innodb_buffer_pool_chunk_sizeoption de configuration, qui a une valeur par défaut de 128M. Pour plus d'informations, voir 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_sizesur une valeur qui n'est pas égale à ou un 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 qui est égale ou multiple de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesqui n'est pas inférieure à la taille de pool de mémoire tampon spécifiée.

Dans l'exemple, innodb_buffer_pool_sizeest défini sur 8G et innodb_buffer_pool_instancessur 16. innodb_buffer_pool_chunk_sizeest 128M, qui est la valeur par défaut.

8G est une innodb_buffer_pool_sizevaleur valide car 8G est un multiple de innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, qui est 2G.

SHIVI
la source