Avant MySQL 4.0, vous ne devez pas utiliser les liens
symboliques avec les tables, si vous n'êtes pas
très prudents avec. Le problème est que
si vous exécutez ALTER TABLE,
REPAIR TABLE ou OPTIMIZE
TABLE sur une table symbolique, le lien sera
supprimé et remplacé par le fichier original. Cela arrive
car les commandes ci-dessus fonctionnent en créant un fichier
temporaire dans le dossier de base, et lorsque l'opération
est faite, l'original est remplacé par la copie.
Vous ne devez pas utiliser des liens symboliques sur les
tables, sur les systèmes qui ne supportent pas complètement
la fonction realpath(). (Au moins Linux et
Solaris supportent realpath())
En MySQL 4.0, les liens symboliques sont complètement
supportés par les tables MyISAM. Les
autres types de tables vous donneront des résultats étranges
lorsque vous les utilisez comme indiqué ci-dessus.
La gestion des liens symboliques de MySQL 4.0 fonctionne comme
ceci (uniquement pour les tables MyISAM) :
Dans le dossier de données, vous allez toujours trouver le fichier de définition de table, le fichier de structure et le fichier d'index.
Dans le dossier de données, vous devez toujours avoir le fichier de définition de table, le fichier de données et le fichier d'index. Les fichiers de données et d'index peuvent être déplacés ailleurs, et remplacés dans le dossier de données par des liens symboliques. Mais le fichier de définition ne le peut pas.
Vous pouvez utiliser un lien symbolique avec le fichier d'index et celui de données, pour placer ces fichiers dans d'autres dossiers.
Le lien symbolique peut être fait via le système
d'exploitation (si mysqld ne fonctionne
pas) ou avec la commande INDEX/DATA
DIRECTORY="path-to-dir" dans CREATE
TABLE. See Section 13.2.5, « Syntaxe de CREATE TABLE ».
myisamchk ne va pas remplacer un lien
symbolique avec les données ou le fichier d'index, mais
il va travailler directement sur le fichier vers lequel le
lien pointe. Tous les fichiers temporaires seront créé
dans le même dossier que le dossier qui contient les
données ou le fichier d'index.
Lorsque vous détruisez une table qui utilise un lien
symbolique, le fichier et le lien symbolique sont
détruits. C'est une bonne raison pour ne
pas exécuter mysqld en tant
que root ou donner des droits
d'écriture à d'autres personnes dans les dossiers de
données de MySQL.
Si vous renommez une table avec ALTER TABLE
RENAME vous n'avez pas à déplacer la table
dans une autre base, le lien symbolique du dossier de base
sera renommé avec le nouveau nom.
Si vous utilisez la commande ALTER TABLE
RENAME pour déplacer la table dans une autre
base, la table sera déplacée dans l'autre base, et
l'ancien lien symbolique et le fichier vers lequel il
pointait seront détruits (en d'autres termes, la nouvelle
table ne sera pas un lien symbolique).
Si vous n'utilisez pas de lien symbolique, vous devriez
utiliser l'option --skip-symlink de
mysqld pour vous assurer que personne
n'efface ou ne renomme un fichier en dehors du dossier de
données de MySQL.
SHOW CREATE TABLE n'indique pas si une
table a des liens symboliques, avant la version 4.0.15. C'est
aussi vrai pour mysqldump, qui utilise
SHOW CREATE TABLE pour générer les
commandes CREATE TABLE.
Ce qui n'est pas encore supporté :
ALTER TABLE ignore toutes les options
INDEX/DATA DIRECTORY="path".
BACKUP TABLE et RESTORE
TABLE ne respectent pas les liens symboliques.
Le fichier .frm ne doit
jamais être un lien symbolique (Comme indiqué
précédemment, seul les fichiers d'index et de données
peuvent être des liens symboliques. Si jamais vous le
faites malgré tout, vous générerez des erreurs de
cohérence. Supposez que vous une base
db1 dans le dossier de données MySQL,
et une table tbl1 dans cette base, et
dans le dossier db1, vous faites un
lien symbolique tbl2 qui pointe sur
tbl1 :
shell>cd /path/to/datadir/db1shell>ln -s tbl1.frm tbl2.frmshell>ln -s tbl1.MYD tbl2.MYDshell>ln -s tbl1.MYI tbl2.MYI
Il va y avoir des problèmes si un thread lit
db1.tbl1 et qu'un autre modifie
db1.tbl2:
Le cache de requête sera induit en erreur (il va
croire que tbl1 a été mis à
jour, et retournera des résultats incohérents).
La commande ALTER de la table
tbl2 va aussi échouer.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
