Ошибка репликации базы данных из-за перекрестной ссылки на базу данных - таблица не существует - PullRequest
1 голос
/ 22 апреля 2011

На сервере mysql v5.0.77 выполняется сбор данных измерений.

На сервере mysql имеются следующие базы данных:

raw_data_db
config_tables_db
processing_data_db

Мы ТОЛЬКО хотим реплицировать «processing_data_db», который создан с использованием информации из «raw_data_db» и «config_tables_db».

Мы продолжаем получать ошибки на нашем подчиненном сервере, когда он пытается дублироватьоператоры, которые создают обработанные данные.

Пример:
[ERROR] Slave: Error 'Table 'raw_data_db.s253' doesn't exist' on query. Default database: 'data'. Query: 'CREATE TEMPORARY TABLE temp SELECT * FROM raw_data_db.s253 WHERE DateTimeVal>='2011/04/21 17:00:00' AND DateTimeVal<='2011/04/21 17:10:00'', Error_code: 1146

Я предполагаю, что происходит то, что команды cross-db не могут найти необработанную базу данных, потому что мыне реплицируется, а данные не существуют на ведомом устройстве ... или что-то в этом роде?

Поэтому я попытался использовать игнорирование, но мы все еще получаем ошибки
replicate-wild-ignore-table = raw_data_db. *
replicate-wild-ignore-table = data.temp *

Другая информация о конфигурации:
replicate-rewrite-db = processsed_data_db-> data
replicate-do-db = data

Можно ли реплицировать только одну базу данных, если все таблицы созданы из ссылок на другие базы данных?Любые идеи о том, как обойти эту ошибку?

Я смотрел на репликацию на основе строк, казалось, что это может сработать, но это доступно только в v5.1 или более поздней версии .... есть ли что-нибудьаналогично в более ранних версиях?

Я исправил операторы таблицы игнорирования "data.% temp%", и, похоже, он просто игнорируется, но я все еще не могу воспроизвести нужные таблицы, поскольку оператор вставкитеперь ссылается на несуществующую таблицу.

ex.
Error 'Table 'data.temp' doesn't exist' on query. Default database: 'data'. Query: 'INSERT INTO abc SELECT FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(DateTimeVal))), ROUND(AVG(Difference),3), ROUND(STDDEV(Difference),3), ROUND(AVG(Frequency),0), ROUND(AVG(SignalPower),1) FROM temp WHERE ABS(Difference)<'10000.0' AND Difference!='0''

Обработка создает временные таблицы из необработанной базы данных, а затем усредняет все значения во временнойтаблица и вставка результата в processing_data_db, но так как я игнорирую операторы create, у него нет доступа к этим таблицам, но причина, по которой я игнорирую их, в первую очередь потому, что они ссылаются на таблицы вне того, чтоЯ хочу повторить ... поэтому я не уверен, как мне подходить к этому .... любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 22 апреля 2011

Временные таблицы и репликация опции. По умолчанию все временно таблицы тиражируются; Бывает есть ли какие-либо соответствия Действующие опции --replicate-do-db, --replicate-do-table или --replicate-wild-do-table. Тем не менее Опции --replicate-ignore-table и --replicate-wild-ignore-table учитываются для временных таблиц.

http://dev.mysql.com/doc/refman/5.0/en/replication-features-temptables.html

редактирование:

  1. дублировать таблицы raw_data_db и config_tables_db, которые используют Вы вставляете запрос
  2. использовать протокол drbd http://www.mysql.com/why-mysql/drbd/
...