Bonjour,

Je rencontre actuellement un gros poblème sur un FLUSH.
J'utilise le moteur MyISAM et un seul serveur pour MySQL.

Je vous explique mon cas : j'ai deux bases de cache pour mon site qui contient beaucoup de donnéés. Toutes les heures je mets à jour l'un des base de cache avant de basculer mon site dessus.

Imaginons la situation suivante :
- 9h15 mon site tourne sur le cache 1
- 10h le script de changement de cache se lance, met à jour le cache 2 avec les nouvelles données puis bascule mon site sur le cache 2 une fois que tout est fini.

Seulement durant le changement de cache, je fais aussi une sauvegarde dans une autre base de backup. Pour effectuer le backup, je copie les fichiers .frm et .MYI directement dans le bon répertoire. Mais bien sûr pour que ces tables redievennent fonctionnelles au cas où, il faut les FLUSH et c'est là le problème.

Le premier FLUSH plante tout, le site devient inaccessible (le nombre de requête en attente sur le serveur augmente donc) et je suis obligé de tuer la requête (ce qui prend environ 2/3 minutes). Là où c'est étrange c'est cela intervient uniquement sur le premier FLUSH ! Une fois la requête tuée, je vais relancer le même script et là plus de plantage...

Avez-vous une idée d'où cela pourrait bien venir ?

Merci d'avance.

EDIT :
Voici un exemple concret de code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
{
  $log->new_line(date("H:i:s"). " - BACKUP DE LA BASE : ");
 
  $lestables = array(
  'table1',
  'table2',
  etc....
  );  
 
  exec('rm -Rf '); // sur le contenu du répertoire de backup
  foreach($lestables as $table) { 
    exec('cp '); // copie de la table
    exec('chown -Rf mysql.mysql' ); // on met les droits sur les tables
  }
 
	$log->new_line(date("H:i:s") . " - RECONSTRUCTION DES INDEX");
	exec('myisamchk /chemin/vers/rep/backup/*.MYI -r');
 
  $sql->reconnect();
  //flush des tables
  foreach($lestables as $table) { 
    if ($table != '') {
      $sql->setQuery("FLUSH TABLE  ." . $table . "");
      if (!$sql->execute()) { stopErreur(	'GRAVE', 'Erreur SQL : '.$sql->getQuery(). $sql->getError()); }
    }    
  }
 
}
J'ai volontairement supprimé des données inutiles (commes les vrais chemins, etc...)