2

我们在收集一些测量数据的服务器上运行 mysql v5.0.77。

在 mysql 服务器上,我们有以下数据库:

raw_data_db
config_tables_db
处理 的_data_db

我们只想复制使用来自“raw_data_db”和“config_tables_db”的信息构建的“processed_data_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

我假设正在发生的是跨数据库选择找不到原始数据库,因为我们没有复制它,并且数据不存在于从属设备上……或者类似的东西?

所以我尝试使用忽略,但我们仍然收到错误
replicate-wild-ignore-table = raw_data_db.*
replicate-wild-ignore-table = data.temp*

其他配置信息:
replicate-rewrite-db = processes_data_db->data
replicate-do-db = data

如果所有表都是从对其他数据库的引用创建的,是否可以只复制一个数据库?有关如何解决此错误的任何想法?

我研究了基于行的复制,这似乎可以解决问题,但它仅在 v5.1 或更高版本中可用......在早期版本中是否有类似的东西?

我将忽略表语句修复为“data.%temp%”,它似乎忽略得很好,但我仍然无法复制我想要的表,因为插入语句现在引用了一个不存在的表。

前任。
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''

处理是从原始数据库创建临时表,然后对临时表中的所有值进行平均并将结果插入到 processes_data_db,但由于我忽略了创建语句,它无权访问这些表,但是我首先忽略它们的原因是因为它们引用了我想要复制的表之外的表......所以我不确定我应该如何处理这个......任何建议将不胜感激。

4

1 回答 1

0

临时表和复制选项。默认情况下,所有临时表都被复制;无论是否有任何匹配的 --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/
于 2011-04-22T14:54:39.680 回答