“SELECT INTO”(或类似)到远程数据库

时间:2016-03-18 13:34:29

标签: mysql

我经营一个游戏社区(带服务器)。我有两个主机,第一个是“社区”主机,几乎主持网站/论坛/等,在我运行我的游戏服务器的另一个主机,以及包含playerdata的MySQL数据库。

简而言之,我想根据游戏服务器数据库中的统计数据在网站上创建排名。

为了不给游戏服务器带来太多压力,我想知道是否有可能(使用Cronjob可以?,定期制作)来创建特定SELECT查询的转储。

但是我不知道如何使用SELECT INTO查询来选择数据并将其插入远程服务器之间。

有没有办法实现这一点,或者我被迫使用MySQL的联合表?

提前谢谢

2 个答案:

答案 0 :(得分:0)

你所谈论的是在数据库世界中称为ETL(转换为Extract,Transform,Load)。暂时忘掉变换部分。

你没有被迫做任何......好吧..是的,您需要源服务器上的用户可以访问您要传输的数据以及目标服务器上的用户。

您可以找到几种用几乎所有可用语言编写的ETL工具(其中一些很酷且工作正常,其他...并非总是如此)

最简单的' (=没有额外的工具)实现目标的方法是:

(也就是这些是您正在寻找的步骤)

  1. 在游戏(源)服务器上创建单独的用户
    • 用户名:etl(例如)
    • 主机:应用程序(网络)服务器
    • 通行证:supersecretstuff
    • 所需的最低SELECT权限(如果可能,表级别)
  2. 编写提取查询
  3. 在目标服务器上创建一个表,该表与您的数据提取查询确定的结构相匹配
  4. 使用应用程序服务器上的命令行客户端提取数据(mysql -h gamesrv.mynet database < my_extract_query.sql > extracted_data.csv&lt; - 这是一个制表符分隔文件)
  5. 使用extracted_data.csv导入您需要的数据(LOAD DATA LOCAL INFILE 'extracted_data.csv' INTO TABLE myimported data; http://dev.mysql.com/doc/refman/5.6/en/loading-tables.html
  6. 要实现增量提取加载过程,您可以使用时间戳或表中的ID-s(如果出现某种单调ID生成,例如mysql中的auto_increment)来提取以确定应该从哪里开始继续复制过程。

    对于实际的建议或解决方案,您必须了解您的数据,但基础知识就是这些。

答案 1 :(得分:0)

我同意上述答案。但我认为你正在寻求自动化这个过程(cron job)。

您可以在应用程序服务器(Web)上创建一个cron作业,该作业会定期检查游戏数据库中的更新并更新其自己的数据库。