【问题标题】:mysql proxy r/w replication and temporary tablesmysql 代理 r/w 复制和临时表
【发布时间】:2011-03-17 15:22:35
【问题描述】:

我正在 MySQL5.1 上进行主/从复制,并使用 mysql 代理 0.8.x 进行 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'

这是slave的查询日志:

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 表的连接直接发送到主服务器来解决这个问题。

如果您认为有更好的解决方案,请告诉我。

【问题讨论】:

    标签: mysql replication master-slave mysql-error-1146 mysql-proxy


    【解决方案1】:

    是的,这正是问题所在。这是使用 MySQL Proxy 拆分读取查询而不是让应用层自己做出决定的缺陷之一。

    听起来您正在做的是将这种决定放回应用程序层,但仅适用于这些表。这是一个很好的解决方法。如果您发现自己犯了更多需要将 dbh 直接指向数据库的异常,请考虑抽象该代码并为您的应用程序提供一种为特定功能请求 dbh 的方法。在这种情况下,您希望您的代码询问一个库“给我一个我可以执行 TEMPORARY TABLE 查询的 dbh。”

    另一种方法是为所有 TEMPORARY TABLEs 指定可识别的名称(可能使它们都以“tmp_”开头),这将使 Proxy 有机会将它们上的 SELECT 发送到正确的位置。

    【讨论】:

      猜你喜欢
      • 2014-10-14
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2017-06-27
      相关资源
      最近更新 更多