| 8 MySQL Scripts clients et utilitaires
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Présentation des scripts serveurs et utilitaires
 ->myisampack , le générateur de tables MySQL compressées en lecture seule
 . mysql , l'outil en ligne de commande
 . mysqladmin , administration d'un serveur MySQL
 . mysqlbinlog , Exécuter des requêtes dans le log binaire
 . mysqlcc , MySQL Control Center
 . Utiliser mysqlcheck pour l'entretien et la réparation
 . mysqldump , sauvegarde des structures de tables et les données
 . mysqlhotcopy , copier les bases et tables MySQL
 . mysqlimport , importer des données depuis des fichiers texte
 . Afficher les bases, tables et colonnes
 . perror , expliquer les codes d'erreurs
 . L'utilitaire de remplacement de chaînes replace
 
 
 | 
  8.2 myisampack , le générateur de tables MySQL compressées en lecture seule 
     myisampack
  sert à compresser des tables MyISAM et  
pack_isam
 
sert à compresser les tables ISAM. Comme les tables ISAM sont obsolètes,
nous ne traiterons que de  
myisampack
 , mais tout ce qui est dit au sujet
de  
myisampack
  est aussi vrai pour  
pack_isam
 . 
myisampack
  fonctionne en compressant séparément chaque colonne de la table.
Les informations nécessaires à la décompression sont lues en mémoire lorsque la
table est ouverte. Cela donne de bien meilleures performances lors de
l'accès à des lignes individuelles, car nous n'avez qu'à décompresser
exactement une des lignes, et non pas un bloc de disque entier. Généralement,
 
myisampack
  compresse le fichier avec un gain de 40 à 70 %.
MySQL utilise la carte mémoire ( 
mmap()
 ) sur les tables compressées et
utilise les outils classiques de lecture et écriture si  
mmap()
  ne
fonctionne pas.Notez bien ceci : 
Si  
mysqld
  a été appelé avec l'option  
--skip-external-locking
 , 
ce n'est pas une bonne idée que d'appeler  
myisampack
  si la table risque
d'être mise à jour par le processus principal.
Après avoir compressé la table, celle-ci n'est plus accessible qu'en lecture.
C'est souvent un état voulu (par exemple, pour être gravée sur un CD). 
De plus, autoriser les écritures dans une table compressée fait partie
de notre liste de tâche, mais avec une très faible priorité.
myisampack
  peut aussi compresser des colonnes  
BLOB
  ou  
TEXT
 .
L'ancien  
pack_isam
  (pour les tables  
ISAM
 ) ne peut le faire. 
myisampack
  est invoqué comme ceci : 
 Chaque nom de fichier doit être le nom d'un fichier d'index ( 
.MYI
 ). 
Si vous n'êtes pas dans le dossier de données, vous devez spécifier le chemin
complet jusqu'au fichier. Il est toléré que vous omettiez l'extension du fichier
 
.MYI
 .| 
shell> myisampack [options] filename ...
 | 
 
myisampack
  supporte les options suivantes :
 
La séquence de commande illustre la session de compression :
--help
, 
-?
      Affiche le message d'aide et quitte.
      
--backup
, 
-b
      Fait une sauvegarde de la table sous le nom de  
tbl_name.OLD
 .
      
--debug[=debug_options]
, 
-# [debug_options]
      Affiche le log de débogage. La chaîne  
debug_options
  vaut souvent 
 
'd:t:o,filename'
 .
      
--force
, 
-f
      Force la compression de la table, même si elle grossit ou si le fichier temporaire
existe déjà.  
myisampack
  crée un fichier temporaire appelé  
tbl_name.TMD
 
lors de la compression. Si vous tuez  
myisampack
 , le fichier  
.TMD
 
peut ne pas être effacé. Normalement,  
myisampack
  se termine avec une erreur
s'il découvre que le fichier  
tbl_name.TMD
  existe. Avec  
--force
 ,
 
myisampack
  reprendra le travail.
      
--join=big_tbl_name
, 
-j big_tbl_name
      Rassemble toutes les tables indiquées dans la ligne de commande dans une
seule table appelée  
big_tbl_name
 . Toutes les tables qui seront
combinées  
doivent
  être identiques (mêmes noms de colonnes, 
mêmes types, mêmes index, etc.)
      
--packlength=#
, 
-p #
      Spécifie la taille de stockage de la longueur de ligne, en octets. Cette valeur
doit être 1, 2, ou 3.  ( 
myisampack
  stocke toutes les lignes avec des pointeurs
de lignes de 1, 2 ou 3 octets. Dans les cas normaux,  
myisampack
  peut déterminer
la taille correcte avant de compresser le fichier, mais il peut aussi se rendre compte
durant le processus qu'une autre taille aurait été plus appropriée, ou plus courte.
Dans ce cas,  
myisampack
  va imprimer une note pour que vous le sachiez lors de la
prochaine compression du même fichier.
      
--silent
, 
-s
      Mode silencieux. Seules les erreurs seront affichées.
      
--test
, 
-t
      Ne compresse pas la table, mais teste juste la compression.
      
--tmp_dir=path
, 
-T path
      Utilise le dossier indiqué comme dossier pour les fichiers temporaires.
      
--verbose
, 
-v
      Mode détaillé. Toutes les informations sur la progression de la compression
seront affichées.
      
--version
, 
-V
      Affiche la version et quitte.
      
--wait
, 
-w
      Attend et reessaie, si la table était déjà en cours d'utilisation. Si le serveur
 
mysqld
  a été démarré avec l'option  
--skip-external-locking
 , ce n'est pas
une bonne idée d'appeler  
myisampack
 , car la table risque d'être modifiée durant
la compression.
      Les informations affichées par  
myisampack
  sont décrites ici :| 
shell> ls -l station.*-rw-rw-r--   1 monty    my         994128 Apr 17 19:00 station.MYD
 -rw-rw-r--   1 monty    my          53248 Apr 17 19:00 station.MYI
 -rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm
 
 shell> myisamchk -dvv station
 
 MyISAM file:     station
 Isam-version:  2
 Creation time: 1996-03-13 10:08:58
 Recover time:  1997-02-02  3:06:43
 Data records:              1192  Deleted blocks:              0
 Datafile: Parts:           1192  Deleted data:                0
 Datafile pointer (bytes):     2  Keyfile pointer (bytes):     2
 Max datafile length:   54657023  Max keyfile length:   33554431
 Recordlength:               834
 Record format: Fixed length
 
 table description:
 Key Start Len Index   Type                       Root  Blocksize    Rec/key
 1   2     4   unique  unsigned long              1024       1024          1
 2   32    30  multip. text                      10240       1024          1
 
 Field Start Length Type
 1     1     1
 2     2     4
 3     6     4
 4     10    1
 5     11    20
 6     31    1
 7     32    30
 8     62    35
 9     97    35
 10    132   35
 11    167   4
 12    171   16
 13    187   35
 14    222   4
 15    226   16
 16    242   20
 17    262   20
 18    282   20
 19    302   30
 20    332   4
 21    336   4
 22    340   1
 23    341   8
 24    349   8
 25    357   8
 26    365   2
 27    367   2
 28    369   4
 29    373   4
 30    377   1
 31    378   2
 32    380   8
 33    388   4
 34    392   4
 35    396   4
 36    400   4
 37    404   1
 38    405   4
 39    409   4
 40    413   4
 41    417   4
 42    421   4
 43    425   4
 44    429   20
 45    449   30
 46    479   1
 47    480   1
 48    481   79
 49    560   79
 50    639   79
 51    718   79
 52    797   8
 53    805   1
 54    806   1
 55    807   20
 56    827   4
 57    831   4
 
 shell> myisampack station.MYI
 Compressing station.MYI: (1192 records)
 - Calculating statistics
 
 normal:     20  empty-space:      16  empty-zero:        12  empty-fill:  11
 pre-space:   0  end-space:        12  table-lookups:      5  zero:         7
 Original trees:  57  After join: 17
 - Compressing file
 87.14%
 
 shell> ls -l station.*
 -rw-rw-r--   1 monty    my         127874 Apr 17 19:00 station.MYD
 -rw-rw-r--   1 monty    my          55296 Apr 17 19:04 station.MYI
 -rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm
 
 shell> myisamchk -dvv station
 
 MyISAM file:     station
 Isam-version:  2
 Creation time: 1996-03-13 10:08:58
 Recover time:  1997-04-17 19:04:26
 Data records:              1192  Deleted blocks:              0
 Datafile: Parts:           1192  Deleted data:                0
 Datafilepointer (bytes):      3  Keyfile pointer (bytes):     1
 Max datafile length:   16777215  Max keyfile length:     131071
 Recordlength:               834
 Record format: Compressed
 
 table description:
 Key Start Len Index   Type                       Root  Blocksize    Rec/key
 1   2     4   unique  unsigned long             10240       1024          1
 2   32    30  multip. text                      54272       1024          1
 
 Field Start Length Type                         Huff tree  Bits
 1     1     1      constant                             1     0
 2     2     4      zerofill(1)                          2     9
 3     6     4      no zeros, zerofill(1)                2     9
 4     10    1                                           3     9
 5     11    20     table-lookup                         4     0
 6     31    1                                           3     9
 7     32    30     no endspace, not_always              5     9
 8     62    35     no endspace, not_always, no empty    6     9
 9     97    35     no empty                             7     9
 10    132   35     no endspace, not_always, no empty    6     9
 11    167   4      zerofill(1)                          2     9
 12    171   16     no endspace, not_always, no empty    5     9
 13    187   35     no endspace, not_always, no empty    6     9
 14    222   4      zerofill(1)                          2     9
 15    226   16     no endspace, not_always, no empty    5     9
 16    242   20     no endspace, not_always              8     9
 17    262   20     no endspace, no empty                8     9
 18    282   20     no endspace, no empty                5     9
 19    302   30     no endspace, no empty                6     9
 20    332   4      always zero                          2     9
 21    336   4      always zero                          2     9
 22    340   1                                           3     9
 23    341   8      table-lookup                         9     0
 24    349   8      table-lookup                        10     0
 25    357   8      always zero                          2     9
 26    365   2                                           2     9
 27    367   2      no zeros, zerofill(1)                2     9
 28    369   4      no zeros, zerofill(1)                2     9
 29    373   4      table-lookup                        11     0
 30    377   1                                           3     9
 31    378   2      no zeros, zerofill(1)                2     9
 32    380   8      no zeros                             2     9
 33    388   4      always zero                          2     9
 34    392   4      table-lookup                        12     0
 35    396   4      no zeros, zerofill(1)               13     9
 36    400   4      no zeros, zerofill(1)                2     9
 37    404   1                                           2     9
 38    405   4      no zeros                             2     9
 39    409   4      always zero                          2     9
 40    413   4      no zeros                             2     9
 41    417   4      always zero                          2     9
 42    421   4      no zeros                             2     9
 43    425   4      always zero                          2     9
 44    429   20     no empty                             3     9
 45    449   30     no empty                             3     9
 46    479   1                                          14     4
 47    480   1                                          14     4
 48    481   79     no endspace, no empty               15     9
 49    560   79     no empty                             2     9
 50    639   79     no empty                             2     9
 51    718   79     no endspace                         16     9
 52    797   8      no empty                             2     9
 53    805   1                                          17     1
 54    806   1                                           3     9
 55    807   20     no empty                             3     9
 56    827   4      no zeros, zerofill(2)                2     9
 57    831   4      no zeros, zerofill(1)                2     9
 | 
 
Après la compression d'une table,  
myisamchk -dvv
  affiche des informations
supplémentaires pour chaque champ :
normal
      Le nombre de colonnes pour lesquelles aucune compression n'est utilisée.
      
empty-space
      Le nombre de colonnes dont les valeurs ne contiennent que des octets :
elles n'occuperont plus qu'un octet.
      
empty-zero
      Le nombre de colonnes dont les valeurs ne contiennent que des zéros :
elles n'occuperont plus qu'un octet.
      
empty-fill
      Le nombre de colonnes de type entier qui n'occupent pas la totalité de
l'espace de leur type. Elles seront réduites en taille (par exemple, une colonne
de type  
INTEGER
  sera transformée en  
MEDIUMINT
 ).
      
pre-space
      Le nombre de colonnes de nombres à virgule flottante qui ont des valeurs
stockées avec des espaces initiaux. Dans ce cas, chaque valeur va contenir
le nombre d'espace initiaux.
      
end-space
      Le nombre de colonnes qui ont de nombreux espaces terminaux. Dans ce cas,
chaque valeur va contenir un compte du nombre d'espaces terminaux.
      
table-lookup
      La colonne n'a que quelques valeurs différentes, qui seront converties
en une colonne de type  
ENUM
  avant une compression de type Huffman.
      
zero
      Le nombre de colonnes pour lesquelles toutes les valeurs sont zéro.
      
Original trees
      Le nombre initial d'arbres Huffman.
      
After join
      Le nombre d'arbres Huffman distincts obtenus après avoir joint les
arbres pour économiser de l'espace d'entête.      
Après la compression de  
pack_isam
 / 
myisampack
  vous devez exécuter
la commande  
isamchk
 / 
myisamchk
  pour recréer l'index. A ce moment,
vous pouvez aussi trier les blocs d'index et créer des statistiques nécessaires
pour l'optimiseur MySQL :
Type
      Le type de fichier peut contenir les informations suivantes :  
constant
      Toutes les lignes ont la même valeur.
      
no endspace
      Ne stocke pas les espaces finaux.
      
no endspace
, 
not_always
      Ne stocke pas les espaces finaux et ne compresse pas les espaces finaux
pour toutes les valeurs.
      
no endspace
, 
no empty
      Ne stocke pas les espaces finaux. Ne stocke pas les valeurs vides.
      
table-lookup
      La colonne a été convertie en  
ENUM
 .
      
zerofill(n)
      Les  
n
  chiffres significatifs sont toujours 0, et n'ont pas été
stockés.
      
no zeros
      Ne stocke pas les zéros.
      
always zero
      Les valeurs 0 sont stockées sur un octet.      
Huff tree
      L'arbre Huffman associé au champ.
      
Bits
      Le nombre de bits utilisés par l'arbre Huffman.      Une procédure similaire s'applique aux tables  
ISAM
 . Après avoir
utilisé  
pack_isam
 , utilisez  
isamchk
  pour recréer les index :| 
shell> myisamchk -rq --sort-index --analyze tbl_name.MYI
 | 
 Après avoir installé la table compressée dans un dossier de données
MysQL, vous devez exécutez la commande  
mysqladmin flush-tables
  pour
forcer  
mysqld
  à utiliser cette nouvelle table.Si vous voulez décompresser une table compressée, vous pouvez le faire
avec l'option  
--unpack
  de la commande  
isamchk
  ou  
myisamchk
 .| 
shell> isamchk -rq --sort-index --analyze tbl_name.ISM
 | 
 |