我正在 MySQL5.1 上进行主/从复制,并使用 mysql 代理 0.8.x 进行读写拆分
它工作正常,除了临时表。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'
这是从站的查询日志:
CREATE TEMPORARY TABLE IF NOT EXISTS sh ( ad_id MEDIUMINT( 8 ) UNSIGNED NOT NULL, score float , INDEX ( `ad_id` ), INDEX ( `score` )) ENGINE = MEMORY
这是mysql错误消息:
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
如果我直接查询master(将php db连接更改为master而不是mysql-proxy),它可以正常工作。
我正在使用这个 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 Proxy 将 create tmp 和 insert select 语句发送到 master,master 将命令正确地复制到从站,然后在下一步中将 select 发送到从站。不幸的是,在 MySQL 中,tmp 表仅对发出它的连接有效,因此复制创建的 tmp 表对于从属服务器上的 mysql 代理发出的第二个连接无效。
我现在正试图通过更改我的应用程序并将与 tmp 表的连接直接发送到主服务器来解决这个问题。
如果您认为有更好的解决方案,请告诉我。