10.10 Utilisation de liens symboliques pour les bases de données et tables

Vous pouvez déplacer des tables et des bases de données depuis le dossier des bases de données vers n'importe quelle autre place, et les remplacer par des liens symboliques. Cela permet d'implanter les bases dans des systèmes avec plus de place.

Lorsque MySQL remarque qu'une table est un lien symbolique, il va le résoudre et utiliser à la place la table. Cela fonctionne sur tous les systèmes qui acceptent l'appel système realpath() (par exemple : Linux Solaris supportent realpath())! Sur tous les système qui ne supportent pas realpath(), vous ne devez pas accéder à la table via le chemin et via le lien en même temps. Si vous le faites, la table sera laissée dans un état incohérent.

Par défaut, MySQL n'accepte pas les liens symboliques de bases de données. Les choses tournent mal lorsque vous commencez à faire des liens symboliques entre les bases de données. Supposons que vous ayez une base de db1 dans le dossier de données de MySQL, et que vous créez un lien symbolique db2 qui pointe sur db1:

shell> cd /path/to/datadir
shell> ln -s db1 db2

Maintenant, toute table tbl_a de db1 est aussi une table tbl_a de db2. Si un thread met à jour db1.tbl_a et un autre thread met à jours db2.tbl_a, il va y avoir des problèmes de cohérence.

Si vous avez vraiment besoin de cette fonctionnalité, vous devrez changer le code suivant dans ``mysys/mf_format.c'':

if (!lstat(to,&stat_buff))  /* Check if it's a symbolic link */
    if (S_ISLNK(stat_buff.st_mode) && realpath(to,buff))

Remplacez le par :

if (realpath(to,buff))