Comment changer en toute sécurité variables MySQL InnoDB « de innodb_log_file_size »?
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
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:
Arrêtez le serveur MySQL et assurez-vous qu'il arrête sans erreur.
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.
Redémarrez le serveur MySQL.
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:
-
set innodb_fast_shutdown = OFF
- mysql restart
- arrêt mysql
- supprimer les fichiers journaux
- 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]