2012-01-18 12 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'オプションを確認してください。大きなテーブルには便利だと言います。 –

答えて

5

--where="id>2500000"mysqldumpの最後に追加します。あなたが二回ダンプする場合は、あなたの場合はMySQL 5.1 Reference Manual

mysqldumpコマンドは

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

ようになります。 2番目のダンプにはテーブル作成情報が含まれます。しかし次回は新しい行だけを追加したいと思う。したがって、2番目のダンプの場合は、mysqldumpコマンドラインに--no-create-infoオプションを追加してください。

+0

このコマンドは実際に私のテーブルを "id> 2500000"の行に置き換えました。私がやったことは、それらをすべて新しいテーブルに移動し、2つのテーブルを[この投稿]とマージすることでした(http://stackoverflow.com/questions/725556/how-can-i-merge-two-mysql-テーブル) – BananaNeil

+0

@BananaNeil両方のダンプがある場合に起こります。データのみを2回目にダンプするには、mysqlコマンドラインで '--no-create-info'オプションを追加します。 –

2

私はこの仕事のためのツールを開発しました。それはmysqlsuperdumpと呼ばれていますし、ここで見つけることができます:それで

https://github.com/hgfischer/mysqlsuperdump

あなたが各テーブルを完全に「WHERE」句をspeciffyすることができ、それが各テーブルごとに異なるルールを指定することができます。

各列の値をダンプ内の各表に置き換えることもできます。これは、たとえば、開発環境で使用するデータベース・ダンプをエクスポートする場合などに便利です。

関連する問題