MySQL テーブルにおける非主キー列オーバーフロー監視の詳細な説明

MySQL テーブルにおける非主キー列オーバーフロー監視の詳細な説明

今日もまた罠に落ちてしまいました。 私は以前MySQLの主キーオーバーフローに遭遇したことがあり、それをPrometheusで監視しました。詳細については、MySQLの主キーオーバーフローのレビューをご覧ください。

今回遭遇した落とし穴は、さらに隠れたものでした。 ログ テーブル内の int 型の signed 列がいっぱいです。迅速な解決策は、もちろん、緊急措置として新しいテーブルに切り替え、一部の履歴データを古いテーブルからホット テーブルに移動することです。

障害が発生したら、修復する時です。問題を解決したら、他のすべての本番環境テーブルを確認するためのスクリプトをすぐに作成します。

以下は暫定的に使用している検出スクリプトです。まだ完璧ではないので、このまま使用します。

2 つのファイルに分割します (1 つの SQL ファイル、1 つのシェル スクリプト)

check.sqlの内容は次のとおりです。

選択 
キャスト( pow(2, ケースデータ型
  'tinyint' の場合は 7
  'smallint' の場合は 15
  'mediumint' の場合は 23
  'int' の場合は 31
  'bigint' の場合は 63
  end+(column_type like '% unsigned'))-1 は、decimal(30,0)) は、max_int として、
' - ',
concat ('(', concat('select ','max(',COLUMN_NAME,')',' from ',TABLE_SCHEMA,'.',TABLE_NAME),')') 
から 
情報スキーマ.COLUMNS 
どこ 
TABLE_SCHEMA が ('information_schema'、'sys'、'test'、'mysql'、'performance_schema') にありません 
そして 
 DATA_TYPE IN ('int') ;

データベース内で直接実行すると、効果は次のようになります。

check.sh の内容は次のとおりです。

#!/bin/bash
# int 型を監視します。使用可能なスペースが 500 万未満の場合、DDL 操作を実行するように通知します。 # インデックスのない大きな列によってデータベースが遅くなるのを防ぐため、セッション レベルの max_execution_time を 2 秒に設定します。ただし、一部の列が欠落する可能性があるため、注意してください。 # 注: ここでは bigint 型をチェックしていません。必要に応じて、check.sql の where 条件で DATA_TYPE を変更して、bigint チェック ソース /etc/profile を追加してください。
セット-u

mkdir $(日付 +%F) -pv

# ステップ1 {'192.168.1.100','192.168.1.110','192.168.1.120','192.168.1.130'}内のホストの検出;

mysql -udts -pdts -h${ホスト} -BN < check.sql 2>/dev/null > sql.log
待って

echo "説明: | 現在の列に許可される最大値 | 検査用の SQL " >> $(date +%F)/$host.log

行を読み取りながら、
  ret=$(mysql -udts -pdts -h${host} -BNe "セッション max_execution_time=2000 を設定;$line を選択" 2>/dev/null)
  ${ret} をエコーする
  [[ "${ret}" == "NULL" ]]の場合
  続く
  フィ
  [ ${ret} -lt 5000000 ] の場合; 
   echo "$line の残りスペース ${ret}、テーブルの使用可能な水位は 500 万未満です。DDL を bigint 型に変更することをお勧めします" >> $(date +%F)/$host.log
  
  フィ
完了 < ./sql.log

終わり

# step2 検査内容をパッケージ化してメールで送信します(生産状況に応じて変更する必要がある場合があります)
tar czf $(日付 +%F).tar.gz $(日付 +%F)
sendemail -s 192.168.1.200 -f [email protected] -t [email protected] -a $(date +%F).tar.gz -u "$(date +%F) int 水位検査ログ" -o message-content-type=html -o message-charset=utf8 -m "詳細は添付ファイルをご覧ください"

# ステップ 3 毎日生成される日付付きディレクトリと tar.gz ファイルをクリーンアップします。ここではコマンドを投稿しません。

次に、毎日午前 10 時に cron ジョブを追加します。

最後に、毎日受信するメールの内容は、おおよそ次のようになります。

これで、MySQL テーブル内の非主キー列のオーバーフローを監視する方法に関するこの記事は終了です。MySQL の非主キー列のオーバーフローの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の自動増分主キーに関する詳細な説明
  • Mysql 主キー UUID と自動増分主キーの違いと利点と欠点
  • MySQL主キー命名戦略関連
  • MySQL の自動増分主キーが使い果たされた場合の対処方法
  • MySQL の自動増分 ID (主キー) が不足した場合の解決策
  • MySQL が uuid または snowflake id を主キーとして使用することを推奨しない理由の詳細な分析
  • Prometheus を使用して、MySQL の自動増分主キーの残りの使用可能パーセンテージをカウントします。
  • 主キーを追加または変更するMySQL SQL文操作

<<:  Dockerコンテナのk8sデプロイメントの実装

>>:  Vue+Openlayer をベースに geojson を動的に読み込む方法

推薦する

C++ TpeScriptシリーズのジェネリックについて

目次1. テンプレート2. ジェネリック3. ジェネリック再帰4. デフォルトのジェネリックパラメー...

MySQL 8.0.18 インストール構成の最適化チュートリアル

MySQLのインストール、設定、最適化は参考用です。具体的な内容は次のとおりです。 MySQL ダウ...

Vueは画像切り替え効果を実現

この記事の例では、画像切り替え効果を実現するためのVueの具体的なコードを参考までに共有しています。...

Linux コマンドラインからファイルを削除する実用的な方法

rm コマンドrm コマンドは、ファイルを削除するときによく使用されるコマンドです。ファイルまたはデ...

ページリファクタリングスキル - コンテンツ

雑談はここまでにして、インターネット上で見つかる高性能な Yahoo ウェブサイトを構築するための数...

JavaScript のモジュール性の説明

目次序文: 1. コンセプト2. モジュール化の利点3. 複数のスクリプトタグを導入した後の問題1....

弾力性のあるナビゲーション効果を実現するJavaScript

この記事では、弾性ナビゲーション効果を実現するためのJavaScriptの具体的なコードを参考までに...

Tomcat の maxPostSize 設定に関する問題と注意事項

1. maxPostSize を設定する理由は何ですか? tomcat コンテナには送信データのサイ...

ウェブページ作成によく使われる英語フォント

アリアルArial は、多くの Microsoft アプリケーションとともに配布されるサンセリフ T...

Dockerコンテナを介してランプアーキテクチャを構築するプロセス

目次1. Centosイメージを取得する2. nginxイメージをビルドする3. MySQLイメージ...

シンプルなページカウントダウンを実現するJavaScript

この記事では、参考までに、シンプルなページカウントダウンを実装するためのJavaScriptの具体的...

独自のサーバーを素早く構築する方法の詳細なチュートリアル(Java 環境)

1. サーバーの購入1. 私はAlibaba Cloudのサーバーを選択しました。学生向けで月額9...

Bash で山括弧を使用するその他の方法

序文この記事では、山括弧のその他の用途をさらに詳しく見ていきます。前回の記事では、山括弧 (<...

Vue Element フロントエンドアプリケーション開発: Vuex での API ストアビューの使用

目次概要1. フロントエンドとバックエンドの分離とWeb APIの優先ルート設計2. Axiosネッ...

Dockerカスタムネットワークコンテナ相互接続

目次序文-リンクカスタムネットワーク質問する序文前回は、 -Linkパラメータを使用してコンテナ間の...