3

古いマシンに drupal サイト用の大きな MySQL 5 データベースがあります。新しいデータベースにバックアップして復元した後、次のようになりました。

ERROR 1064 (42000) 行* *: SQL 構文にエラーがあります。''captcha_success_form_ids|a:1:{s:13:\"user_register\";s:13:\"user_register\";}sp' の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。ライン1

このエラーの原因がどのテーブルかわかりません (「user_register」というテーブルがありません)。それで、別の失敗したバックアップ/復元作業を行う前に、元のデータベースの整合性を簡単にチェックするにはどうすればよいでしょうか? (コマンドラインアクセスがあります)。ありがとう

4

2 に答える 2

4

元のデータベースの破損が疑われる場合は、次の操作を実行できます。

MyISAMテーブルの場合:

CHECK TABLE <table_name>;
REPAIR TABLE <table_name>;

InnoDBテーブルの場合:

http://www.mysqlperformanceblog.com/2008/07/04/recovering-innodb-table-corruption/

CHECK and REPAIRが検出して修正できたまれなケースで、MyISAMテーブルの破損を個人的に見ました。私はInnoDBテーブルで破損を経験したことがないので、リンクで提供されている情報に関して個人的な経験から話すことはできません。

そうは言っても、私があなたの立場にある場合は、mysqldumpによって生成された出力ファイルを詳しく調べて、エラーの原因を特定できるかどうかを確認することから始めます。mysqldumpは通常、テーブルごとに1つのINSERTステートメントを出力し、すべてのデータを1行に表示します。エラーメッセージに含まれる行番号はあまり役に立たないため、エラーの診断は少し注意が必要です。したがって、私が行うことは、mysqldump出力ファイルを編集し、各行の間に改行を挿入することです。例えば:

オリジナル:

INSERT INTO table VALUES (a,b,c),(d,e,f),(g,h,i), ...

への変更:

INSERT INTO table VALUES (a,b,c),
(d,e,f),
(g,h,i),
...

コマンドラインに慣れているので、おそらくsedなどでこれを自動化できます。

次に、変更したファイルをインポートしてみます。同じエラーが発生するはずですが、今回は行番号が問題の原因となっている正確な行を特定するのに役立ちます。その時点で、問題を診断できるはずです(または、mysqldump出力の問題のある部分をここに投稿してください。サポートを試みます)。

編集:

引用したエラーメッセージは、データベースをインポートするときに発生しますか?または、データベースは正常にインポートされますが、アプリケーションはデータベースにアクセスするときにエラーメッセージを生成しますか?前者を想定していたのですが、質問を読み直して、後者かもしれないと思っています。

もう1つのアイデア:データベースにはストアドプロシージャが含まれていますか?その場合、mysqldumpにはデフォルトでそれらが含まれません。--routinesオプションを使用する必要があります。

mysqldump --routines -u <user> -p<password> <database> > output
于 2010-11-29T05:25:54.877 に答える
4

エラー メッセージで引用されているフラグメントは、MySQL とはまったく異なります。シリアル化された PHP データのように見えるため、コード内でデータを適切にエスケープしていないと思われます。PHP のインストールは変更されましたか? 特にスマートクオート?(スマートクォートは現在非推奨であることに注意してください)。

于 2010-11-29T09:56:44.977 に答える