mysql が誤ってデータを削除しました
誤って削除された行
誤って削除されたデータベース/テーブルの場合 完全バックアップと増分ログを使用する必要があります。定期的にオンラインで完全バックアップを実行し、バイナリログをリアルタイムでバックアップする必要がありますか? 誰かが午後 12 時に誤ってデータベースを削除した場合、データを復元するプロセスは次のようになります。 最新の完全バックアップを取得します。データベースは 1 日に 1 回バックアップされ、最後のバックアップは同じ日の 0:00 に行われたと仮定します。 バックアップから一時ライブラリを復元します。 ログバックアップから午前0時以降のログを取り出す 誤ってデータを削除するステートメントを除くすべてのログを一時データベースに適用します。 知らせ: データの回復を高速化するために、この一時ライブラリに複数のデータベースがある場合は、mysqlbinlog コマンドを使用するときに –database パラメータを追加して、誤って削除されたテーブルが配置されているライブラリを指定できます。これにより、データを復元するときに他のライブラリ ログを適用する必要がなくなります。 ログを適用するときは、12 時の誤った操作を含むステートメントの binlog をスキップする必要があります。 リカバリを高速化する方法: 一時インスタンスをバックアップして復元した後、この一時インスタンスをオンライン バックアップ データベースのスレーブ データベースとして設定します。 システムで無制限にログをバックアップすることは不可能です。コストとディスク容量のリソースに基づいて、ログを保持する日数も設定する必要があります。 DBA チームが、インスタンスを半月以内の任意の時点に復元できることを保証できると言った場合、これはバックアップ システムが少なくとも半月分のログを保持することを意味します。 「誰もこんなことが起きてほしくない」とはいえ、誤って削除してしまった場合でも、すぐにデータを復元して損失を最小限に抑えることができるので、逃げる必要はありません。しかし、急いで手作業で作業を進め、ミスを犯してしまい、業務に二次的な損害を与えてしまうようなことがあっては困ります。 スタンバイデータベースの遅延レプリケーション
rmでデータを削除する クラスター全体が悪意を持って削除されず、ノードの 1 つのデータのみが削除されない限り、HA システムは動作を開始し、新しいマスター データベースを選択して、クラスター全体の正常な動作を保証します。この時点では、このノード上のデータを復元し、それをクラスター全体に接続するだけです。 もちろん、現在では DBA だけでなく SA (システム管理者) も自動化システムを備えているため、マシンを一括してオフラインにする操作によって、MySQL クラスター全体のすべてのノードが消去される可能性があります。この状況に対処するための私の唯一のアドバイスは、バックアップをデータセンター間、できれば都市間で保存することです。 SQL文を強制終了する セッション B はスレッドを直接終了し、何もせずに終了しますか?明らかに、これはうまくいきません。 テーブルを追加、削除、変更、またはクエリすると、テーブルに MDL 読み取りロックが追加されます。したがって、セッション B はブロックされた状態ですが、MDL 読み取りロックを保持し続けます。スレッドが強制終了された場合、スレッドは直接終了し、MDL 読み取りロックが解放される機会がなくなります。 Kill は、すぐに停止するという意味ではなく、このステートメントはもう実行する必要がなくなり、「実行停止ロジック」を開始できることを実行スレッドに伝えるという意味です。 実際、kill query thread_id_b を実行すると、MySQL で kill コマンドを処理するスレッドは次の処理を実行します。
図1の例では、セッションBはロック待機状態にあります。セッションBのスレッド状態を 上記には3つの意味が含まれています。
殺害の例 set global innodb_thread_concurrency=2 を実行して、InnoDB 同時スレッドの上限を 2 に設定し、次のシーケンスを実行します。 以下が見られます: 実行中にセッション C がブロックされました。 ただし、セッション D によって実行された kill query C コマンドは効果がありません。 セッション E が kill connection コマンドを実行するまで、セッション C は切断されず、「クエリ中に MySQL サーバーへの接続が失われました」というメッセージが表示されます。 しかしこの時点で、セッション E で show processlist を実行すると、次の図が表示されます。 id=12 のスレッドの Commnad 列に Killed と表示されます。つまり、クライアントが切断されていても、ステートメントはサーバー上で引き続き実行されます。 この例では、スレッド12の待機ロジックは次のようになります。10ミリ秒ごとに、InnoDB実行に入ることができるかどうかを確認します。 つまり、スレッド 12 のステータスは KILL_QUERY に設定されていますが、InnoDB に入るのを待つループ中にスレッドのステータスが判断されないため、終了ロジック ステージにはまったく入りません。 セッション E が kill connection コマンドを実行すると、次の処理が実行されます。
show processlist を実行すると、コマンド列が killed と表示されるのはなぜですか?実際、これは show processlist を実行するときに特別なロジックがあるためです。 スレッドの状態が KILL_CONNECTION の場合、[コマンド] 列には [Killed] と表示されます。 したがって、実際には、クライアントが終了したとしても、このスレッドのステータスはまだ待機中のままです。 InnoDB に入る条件が満たされ、セッション C のクエリ ステートメントが実行を継続した場合にのみ、スレッド状態が KILL_QUERY または KILL_CONNECTION になったと判断でき、終了ロジック ステージに入ることができます。 kill が無効になる最初のタイプの状況は、スレッドがスレッド ステータスを決定するロジックを実行していない場合です。また、過度の IO 負荷により、読み取りおよび書き込み IO 関数が返されず、スレッドの状態を時間内に判断できなくなる可能性もあります。
ctrl+C の場合、mysql は実際に接続プロセスを開始し、kill query コマンドを送信します。 低速クライアント接続に関する誤解 データベースにテーブルが多数ある場合、接続は遅くなります。たとえば、数万のテーブルを持つライブラリがある場合、デフォルトのパラメータを使用して接続すると、MySQL はローカル ライブラリ名とテーブル名の補完機能を提供します。
3 番目のステップは時間のかかる操作です。つまり、私たちが感じる遅さは、接続が完全であるかサーバーが遅いためではなく、クライアントが遅いためであるということです。このリンクに -A を追加すると、自動補完機能を解除して素早く戻ることができます。 自動補完の効果は、ライブラリ名またはテーブル名を入力するときにプレフィックスが入力され、タブを使用して自動的に補完したりプロンプトを表示したりできることです。実際、自動補完をあまり使用しない場合は、使用するたびに -A を追加できます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Webpack で環境変数を使用するためのさまざまな正しい姿勢
>>: Linux インストール Redis 実装プロセスとエラー解決
最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...
tomcat9をアンインストールする1. Tomcatのインストールはディレクトリに解凍するだけで...
同僚からよく聞かれるのですが、ファイル/ディレクトリを削除すると「操作は許可されていません」というエ...
2 つの異なるテーブルをクエリするには、結果をマージする必要があります。たとえば、table1 の列...
CSSとは# CSS (Cascading Style Sheets の略) は、「カスケーディング...
実行中のコンテナIDを見つける ドッカーps上記のコンテナの物理的な場所を見つける /var/lib...
SUSE Linuxでルートパスワードを忘れた場合の解決方法SUSE (Linux オペレーティング...
目次1. Dockerはリモートアクセスを可能にする2. Intellij IDEAにDockerプ...
序文データ型変換とは何ですか?フォームまたはプロンプトを使用して取得されるデフォルトのデータ型は文字...
1. カーディナリティとは何ですか?カーディナリティとは、MySQL テーブルの列内の異なる値の数を...
最初のタイプ: 完全な CSS コントロール、レイヤーフローティング (ログインページに適しています...
デフォルトでは、テーブルの幅と高さはコンテンツに応じて自動的に調整されます。テーブルの幅と高さを手動...
Git は vscode に統合されており、git コマンドをいくつか記述しなくても、クリックするだ...
ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...
効果 HTML を実装するには、まずクリーンな HTML ページを準備し、ノードを記述します。 &l...