【问题标题】:copy tables between databases在数据库之间复制表
【发布时间】:2011-11-24 14:33:00
【问题描述】:

我正在使用 MySQL v5.1。

我正在开发一个 Rails 应用程序。并编写一个 ruby 脚本来复制数据库。到目前为止,我得到了一个表名数组,表的数量是 2090。我需要在一个新的数据库中创建所有表,我的代码如下所示:

#"table_names" is fetched by execute 'show tables' SQL commands

 table_names.each { |tbl_name|
     ActiveRecord::Base.connection.execute("CREATE TABLE #{new_db_name}.#{tbl_name} LIKE #{old_db_name}.#{tbl_name}")

  }

这段代码可以运行,但是完成的时间比较长,因为代码要一个一个执行CREATE TABLE命令,要创建2090个表。

我想知道有什么方法可以在 SQL 中批量创建表(如批量插入数据)以节省时间?如果没有,如何提高创建表的速度?这就是将所有 2090 个表从一个数据库复制到另一个数据库。

P.S.我不想在 SQL 文件中硬编码所有 2090 表名。

【问题讨论】:

    标签: mysql sql ruby-on-rails database ruby-on-rails-3


    【解决方案1】:

    mysql中最简单的方法是对有问题的数据库做一个mysqldump,然后将其恢复到新的数据库,例如:

    mysql_dump -pPASSWORD -uUSERNAME name_of_db > name_of_db.sql
    mysql -pPASSWORD -uUSERNAME name_of_db < name_of_db.sql
    

    转储文件将包含所有必要的 DDL/DML 查询以重新创建数据库,以及禁用外键等,以便在恢复的数据库处于中途状态时加载转储而不会导致任何外键问题。

    【讨论】:

    • 我知道mysqldump的方式,但是我不需要表中的数据,所以我不使用dump。不过还是谢谢你。
    • 它也有一个 --no-data 选项,它只转储表结构/触发器/过程/等...基本上除了数据之外的所有内容。
    【解决方案2】:

    听起来您正在寻找的是 SchemaCompare 工具,而不是 DataCompare 工具。这是内置在 Visual Studio for SQL 中的。这个工具可以做到这一点:http://toadformysql.com/index.jspa

    【讨论】:

    • 抱歉,我不想为此使用任何外部工具,但谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多