# Section pour le format ISAM
 [isamchk]
 key_buffer = 16M
Chaque fois que l'on modifie ce fichier, il faut relancer mysql :
 # /etc/init.d/mysql restart
Les bases de données sont stockées dans le répertoire /var/lib/mysql/. Il faut donc sauvegarder ce répertoire.
Pour se connecter à Mysql à partir du shell, on utilise le client Mysql :
 # mysql -h <host> -u <login> -p <password>
Commandes SQL d'importation / exportation.
LOAD DATA INFILE.
La commande SQL LOAD DATA INFILE permet d'importer des données dans une table SQL à partir d'un fichier texte.
Par exemple, nous avons la table suivante :
 mysql> DESC contacts;
 | Field | Type | Null | Key | Default | Extra |
 | id | int(11) | NO | PRI | NULL | auto_increment |
 | prenom | varchar(50) | YES | | NULL | |
 | nom | varchar(50) | YES | | NULL | |
 3 rows in set (0.00 sec)
Nous voulons insérer le fichier suivant :
 # cat /var/lib/mysql/dbalex/data.txt
 Anne;Aconda
 Clara;Sheller
 Sophie;Garo
 Pauline;Machin
Pour importer le fichier dans la table contact, nous tapons la commande suivante :
 mysql> LOAD DATA INFILE 'data.txt' INTO TABLE contacts 
 FIELDS TERMINATED BY ";" (prenom,nom);
 Query OK, 4 rows affected (0.00 sec)
 Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
Vérification :
 mysql> SELECT * FROM contacts;
 | id | prenom | nom |
 | 18 | Anne | Aconda |
 | 19 | Clara | Sheller |
 | 20 | Sophie | Garo |
 | 21 | Pauline | Machin |
 4 rows in set (0.02 sec)
Pour connaître l'ensemble des options disponibles de la commande LOAD DATA INFILE, voir la documentation Mysql : Doc Mysql / LOAD DATA INFILE
SELECT INTO OUTFILE.
La commande SQL SELECT INTO OUTFILE permet d'exporter des données de la base de données dans un fichier texte.
 mysql> SELECT prenom,nom FROM contacts
 INTO OUTFILE '/tmp/result.txt'
 FIELDS TERMINATED BY ';'
 LINES TERMINATED BY '\n';
 Query OK, 4 rows affected (0.02 sec)
Dans le cas présent, les champs " et " ont été sélectionnés à partir de la table " afin de pouvoir être exportés dans le fichier " situé dans le répertoire ""
', il faut penser à préciser les clauses ' et destinées à traiter correctement les délimitations des champs et des lignes lors de l'export ! 
Remarque : C'est l'utilisateur mysql qui crée ce fichier, il doit donc avoir les droits nécessaires :
 # ls -l /tmp/result.txt
 -rw-rw-rw- 1 53 2008-11-27 09:26 /tmp/result.txt
Les fichiers de données.
Les fichiers contenant les données sont stockés dans /var/lib/mysql/.
Chaque base de données dispose de son propre répertoire /var/lib/mysql//.
Le fichier db.opt contient la configuration de la base de données (encodage des caractères ...).
Le fichier <nomdetable>. décrit la structure de la table.
Dans le cas du format MyISAM, chaque table est enregistrée dans deux fichiers :
Dans le cas du format Innodb, toutes les tables sont stockées dans un ou plusieurs seuls fichiers : ', ' ...
Les fichiers journaux.
Les fichiers journaux sont contenus dans le répertoire /var/log/mysql/.
Il y a 3 fichiers importants :
Pour activer les fichiers log, il faut décommenter les deux lignes dans /etc/mysql/my.cnf :
 log = /var/log/mysql/mysql.log
 log_slow_queries = /var/log/mysql/mysql-slow.log
Puis relancer mysql :
 /etc/init.d/mysql restart
Les documentations.
Package Debian mysql-doc-5.0.
Debian propose un package contenant les documentations Mysql. Il faut pour y accéder installer le package mysql-doc-5.0 : 
 # apt-get install mysql-doc-5.0
La documentation sur mysql est accessible dans le répertoire /usr/share/doc/mysql-doc-5.0.
Dans ce répertoire, on trouve des pages HTML qui contiennent toute la documentation de mysql.
Documentations en ligne.
Sur le site de mysql
- Toutes les documentations
- Le manuel de référence en français
Listes de diffusion.
Toutes les listes de diffusion
IRC.
Canal #mysql sur Freenode
Modifications des privilèges.
Il y a quatre techniques pour modifier les privilèges :
Exemple : enlever tous les droits à l'utilisateur alex sur la base de données dbalex :
 mysql> REVOKE ALL PRIVILEGES ON dbalex.* FROM alex;
Exemple : donner tous les droits à l'utilisateur alex sur la base de données dbalex :
 mysql> GRANT ALL PRIVILEGES ON dbalex.* to alex;
on peut également spécifier les droits à donner :
 mysql> GRANT select,insert,update,delete ON dbalex.* to alex;
Les commandes d'administration.
Utile : pour ne pas avoir à spécifier le mot de passe du root chaque fois que l'on invoque une commande mysql*, il suffit de créer un fichier .my.cnf dans son répertoire de travail et qui contient le mot de passe à utiliser. Attention aux droits d'accès à ce fichier !
 # echo -e "[client]\npassword=root" > ~/.my.cnf && chmod 600 ~/.my.cnf
 # ls -l /root/.my.cnf
 -rw------- 1 root root 23 déc 4 15:53 /root/.my.cnf
 # cat /root/.my.cnf
 [client]
 password=root
mysql.
La commande mysql est le client Mysql en ligne de commande. Il permet de se connecter à Mysql et de saisir des commandes SQL.
Voici les options les plus courantes :
Options de base (communes à la plupart des commandes mysql) :
Exemple :
 $ mysql --database=dbalex -u paul -p
 PASSWORD:
Dans cet exemple la requête demande de se connecter par mot de passe à la base dbalex en tant que paul.
Autres options intéressantes :
Pour aller plus loin :
 # mysql --help
Donne la liste et un bref descriptif de toutes les options à utiliser avec la commande mysql
mysqlimport.
 # mysqlimport -p --fields-terminated-by="\;"
 --lines-terminated-by="\n"
 --columns=prenom,nom
 dbalex /var/lib/mysql/dbalex/contacts.txt
 Enter password:
 dbalex.contacts: Records: 4 Deleted: 0 Skipped: 0 Warnings: 4
Attention : le nom du fichier (sans extension) doit être le même que la table.
mysqladmin.
La commande mysqladmin permet de passer des commandes à Mysql.
 $ mysqladmin [OPTIONS] commande [options de la commande]
OPTIONS :
 -h host
 -u user
 -p password 
Commandes : 
Utile : j'ai perdu le mot de passe du compte root mysql, comment le changer :
1. On arrête Mysql :
 # /etc/init.d/mysql stop
2. On relance le daemon mysqld avec l'option --skip-grant-tables
 # mysqld --skip-grant-tables
3. Depuis une autre fenêtre, on se connecte à Mysql
 # mysql mysql
4. On met à jour la table user :
 mysql> update user set password=PASSWORD('root') where user='root';
 Query OK, 0 rows affected (0.00 sec)
 Rows matched: 3 Changed: 0 Warnings: 0
 mysql> flush privileges;
 Query OK, 0 rows affected (0.00 sec)
5. On arrête proprement le daemon mysqld :
 # killall mysqld
6. On relance Mysql :
 # /etc/init.d/mysql start
mysqlcheck.
La commande mysqlcheck permet de vérifier l'intégrité d'une base de données. On indique la (les) base(s) de données à vérifier (et optionnellement les tables à vérifier), et la commande donne l'état : OK ou corrompue.
Options courantes :
Exemple : vérifier l'intégrité de toutes les tables de la base de données testdb :
 # mysqlcheck testdb
 testdb.client OK
 testdb.client2 OK
Vérifier uniquement la table client :
 # mysqlcheck testdb client
 testdb.client OK
Vérifier les tables user et db de la base de données mysql :
 # mysqlcheck mysql user db
 mysql.user OK
 mysql.db OK
Remarque : mysqlcheck ne fonctionne qu'en utilisant des instructions SQL (CHECK TABLE, REPAIR TABLE, ANALYZE TABLE, et OPTIMIZE TABLE), il a donc besoin que le serveur Mysql soit en train de fonctionner.
myisamchk.
La commande myisamchk permet la restauration d'une table ou plusieurs tables endommagées à la suite de crash répétés du démon mysqld.
Quelques précautions d'usage: : Si vous utilisez pour réparer ou optimiser les tables, vous devez toujours vous assurer que n'utilise pas cette table (ce qui s'applique aussi si vous utilisez ). Si vous n'éteignez pas le serveur , vous devez au moins utiliser avant de lancer .
 : Vos tables peuvent être corrompues si le serveur et travaillent dans une même table simultanément.
Vérifier la cohérence d'une table:
On indique à myisamchk les tables à vérifier en désignant les fichiers index MYI :
 # myisamchk /chemin/bases/mysql/'/'.MYI
On peut également spécifier toutes les tables comme ceci : 
 # myisamchk /chemin/bases/mysql/'/'.MYI
Voire carrément vérifier toutes les tables de toutes les bases : 
 # myisamchk /chemin/bases/mysql/'/'.MYI
La commande affiche un rapport d'analyse, et si tout est OK, ne signale pas d'erreur :
 # myisamchk /var/lib/mysql/ampache/album.MYI
 Checking MyISAM file: /var/lib/mysql/ampache/album.MYI
 Data records: 542 Deleted blocks: 0
 - check file-size
 - check record delete-chain
 - check key delete-chain
 - check index reference
 - check data record references index: 1
 - check data record references index: 2
 - check data record references index: 3
 - check data record references index: 4
 - check record links
Cette commande trouvera 99.99% de toutes les erreurs. Elle ne peut toutefois détecter les erreurs qui impliquent uniquement le fichier de données (ce qui est très inhabituel). 
Si vous voulez uniquement vérifier une table sans que la commande produise un affichage, il faut utiliser l'option -s (ou --silent).
mysql_setpermission.
La commande mysql_setpermission permet de définir les permissions des utilisateurs Mysql de manière intéractive. 
Ecrit en Perl, ce script a besoin des modules DBI et DBD::mysql pour fonctionner.
 # mysql_setpermission -p
 Option p is ambiguous (password, port)
 Password for user to connect to MySQL:
 ## Welcome to the permission setter 1.4 for MySQL.
 ## made by Luuk de Boer
 What would you like to do:
 1. Set password for an existing user.
 2. Create a database + user privilege for that database
 and host combination (user can only do SELECT)
 3. Create/append user privilege for an existing database
 and host combination (user can only do SELECT)
 4. Create/append broader user privileges for an existing
 database and host combination
 (user can do SELECT,INSERT,UPDATE,DELETE)
 5. Create/append quite extended user privileges for an
 existing database and host combination (user can do
 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,
 LOCK TABLES,CREATE TEMPORARY TABLES)
 6. Create/append full privileges for an existing database
 and host combination (user has FULL privilege)
 7. Remove all privileges for for an existing database and
 host combination.
 (user will have all permission fields set to N)
 0. exit this program
 Make your choice [1,2,3,4,5,6,7,0]:
 # Make your choice [1,2,3,4,5,6,7,0]: 2