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 基礎シリーズ: 関数とメソッド

推薦する

JavaScript でオブザーバー パターンを実装する方法

目次概要オブザーバーパターンの応用シナリオオブザーバーパターンの実装要約する概要オブザーバー パター...

MySQL における datetime と timestamp の違いと選択

目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...

MySQL 5.6.23 のインストールと設定環境変数のチュートリアル

この記事では、MySQL 5.6.23のインストールと設定のチュートリアルを参考までに紹介します。具...

MYSQL ロック解除とロックテーブルの紹介

MySQL ロックの概要他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純で...

Centos8環境でSSHポート番号を変更する方法

目次序文始める序文サーバーのデフォルトの SSH ポート番号は通常 22 であるため、ほとんどのユー...

Vue で Google サードパーティ ログインを実装するためのサンプル コード

目次1. 開発者プラットフォームの構成問題を解決する1. 開発者プラットフォームの構成1. 開発者プ...

GitHub のサードパーティ認証方式を Vue で実装する例

目次OAuth アプリの作成コードを取得するaccess_tokenを取得するユーザー情報を取得する...

JS WebSocket 切断理由とハートビートの仕組みの詳しい説明

1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたと...

アイデアがWebプロジェクトを公開した後、Tomcatサーバーがプロジェクトとそのソリューションを見つけることができません

概要プロジェクトは正常に作成され、正常にデプロイされましたが、以下に示すように、Tomcat サーバ...

非常に詳細な Vue-Router のステップバイステップのチュートリアル

目次1. ルータビュー2. ルータリンク3. リダイレクト4. ルーティングエイリアス5. ルーティ...

jQueryで大画面スクロール再生効果を実現

この記事では、大画面スクロール効果を実現するためのjQueryの具体的なコードを参考までに紹介します...

HTMLの基本構文は、HTMLを学び始めたばかりの人にとって便利です。

1.1 一般的なマーキング一般的なタグは開始タグと終了タグで構成されます。構文は次のとおりです: ...

HTML TextArea でのフォーマット保存の問題の解決方法

textarea の形式は保存時にデータベースに保存できますが、表示時には /n と相互に変換できな...

JavaScript でローカル変数をグローバル変数に変換する方法

まず関数の自己呼び出しを知る必要がある関数の自己呼び出し - 自己呼び出し関数1 回限りの関数 - ...

docker+jenkins+node.js の自動デプロイメント環境をゼロから構築する方法

このケースはCentOS 7システムに基づいていますDockerの使用経験がある人に適していますLi...