2011-11-24 89 views
0

我正在使用MySQL v5.1。數據庫之間的複製表

我正在開發一個Rails應用程序。並編寫一個紅寶石腳本來複制數據庫。到目前爲止,我有表名稱的數組,表的數量是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個表名。

回答

4
在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查詢重建數據庫以及禁用外鍵以及不會導致任何外鍵問題而在恢復的DB處於中途狀態時加載轉儲。

+0

我知道mysqldump的方式,但我不需要表中的數據,這就是爲什麼我不使用轉儲。不過謝謝你。 –

+2

它也有一個--no-data選項,它只轉儲表結構/觸發器/程序/等等......基本上除了數據以外的所有東西。 –

0

聲音就像你正在尋找的是SchemaCompare工具,而不是DataCompare工具。這是內置於Visual Studio for SQL。這個工具將這樣做:http://toadformysql.com/index.jspa

+0

對不起,我不想爲此使用任何外部工具,但謝謝。 –