\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{sam. mai 8 23:34:00 CEST 2010}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={myisamchk},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Maintenance des tables et leur recouvrement},
CreationDate={D:20100508233400},
ModDate={D:20100508233400},
Keywords={mysql;db;databases}
}}
\begin{document}
 
\begin{center}
{\Huge myisamchk }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Maintenance des tables et leur recouvrement}
 
\vspace{10mm}
 
\hspace{1mm}  Utilitaire pour vérifier et réparer les tables MyISAM (les tables avec les fichiers \textbf{.MYI} et \textbf{MYD}). Les même concepts s'appliquent à \textbf{isamchk} pour vérifier et réparer les tables ISAM (les tables avec les fichier \textbf{.ISM} et \textbf{.ISD}. \textbf{myisamchk} permet d'obtenir des informations sur les tables de la base de donnée, pour analyser, réparer ou optimiser ces tables. Bien penser à sauvegarder la base avant réparation d'une table. Les opérations qui affectent des index peuvent causer une recompilation des index FULLTEXT avec des paramètres qui ne sont pas les paramètres courants du serveur. Utiliser \textbf{mysqlcheck} pour les commandes, puisque le serveur se charge de tout alors qu'avec \textbf{myisamchk}, vous devez vous assurer que le serveur ne va pas utiliser les tables en même temps que vous.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge syntaxe }
 
\
 
\hspace{1mm} \textbf{shell> myisamchk [options] tbl\_name} \\
\hspace{1mm} On peut spécifier plusieurs noms de table. On peut aussi spécifier un nom sous la forme d'un fichier d'index (avec l'option .MIY), qui permettra de spécifier toutes les tables dans un dossier en utilisant le schéma *.MIY. Par exemple \\
\hspace{1mm} \textbf{shell> myisamchk /path/to/database/*.MYI} \\
\hspace{1mm} Pour vérifier rapidement toutes les tables \\
\hspace{1mm} \textbf{myisamchk --silent --fast /path/to/datadir/*/*.MIY} \\
\hspace{1mm} \textbf{isamchk --silent /path/to/datadir/*/*.ISM} \\
\hspace{1mm} Pour vérifier toutes les tables et réparer celles qui sont corrompue \\
\hspace{1mm} \textbf{myisamchk --silent --force --fast --update-state -O key\_buffer=64M -O sort\_buffer=64M -O read\_buffer=1M -O write\_buffer=1M /path/to/datadir/*/*.MYI} \\
\hspace{1mm} \textbf{isamchk --silent --force -O key\_buffer=64M -O sort\_buffer=64M -O read\_buffer=1M -O write\_buffer=1M /path/to/datadir/*/*.ISM} \\
 
\hspace{1mm}  L'erreur suivante: \textbf{myisamchk: warning: 1 clients is using or hasn't closed the table properly}
\vspace{5mm} \\
\hspace{1mm}  Signifie que vous essayez de vérifier une table qui a été modifiée par un autre programme (comme le serveur mysqld) qui n'a pas encore refermé le fichier de table, ou que le fichier n'a pas été correctement refermé. Si mysqld fonctionne, vous devez forcer la fermeture correcte des fichiers de tables avec la commande \textbf{FLUSH TABLES}, et vous assurer que personne n'utilise les tables durant vos opérations avec myisamchk.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Options générales de myisamchk }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} --debug=debug\_options, -\# debug\_options]{Affiche le log de débogage. La chaîne debug\_options vaut souvent : \textbf{'d:t:o,filename'}.}
\item[\hspace{1mm} --silent, -s]{Mode silencieux. Affiche uniquement les erreurs. Vous pouvez utiliser deux fois -s (-ss) pour que myisamchk soit très silencieux.}
\item[\hspace{1mm} --verbose, -v]{Mode détaillé. Affiche plus d'informations. Vous pouvez combiner ce mode avec les options \textbf{-d} et \textbf{-e}. Utilisez -v plusieurs fois, (-vv, -vvv) pour plus de détails encore.}
\item[\hspace{1mm} --version, -V]{Affiche la version et quitte.}
\item[\hspace{1mm} --wait, -w]{Au lieu de s'arrêter avec une erreur si la table est verrouillé, le programme attend que la table soit libérée avant de continuer. Notez que si vous utilisez mysqld avec l'option \textbf{--skip-external-locking}, la table peut ne peut être verrouillée que par une autre commande myisamchk.}
\end{description}
 
\vspace{1cm}{\huge Options de vérifications pour myisamchk }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -c, --check]{Vérifie les erreurs d'une table. Ceci est l'opération par défaut de myisamchk si vous ne lui donnez aucune autre option.}
\item[\hspace{1mm} -e, --extend-check]{Vérifie la table minutieusement (ce qui est un peu lent si vous avez des index). Cette option ne doit être utilisée que pour les cas extrêmes. Normalement, \textbf{myisamchk} ou \textbf{myisamchk --medium-check} devrait, dans la plupart des cas, être capable de trouver s'il y a des erreurs dans la table. Si vous utilisez \textbf{--extended-check} et que vous avez beaucoup de mémoire, vous devez augmenter de beaucoup la valeur de \textbf{key\_buffer\_size}}
\item[\hspace{1mm} -F, --fast]{Ne vérifie que les tables qui n'ont pas été fermées proprement.}
\item[\hspace{1mm} -C, --check-only-changed]{Ne vérifie que les tables qui ont changé depuis la dernière vérification.}
\item[\hspace{1mm} -f, --force]{Redémarrez myisamchk avec -r (répare) sur la table, si myisamchk trouve une erreur dans la table.}
\item[\hspace{1mm} -i, --information]{Affiche des statistiques à propos de la table vérifiée.}
\item[\hspace{1mm} -m, --medium-check]{Plus rapide que \textbf{--extended-check}, mais ne trouve que 99.99\% des erreurs. Devrait, cependant, être bon pour la plupart des cas.}
\item[\hspace{1mm} -U, --update-state]{Enregistre le fichier \textbf{.MYI} lorsque la table à été vérifiée ou a été corrompue. Cela devrait être utilisé pour tirer tous les avantages de l'option \textbf{--check-only-changed}, mais vous ne devez pas utiliser cette option si le serveur mysqld utilise cette table et que vous utilisez mysqld avec \textbf{--skip-external-locking}.}
\item[\hspace{1mm} -T, --read-only]{Ne marque pas la table comme vérifiée. C'est pratique si vous utilisez myisamchk pour vérifier une table issue d'une autre application qui n'utilise pas les verrous. (comme \textbf{mysqld --skip-external-locking}).}
\end{description}
 
\vspace{1cm}{\huge Options de réparation de myisamchk }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} --backup, -B]{Fait une sauvegarde du fichier .MYD, sous le nom \textbf{filename-time.BAK}}
\item[\hspace{1mm} --character-sets-dir=path]{Dossier qui contient les jeux de caractères.}
\item[\hspace{1mm} --correct-checksum]{Somme de contrôle correcte pour la table.}
\item[\hspace{1mm} --data-file-length=\#, -D \#]{Taille maximale du fichier de données (lors de la re-création du fichier de données, et qu'il est complet).}
\item[\hspace{1mm} --extend-check, -e]{Essaie de retrouver toutes les lignes possibles du fichier de données. Normalement, cette option va aussi découvrir beaucoup de lignes erronées. N'utilisez pas cette option si vous n'êtes pas totalement désespérés.}
\item[\hspace{1mm} --force, -f]{Écrase les anciens fichiers temporaires (table\_name.TMD) au lieu d'annuler.}
\item[\hspace{1mm} --keys-used=\#, -k \#]{Si vous utilisez les tables ISAM, indique au gestionnaire de table ISAM qu'il doit uniquement modifier les \# premiers index. Si vous utilisez le gestionnaire de table MyISAM, cette option indique quelles clés utiliser, et chaque bit binaire représente une clé (la première clé est le bit 0). Cela permet de réaliser des insertions plus rapides. Les index désactivés pourront être réactivés avec l'option \textbf{myisamchk -r}.}
\item[\hspace{1mm} --no-symlinks, -l]{Ne pas suivre les lignes symboliques. Normalement, myisamchk répare les tables qu'un lien symbolique représente.}
\item[\hspace{1mm} --parallel-recover, -p]{Utilise la même technique que \textbf{-r} et \textbf{-n}, mais crée les clés avec des threads différents, en parallèle.}
\item[\hspace{1mm} --quick, -q]{Réparation rapide, sans modifier le fichier de données. Il est possible d'ajouter l'option -q pour forcer myisamchk à modifier le fichier original en cas de clés doublons.}
\item[\hspace{1mm} --recover, -r]{Peut réparer presque tout, sauf les clés uniques qui ne le sont plus (ce qui est extrêmement rare avec les tables ISAM/MyISAM). Si vous voulez restaurer un table, c'est l'option à utiliser en premier. Si myisamchk indique que la table ne peut pas être corrigée avec l'option -r, vous pouvez alors passer à l'option -o. Notez que dans le cas rarissime où -r, le fichier de données est toujours intact. Si vous avez beaucoup de mémoire, vous pouvez augmenter la taille du \textbf{buffer sort\_buffer\_size}}
\item[\hspace{1mm} --safe-recover, -o]{Utilise une ancienne méthode de restauration (lit toutes les lignes dans l'ordre, et modifie l'arbre d'index conformément pour les lignes trouvées). C'est une méthode qui est beaucoup plus lente que l'option -r, mais elle est capable de traiter certaines situations exceptionnelles que -r ne pourrait pas traiter. Cette méthode utilise aussi moins d'espace disque que -r. Normalement, vous devriez commencer à réparer avec l'option -r, et uniquement sur l'échec de cette option, passer à -o. Si vous avez beaucoup de mémoire, vous devriez augmenter la taille du buffer de clé \textbf{key\_buffer\_size}}
\item[\hspace{1mm} --set-character-set=name]{Change le jeu de caractères utilisé par l'index.}
\item[\hspace{1mm} --sort-recover, -n]{Force myisamchk à utiliser le tri pour résoudre les clés, même si le fichier temporaire doit être énorme.}
\item[\hspace{1mm} --tmpdir=path, -t path]{Chemin pour stocker les fichiers temporaires. Si cette option n'est pas fournie, myisamchk va utiliser la variable d'environnement \textbf{TMPDIR} pour cela.}
\item[\hspace{1mm} --unpack, -u]{Décompresse des données compressées avec myisampack.}
\end{description}
 
\vspace{1cm}{\huge Autres options de myisamchk }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -a, --analyze]{Analyse la distribution des clés. Cela améliore les performances des jointures en permettant à l'optimiseur de jointure de mieux choisir l'ordre d'utilisation des clés. \textbf{myisamchk --describe --verbose table\_name'} ou \textbf{SHOW KEYS} dans MySQL.}
\item[\hspace{1mm} -d, --description]{Affiche des informations sur la table.}
\item[\hspace{1mm} -A, --set-auto-increment\texttt{[}=value\texttt{]}]{Force \textbf{AUTO\_INCREMENT} à commencer avec une valeur supérieure. Si aucune valeur n'est fournie, la prochaine valeur de la colonne \textbf{AUTO\_INCREMENT} sera la plus grande valeur de la colonne +1.}
\item[\hspace{1mm} -S, --sort-index]{Trie les blocs de l'arbre d'index dans l'ordre haut/bas. Cela va optimiser les recherches, et les scans de tables par clés.}
\item[\hspace{1mm} -R, --sort-records=\#]{Trie les lignes en fonction de l'index. Cela rassemble vos données, et peut accélérer les lectures de lignes par intervalle avec \textbf{SELECT} et \textbf{ORDER BY} sur cet index (ce tri peut être très lent la première fois). Pour connaître les numéros d'index de tables, utilisez la commande \textbf{SHOW INDEX}, qui affiche les index dans le même ordre que myisamchk ne les voit. Les index sont numérotés à partir de 1.}
\end{description}
 
\hspace{1mm} L'espace mémoire est très important quand on utilise myisamchk \\
\hspace{1mm} \textbf{myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M ...} \\
\hspace{1mm} myisamchk utilise des fichiers temporaires dans le dossier TEMPDIR. Lors de la réparation, il va aussi avoir besoin d'espace disque. \\
 
\vspace{1cm}{\huge Utiliser myisamchk pour restaurer une table }
 
\
 
\hspace{1mm}  si mysqld a l'option \textbf{--skip-external-locking}, on ne peut pas utiliser myisamchk pour vérifier une table. Si vous utilisez myisamchk pour réparer ou optimiser les tables, vous devez toujours vous assurer que mysqld n'utilise pas cette table
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Vérifier la cohérence d'une table }
 
\
 
\hspace{1mm} cette commande trouvera 99,9\% des erreurs \\
\hspace{1mm} \textbf{myisamchk nom\_de\_table} \\
\hspace{1mm} cette commande trouvera 99,999\% des erreurs \\
\hspace{1mm} \textbf{myisamchk -m nom\_de\_table} \\
\hspace{1mm} cette commande fait une vérification complète et exhaustive de toutes les données \\
\hspace{1mm} \textbf{myisamchk -e nom\_de\_table} \\
\hspace{1mm} idem mais affiche des informations statistiques \\
\hspace{1mm} \textbf{myisamchk -e -i nom\_de\_table} \\
 
\vspace{1cm}{\huge Réparer les tables }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} ]{On peut réparer les tables MyISAM avec \textbf{REPAIR TABLE}. Les symptômes de corruption de tables sont des requêtes qui s'interrompent inopinément}
\item[\hspace{1mm} tbl\_name.frm locked against change: tbl\_name.frm est verrouillée en écriture]{}
\item[\hspace{1mm} Can't find file tbl\_name.MYI (Errcode : \#\#\#): Impossible de trouver le fichier tbl\_name.MYI (Errcode: \#\#\#)]{}
\item[\hspace{1mm} Unexpected end of file: Fin de fichier inattendue]{}
\item[\hspace{1mm} Record file is crashed: Fichier de données crashé]{}
\item[\hspace{1mm} Got error \#\#\# from table handler: Reception de l'erreur \#\#\# de la part du gestionnaire de table]{}
\item[\hspace{1mm} ]{Pour obtenir plus d'informations sur l'erreur, vous pouvez exécuter la commande perror}
\end{description}
 
\vspace{1cm}{\huge Optimisation de table }
 
\
 
\hspace{1mm} Pour réorganiser les lignes fragmentées et éliminer l'espace perdu par les effacements et les modifications \\
\hspace{1mm} \textbf{shell> myisamchk -r table\_name} \\
\hspace{1mm} de la même manière OPTIMIZE TABLE effectue une réparation de la table, et une analyse des index, puis trie l'arbre d'index pour accélérer les recherches de clé. \\
\hspace{1mm} myisamchk dispose aussi d'un grand nombre d'options à utiliser pour améliorer les performances de la table \\
\hspace{1mm} \textbf{-S, --sort-index} \\
\hspace{1mm} \textbf{-R index\_num, --sort-records=index\_num} \\
\hspace{1mm} \textbf{-a, --analyse} \\
\hspace{1mm} Mettre en place un régime d'entretient de MySQL. Vérifier par un cron une fois par semaine \\
\hspace{1mm} \textbf{35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI} \\
\hspace{1mm} Défragmentation du fichier, mysqld éteint \\
\hspace{1mm} \textbf{shell> myisamchk -r -s --sort-index -O sort\_buffer\_size=16M */*.MYI} \\
\hspace{1mm} Pour les tables ISAM, la commande est similaire à \\
\hspace{1mm} \textbf{shell> isamchk -r -s --sort-index -O sort\_buffer\_size=16M */*.MYI} \\
 
\vspace{1cm}{\huge Obtenir des informations sur une table }
 
\
 
\hspace{1mm} Exécute myisamchk en "mode description" pour produire une description de votre table \\
\hspace{1mm} \textbf{myisamchk -d nom\_de\_table} \\
\hspace{1mm} Pour produire plus d'informations durant l'exécution de myisamchk \\
\hspace{1mm} \textbf{myisamchk -d -v nom\_de\_table} \\
\hspace{1mm} Affiche les informations les plus importantes pour une table \\
\hspace{1mm} \textbf{myisamchk -eis nom\_de\_table} \\
\hspace{1mm} C'est l'équivalent de -eis, mais qui vous indique ce qui se passe \\
\hspace{1mm} \textbf{myisamchk -eiv nom\_de\_table} \\
\end{flushleft}
\end{document}
