Je suis donc relativement novice dans le réglage d'InnoDB. Je change lentement de table (si nécessaire) de MyIsam à InnoDB. J'ai environ 100 Mo dans innodb, alors j'ai augmenté la innodb_buffer_pool_size
variable à 128 Mo:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Lorsque je suis allé modifier la innodb_log_file_size
valeur (par exemple, mon.cnf dans les commentaires de la page de configuration innodb de mysql pour modifier la taille du fichier journal à 25% de la taille de la mémoire tampon. Alors, mon my.cnf ressemble à ceci:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Lorsque je redémarre le serveur, j'obtiens cette erreur:
110216 9:48:41 InnoDB: initialisation du pool de mémoire tampon, taille = 128,0M
110216 9:48:41 InnoDB: initialisation terminée du pool de mémoire tampon
InnoDB: erreur: le fichier journal ./ib_logfile0 est de taille différente 0 5242880 octets
InnoDB: supérieur à celui spécifié le fichier .cnf 0 33554432 octets!
110216 9:48:41 [ERROR] La fonction init du plugin 'InnoDB' a renvoyé une erreur.
110216 9:48:41 [ERREUR] L'enregistrement du plugin 'InnoDB' en tant que MOTEUR DE STOCKAGE a échoué.
Ma question est donc la suivante: est-il prudent de supprimer les anciens fichiers journaux, ou existe-t-il une autre méthode pour modifier la innodb_log_file_size
variable?
Réponses:
Oui, il est prudent de supprimer le fichier journal une fois que mysqld a été arrêté.
À la lumière de cela, procédez comme suit:
Démarrez mysqld recréera
ib_logfile0
etib_logfile1
Essaie !!!
MISE À JOUR 2011-10-20 16:40 EDT
Avant de refaire les fichiers journaux, vous devez définir cette option environ 1 heure avant la fermeture de la page: toutes les données du pool de mémoire tampon InnoDB doivent être définies proprement.
Par défaut, innodb_max_dirty_pages_pct est égal à 75 (MySQL 5.5+) ou à 90 (antérieur à MySQL 5.5). Si vous définissez cette valeur à zéro, le nombre de pages non conformes est inférieur à 1% du pool de mémoire tampon InnoDB. Effectuer
service mysql stop
cela fait quand même. En outre, un arrêt finira tous les éléments restants dans le journal de rétablissement. Pour conserver cette option, ajoutez-la simplement à /etc/my.cnf:MISE À JOUR 2013-04-19 16:16 EDT
J'ai mis à jour un peu plus ma réponse avec innodb_fast_shutdown car j'avais l'habitude de redémarrer mysql et d'arrêter mysql pour le faire. Désormais, cette étape est essentielle car chaque transaction non validée peut comporter d’autres éléments mobiles à l’intérieur et à l’extérieur des journaux de transactions InnoDB ( voir Infrastructure InnoDB ).
Veuillez noter que définir innodb_fast_shutdown sur 2 effacerait également les journaux, mais qu'il resterait encore des pièces mobiles et qu'il serait sélectionné lors de la récupération après un crash au démarrage de mysqld. La valeur 0 est la meilleure.
la source
SET GLOBAL innodb_fast_shutdown = 0;
. Lorsque MySQL s'arrête, toutes les transactions sont effacées de toutes les pièces mobiles, y compris les journaux de restauration (ib_logfile0 et ib_logfile1). On peut les garder. Je n'ai pas encore rencontré de problèmes avec les journaux complètement vidés.Je recommanderais plutôt la méthode officielle , que je reproduis ici pour plus de commodité:
la source
innodb_buffer_pool_size
- changez simplementmy.cnf
(my.ini
) et redémarrez mysqld.innodb_log_file_size
est moins critique. Ne le changez pas sauf s'il y a une raison. Roland a fourni les étapes , mais un aspect m'inquiète ... Je ne sais pas si les deux premières étapes sont importantes; il semble qu'ils pourraient être:set innodb_fast_shutdown = OFF
Les fichiers journaux gardent une trace des travaux non terminés; "
innodb_fast_shutdown
" dit de traiter avec ce truc après le redémarrage. Donc, supprimer les fichiers peut perdre des informations?Les nouvelles versions ont amélioré les choses: (plus de discussion dans les commentaires)
innodb_log_file_size
> 4 Goinnodb_log_file_size
peut être modifié sans supprimer au préalable iblog *innodb_buffer_pool_size
Devrais-je changer log_file_size?
Utilisez
GLOBAL STATUS
pour calculer le nombre de minutes avant que le journal se cycle.Si la durée est beaucoup inférieure à 60 minutes, il peut être utile d’augmenter log_file_size. Si c'est beaucoup plus, les fichiers journaux gaspillent de l'espace disque. Ce "1 heure" est plutôt arbitraire, donc si vous en êtes proche, ne vous embêtez pas de changer le log_file_size.
Laissez
innodb_log_files_in_group
au défaut 2.la source
--skip-networking
de demander à mes clients d'amener mysql par terre avec précaution pour que les changements de dernière minute soient résolus. Votre première ligne (set innodb_fast_shutdown = OFF) l’élimine. +1 !!!innodb_log_file_size
été amélioré pour permettre de le changer sans supprimer les fichiers iblog.Lorsque vous vous connectez à mysql, tapez ces commandes:
Vous aurez deux chiffres. D'abord, vous en obtenez un, puis attendez une minute. Vous en aurez un autre.
Disons que le premier est 3.456.718.123 et le second est 4.098.873.134
Maintenant (4.098.873.134-3.856.718.123) * 60/1024/1024
Le résultat est = 13.856 MB
Vous avez deux fichiers de log. Divisez-le donc par deux et vous obtiendrez un nombre proche de 7.000 MB. Juste pour être sûr, définissez votre taille de fichier journal de 8 Go
la source
Log File Size
de dba.stackexchange.com/questions/23189/… )chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && service mysql restart || service mysql redémarrer
Essayez-le, garanti pour fonctionner [testé sur Debian 6]
la source