Il y a de nombreux programmes clients de MySQL, qui se connectent au serveur pour accéder aux bases ou effectuer des opérations administratives. D'autres utilitaires sont aussi disponibles. Ils ne communiquent pas avec le serveur, mais effectuent des opérations liées à MySQL.
Ce chapitre fournit un bref aperçu de ces programmes, et vous en dit plus long sur le fonctionnement de chacun. Les descriptions indiquent comment invoquer les programmes, et quelles options ils comprennent. Voyez section 4 Utiliser les programmes MySQL pour des informations plus générales sur les programmes et leur options.
Voici une brève liste des scripts et utilitaires pour le serveur :
myisampack
MyISAM pour produire des tables
en lecture seule très compactes.
See section 8.2 myisampack, le générateur de tables MySQL compressées en lecture seule.
mysql
mysql, l'outil en ligne de commande.
mysqlaccess
mysqladmin
mysqladmin permet aussi de lire la version, les processus et les
informations de statut du serveur.
See section 8.4 mysqladmin, administration d'un serveur MySQL.
mysqlbinlog
mysqlbinlog, Exécuter des requêtes dans le log binaire.
mysqlcc
mysqlcc, MySQL Control Center.
mysqlcheck
mysqlcheck pour l'entretien et la réparation.
mysqldump
mysqldump, sauvegarde des structures de tables et les données.
mysqlhotcopy
MyISAM et ISAM
alors que le serveur fonctionne.
See section 8.9 mysqlhotcopy, copier les bases et tables MySQL.
mysqlimport
LOAD DATA INFILE.
See section 8.10 mysqlimport, importer des données depuis des fichiers texte.
mysqlshow
perror
perror, expliquer les codes d'erreurs.
replace
replace modifie des chaînes dans des fichiers, ou sur l'entrée
standard.
See section 8.13 L'utilitaire de remplacement de chaînes replace.
Chaque programme MySQL accepte différentes options. Mais chaque programme
dispose de l'option --help qui vous donne une description complète des
options du programme. Par exemple, mysql --help.
Les clients MySQL qui communiquent avec le serveur, utilisent la bibliothèque
mysqlclient est les variables d'environnements suivantes :
MYSQL_UNIX_PORT
| Le fichier de socket Unix par défaut. Utilisé pour les connexions à localhost
|
MYSQL_TCP_PORT
| Le port par défaut. Utilisé par les connexions TCP/IP. |
MYSQL_PWD
| Le mot de passe par défaut. |
MYSQL_DEBUG
| Les options de débogage. |
TMPDIR
| Le dossier où les tables et fichiers temporaires sont placés. |
Utiliser MYSQL_PWD n'est pas sécuritaire, et est fortement déconseillé.
See section 5.6.6 Garder vos mots de passe en lieu sûr.
Vous pouvez remplacer les valeurs par défaut des options en spécifiant les valeurs dans un fichier d'options, ou en ligne de commande. section 4.3 Spécifier des options aux programmes.
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 :
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.
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 :
shell> myisampack [options] filename ...
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'.
myisampack supporte les options suivantes :
--help, -?
--backup, -b
--debug[=debug_options], -# [debug_options]
debug_options vaut souvent
'd:t:o,filename'.
--force, -f
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
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 #
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
--test, -t
--tmp_dir=path, -T path
--verbose, -v
--version, -V
--wait, -w
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.
La séquence de commande illustre la session de compression :
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
Les informations affichées par myisampack sont décrites ici :
normal
empty-space
empty-zero
empty-fill
INTEGER sera transformée en MEDIUMINT).
pre-space
end-space
table-lookup
ENUM avant une compression de type Huffman.
zero
Original trees
After join
Après la compression d'une table, myisamchk -dvv affiche des informations
supplémentaires pour chaque champ :
Type
constant
no endspace
no endspace, not_always
no endspace, no empty
table-lookup
ENUM.
zerofill(n)
n chiffres significatifs sont toujours 0, et n'ont pas été
stockés.
no zeros
always zero
Huff tree
Bits
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 :
shell> myisamchk -rq --sort-index --analyze tbl_name.MYI
Une procédure similaire s'applique aux tables ISAM. Après avoir
utilisé pack_isam, utilisez isamchk pour recréer les index :
shell> isamchk -rq --sort-index --analyze tbl_name.ISM
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.
mysql, l'outil en ligne de commande
mysql est un simple script SQL (qui exploite GNU readline).
Il supporte une utilisation interactive et non-interactive. Lorsqu'il est
utilisé interactivement, les résultats des requêtes sont présentés sous la forme
d'une table au format ASCII. Lorsqu'il est utilisé non-interactivement,
par exemple, comme filtre, le résultat est fourni au format de liste avec
séparation par tabulation (le format d'affichage peut être modifié en utilisant
les options de ligne de commande).
Si vous avez des problèmes liés à des insuffisances de mémoire avec le client,
utilisez l'option --quick! Cela force mysql à utiliser
mysql_use_result() plutôt que mysql_store_result() pour
lire les résultats.
Utiliser mysql est très simple. Il suffit de le démarrer comme ceci :
shell> mysql db_name
ou :
shell> mysql --user=user_name --password=your_password db_name
Tapez une commande SQL, puis terminez-la avec `;', `\g' ou `\G', et finissez avec entrée.
Vous pouvez exécuter un script avec :
shell> mysql db_name < script.sql > output.tab
mysql supporte les options suivantes :
--help, -?
--batch, _B
--character-sets-dir=path
--compress, _C
--database=db_name, -D db_name
--debug[=debug_options], -# [debug_options]
debug_options vaut souvent
'd:t:o,file_name'.
Par défaut, la valeur est 'd:t:o,/tmp/mysql.trace'.
--debug-info, -T
--default-character-set=charset
--execute=statement, -e statement
--batch.
--force, f
--host=host_name, -h host_name
--html, H
--ignore-space, i
IGNORE_SPACE
de la section section 5.2.2 Le mode SQL du serveur.
--local-infile[={0|1}]
LOCAL pour
LOAD DATA INFILE. Sans valeur, cette option active LOCAL.
Elle peut être configuré avec --local-infile=0 ou --local-infile=1 pour
explicitement activer ou désactiver LOCAL. Activer LOCAL n'a pas d'effet
si le serveur ne le supporte pas de son coté.
--named-commands, -G
\*
uniquement, ou utilisez les commandes nommées au début d'une ligne
se terminant par un point-virgule (`;'). Depuis la version 10.9, le client
démarre avec cette option activée par défaut.
Avec l'option -g, le format long des commandes va continuer à fonctionner.
--no-auto-rehash, -A
mysql se lance plus
rapidement, mais vous devez utiliser la commande rehash si vous voulez
utiliser la completion de nom de tables.
--no-beep, -b
--no-named-commands, -g
\* ou bien utilisez les commandes nommées en début de ligne, et
terminez la avec un point-virgule (`;'). Depuis MySQL 3.23.22, mysql
démarre avec cette option activée par défaut! Cependant, même si cette
avec cette option, les formats de commandes longues fonctionneront sur la première ligne.
--no-pager
mysql.
--no-tee
mysql.
--one-database, O
--pager[=command]
ENV vaut PAGER.
Les pagineurs valides sont less, more, cat [> filename], etc.
Voyez l'aide interactive (\h). Cette option n'est pas fonctionnelle en mode batch.
Les pagineurs ne fonctionnent qu'avec Unix.
Plus de détails dans la section section 8.3.1 Commandes mysql.
--password[=password], -p[password]
-p, vous ne devez pas laisser d'espace
entre l'option et le mot de passe.
--port=port_num, -P port_num
--prompt=format_str
prompt). Par défaut,
c'est mysql>. Les séquences spéciales sont présentées
dans la section section 8.3.1 Commandes mysql.
--protocol={TCP | SOCKET | PIPE | MEMORY}
--quick, -q
--raw, -r
--batch
--reconnect
--skip-reconnect. Nouveau en MySQL 4.1.0.
--safe-updates, --i-am-a-dummy, -U
UPDATE et DELETE qui utilisent des clés.
Voir plus bas pour des informations sur cette option. Vous pouvez annuler cette
option si vous l'avez dans le fichier d'option `my.cnf' en utilisant la
syntaxe --safe-updates.
Voyez la section section 8.3.3 Conseils avec mysql pour plus d'informations sur
cette option.
--silent, -s
----skip-column-names, -N
--skip-line-numbers, -L
--socket=path, -S path
--table, -t
--tee=file_name
mysql.
--unbuffered, -n
--user=user_name, -u user_name
--verbose, -v
-v -v -v indique le format d'affichage de table).
--version, -V
--vertical, -E
\G.
--wait, -w
--xml, -X
Vous pouvez aussi spécifier les variables suivantes avec
la syntaxe --var=option :
connect_timeout
max_allowed_packet
max_join_size
--i-am-a-dummy.
Valeur par défaut : 1 000 000 (un million).
net_buffer_length
select_limit
SELECT avec l'option --i-am-a-dummy
Valeur par défaut : 1000.
Il est aussi possible de configurer les variables en utilisant
--set-variable=var_name=value ou la syntaxe -O var_name=value.
Cependant, cette syntaxe est obsolète depuis MySQL 4.0.
Sous Unix, le client mysql écrit l'historique des requêtes dans un fichier.
Par défaut, le fichier de requêtes s'appelle `.mysql_history', et il
est créé dans votre dossier racine. Pour spécifier un fichier différent,
modifiez la variable d'environnement MYSQL_HISTFILE.
Si vous ne voulez pas entretenir un fichier d'historiques, supprimez `.mysql_history' s'il existe, puis utiliser l'une des techniques suivantes :
MYSQL_HISTFILE la valeur de `/dev/null'. Pour que cela
soit pris en compte à chaque redémarrage, ajoutez cette ligne à votre
script de démarrage.
shell> ln -s /dev/null $HOME/.mysql_historyIl suffira de faire cela une seule fois.
mysql
mysql envoie des requêtes SQL que vous avez saisie au serveur, pour exécution.
Il y a aussi des commandes que le client mysql interprête. Si vous tapez 'help'
en ligne de commande, mysql va afficher les commandes qu'il supporte :
mysql> help
MySQL commands:
? (\h) Synonym for `help'.
clear (\c) Clear command.
connect (\r) Reconnect to the server.
Optional arguments are db and host.
delimiter (\d) Set query delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server,
display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager].
Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file.
Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile].
Append everything into given outfile.
use (\u) Use another database.
Takes database name as argument.
Les commandes edit, nopager, pager et system
ne fonctionnent que sous Unix.
La commande status donne des détails sur la connexion et le serveur
utilisés. Si vous fonctionnez en mode --safe-updates, status
va aussi afficher les valeurs des variables de mysql qui affectent
vos requêtes.
Pour enregistrer les requêtes et leur résultat, utilisez la commande tee.
Toutes les données affichées à l'écran seront ajoutées à un fichier donné. Cela
peut être très pratique pour déboguer. Vous pouvez activer cette fonctionnalité
en ligne de commande, avec l'option --tee, ou interactivement avec la commande
tee. Le fichier tee peut être désactivé interactivement avec la commande
notee. Exécuter tee à nouveau ré-active le log.
Sans paramètre, le fichier précédent sera utilisé. Notez que tee
envoie les requêtes dans le fichier après chaque commande, juste avant que
mysql ne l'affiche.
La lecture et la recherche dans les résultats de requêtes en mode interactif
est possible en utilisant les programmes Unix less, more, ou
tout autre programme similaire, avec l'option --pager. Si vous ne spécifier
par de valeur d'option, mysql regarde la valeur de la variable d'environnement
PAGER, et utilise ce pager. Vous pouvez aussi l'activer interactivement
avec la commande pager et la désactiver avec nopager. La commande
prend un argument optionnel : s'il est fournit, le programme de pager indiqué
sera utilisé. Sinon, le pager sera celui indiqué en ligne de commande, ou
stdout si aucun pager n'était indiqué.
La pagination de sortie ne fonctionne que sous Unix, car elle utilise la
fonction popen(), qui n'existe pas sous Windows. Pour Windows, la commande
tee peut être utilisée pour sauver le résultat, même si ce n,est pas
aussi pratique que pager pour naviguer dans le résultat.
Quelques conseils avec la commande pager :
mysql> pager cat > /tmp/log.txtVous pouvez lui passer les options que le page comprendra :
mysql> pager less -n -i -S
-S. Vous la trouverez pratique
pour naviguer dans des résultats très larges. Parfois, un résultat très large
est difficile à lire à l'écran. L'option -S de less rend le résultat
plus lisible, car vous pouvez aussi scroller horizontalement, avec les
flèches de droite et de gauche. Vous pouvez aussi utiliser interactivement
-S dans less pour activer ou désactiver la navigation horizontale.
Pour plus d'informations, voyez le manuel de less :
shell> man less
mysql> pager cat | tee /dr1/tmp/res.txt \
| tee /dr2/tmp/res2.txt | less -n -i -S
Dans cet exemple, la commande va envoyer les résultats de la commande dans
deux fichiers différents, dans deux dossiers différents, placés sur deux
devis `/dr1' et `/dr2', mais affichera toujours le résultat à l'écran
via less.
Vous pouvez aussi combiner les deux fonctions ci-dessus : activer le
tee, spécifier le pager 'less' et vous serez capable de
naviguer dans les résultats avec le less Unix, tout en enregistrant tous
les résultats dans un fichier. La différence entre le tee d'Unix
utilisé avec le pager et le tee intégré du client mysql,
est que le tee intégré fonctionne même si vous n'avez pas de tee
Unix disponible. Le tee enregistre tout ce qui est affiché à l'écran,
alors que le tee Unix utilisé avec pager n'en note pas autant.
Enfin, le tee interactif est plus facile à activer et désactiver, lorsque
vous souhaitez enregistrer un résultat dans un fichier, mais que vous voulez
désactiver cette fonctionnalité à d'autres moments.
Depuis MySQL version 4.0.2, il est possible de modifier l'invite de commande
de mysql. La chaîne de définition de l'invite de commande accepte
les séquences suivantes :
| Option | Description |
\v | version de mysqld |
\d | database en cours |
\h | hôte MySQL |
\p | port de connexion |
\u | nom d'utilisateur |
\U | Identifiant complet username@host
|
\\ | `\' |
\n | nouvelle ligne |
\t | tabulation |
\ | espace |
\_ | espace |
\R | heure 24h (0-23) |
\r | heure 12h (1-12) |
\m | minutes |
\y | année sur deux chiffres |
\Y | année sur quatre chiffres |
\D | format de date complet |
\s | secondes |
\w | jour de la semaine en trois lettres (Mon, Tue, ...) |
\P | am/pm |
\o | mois au format numérique |
\O | mois en trois lettres (Jan, Feb, ...) |
\c | compteur du nombre de commande |
`\' suivi de n'importe quelle lettre représente la lettre littéralement.
Si vous spécifiez une commande prompt sans argument, mysql utilisera
l'invite de commande par défaut de mysql>.
Vous pouvez modifier l'invite de commande comme ceci :
MYSQL_PS1,
en lui donnant la chaîne d'invite. Par exemple :
shell> export MYSQL_PS1="(\u@\h) [\d]> "
prompt
dans le fichier d'options MySQL, comme `/etc/my.cnf' ou `.my.cnf',
dans le groupe mysql. Par exemple :
[mysql] prompt=(\\u@\\h) [\\d]>\\_Dans cet exemple, notez que les anti-slash sont doublés. Si vous configurez l'invite de commande
prompt dans un fichier d'options,
il est recommandé de doubler les anti-slash, lorsque vous utilisez
des options. Il y a des recoupements entre les séquences protégées et
les options. Ces séquences sont listées dans section 4.3.2 Fichier d'options `my.cnf'.
Ce recoupement peut vous causer des problèmes avec des anti-slashs uniques.
Par exemple, \s sera interprété comme un espace, plutôt que comme le
nombre de secondes. La valeur suivante montre comment définir une invite
avec l'heure au format HH:MM:SS> :
[mysql] prompt="\\r:\\m:\\s> "
--prompt dans la commande mysql.
Par exemple :
shell> mysql --prompt="(\u@\h) [\d]> " (user@host) [database]>
prompt (ou \R) depuis le client
pour modifier interactivement l'invite de commande. Par exemple :
mysql> prompt (\u@\h) [\d]>\_ PROMPT set to '(\u@\h) [\d]>\_' (user@host) [database]> (user@host) [database]> prompt Returning to default PROMPT of mysql> mysql>
Le client mysql peut être utilisé en mode interactif comme
ceci :
shell> mysql database
Toutefois, il est aussi possible de rassembler les commandes SQL dans un
fichier, et d'indiquer à mysql de lire les commandes dans ce fichier.
Pour faire cela, créez un fichier texte `fichier_texte' qui contient les commandes
SQL que vous souhaitez exécuter. Puis, exécutez ce fichier avec mysql comme
ceci :
shell> mysql database < fichier_texte
Vous pouvez aussi démarrer votre fichier texte avec la commande USE nom_base.
Dans ce cas, il n'est pas nécessaire de spécifier le nom de la base de données
dans la ligne de commande :
shell> mysql < fichier_texte
Si vous avez déjà démarré le client mysql, vous pouvez exécuter un script
SQL en utilisant la commande source :
mysql> source nom_fichier;
Pour plus d'informations sur le mode batch, consultez section 3.5 Utilisation de mysql en mode batch.
mysql
Cette section décrit certaines techniques qui vous aideront à utiliser
mysql plus efficacement.
Certaines requêtes sont bien plus lisibles une fois affichées verticalement, au lieu de horizontalement. Par exemple, si la taille du texte est bien plus grande que la largeur de l'écran, ou qu'il y a des retours à la ligne, le format vertical est préférable :
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
*************************** 1. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Monty
reply: monty@no.spam.com
mail_to: "Thimble Smith" <tim@no.spam.com>
sbj: UTF-8
txt: >>>>> "Thimble" == Thimble Smith writes:
Thimble> Hi. I think this is a good idea. Is anyone familiar
Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my
Thimble> TODO list and see what happens.
Yes, please do that.
Regards,
Monty
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
--safe-updates
Pour les débutants, une option de démarrage pratique est --safe-updates
(ou --i-am-a-dummy, qui a le même effet). Cette option a été introduite
en MySQL 3.23.11. Elle est pratique si vous avec émis des commandes
DELETE FROM tbl_name mais que vous avez oublié la clause WHERE.
Normalement, une telle commande va effacer toutes les lignes de la table. Avec
--safe-updates, vous pouvez effacer uniquement les lignes dont vous
spécifiez les valeurs de clé pour les identifier. Cela évite les accidents.
Lorsque vous utilisez l'option --safe-updates, mysql émet l'alerte
suivante lorsqu'il se connecte à MySQL :
SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=1000,
SQL_MAX_JOIN_SIZE=1000000;
See section 14.5.3.1 Syntaxe de SET.
La commande SET a l'effet suivant :
UPDATE et DELETE
à moins que vous ne spécifiez une contrainte de clé dans la clause WHERE
où que vous fournissiez une clause LIMIT, ou les deux.
Par exemple :
UPDATE tbl_name SET not_key_column=# WHERE key_column=#; UPDATE tbl_name SET not_key_column=# LIMIT 1;
SELECT sont automatiquement limités
à 1000, à moins que la commande n'inclut la clause LIMIT.
SELECT multi-tables qui devront étudier plus d'un
million de lignes sont annulées.
Pour spécifier des limites autres que 1000 et 1000000, vous pouvez remplacer
les maxima avec --select_limit et --max_join_size :
shell> mysql --safe-updates --select_limit=500 --max_join_size=10000
mysql
Si le client mysql perd la connexion au serveur durant l'envoi
d'une requête, il va immédiatement et automatiquement essayer de se reconnecter
une fois au serveur, puis essayer d'envoyer à nouveau la requête. Toutefois,
même si mysql réussit à se reconnecter, l'ancienne connexion a été
fermée, et tous les objets temporaires ont été perdus : tables temporaires,
configuration en auto_commit, variables utilisateur et de session. Ce comportement
peut se révéléer dangeureux pour vous, comme dans l'exemple suivant, où le
serveur est stoppé, puis relancé sans que vous le sachiez :
mysql> SET @a=1; Query OK, 0 rows affected (0.05 sec) mysql> INSERT INTO t VALUES(@a); ERROR 2006: MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: test Query OK, 1 row affected (1.30 sec) mysql> SELECT * FROM t; +------+ | a | +------+ | NULL | +------+ 1 row in set (0.05 sec)
La variable utilisateur @a a été perduée, et lors de la reconnexion,
elle est indéfinie. S'il est important que mysql génère une erreur
lors de la perte de connexion, vous pouvez lancez le client mysql
avec l'option --skip-reconnect.
mysqladmin, administration d'un serveur MySQL
mysqladmin est un utilitaire pour exécuter des commandes
d'administration.
Vous pouvez l'utiliser pour vérifier la configuration du serveur,
créer et effacer des bases, etc.
La syntaxe de mysqladmin est :
shell> mysqladmin [OPTIONS] command [command-option] command ...
Le mysqladmin actuel supporte les commandes suivantes :
create databasename
drop databasename
extended-status
flush-hosts
flush-logs
flush-privileges
flush-status
flush-tables
flush-threads
kill id,id,...
password new-password
new-password
pour le compte que vous utilisez lors de la connexion avec mysqladmin.
ping
processlist
SHOW PROCESSLIST. Si --verbose est utilisé, le résultat
est le même que SHOW FULL PROCESSLIST.
reload
refresh
shutdown
slave-start
status
slave-stop
variables
version
Toutes les commandes peuvent être réduites à leur préfixe simple. Par exemple :
shell> mysqladmin proc stat +----+-------+-----------+----+-------------+------+-------+------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------+-----------+----+-------------+------+-------+------+ | 6 | monty | localhost | | Processlist | 0 | | | +----+-------+-----------+----+-------------+------+-------+------+ Uptime: 10077 Threads: 1 Questions: 9 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 2 Memory in use: 1092K Max memory used: 1116K
La commande mysqladmin status liste les colonnes suivantes :
Uptime
Threads
Questions
mysqld.
Slow queries
long_query_time secondse. See section 5.9.5 Le log des requêtes lentes.
Opens
mysqld.
Flush tables
flush ..., refresh et reload.
Open tables
Memory in use
mysqld (uniquement disponible si MySQL a été compilé avec l'option --with-debug=full).
Maximum memory used
mysqld (uniquement disponible si MySQL a été compilé avec l'option --with-debug=full).
Si vous exécutez mysqladmin shutdown en vous connectant à un serveur local,
avec un fichier de socket Unix, mysqladmin va attendre que le fichier de
processus du serveur soit supprimé, pour s'assurer que le serveur est bien arrété.
mysqladmin supporte les options suivantes :
--help, -?
--character-sets-dir=path
--compress, -C
--count=#, -c #
--sleep (-i).
--debug[=debug_options], -# [debug_options]
debug_options est souvent
'd:t:o,file_name'. La valeur par défaut est 'd:t:o,/tmp/mysqladmin.trace'.
--force, -f
drop database.
Avec des commandes multiples, continue même si une erreur survient.
--host=host_name, -h host_name
--password[=password], -p[password]
-p, vous ne devez pas laisser d'espace
entre l'option et le mot de passe.
--port=port_num, -P port_num
--protocol={TCP | SOCKET | PIPE | MEMORY}
--relative, -r
-i.
Actuellement, cette option fonctionne avec la commande extended-status.
--silent, -s
--sleep=delay, -i delay
delay secondes entre deux.
--socket=path, -S path
--user=user_name, -u user_name
--verbose, -v
--version, -V
--vertical, -E
--relative, but
prints output vertically.
--wait[=#], -w[#]
Vous pouvez aussi configurer ces options avec la syntaxe --var_name=value :
connect_timeout
shutdown_timeout
Il est aussi possible de configurer les variables en utilisant
--set-variable=var_name=value ou la syntaxe -O var_name=value.
Cependant, cette syntaxe est obsolète depuis MySQL 4.0.
mysqlbinlog, Exécuter des requêtes dans le log binaire
Les fichiers de log sont écrits dans un format binaire.
Vous pouvez éxaminer le log binaire avec l'utilitaire
mysqlbinlog. Il est disponible depuis MySQL 3.23.14.
Appelez mysqlbinlog comme ceci :
shell> mysqlbinlog [options] log-file ...
Par exemple, pour afficher le contenu du fichier de log binaire `binlog.000003', utilisez cette commande :
shell> mysqlbinlog binlog.0000003
Le résultat est toutes les requêtes contenues dans le fichier de log binaire `binlog.000003', avec différentes informations (durée de la requête, identifiant du thread qui l'a émise, timestamp d'émission, etc.).
Normalement, vous utilisez mysqlbinlog pour lire les fichiers de log directement,
et les envoyer au serveur MySQL local. Il est aussi possible de lire le fichier binaire
sur un serveur distant en utilisant l'option --read-from-remote-server.
Cependant, c'est une technique abandonnée, car nous préférons rendre plus simple
l'utilisation des logs binaires sur un serveur MySQL local.
Lorsque vous lisez des logs binaires distants, les options de connexion peuvent
être données pour indiquer comment se connecter au serveur, mais ils sont ignorés
à moins que vous ne spécifiez aussi l'option --read-from-remote-server. Ces options
sont --host, --password, --port, --protocol,
--socket et --user.
Vous pouvez aussi utiliser mysqlbinlog pour relayer des fichiers de log
écrits par un serveur esclave, dans une architecture de réplication. Les logs
de relais sont au même format que le log binaire.
Le log binaire est présenté en détails dans la section section 5.9.4 Le log binaire.
mysqlbinlog supporte les optiosn suivantes :
--help, -?
--database=db_name, -d db_name
--force-read, -f
--host=host_name, -h host_name
--local-load=path, -l path
LOAD DATA INFILE
dans le dossier spécifié.
--offset=N, -o N
N première lignes.
--password[=password], -p[password]
-p, vous ne devez pas laisser d'espace
entre l'option et le mot de passe.
--port=port_num, -P port_num
--position=N, -j N
N.
--protocol={TCP | SOCKET | PIPE | MEMORY}
--read-from-remote-server, -R
--host, --password, --port, --protocol,
--socket et --user.
--result-file=name, -r name
--short-form, -s
--socket=path, -S path
--user=user_name, -u user_name
--version, -V
Vous pouvez aussi configurer les variables suivantes avec l'option
--var_name=value :
open_files_limit
Vous pouvez envoyer le résultat de mysqlbinlog vers un client
mysql avec un pipe : c'est une technique pour restaurer le serveur
après un crash (see section 5.7.1 Sauvegardes de base de données) :
shell> mysqlbinlog hostname-bin.000001 | mysql
ou :
shell> mysqlbinlog hostname-bin.[0-9]* | mysql
Vous pouvez aussi rediriger le résultat de mysqlbinlog dans un fichier
texte, modifier ce fichier (supprimer les requêtes qui vous gênent), puis
exécuter ces requêtes, depuis le fichier, avec mysql. Après
edition du fichier, exécutez les commandes qu'il contient comme d'habitude, avec
le programme mysql.
mysqlbinlog dispose de l'option --position qui affiche les
requêtes du log binaire à partir de la position spécifiée.
Si vous avez plus d'un fichier de log binaire à exécuter sur le serveur MySQL, la méthode sûre est de tout faire avec la même connexion MySQL. Voici la méthode dangeureuse :
shell> mysqlbinlog hostname-bin.000001 | mysql # DANGER!! shell> mysqlbinlog hostname-bin.000002 | mysql # DANGER!!
Cela va causer des problèmes si le premier log contient des commandes
de type CREATE TEMPORARY TABLE et que le second contient des
requêtes d'utilisation de cette table : lorsque le premier mysql
termine son exécution, il va détruire la table, et le second va rencontrer
des erreurs ``unknown table''.
Pour éviter cela, utilisez une seule connexion, surtout si vous utilisez des tables temporaires. Voici deux méthodes possibles :
shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql
La seconde méthode :
shell> mysqlbinlog hostname-bin.000001 > /tmp/statements.sql shell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sql shell> mysql -e "source /tmp/statements.sql"
Depuis MySQL 4.0.14, mysqlbinlog peut préparer des requêtes valides
pour mysql, afin d'il utilise la commande LOAD DATA INFILE depuis
le log binaire. COmme le log contient les données à charger (c'est vrai
depuis MySQL 4.0; MySQL 3.23 n'inscrivait pas les données à charger dans
le log binaire, et le fichier original était nécessaire pour éxécuter le
contenu du log binaire), mysqlbinlog va copier ces données dans
un fichie temporaire et émettre une commande LOAD DATA INFILE pour que
mysql le charge. Le dossier du fichier temporaire est le dossier
temporaire par défaut : il peut être modifié avec l'option local-load
de mysqlbinlog.
Comme mysqlbinlog convertit les commandes LOAD DATA INFILE en
commandes LOAD DATA LOCAL INFILE (c'est à dire qu'il ajouteLOCAL),
le client et le serveur que vous utilisez pour traiter les commandes doivent être
configuré pour autoriser l'option LOCAL.
See section 5.4.4 Problèmes de sécurité avec LOAD DATA LOCAL.
ATTENTION : lorsque vous exécutez mysqlbinlog sur un fichier binaire,
il va créer un fichier temporaire pour chaque commande LOAD DATA INFILE.
Ces fichiers ne seront pas automatiquement effacés, car vous en aurez
besoin lorsque vous exécuterez les commandes SQL générées. Il faudra les
effacer manuellement lorsque vous n'en aurez plus besoin. Les fichiers
portent le nom de `temporary-dir/original_file_name-#-#'.
Dans le futur, nous allons corriger ce problème, en permettant à mysqlbinlog
de se connecter directement au serveur mysqld. Dans ce cas, nous pourrons supprimer
tranquillement les fichiers de log, lorsqu'ils auront été utilisés.
Avant MySQL 4.1, mysqlbinlog ne pouvait pas préparer de log SQL pour
mysql lorsque le log binaire contenait des requêtes de différents threads,
utilisant des tables temporaires de même nom, si les requêtes étaient mélangées.
Ceci est corrigé en MySQL 4.1.
mysqlcc, MySQL Control Center
mysqlcc, MySQL Control Center, est un client portable
qui fournit une interface graphique (GUI) au serveur MySQL. Il supporte
l'utilisation interactive, y compris la coloration syntaxique et la complétion.
Il permet de gérer les tables et bases, et d'administrer le serveur.
Actuellement, mysqlcc fonctionne sur Windows et Linux.
mysqlcc n'est pas inclus avec les distribution MySQL, mais
il peut être téléchargé séparément à http://dev.mysql.com/downloads/.
Actuellement, mysqlcc fonctionne sur Windows et Linux.
Lancez mysqlcc en double-cliquant sur son icone en environnement graphique.
En ligne de commande, utilisez ceci :
shell> mysqlcc [options]
mysqlcc supports the following options:
--help, -?
--blocking_queries, -b
--compress, -C
--connection_name=name, -c name
--server.
--database=db_name, -d db_name
--history_size=#, -H #
--host=host_name, -h host_name
--local-infile[={0|1}]
LOCAL de LOAD DATA INFILE.
Sans valeur, cette option active LOCAL. LOCAL peut être spécifié sous la forme
--local-infile=0 ou --local-infile=1 pour être désactivée ou activée.
Activer LOCAL n'a pas d'effet si le serveur ne le supporte pas.
--password[=password], -p[password]
-p, vous ne devez pas mettre d'espace
entre l'option et le mot de passe.
--plugins_path=name, -g name
--port=port_num, -P port_num
--query, -q
--register, -r
--server=name, -s name
--socket=path, -S path
-y, --syntax
--syntax_file=name, -Y name
--translations_path=name, -T name
--user=user_name, -u user_name
--version, -V
Vous pouvez spécifier les variables suivantes avec l'option -O
ou --set-variable.
connect_timeout
max_allowed_packet
max_join_size
--safe-updates
(Valeur par défaut 1000000)
net_buffer_length
select_limit
SELECT avec l'option --safe-updates
(Valeur par défaut 1000)
Notez que les syntaxes --set-variable=name=value et -O name=value
sont obsolètes depuis MySQL 4.0. Utilisez --name=value.
mysqlcheck pour l'entretien et la réparation
Vous pouvez utiliser mysqlcheck comme outil d'entretien
et de réparation pour les tables MyISAM. mysqlcheck
est disponible depuis MySQL version 3.23.38.
mysqlcheck est similaire à myisamchk mais il fonctionne différemment.
mysqlcheck doit être utilisé lorsque
le serveur mysqld fonctionne, alors que myisamchk doit être utilisé
lorsque le serveur ne fonctionne pas. L'intérêt st que vous n'avez plus besoin
d'interrompre le serveur pour vérifier ou réparer vos tables.
mysqlcheck utilise les commandes du serveur MySQL CHECK,
REPAIR, ANALYZE et OPTIMIZE, d'une manière pratique
pour l'utilisateur.
Il y a trois façons différentes d'utiliser mysqlcheck:
shell> mysqlcheck [options] db_name [tables] shell> mysqlcheck [options] --databases DB1 [DB2 DB3...] shell> mysqlcheck [options] --all-databases
Il peut aussi être utilisé comme mysqldump lorsqu'il faut
choisir les bases et tables à traiter.
mysqlcheck dispose d'une fonctionnalité spéciale, comparé aux
autres clients : le comportement par défaut, c'est à dire la vérification
des tables, peut être modifiée en renommant le fichier binaire.
Si vous voulez avoir un fichier qui réparer les tables par défaut, il suffit
de copier mysqlcheck sur votre disque, et de l'appeler
mysqlrepair, ou bien, de faire un lien symbolique sur l'exécutable
et de l'appeler mysqlrepair. Si vous appelez mysqlrepair, il
va réparer les tables par défaut.
Les noms que vous pouvez utiliser pour que mysqlcheck réparer
automatiquement les tables sont :
mysqlrepair | L'option par défaut est --repair
|
mysqlanalyze | L'option par défaut est --analyze
|
mysqloptimize | L'option par défaut est --optimize
|
Les options disponibles pour mysqlcheck sont listées ici. Vérifiez que
votre version les supporte avec la commande mysqlcheck --help.
-?, --help
--all-databases, -A
--databases dans toutes les
bases sélectionnées.
--all-in-1, -1
--analyze, -a
--auto-repair
--character-sets-dir=...
--check, -c
--check-only-changed, -C
--compress
--databases, -B
--debug[=debug_options], -# [debug_options]
debug_options vaut
'd:t:o,nom_de_fichier'.
--default-character-set=...
--extended, -e
CHECK TABLE, elle va s'assurer que
la table est totalement cohérente, mais prendre un très long temps.
Si vous utilisez cette option avec REPAIR TABLE, elle va réaliser une
réparation exhaustive de la table, qui peut non seulement prendre un temps
très long, mais produire de nombreuses lignes erronées.
--fast, -F
--force, -f
--host=host_name, -h host_name
--medium-check, -m
--optimize, -o
--password[=password], -p[password]
--port=port_num, -P port_num
--protocol={TCP | SOCKET | PIPE | MEMORY}
--quick, -q
CHECK TABLE, elle va éviter que
l'analyse ne traite toutes les lignes pour vérifier les mauvais liens. C'est la
méthode d'analyse la plus rapide.
Si vous utilisez cette option avec REPAIR TABLE, elle va essayer
de ne réparer que le fichier d'index. C'est la méthode la plus rapide
pour la réparation.
--repair, -r
--silent, -s
--socket=path, -S path
--tables
--databases ou -B. Tous les arguments
suivants sont considérés comme des noms de tables.
--user=user_name, -u user_name
--verbose, -v
--version, -V
mysqldump, sauvegarde des structures de tables et les donnéesUtilitaire qui permet d'exporter une base ou un groupe de bases vers un fichier texte, pour la sauvegarde ou le transfert entre deux serveurs (pas nécessairement entre serveurs MySQL). L'export contiendra les requêtes SQL nécessaires pour créer la table et la remplir.
Si vous faîtes une sauvegarde du serveur, vous devriez aussi utiliser
la commande mysqlhotcopy. See section 8.9 mysqlhotcopy, copier les bases et tables MySQL.
Il y a plusieurs méthodes pour invoquer mysqldump :
shell> mysqldump [options] db_name [tables] shell> mysqldump [options] --databases DB1 [DB2 DB3...] shell> mysqldump [options] --all-databases
Si vous ne spécifiez pas de table, ou si vous utilisez l'option --databases
ou --all-databases, la base de données complète sera exportée.
Vous pouvez obtenir une liste des options valides pour votre version de
mysqldump avec la commande mysqldump --help.
Notez que si vous exécutez mysqldump sans l'option --quick ou
--opt, mysqldump va charger la totalité du résultat en mémoire,
avant de l'écrire. Cette option peut résoudre des problèmes de mémoire si vous
exportez de grosses tables.
Notez que si vous utilisez une nouvelles copie du programme mysqldump,
et que vous allez faire un export qui sera lu dans une vieille version
de MySQL, vous ne devriez pas utiliser les options --opt et -e.
Les valeurs numériques hors des plages de validité comme -inf et inf, ainsi
que NaN (not-a-number, pas un nombre) sont exportées par mysqldump comme
NULL. Vous pouvez le voir dans la table suivante :
mysql> CREATE TABLE t (f DOUBLE); mysql> INSERT INTO t VALUES(1e+111111111111111111111); mysql> INSERT INTO t VALUES(-1e111111111111111111111); mysql> SELECT f FROM t; +------+ | f | +------+ | inf | | -inf | +------+
Pour cette table, mysqldump produit l'export suivant :
-- -- Dumping data for table `t` -- INSERT INTO t VALUES (NULL); INSERT INTO t VALUES (NULL);
La signification de ce comportement est que si vous voulez exporter puis restaurer
une table, le nouveau contenu sera peut être différent de l'original. Notez que
depuis MySQL 4.1.2 vous ne pouvez pas insérer la valeur inf dans la table, et
ce comportement de mysqldump ne sera pertinent qu'avec les anciens serveurs.
mysqldump supporte les options suivantes :
--help, -?
--add-drop-table
drop table avant chaque requête de création de table.
--add-locks
LOCK TABLES avant l'export de table et une commande
UNLOCK TABLE après(Pour accélérer les insertions dans MySQL).
See section 7.2.14 Vitesse des requêtes INSERT.
--all-databases, -A
--databases avec
toutes les bases de données sélectionnées.
--allow-keywords
--comments[={0|1}]
0, elle supprime les informations additionnelles
(comme les versions de programme, les versions d'hôte) dans les exports. L'option
--skip-comments fait la même chose. Par défaut, la valeur de cette option
est 1, pour conserver ces informations.
Nouveau en MySQL 4.0.17.
--compatible=name
name sont
mysql323,
mysql40,
postgresql,
oracle,
mssql,
db2,
sapdb,
no_key_options,
no_table_options,
ou
no_field_options.
Pour utiliser plusieurs valeurs, séparez les par des virgules.
Ces valeurs ont la même signification que les options correspondantes
de configuration du mode SQL.
See section 5.2.2 Le mode SQL du serveur.
Cette option requiert la version 4.1.0 ou plus récente.
Avec les anciens serveurs, cela ne fait rien.
--complete-insert, -c
INSERT complètes, avec les noms de colonnes.
-C, --compress
--create-options
CREATE TABLE. Avant MySQL 4.1.2, utilisez --all.
--databases, -B
USE db_name; sera ajoutée dans l'export avant chaque base
de données.
--debug[=debug_options], -# [debug_options]
'd:t:o,file_name'.
--default-character-set=charset
mysqldump 10.3 (MySQL-4.1.2) ou plus
récent va utiliser utf8. Les versions plus anciennes utiliseront latin1.
--delayed
INSERT DELAYED.
--delete-master-logs
--first-slave.
Elle a été ajoutée en MySQL 3.23.57 (pour MySQL 3.23) et MySQL 4.0.13 (pour MySQL
4.0).
--disable-keys, -K
INSERT avec les commandes
/*!40000 ALTER TABLE tbl_name DISABLE KEYS */; et
/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;.
Cela accélère les chargements du fichier d'export pour MySQL 4.0 car les index
ne sont créés qu'après l'insertion. Cette option n'est effective que pour
les tables MyISAM.
--extended-insert, -e
INSERT. (Cela donne des insertions
plus courtes et plus efficaces).
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--lines-terminated-by=...
-T et ont la même
signification que les clauses correspondantes de la commande
LOAD DATA INFILE.
See section 14.1.5 Syntaxe de LOAD DATA INFILE.
--first-slave, -x
--flush-logs, -F
--all-databases
(ou l'option -A), les logs seront vidés
pour chaque base de données exportée.
-f, --force,
--host=host_name, -h host_name
localhost.
--lock-tables, -l
READ LOCAL pour permettre des insertions
concurrentes sur les tables MyISAM.
Notez que lorsque vous exportes des tables de bases différentes, l'option
--lock-tables va verrouiller chaque base séparément. Cette option
ne vous garantira pas que vos tables seront logiquement cohérente entre
les bases. Des tables de différentes bases pourraient être exportées dans
des états très différents.
--master-data
--first-slave, mais produit aussi une commande
CHANGE MASTER TO qui fait que le serveur esclave va commencer à la bonne position
dans le log du maître, si vous utilisez cette exportation pour configurer initialement
l'esclave.
--no-create-db, -n
CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; ne sera pas ajouté
dans l'export. Sinon, la ligne ci-dessus sera ajoutée, si l'une des options
--databases ou --all-databases ont été activée.
--no-create-info, -t
CREATE TABLE).
--no-data, -d
--opt
--quick --add-drop-table --add-locks --extended-insert
--lock-tables. Vous obtiendrez l'export le plus rapide à importer dans un serveur
MySQL.
--password[=password], -p[password]
-p, vous ne devez pas laisser d'espace entre
l'option et le mot de passe. Si vous spécifiez en omettant la partie `=your_pass',
mysqldump vous demandera le mot de passe en ligne de commande.
--port=port_num, -P port_num
--protocol={TCP | SOCKET | PIPE | MEMORY}
--quick, -q
mysql_use_result() pour cela.
--quote-names, -Q
--result-file=file, -r file
--single-transaction
BEGIN avant d'exporter les données
vers le serveur. C'est généralement pratique pour les tables
InnoDB et le niveau d'isolation de transaction
READ_COMMITTED, car ce mode va exporter l'état de la base au moment
de la commande BEGIN sans bloquer les autres applications.
Lorsque vous utilisez cette option, pensez bien que seules les tables
transactionnelles seront exportées dans un état cohérent, c'est à dire
que les tables MyISAM ou HEAP qui seront exportées
avec cette option, pourront changer d'état.
L'option --single-transaction a été ajoutée en version 4.0.2.
Cette option est mutuellement exclusive avec l'option --lock-tables
car LOCK TABLES va valider une transaction interne précédente.
--socket=path, -S path
localhost), qui
est l'hôte par défaut.
--skip-comments
--comments = 0.
--tab=path, -T path
CREATE,
et un fichier `table_name.txt', qui contient les données, pour chaque table.
Le format du fichier `.txt' est celui qui est spécifié par les options
--fields-xxx et --lines--xxx.
Note : cette option ne fonctionne qui si mysqldump est exécuté
sur la même machine que le démon mysqld, et que le nom d'utilisateur et
le groupe de mysqld (normalement l'utilisateur mysql, et le groupe mysql)
doivent avoir des permission pour créer et écrire un fichier dans le dossier
que vous spécifiez.
--tables
--databases ou -B. Tous les arguments suivant les
options sont considérés comme des noms de tables.
--user=user_name, -u user_name
--verbose, -v
--version, -V
--where='where-condition', -w 'where-condition'
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
-X, --xml
Vous pouvez aussi configurer les variables systèmes suivantes avec
la syntaxe --var_name=value :
max_allowed_packet
--extended-insert ou --opt), mysqldump va créer des
lignes ayant une taille maximale de max_allowed_packet octets. Si vous
augmentez la valeur de cette variable, assurez vous que max_allowed_packet
est assez grande dans le serveur.
net_buffer_length
Il est aussi possible de configurer les variables en utilisant
--set-variable=var_name=value ou -O var_name=value. Mais
cette syntaxe est obsolète depuis MySQL 4.0.
L'usage normal de mysqldump est probablement de faire des sauvegardes
de bases.
mysqldump --opt database > backup-file.sql
Vous pouvez importer les données dans la base MySQL avec :
mysql database < backup-file.sql
ou
mysql -e "source /patch-to-backup/backup-file.sql" database
Cependant, il est très pratique pour remplir un autre serveur MySQL avec des informations depuis une base :
mysqldump --opt database | mysql --host=remote-host -C database
Il est possible d'exporter plusieurs bases de données en une seule commande :
mysqldump --databases database1 [database2 ...] > my_databases.sql
Si vous souhaitez exporter toutes les bases, vous pouvez utiliser :
mysqldump --all-databases > all_databases.sql
Pour plus d'informations sur les sauvegardes, voyez section 5.7.1 Sauvegardes de base de données.
mysqlhotcopy, copier les bases et tables MySQL
mysqlhotcopy est un script Perl qui utilise LOCK TABLES,
FLUSH TABLES et cp ou scp pour faire rapidement
des sauvegardes de bases. C'est la méthode la plus rapide pour faire une
sauvegarde. C'est aussi le moyen le plus sûr pour copier des
tables et bases, mais il ne peut fonctionner que sur la machine
qui contient les fichiers de données. mysqlhotcopy fonctionne
uniquement sous Unix, et il ne fonctionne qu'avec les tables de type
MyISAM et ISAM.
shell> mysqlhotcopy db_name [/path/to/new_directory]
shell> mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory
shell> mysqlhotcopy db_name./regex/
mysqlhotcopy supporte les options suivantes :
-?, --help
--allowold
--checkpoint=db_name.tbl_name
--debug
--dryrun, -n
--flushlog
--keepold
--method=#
cp ou scp).
--noindices
myisamchk -rq..
-p, --password=#
--port=port_num, -P port_num
--quiet, -q
--regexp=expr
--socket=path, -S path
--suffix=str
--tmpdir=path
--user=user_name, -u user_name
Vous pouvez essayer perldoc mysqlhotcopy pour avoir plus de
documentation sur mysqlhotcopy.
mysqlhotcopy lit les options du groupe [client] et [mysqlhotcopy]
dans le fichier d'options.
Pour être capable d'exécuter mysqlhotcopy, vous avez besoin des droits
d'écriture dans le dossier de sauvegarde, et le droit de SELECT dans les
tables que vous souhaitez copier, ainsi que les droits MySQL de RELOAD
(pour utiliser la commande FLUSH TABLES).
shell> perldoc mysqlhotcopy
mysqlimport, importer des données depuis des fichiers texte
mysqlimport fournit une interface en ligne de commande à la
commande SQL LOAD DATA INFILE. La plupart des options de mysqlimport
correspondent directement aux mêmes options de LOAD DATA INFILE.
See section 14.1.5 Syntaxe de LOAD DATA INFILE.
mysqlimport est appelé comme ceci :
shell> mysqlimport [options] database textfile1 [textfile2 ...]
Pour chaque fichier texte indiqué dans la ligne de commande,
mysqlimport supprime toute extension du nom du fichier, et utilise
le résultat pour déterminer le nom de la table qui va recevoir
le contenu du fichier. Par exemple, pour des fichiers appelés
`patient.txt', `patient.text' et `patient' seront
tous importés dans la table patient.
mysqlimport supporte les options suivantes :
--help, -?
--columns=column_list, -c column_list
LOAD DATA INFILE correcte,
qui sera alors passée à MySQL.
--compress, -C
--debug[=debug_options], -# [debug_options]
debug_options est souvent :
'd:t:o,file_name'.
--delete, -D
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--lines-terminated-by=...
LOAD DATA INFILE. See section 14.1.5 Syntaxe de LOAD DATA INFILE.
--force, -f
mysqlimport va continuer de traiter les autres fichiers.
Sans --force, mysqlimport se termine dès qu'une erreur survient.
--host=host_name, -h host_name
localhost.
--ignore, -i
--replace.
--ignore-lines=n
n premières lignes du fichier de données.
--local, -L
localhost (qui l'hôte par défaut).
--lock-tables, -l
--password[=password], -p[password]
-p), vous ne pouvez pas laisser d'espace
entre l'option est le mot de passe. Si vous
ne spécifiez pas le mot de passe avec l'option,
mysqlimport va vous demander le mot de passe en ligne.
--port=port_num, -P port_num
localhost, pour lequel la socket Unix est utilisée.
--protocol={TCP | SOCKET | PIPE | MEMORY}
--replace, -r
--replace et --ignore contrôles la gestion des lignes lues
envers les lignes qui existent déjà sur le serveur. Si vous spécifiez l'option
--replace, les nouvelles lignes remplaceront les lignes existantes.
Si vous spécifiez --ignore, les lignes qui sont en double dans une table
qui dispose d'une colonne de type unique. Si vous ne spécifiez pas ces options,
une erreur surviendra lorsqu'une clé en double sera trouvée, et la lecture du reste du
fichier sera annulé.
--silent, -s
--socket=path, -S path
localhost (qui
est l'hôte par défaut).
--user=user_name, -u user_name
--verbose, -v
--verbose, -v
Voici un exemple d'utilisation de mysqlimport :
$ mysql --version mysql Ver 9.33 Distrib 3.22.25, for pc-linux-gnu (i686) $ uname -a Linux xxx.com 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i586 unknown $ mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test $ ed a 100 Max Sydow 101 Count Dracula . w imptest.txt 32 q $ od -c imptest.txt 0000000 1 0 0 \t M a x S y d o w \n 1 0 0000020 1 \t C o u n t D r a c u l a \n 0000040 $ mysqlimport --local test imptest.txt test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 $ mysql -e 'SELECT * FROM imptest' test +------+---------------+ | id | n | +------+---------------+ | 100 | Max Sydow | | 101 | Count Dracula | +------+---------------+
mysqlshow peut être utilisé pour lister les bases qui existent,
leurs tables et leurs colonnes.
Avec le programme mysql vous pouvez obtenir des informations avec la
commande SHOW. Les mêmes informations sont disponibles en utilisant
ces commandes directement. Par exemple, vous pouvez utiliser le client
mysql. See section 14.5.3 Syntaxe de SHOW.
mysqlshow est utilisé comme ceci :
shell> mysqlshow [OPTIONS] [database [table [column]]]
Notez que dans les nouvelles versions de MySQL, vous ne verrez que les bases de données, tables et colonnes pour lesquelles vous avez des droits.
Si le dernier argument contient un caractère joker shell ou SQL (`*',
`?', `%' ou `_') alors seules les entités qui valident ce
masque sont affichées. Si une base contient des caractères soulignés, ils
doivent être protégés avec un anti-slash (certains shell Unix en demande
même deux), afin de lister correctement les tables et les colonnes.
Les `*' et `?' sont convertis en joker SQL `%' and `_'. Cela peut causer des
confusions lorsque vous essayez d'afficher des colonnes qui contiennent un
souligné `_', comme c'est le cas avec mysqlshow qui ne vous affiche
que les colonnes qui vérifient le masque. Ceci est facilement corrigé en ajoutant
un caractère `%' en plus dans la ligne de commande (comme argument séparé).
mysqlshow supporte les options suivantes :
--help, -?
--character-sets-dir=path
--compress, -C
--debug[=debug_options], -# [debug_options]
debug_options vaut souvent
'd:t:o,file_name'.
Par défaut, la valeur est 'd:t:o,/tmp/mysql.trace'.
--default-character-set=charset
--host=host_name, -h host_name
--keys, -k
--password[=password], -p[password]
-p, vous ne devez pas laisser d'espace
entre l'option et le mot de passe.
--port=port_num, -P port_num
--protocol={TCP | SOCKET | PIPE | MEMORY}
--socket=path, -S path
--status, -i
--user=user_name, -u user_name
--verbose, -v
-v -v -v indique le format d'affichage de table).
--version, -V
perror, expliquer les codes d'erreursPour la plupart des erreurs système, MySQL va, en plus d'un message interne, aussi afficher un code d'erreur, dans l'un des styles suivants :
message ... (errno: #) message ... (Errcode: #)
Vous pouvez découvrir ce que ce code d'erreur signifie soit en examinant
la documentation de votre système, soit en utilisant l'utilitaire
perror.
perror affiche une description pour le code d'erreur, ou,
pour une erreur du gestionnaire de tables MyISAM/ISAM.
perror est appelé comme ceci :
shell> perror [options] errorcode ...
Exemple :
shell> perror 13 64 Error code 13: Permission denied Error code 64: Machine is not on the network
Notez que les messages d'erreurs sont dépendants du système. Un message d'erreur peut avoir différentes explications sur différents systèmes.
replace
L'utilitaire replace modifie les chaînes dans des fichiers. Elle
utilise une machine à états finis pour rechercher d'abord les plus
grandes chaînes. Elle peut être utilisée pour faire des échanges de chaînes,
entre les chaînes a et b de deux fichiers `file1' et `file2':
shell> replace a b b a -- file1 file2 ...
Utilisez l'option -- pour indiquer où la liste de chaînes de remplacement
s'arrête, et où commence la liste de fichiers.
Tout fichier nommé en ligne de commande est modifié directement : il est recommandé de faire des sauvegardes de fichiers originaux.
Si aucun fichier n'est nommé en ligne de commande, replace lit l'entrée
standard, et écrit dans la sortie standard. Dansa ce cas, aucune option
-- n'est nécessaire.
Le programme replace sert à msql2mysql.
See section 21.1.1 msql2mysql, convertit des programmes mSQL vers MySQL.
replace supporte les options suivantes :
-?, -I
-# debug_options
debug_options vaut souvent
'd:t:o,file_name'.
-s
-v
-V
Go to the first, previous, next, last section, table of contents.