3

mysqldumpによって作成されたデータベースダンプの再インポートに問題があります。order-by-primaryオプションを指定してmysqldumpを実行し、一意のキーを使用してテーブルで実行しました(明示的な主キーがないため、その一意のキーで並べ替えました)。この場合の私の目的は、テーブルを再作成して、一意のキーを主キーにすることでした。

このダンプには非常に長い時間(約10日)かかり、再度実行するのはお尻の大きな痛みになります。(適切なスキーマ変更を使用して)ダンプを再インポートしようとしましたが、mysqlが途中でチョークしました。ダンプファイルを調べたところ、詰まった場所が見つかりました。誰かがスパムメールをダンプファイルのテキストに挿入したようです。

幸い、被害は孤立しているようで、ゴミの直前と直後に鍵が見えます。

tl; dr:ゴミをつなぎ合わせただけでは、前のキーと後のキーの間にいくつのキーが欠落するかわかりません。ダンプはその一意のキーで並べ替えられるため、その点で作業が楽になります。mysqlには、インデックス内の2つのエントリ間のすべての行を取得する方法がありますか?

キーは32文字の16進文字列であり、CHAR(32)タイプの列に格納されます。文字列に<または>演算子を使用できないと確信しています...だから何か提案はありますか?

4

2 に答える 2

2

主キー(または一意のキー)でmysqldumpを並べ替えると、時間がかかります。しかし、10日はかなり信じられないほどです。

このような並べ替えを行うと、MyISAMテーブルをバックアップしてInnoDBテーブルに復元する場合にのみ役立ちます。これはあなたがしていることですか?

MySQLには確かにテーブルのサブセットをダンプする方法があります。--wheremysqldumpのオプションを確認してください。これにより、破損した行をバックアップできるようになります。

はい、SQLで文字列を<使用できます。述語>を使用することもできます。BETWEEN

于 2010-01-17T02:34:04.877 に答える
1

私の最初の質問は、スパムメールをデータベースダンプに入れて破棄するにはどうすればよいかということです。

私はそれがあなたのデータ列の1つから来ていると思いますよね?この電子メールがどのようにダンプの構造を乱すことができたかを示すことができますか?

たぶん、ある種のヘッダーインジェクションが原因で、ダンプが本来あるべきではない場所に改行を挿入したのかもしれませんが、私にはわかりません。とにかく、それをクリアすることが私の意見では最優先事項になるでしょう。

于 2010-01-17T02:38:25.283 に答える