【发布时间】:2011-04-22 14:33:07
【问题描述】:
我们在服务器上运行 mysql v5.0.77,收集一些测量数据。
在mysql服务器上,我们有以下数据库:
原始数据数据库
config_tables_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
我假设发生的事情是跨数据库选择找不到原始数据库,因为我们没有复制它,并且数据不存在于从属设备上……或类似的东西?
所以我尝试使用忽略,但我们仍然收到错误
复制野生忽略表 = raw_data_db.*
复制野生忽略表 = data.temp*
其他配置信息:
复制-重写-db = 已处理的_data_db->数据
复制-do-db = 数据
如果所有表都是从对其他数据库的引用创建的,是否可以只复制一个数据库?有关如何解决此错误的任何想法?
我研究了基于行的复制,它似乎可以解决问题,但它仅在 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,但由于我忽略了 create 语句,它无权访问那些表,但我首先忽略它们的原因是因为它们引用了我想要复制的表之外的表......所以我不确定我应该如何处理这个......任何建议将不胜感激.
【问题讨论】:
标签: mysql replication mysql-error-1146