Le 25/08/2011 17:56, Wallace a écrit :
    
      
      Le 25/08/11 16:58, Gregory Duchatelet a écrit :
      
        
        
        Va falloir que je me mette au LUA ! :)
        Si tu as un script qui marche, ou une version modifié de celui
        fournit avec MySQL Proxy, je suis preneur !
      
      Je n'ai utilisé que le script livré dans les docs de mysql proxy,
      pas eu besoin d'aller plus loin pour le moment mais tes recherches
      m'intéressent pour comprendre ce qui cloche dans son script.
      
      Je reste quand même persuadé que tu auras de meilleurs résultats
      avec la première idée. Seul l'appli sait si elle a besoin de faire
      un read juste après un update et c'est clairement le problème du
      split des requêtes.
    
    
    Notre appli utilise cette regexp pour savoir s'il faut taper sur un
    slave ou pas :
    
      preg_match("/^([\r\n\t ]+)?(SELECT|USE|SET|CALL
      (stats)?|DESCRIBE|(CREATE|DROP) TEMPORARY TABLE|\()/i",
      trim($query), $r);
    
    Avec ça l'appli n'a pas besoin de "savoir".
    
    
      Dans mon code de mon projet quand j'execute une requête sql la
      fonction d'appel a une variable pour forcer
      à être sur le master. Si elle est présente alors peut importe si
      la requête ne comporte qu'un select elle sera quand même passer
      sur le master et pas sur les slaves. Ca le mysql proxy ne le saura
      jamais.
      Quand les devs jouent à ce genre de mise à jour puis get tu peux
      pas trop te permettre d'attendre 1 ou plusieurs secondes que ca se
      synchronise.
    
    
    Si, dans le script LUA on peut faire ce qu'on veut ! Imagines, tu
    peux faire un simple 
    SET forcemaster=1
    Et dans le script LUA, catcher ce SET, stocker dans une variable un
    peu comme la variable is_in_transaction de ce même script, et voilà
    :)
    
    Pour info, le script LUA en question est visible ici :
    http://paste.frsag.net/TAWVp
    -- 
Greg