私はMySQLのプロキシ0.8.xMySQLのプロキシR/W複製および一時テーブル
それは一時テーブルを除いて正常に動作してMySQL5.1とR/Wスプリット上のマスター/スレーブレプリケーションを行っています。 MySQLは、一時テーブルが存在しないというエラーをスローします。
これは、マスターサーバーのクエリログです:
CREATE TEMPORARY TABLE IF NOT EXISTS sh (ad_id MEDIUMINT(8) UNSIGNED NOT NULL, score float , INDEX (`ad_id`), INDEX (`score`)) ENGINE = MEMORY
INSERT INTO sh
SELECT cl.ID, 1
FROM classifieds cl
WHERE cl.advertiser_id = '40179'
これはスレーブのためのクエリログです:
Occured during executing INSERT INTO sh SELECT cl.ID, 1 FROM classifieds cl WHERE cl.advertiser_id = '40179' statement
Error: 1146 Table 'dbname.sh' doesn't exist
:
CREATE TEMPORARY TABLE IF NOT EXISTS sh (ad_id MEDIUMINT(8) UNSIGNED NOT NULL, score float , INDEX (`ad_id`), INDEX (`score`)) ENGINE = MEMORY
これは、MySQL errrorメッセージです
私が直接マスターに問い合わせる場合(代わりにphp db connectionをmysql-proxyに変更する)、problなしで動作しますems。
私は、このMySQLのプロキシ設定を使用しています:
[mysql-proxy]
daemon = true
pid-file = /home/mysqladm/mysql-proxy.pid
log-file = /home/mysqladm/mysql-proxy.log
log-level = debug
proxy-address = 192.168.0.109:3307
proxy-backend-addresses = 192.168.0.108:3306
proxy-read-only-backend-addresses = 192.168.0.109
proxy-lua-script = /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
はそれを修正する方法についてのアイデアを誰がいますか?何か助けてくれてありがとう!
//編集翌日
私はこれが動作しない理由を私は知っていると信じて:
MySQLのプロキシは、TMPを作成して、スレーブに正しくコマンドを複製マスターにselect文を挿入を送信し、次のステップで選択がスレーブに送信されます。 Unfortunatelly MySQLでは、tmpテーブルはそれを発行した接続に対してのみ有効です。したがって、レプリケーションによって作成されたtmpテーブルは、スレーブ上のmysql proxyによって発行された2番目の接続に対して有効ではありません。
私は現在、自分のアプリケーションを変更してこれを解決しようとしており、tmpテーブルを使って直接マスターに接続しています。
もっと良い解決策があると思ったら教えてください。