【问题标题】:Extracting Data Daily from MySQL to a Local MySQL DB每天从 MySQL 提取数据到本地 MySQL 数据库
【发布时间】:2012-10-25 22:39:19
【问题描述】:

我正在本地做一些实验,这些实验需要来自生产 MySQL 数据库的一些数据,而我只有读取权限。除了省略一列之外,这些模式几乎相同。我的目标是编写一个我可以每天运行的脚本,提取前一天的数据并将其导入我的本地表中。

我最困惑的部分是如何下载数据。我见过像mysqldump 这样的名字被乱扔,但这似乎是复制整个数据库的一种方式。我很想避免使用 php,因为我没有使用它的经验。我一直在创建 CSV,但我担心数据完整性(如果字段中有逗号或 \n 怎么办)以及 CSV 的大小(每天有几十万行)。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    没有办法比 mysqdump 更快,如果你有几十万行最好和简单的解决方案,mysqldump 不仅导出整个数据库,你可以只导出你想要的表。

    http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

    mysqldump.exe -u root -p DATABASENAME TABLE1 TABLE2 > exported_tables.sql
    

    这将从databasename 导出table1table2

    你也可以使用 where 参数来过滤结果:

     --where='where_condition', -w 'where_condition'
    
    Dump only rows selected by the given WHERE condition. Quotes around the condition are mandatory if it contains spaces or other characters that are special to your command interpreter.
    
    Examples:
    
    --where="user='jimf'"
    -w"userid>1"
    -w"userid<1"
    

    【讨论】:

    • 你能从文件中加载 where 条件吗?
    【解决方案2】:

    您需要在两个数据库之间建立某种形式的 dblink。请查看此讨论并根据您的生产数据库是要在本地访问还是从远程计算机访问来选择合适的答案:

    Oracle Database Link - MySQL Equivalent?

    我的理解是,您必须从单独的 MySQL 服务器访问生产服务器,而且您不想要精确的副本,您需要编写自定义查询。如果是这样,使用FEDERATED MySQL storage engine 可能是您可能拥有的最佳选择。 当使用FEDERATED 表时,本地服务器上的查询会自动在远程(联合)表上执行。本地表上没有存储任何数据。 Here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      相关资源
      最近更新 更多