【问题标题】:Split MySQL databases拆分 MySQL 数据库
【发布时间】:2011-07-29 13:00:20
【问题描述】:

我有一个关于拆分数据库的问题。这是有问题的查询:

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

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

谢谢!

【问题讨论】:

    标签: mysql database database-schema multiple-databases


    【解决方案1】:

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

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

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

    性能调优可能会出现问题,但这是让查询保持当前状态的最简单方法。

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

    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';
    

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

    【讨论】:

    • 非常感谢您的回答,但是表已经创建,这是一个包含数百个表的大系统,我没有这个选项。
    • 你能给我一个例子,你会怎么做?我是否必须将当前表更改为联合表?尽管这个任务很复杂,但我对 MySQL 还是有点陌生​​。谢谢!
    • 当您移动到新服务器时,无论如何您都必须迁移数据,以便您可以事先实施联合表。
    • 多年来我一直在寻找这样的解决方案!
    猜你喜欢
    • 2014-04-13
    • 2011-03-31
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2017-08-17
    • 2022-01-12
    • 2015-01-24
    • 1970-01-01
    相关资源
    最近更新 更多