mysql-proxyは、アプリケーションを書き直さずに安価なシャーディングを必要とする人や、曲がったクライアントを制御するのが難しいと感じるホスティングプロバイダーにほぼ理想的なソリューションです:) 
      
        
        
        
      
    
      
        
        
        
      
     そのため、mysqlサーバーの作業を楽にするタスクがあります。 手頃な価格のソリューションは、マスタースレーブレプリケーションです。 複数のDBMSサーバーを使用するようにアプリケーションを書き直すことができるプログラマーがいる場合、すべてが素晴らしいですが、ない場合はどうなりますか? ここでmysql-proxyが助けになります。 クライアントに対して透過的に動作するmysql-proxyは、複数のスレーブサーバーとマスターサーバーからのリクエストをプロキシできます。 
      
        
        
        
      
    
      
        
        
        
      
     次にテストの説明になります 
      
        
        
        
      
    
      
        
        
        
      
     このトピックのドキュメントであるマスタースレーブレプリケーションの展開は省略します。テーブルファイルをコピーすることを推奨するもののみをスキップすることをお勧めします。mysqldumpの--master-dataオプションは以前から存在しています。 
      
        
        
        
      
    
      
        
        
        
      
     そのため、マスタースレーブレプリケーションは、1つのマスターと3つのスレーブで展開されました。 タスクは、mysql-proxyのオーバーヘッドとフェイルオーバーのサポートを確認することです。 
      
        
        
        
      
    
      
        
        
        
      
     確認するには、2つのスクリプトを使用しました。最初のスクリプトはインデックスを使用せずにデータベースに1000行を挿入し、2番目のスクリプトはテーブルを読み取り、キャッシュを除外し、スクリプトを数回実行し、平均値を取得しました。 
      
        
        
        
      
    
      
        
        
        
      
     いくつかのテストが実行されました。 
      
        
        
        
      
    
      
        
        
        
      
     テスト1-データベースへの挿入 
      
        
        
        
      
      a)データベースに直接(結果は100%として取得されます)-100% 
      
        
        
        
      
      b)mysql-proxy(1つのマスター)経由-69% 
      
        
        
        
      
    
      
        
        
        
      
     テスト2-データベースからの選択 
      
        
        
        
      
      a)データベースから直接(結果は100%として取得されます)-100% 
      
        
        
        
      
      b)mysql-proxy(1つのスレーブのみ)-75% 
      
        
        
        
      
    
      
        
        
        
      
     テスト3-データベースからの選択 
      
        
        
        
      
      a)データベースから直接(結果は100%として取得されます)-100% 
      
        
        
        
      
      b)mysql-proxy(3つのスレーブ)70% 
      
        
        
        
      
    
      
        
        
        
      
     テスト4-データベースからの選択 
      
        
        
        
      
      a)データベースから直接(結果は100%として取得されます)-100% 
      
        
        
        
      
      b)mysql-proxyを介して(3つのスレーブのうち2つがフェイルオーバーをチェックするためにキャンセルされました)8% 
      
        
        
        
      
    
      
        
        
        
      
     チャート: 
      
        
        
        
      
     
      
        
        
        
      
    
      
        
        
        
      
     テストスクリプトが呼び出されました 
      
        
        
        
      
      ab -n 1000 -c 1スクリプト 
      
        
        
        
      
     およびab -n 1000 -c 10スクリプト 
      
        
        
        
      
     呼び出しの間に一時停止があり、極端な値は破棄され、mysql-proxyを使用しない接続の平均は100%とみなされました 
      
        
        
        
      
    
      
        
        
        
      
     テスト1はスクリプトによって実施されました。 
      
        
        
        
      
      <?php 
      
        
        
        
      
      for($ i = 1; $ i <= 1000; $ i ++){ 
      
        
        
        
      
      $ link = new mysqli( "localhost"、 "login"、 "pass"、 "base"); 
      
        
        
        
      
      $ link-> query( "INSERT INTO test` SET` ..."); 
      
        
        
        
      
      mysqli_close($リンク); 
      
        
        
        
      
      } 
      
        
        
        
      
      ?> 
      
        
        
        
      
    
      
        
        
        
      
     実行truncateが実行される前 
      
        
        
        
      
    
      
        
        
        
      
     テスト2-4 
      
        
        
        
      
      <?php 
      
        
        
        
      
      for($ i = 1; $ i <= 1000; $ i ++){ 
      
        
        
        
      
      $ link = new mysqli( "localhost"、 "login"、 "pass"、 "base"); 
      
        
        
        
      
      $ q = $ link-> query( "SELECT * FROM` test`"); 
      
        
        
        
      
      while($ r = $ q-> fetch_assoc()){ 
      
        
        
        
      
      print_r($ r); 
      
        
        
        
      
      } 
      
        
        
        
      
      mysqli_close($リンク); 
      
        
        
        
      
      } 
      
        
        
        
      
      ?> 
      
        
        
        
      
    
      
        
        
        
      
     結論: 
      
        
        
        
      
      test1が問題を提起せず、複雑なクエリの場合のテスト2と3、およびインデックスの使用が実際の負荷の下で完全に異なり、また理解できる場合、テスト4の結果から少し戸惑うことがあります。 
      
        
        
        
      
    
      
        
        
        
      
      test4のmysql-proxy構成 
      
        
        
        
      
    
      
        
        
        
      
      cat / etc / default / mysql-proxy 
      
        
        
        
      
      ENABLED = "true" 
      
        
        
        
      
     オプション= " 
      
        
        
        
      
      --proxy-address = localhost:3309 
      
        
        
        
      
      --proxy-read-only-backend-addresses = workserver1:3306 
      
        
        
        
      
      --proxy-read-only-backend-addresses = downserver1:3306 
      
        
        
        
      
      --proxy-read-only-backend-addresses = downserver2:3306 
      
        
        
        
      
      --proxy-backend-addresses = workserver1:3306 
      
        
        
        
      
      --proxy-skip-profiling 
      
        
        
        
      
      」 
      
        
        
        
      
    
      
        
        
        
      
     あなたの考え