Я делаю репликацию master / slave на 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
Если я обращаюсь напрямую к мастеру (меняю вместо 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 отправляет операторы создания tmp и вставки select ведущему, который правильно реплицирует команды на ведомое устройство, затем на следующем шаге select отправляется на ведомое устройство. К сожалению, в MySQL таблица tmp действительна только для соединения, которое ее установило, поэтому таблица tmp, созданная репликацией, недопустима для второго соединения, созданного прокси-сервером mysql на ведомом устройстве.
Я сейчас пытаюсь решить эту проблему, изменив мое приложение и выполнив соединения с таблицами tmp непосредственно к мастеру.
Пожалуйста, дайте мне знать, если вы считаете, что есть лучшее решение.