由于跨数据库引用而复制数据库时出错 - 表不存在

时间:2011-04-22 14:33:08

标签: mysql replication mysql-error-1146

我们在收集一些测量数据的服务器上运行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语句,因此它无法访问表格,但我首先忽略它们的原因是因为它们引用了我想要复制的表格以外...所以我不确定我应该如何处理这个......任何建议都会非常感激

1 个答案:

答案 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

编辑:

  1. 复制使用的raw_data_db和config_tables_db表 在你插入查询
  2. 使用drbd协议 http://www.mysql.com/why-mysql/drbd/