MySQL ロールバック (概要共有)
この記事は、mysql に関する関連知識を提供します。主にロールバック関連の問題を整理し、主にブックストアのロールバックとロールバック メカニズムを紹介します。一緒に見てみましょう。皆さんが助けてくれることを願っています。
推奨学習: mysql ビデオ チュートリアル
大規模なテーブルを操作すると、操作時間が長すぎたり、オンラインに影響を与える ビジネスでは、大規模なテーブル操作をロールバックする必要があります。大規模なテーブル操作を停止した後、ロールバックを待つのは非常に長いプロセスです。時間を短縮する方法をいくつか知っていて、実稼働環境でのデータの整合性に懸念を抱いているかもしれませんが、介入しないことを選択することもできます。
トランザクション ロールバック
トランザクションはリレーショナル データベースの実行単位であり、最終段階のコントロールを通じて送信またはロールバックできます。整合性が保証できないさまざまなシナリオでロールバック操作を実行します。 MySQL でのロールバックは、トランザクションに関連する最新の変更を元に戻す方法に関する情報が含まれる元に戻すログを通じて実行されます。 Undo ログは Undo ログ セグメントに存在し、Undo ログ セグメントはロールバック セグメントに含まれます。ロールバック セグメントは、UNDO 表スペースおよびグローバル Temporary 表スペースに配置されます。
関係は次のとおりです。
- undo ファイル
mysql > show variables like '%undo%'; +--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | innodb_max_undo_log_size | 1073741824 | | innodb_undo_directory | /opt/data8.0/mysql | | innodb_undo_log_encrypt | OFF | | innodb_undo_log_truncate | ON | | innodb_undo_tablespaces | 2 | +--------------------------+--------------------+ 5 rows in set (0.00 sec)
は、次のことを指します。グローバル Temporary ユーザー作成の一時テーブルに対する変更のロールバック セグメントを格納する一時テーブルスペース (ibtmp1)。
mysql > SELECT @@innodb_temp_data_file_path; +-------------------------------+ | @@innodb_temp_data_file_path | +-------------------------------+ | ibtmp1:128M:autoextend:max:30G | +-------------------------------+
ロールバックに含まれるファイルを理解したら、読み続けてください。
ロールバック メカニズム:
MySQL ロールバック制御は内部 innodb エンジンによって調整され、人間が制御するメカニズムは提供されません。現在提供されている MySQL ロールバック パラメータは次のとおりです:
mysql> SHOW VARIABLES LIKE '%ROLL%'; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | innodb_rollback_on_timeout | OFF | | innodb_rollback_segments | 128 | +----------------------------+-------+
innodb_rollback_on_timeout:
デフォルトでは、InnoDB はトランザクションがタイムアウトしたときにのみ最後のステートメントをロールバックします。 --InnoDB -rollback-on-timeout が指定されている場合、トランザクション タイムアウトにより InnoDB が中止され、トランザクション全体がロールバックされます。ロールバックなどの指定された時間が経過すると、デフォルトでオフになります。データに不整合が生じる可能性が考えられます。この方法はお勧めできません。
Innodb_rollback_segments (1~128):
各 UNDO 表スペースに割り当てられるロールバック セグメントの数と、UNDO レコードを生成するトランザクションに割り当てられるグローバル一時表スペースの数を定義します。
ロールバック セグメントでサポートされるトランザクションの数: ロールバック セグメントのアンドゥ スロットの数と、各トランザクションに必要なアンドゥ ログの数によって異なります。
公式に提供されるロールバックのアンドゥ スロットの数セグメントは InnoDB に基づいています ページ サイズ関連:
最新の MySQL8.0.27 ソース コード実装より storage\innobase\include\trx0rseg.h:
/* Number of undo log slots in a rollback segment file copy 这里 UNIV_PAGE_SIZE正常页面的大小 即 1024*/ #define TRX_RSEG_N_SLOTS (UNIV_PAGE_SIZE / 16) /* Maximum number of transactions supported by a single rollback segment 单个回滚段支持的最大事务数1024/2=512 */ #define TRX_RSEG_MAX_N_TRXS (TRX_RSEG_N_SLOTS / 2)
デフォルトではページ 1024 スロット (TRX_RSEG_N_SLOTS) に分割されており、各スロットがアンドゥ ログ オブジェクトに対応するため、理論上 InnoDB は 128 * 512 = 65536 個の通常トランザクションをサポートできます。
原則的な部分については、「MySQL」「エンジン機能」「InnoDB undo ログ ローミング」を参照してください。
undbo ロールバックの同時読み取りおよび書き込みシナリオを正式に提供します。
から戻るアピールの原則 実際のアプリケーション シナリオでは:
ロールバック セグメントをサポートする機能は依然として相当なものですが、ロールバックの大規模なバッチを実行すると非常に遅くなることがよくあります。特にオンライン処理中は、100,000 行をロールバックするのに 10 分かかる場合があります。あるいはそれ以上です。
以下では、sysbench を使用して 5,000 万の単一テーブル データを準備します。無負荷状態で、約 1 分間削除してから、kill -9 を使用してトランザクションを強制停止し、トランザクションをロールバックします。
明らかに再起動の効果が優れています。
ただし、kill -9 メソッドはデータ ページを簡単に破損する可能性があり、大きなリスクがあります。日常生活でもデータベースに負荷がかかるため、大規模なトランザクションをロールバックするコストが非常に高額になることが想像できます。
概要
大規模なロールバック操作はできる限り回避する必要があります。これはデータベースのリソースとパフォーマンスを消費し、実稼働環境で重大な実稼働事故につながる可能性があります。大規模なトランザクションのロールバックを回避できない場合は、次の方法を実行できます。
- バッチ操作の場合は、バッチで送信できます。たとえば、
- UNDO 領域と 1,000 ~ 5,000 行のグローバル一時テーブル領域を適切に調整できます。 4 つの元に戻すファイルを使用し、1G グローバル ibtmp1 を初期化することをお勧めします。高可用性環境でデータの一貫性を確保すると、スレーブを新しいマスターに昇格させ、サービスを提供し、大規模なトランザクションがロールバックされるのを待つことができます。
- 極端な場合には、kill -9 を使用して操作を再開できます。データの量が非常に多いため、mysql のリカバリは遅くなります。この時点では、mysql がクラッシュ リカバリを実行するまで待つ必要があります。
- データ ページが破損している場合、または再起動プロセス中にロールバックがスキップされた場合は、innodb_force_recovery=3 を渡すことができます (トランザクション ロールバック操作は実行されません)。 )
- 推奨学習:
以上がMySQL ロールバック (概要共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

NAVICAT自体はデータベースパスワードを保存せず、暗号化されたパスワードのみを取得できます。解決策:1。パスワードマネージャーを確認します。 2。NAVICATの「パスワードを記憶する」機能を確認します。 3.データベースパスワードをリセットします。 4.データベース管理者に連絡してください。

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

次のコマンドでmysqlデータベースを表示します。サーバーに接続します:mysql -u username -pパスワードrun showデータベース。すべての既存のデータベースを取得するコマンド[データベース]を選択します。データベース名を使用します。テーブルを表示:表を表示します。テーブル構造を表示:テーブル名を説明してください。データを表示:[テーブル名]から[ *]を選択します。

MySQLでテーブルをコピーするには、新しいテーブルの作成、データの挿入、外部キーの設定、インデックスのコピー、トリガー、ストアドプロシージャ、および機能が必要です。特定の手順には、同じ構造を持つ新しいテーブルの作成が含まれます。元のテーブルからデータを新しいテーブルに挿入します。同じ外部キーの制約を設定します(元のテーブルに1つがある場合)。同じインデックスを作成します。同じトリガーを作成します(元のテーブルに1つがある場合)。同じストアドプロシージャまたは関数を作成します(元のテーブルが使用されている場合)。

Passwordが暗号化された形式で保存されているため、MariadbのNavicatはデータベースパスワードを直接表示できません。データベースのセキュリティを確保するには、パスワードをリセットするには3つの方法があります。NAVICATを介してパスワードをリセットし、複雑なパスワードを設定します。構成ファイルを表示します(推奨されていない、高リスク)。システムコマンドラインツールを使用します(推奨されません。コマンドラインツールに習熟する必要があります)。

MySQLのコピーと貼り付けには、次の手順が含まれています。データを選択し、Ctrl C(Windows)またはCMD C(MAC)でコピーします。ターゲットの場所を右クリックして、貼り付けまたはCTRL V(Windows)またはCMD V(MAC)を使用します。コピーされたデータは、ターゲットの場所に挿入されるか、既存のデータを置き換えます(データが既にターゲットの場所に存在するかどうかに応じて)。

NAVICATでSQLを実行する手順:データベースに接続します。 SQLエディターウィンドウを作成します。 SQLクエリまたはスクリプトを書きます。 [実行]ボタンをクリックして、クエリまたはスクリプトを実行します。結果を表示します(クエリが実行された場合)。
