2012-01-18 91 views
5

我最近決定公司通過我得到我的主機切換,讓我的老數據庫移動到我的新的數據庫,我一直在試圖運行這個命令:mysqldump的部分數據庫

mysqldump --host=ipaddress --user=username --password=password db_name table_name | mysql -u username -ppassword -h new_url new_db_name 

,這似乎工作正常..但因爲我的數據庫是如此驚人的巨大,我會得到時間在我的表中錯誤。所以我想知道是否有任何簡單的方法在我桌子的一部分上做mysqldump

我將承擔的工作流程將是這個樣子:

create temp_table 
move rows from old_table where id>2,500,000 into temp_table 
some how dump the temp table into the new db's table (which has the same name as old_table) 

但我不完全知道如何做這些步驟。

+0

不知道它是否能解決您的問題,但請查看http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html處的'--quick'選項。說它對大型表格很有用。 – 2012-01-18 17:56:37

回答

5

mysqldump命令的末尾加上這個--where="id>2500000"MySQL 5.1 Reference Manual

在你的情況mysqldump命令會是什麼樣子

mysqldump --host=ipaddress \ 
    --user=username \ 
    --password=password \ 
    db_name table_name \ 
    --where="id>2500000 

如果你傾倒的兩倍。第二個轉儲將包含表創建信息。但下一次只想添加新行。因此,對於第二次轉儲,請在mysqldump命令行中添加--no-create-info選項。

+0

事實證明,這個命令實際上用「id> 2500000」的行代替了我的表。所以我最終做的是將它們全部移到一個新表中,並將這兩個表與[這篇文章]合併(http://stackoverflow.com/questions/725556/how-can-i-merge-two-mysql-表) – BananaNeil 2012-01-19 07:35:39

+0

@BananaNeil它可能發生,如果你的轉儲包含第二次只轉儲數據在mysql命令行上添加'--no-create-info'選項。 – 2012-01-19 11:53:26

2

我爲這項工作開發了一個工具。這就是所謂的mysqlsuperdump並且可以在這裏找到:

https://github.com/hgfischer/mysqlsuperdump

有了它,你可以speciffy每個表的完整的「WHERE」條款,所以它可以爲每個表指定不同的規則。

您也可以用轉儲中的每個表替換每列的值。例如,當您想要導出數據庫轉儲以用於開發環境時,這很有用。