拆分MySQL数据库

时间:2011-07-29 13:00:20

标签: mysql database database-schema multiple-databases

我对分割数据库有疑问。这是有问题的查询:

SELECT COUNT(*) FROM monies.link_monies_new lcn '
         . 'INNER JOIN products.link l ON lcn.link_id = l.link_id '
         . 'INNER JOIN products.products_format af ON l.product_format_id = af.product_format_id '
         . 'INNER JOIN products.products_categories ac ON af.product_category_id = ac.product_category_id '
         . 'WHERE lcn.click_time BETWEEN FROM_UNIXTIME(1311721200) AND FROM_UNIXTIME(1311807600) '
         . 'AND ac.product_category_id = 1

问题是现在数据库资金和产品将在不同的服务器中。解决办法是什么?我需要两个查询吗?我有点失落。

谢谢!

1 个答案:

答案 0 :(得分:4)

http://dev.mysql.com/doc/refman/5.0/en/federated-use.html

如果我已正确理解您的问题,您希望查询连接2个数据库之间的表,并且数据库将位于不同的服务器上。

假设您在“monies”服务器上运行查询,您将在monies服务器上创建联合表,指向“products”服务器。这样,您的查询继续工作,并且MySQL神奇地管理它们在物理上独立的服务器上的事实。

性能调优可能会有问题,但这是保持查询正常工作的最简单方法。

例如,您可以在名为“products”的“monies”服务器上创建本地数据库;在产品中,您将创建一个“链接”表:

CREATE TABLE link (
    link_id     INT(20) NOT NULL AUTO_INCREMENT,
    ....<<other columns from the link table>>
    PRIMARY KEY  (link_id)
)
ENGINE=FEDERATED

CONNECTION='mysql://fed_user@products_server:9306/products/link';

然后,您可以在不更改任何内容的情况下运行上述查询。