MySQL テーブル自動増分 ID オーバーフロー障害レビュー ソリューション

MySQL テーブル自動増分 ID オーバーフロー障害レビュー ソリューション

問題: MySQLテーブル内の自動増分IDのオーバーフローによりビジネスブロックが発生した

背景:

tokudb エンジンの大きなテーブル tb1 には、ビジネス マシンの監査ログが格納されます。毎日大量のデータが書き込まれます。歴史的な理由により、このテーブルは int 符号付き型であり、最大 2147483647 行を格納できます。

処理プロセス:

DBLE ミドルウェア エージェントを追加し、範囲パーティション分割を実行し、新しく追加されたシャードに新しいデータを書き込みます。 同時に、ビジネスは接続を変更し、このテーブル tb1 の接続モードを DBLE に変更しました。 しかし、ビジネス コードが変更された後、残りの tb1 への挿入書き込み要求の一部が古いテーブルに転送され、一部のテーブルが誤って DBLE にルーティングされていることが判明しました。 これにより事態はさらに複雑になります。最終的に、tb1 を書き込んだコードがオフラインになった後、ビジネス全体が正常に戻りました。

状況を検討した結果、この場合、ログ テーブルの問題については、DBA が迅速かつ断固たる措置を講じてできるだけ早く業務を復旧し、その後に他の問題を検討する必要があると考えました。 このように考えれば、上記の問題は簡単に解決できます。 ほんの数ステップです:

logdb を使用します。

select max(id) from tb1; -- 現在の最大IDをxxxxとして記録します
create table tb2 LIKE tb1; -- シャドウ テーブルを作成します。alter table tb2、modify column id bigint unsigned not null auto_increment; -- 新しいテーブルを、18446744073709551615 行のデータを格納できる bigint unsigned タイプに変更します。
alter table tb2 auto_increment=xxxx+1; -- 新しいテーブルの自動増分主キーの開始値を変更します。 rename table tb1 to tb_archive , tb2 to tb1; -- テーブル名を切り替えます。

この操作の後、データを tb1 に書き込むことができ、業務を一時的に回復できます。残りの作業は、tb_archive テーブルのデータを tb1 に移行することです (pt-archiver ツールを使用してデータを移行し、バックグラウンドでゆっくりと実行できます)。

計算してみると、テーブルを切り取って業務書き込み操作を再開するのに最大で約 5 分しかかからず、移行された残りのデータへの影響は比較的小さくなります。

その後の最適化対策:

自動増分 ID の監視を追加します。こちらを参照してください https://www.jb51.net/article/184935.htm

生産中に発生する可能性のある予期しない問題を整理し、それに応じて適切な緊急計画を策定します。

これで、MySQL テーブルの自動インクリメント ID オーバーフローのトラブルシューティングと解決法に関するこの記事は終了です。MySQL の自動インクリメント ID オーバーフローに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の自動増分 ID (主キー) が不足した場合の解決策
  • MySQLの自動増分IDについて知っておくべきこと
  • MySQL の自動増分 ID に関するいくつかの小さな問題の要約
  • Mysqlの自動増分IDについて知らないことがあるかもしれません
  • MySQL 自動インクリメント ID のオーバーサイズ問題のトラブルシューティングと解決策
  • MySQLテーブルにおける自己増分IDの問題の解決
  • オンラインMySQL自動増分IDが使い果たされた場合の対処方法

<<:  CentOS 7 での Nginx ログタイミング分割の実装手順の詳細説明

>>:  JavaScript 基礎シリーズ: 関数とメソッド

推薦する

Ubuntu 上の Apache で SSL (https 証明書) を設定する正しい方法の詳細な説明

まず、Alibaba Cloud の公式チュートリアルをご覧ください。ファイルの説明: 1. 証明書...

アプレットにおけるwx.getUserProfileインターフェースの具体的な使用

最近、WeChatミニプログラムは、監査ミニプログラムのwx.loginおよびwx.getUserI...

音声キューイングシステムを実装するためのJavaScript

目次導入主な特徴エフェクト表示キーコード導入音声キューイングシステムは、銀行、レストラン、病院などの...

wavesurfer.js によるオーディオ波形描画の実装

1. レンダリングを見る進むを選択: 後方を選択: コードは次のとおりです(例): <テンプレ...

JavaScript 関数のコンテキストのルールは何ですか?

目次1. ルール 1: Object.Method() 1.1 ケース1 1.2 ケース2 1.3 ...

Tomcat のセッションと Cookie の詳細な説明

序文HTTP はステートレスな通信プロトコルです。各リクエストは互いに独立しており、サーバーは以前の...

ページングのどのページでMySQLのレコードをクエリするか

序文実際には、次のような問題に遭遇する可能性があります。特定のレコードの ID がわかっていて、その...

Vue プロジェクトでの支払い機能の実装 (WeChat 支払いと Alipay 支払い)

目次プロジェクトにおける一般的な支払い方法Alipay決済微信ペイプロジェクトにおける一般的な支払い...

MySQL の結合テーブルにインデックスを作成する方法

この記事では、MySQL で 2 つのテーブルを関連付ける結合テーブルにインデックスを作成する方法を...

MySQL ストアド プロシージャのクエリ コマンドの概要

以下のように表示されます。 mysql.proc から名前を選択します (db='データベー...

UTF-8 ファイルの Unicode 署名 BOM (バイト オーダー マーク) の問題

最近、UTF8 エンコードの中国語 Zen Cart Web サイトをデバッグしているときに奇妙な現...

Java は Apache.POI を使用して HSSFWorkbook を Excel にエクスポートします

Apache.POI の HSSFWorkbook を使用して Excel にエクスポートします。具...

Mysql 更新マルチテーブル共同更新方法の概要

次に、2 つのテーブルを作成し、一連の SQL 文を実行します。SQL 文の実行後にテーブル内のデー...

Nginx サーバーで Web クローラーをブロックおよび禁止する方法

通常、すべての Web サイトは、多くの非検索エンジン クローラーに遭遇します。これらのクローラーの...

Vueでキャッシュされたページを管理する方法

目次問題1: 破壊1. 破壊する方法2. いつ破壊するか2.1 解決策1: route.queryを...