【问题标题】:Error replicating database due to cross-db reference - table doesn't exist由于跨数据库引用而复制数据库时出错 - 表不存在
【发布时间】: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


    【解决方案1】:

    临时表和复制 选项。默认情况下,所有临时 表被复制;有时候是这样的 是否有任何匹配 --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/

    【讨论】:

    • 谢谢,但我试过使用--replicate-wild-ignore-table data.temp% 应该忽略临时表,但我仍然收到这些错误。我会仔细检查我的语法以确保我没有拼写错误......
    • @Jonathan 尝试复制野生忽略表 = %temp%
    • @Neo - 刚刚尝试过......它现在忽略了表格,但它正在创建的表格用于将数据插入到我想要保留的表格中。例如,它正在运行另一个查询“INSERT INTO abc SELECT * FROM temp WHERE etc...”
    • @Neo 正是...我在原始帖子中添加了更多信息...我只想复制一个数据库中的表...但似乎我什至无法引用其他表插入语句,因为它们不存在...所以我不确定该怎么做...
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    相关资源
    最近更新 更多