Comment changer en toute sécurité variables MySQL InnoDB « de innodb_log_file_size »?

dba.stackexchange https://dba.stackexchange.com/questions/1261

  •  16-10-2019
  •  | 
  •  

Question

Je suis assez nouveau pour accorder InnoDB. Je change lentement des tables (si nécessaire) de MyISAM à InnoDB. J'ai environ 100 Mo dans InnoDB, donc j'augmenté la variable innodb_buffer_pool_size à 128Mo:

mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)

Quand je suis allé changer la valeur innodb_log_file_size (exemple my.cnf sur mysql configuration InnoDB commentaires pour modifier la taille du fichier journal à 25% de la taille du tampon Alors maintenant mes my.cnf ressemble à ceci:.

# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M

Lorsque je redémarre le serveur, je reçois cette erreur:

  

110216 09:48:41 InnoDB: Initialiser pool de mémoire tampon, size = 128.0M
  110216 09:48:41 InnoDB: initialisation du pool de mémoire tampon terminée
  InnoDB: Erreur: fichier journal ./ib_logfile0 est de taille différente 0 5242880 octets
  InnoDB: que spécifié dans le fichier .cnf 0 33554432 octets
  110216 09:48:41 [ERREUR] Plugin 'InnoDB' fonction init erreur renvoyée.
  110216 09:48:41 [ERREUR] Plugin 'InnoDB' enregistrement en tant que moteur de stockage a échoué.

Ma question: Est-il sûr de supprimer les anciens LOG_FILES, ou est-il une autre méthode pour modifier la variable innodb_log_file_size

?
Était-ce utile?

La solution

Oui il est sûr de supprimer le fichier journal une fois mysqld a été arrêté

À la lumière de cela, il suffit procédez comme suit:

mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
service mysql stop
mv /var/lib/mysql/ib_logfile[01] /tmp
service mysql start

Démarrage mysqld va recréer ib_logfile0 et ib_logfile1

Lui donner un essai !!!

Mise à jour 2011-10-20 16:40 EDT

Page proprement toutes les données dans la mémoire tampon InnoDB piscine avant de refaire les fichiers journaux, vous devez définir cette option environ 1 heure avant l'arrêt:

SET GLOBAL innodb_max_dirty_pages_pct = 0;

Par défaut, innodb_max_dirty_pages_pct est 75 (MySQL 5.5+) ou 90 (avant MySQL 5.5). Un réglage à zéro maintient le nombre de pages sales de moins de 1% du tampon InnoDB Pool. Exécution service mysql stop le fait de toute façon. En outre, un arrêt se terminer tous les éléments restants dans le journal redo. Pour conserver cette option il suffit d'ajouter à /etc/my.cnf:

[mysqld]
innodb_max_dirty_pages_pct = 0

Mise à jour 19/04/2013 16h16 EDT

Je mis à jour ma réponse un peu plus avec innodb_fast_shutdown parce que je l'habitude de redémarrer MySQL et MySQL arrêt pour le faire. Maintenant, celui-étape est essentielle parce que chaque transaction non validée peut avoir d'autres pièces mobiles à l'intérieur et à l'extérieur de la InnoDB journaux de transactions ( Voir InnoDB Infrastructure ).

S'il vous plaît noter que la mise en innodb_fast_shutdown à 2 nettoierait les journaux comme bien mais plus existent encore des pièces mobiles et est ramassé sur crash Recovery pendant le démarrage de mysqld. Réglage de 0 est le meilleur.

Autres conseils

Je recommande plutôt la méthode officielle du , qui Je reproduis ici pour des raisons pratiques:

  

Pour modifier le nombre ou la taille des fichiers journaux InnoDB MySQL 5.6.7 ou   plus tôt , suivez les instructions ci-dessous. La procédure à utiliser dépend   sur la valeur de innodb_fast_shutdown, qui détermine si oui ou non   pour amener le système tablespace entièrement mis à jour avant un arrêt   fonctionnement:

     
      
  • Si innodb_fast_shutdown n'est pas réglé sur 2: Arrêtez le serveur MySQL et   assurez-vous qu'il arrête sans erreur, pour assurer qu'il y ait   aucune information pour les opérations en cours dans le journal redo. Copiez le   anciens fichiers journaux redo à un endroit sûr, au cas où quelque chose a mal tourné   lors de l'arrêt et vous avez besoin de récupérer l'espace de table.   Supprimer les anciens fichiers journaux à partir du répertoire du fichier journal, modifier my.cnf   modifier la configuration du fichier journal et redémarrez le serveur MySQL.   mysqld voit qu'aucun fichier journal InnoDB existent au démarrage et crée de nouvelles   les.

  •   
  • Si innodb_fast_shutdown est réglé sur 2: Set innodb_fast_shutdown à 1:

  •   
     

mysql> SET GLOBAL innodb_fast_shutdown = 1;

     

Suivez ensuite les instructions de l'élément précédent.

     

MySQL 5.6.8 , le réglage innodb_fast_shutdown n'est plus   pertinentes lors de la modification du nombre ou de la taille des fichiers journaux InnoDB.   De plus, vous n'êtes plus obligé remove anciens fichiers journaux,   bien que vous pouvez toujours copier les anciens fichiers journaux à un endroit sûr,   comme une sauvegarde. Pour modifier le nombre ou la taille des fichiers journaux InnoDB, effectuez   les étapes suivantes:

     
      
  1. Arrêtez le serveur MySQL et assurez-vous qu'il arrête sans erreur.

  2.   
  3. Modifier my.cnf pour modifier la configuration du fichier journal. Pour changer le journal   la taille du fichier, configurer innodb_log_file_size. Pour augmenter le nombre de   les fichiers journaux, innodb_log_files_in_group configure.

  4.   
  5. Redémarrez le serveur MySQL.

  6.   
     

Si InnoDB détecte que le diffère innodb_log_file_size de la redo   Taille du fichier journal, il rédigera un poste de contrôle de journal, fermer et supprimer le   anciens fichiers journaux, créer de nouveaux fichiers journaux à la taille requise, et ouvert   les nouveaux fichiers journaux.

innodb_buffer_pool_size -. Simplement changer my.cnf (de my.ini) et redémarrez mysqld

innodb_log_file_size est moins critique. Ne changez pas moins qu'il y ait une raison. Roland prévu les étapes consistant à , mais un aspect me préoccupe ... Je ne sais pas si les deux premières étapes sont importantes; il semble qu'ils pourraient être:

  1. set innodb_fast_shutdown = OFF
  2. mysql restart
  3. arrêt mysql
  4. supprimer les fichiers journaux
  5. start mysql

Les fichiers journaux garder une trace d'inachevé; " innodb_fast_shutdown " dit beaucoup avec ce genre de choses après redémarrer. Donc, la suppression des fichiers peut perdre informations?

Les nouvelles versions ont amélioré les choses: (discussion plus Commentaires)

  • 5.6 Permet innodb_log_file_size> 4 Go
  • 5.6 innodb_log_file_size peut être modifié sans supprimer iBlog *
  • 5.7 permet de redimensionner dynamiquement innodb_buffer_pool_size

Dois-je changer log_file_size?

Utilisez GLOBAL STATUS pour calculer le nombre de minutes avant que les cycles log.

Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`

S'il est beaucoup moins de 60 (minutes), il pourrait aider à augmenter log_file_size. S'il est beaucoup plus, les fichiers journaux gaspillent l'espace disque. Cette « 1 heure » est plutôt arbitraire, donc si vous êtes près de lui, ne prenez pas la peine de changer le log_file_size.

Congé innodb_log_files_in_group la valeur par défaut de 2.

Lorsque vous vous connectez à mysql taper ces commandes:

pager grep seq;
show engine innodb status \G select sleep(60); show engine innodb status \G

Vous obtiendrez deux chiffres. D'abord, vous obtenez un, puis attendez une minute. Vous obtiendrez une autre.

Dis le premier est 3.456.718.123 et le second est 4.098.873.134

(4.098.873.134-3.856.718.123) * 60/1024/1024

Le résultat est = 13,856 Mo

Vous avez deux fichiers journaux. Alors divive par deux et vous obtiendrez un numéro près de 7,000 MB. Juste pour être sûr, définissez la taille de votre fichier journal de 8 Go

chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && service MySQL restart || service MySQL restart

Essayez, GARANTI à travailler [testé sur Debian 6]

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top