我们在收集一些测量数据的服务器上运行mysql v5.0.77。
在mysql服务器上,我们有以下数据库:
raw_data_db
config_tables_db
processed_data_db
我们只想复制'processed_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
我假设发生的事情是,跨数据库选择找不到原始数据库,因为我们没有复制它,并且数据在slave上不存在......或者沿着那些行?< / p>
所以我尝试使用忽略,但我们仍然得到错误
replicate-wild-ignore-table = raw_data_db。*
replicate-wild-ignore-table = data.temp *
其他配置信息:
replicate-rewrite-db = processed_data_db-&gt;数据
replicate-do-db = data
如果所有表都是从对其他数据库的引用创建的,那么是否可以只复制一个数据库?关于如何解决这个错误的任何想法?
我查看了基于行的复制,这似乎可以解决这个问题,但它只能在v5.1或更高版本中使用....早期版本中是否有类似内容?
我将忽略表语句修复为“data。%temp%”,它似乎忽略了很好,但我仍然无法复制我想要的表,因为insert语句现在引用的表没有'存在。
离。
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''
处理是从原始数据库创建临时表,然后平均临时表中的所有值并将结果插入到processed_data_db中,但由于我忽略了create语句,因此它无法访问表格,但我首先忽略它们的原因是因为它们引用了我想要复制的表格以外...所以我不确定我应该如何处理这个......任何建议都会非常感激
答案 0 :(得分: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
编辑: