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 を動的に読み込む方法

推薦する

MySQLのLIMIT文について詳しく説明します

目次質問サーバー層とストレージエンジン層LIMITって何ですか?何をするか?トゥカオ最近、Q&...

CentOS7にMySQL 8.0.26をインストールする手順

1. まず、お使いのマシンに応じて、MySQL 公式サイトから対応するデータベースをダウンロードしま...

vue-cli を使用してプロジェクトを作成し、webpack でパッケージ化する方法

1. 環境を準備する(Node.jsをダウンロードし、環境変数を設定する) 2. vue-cliをグ...

Node.jsとDenoの比較

目次序文Denoとは何ですか? Node.jsとの比較建築ESモジュール依存関係の管理TypeScr...

React構成サブルーティングの実装

1. コンポーネント First.js にはサブコンポーネントがあります。 './Admin...

仮想マシンUbuntu 16.04がインターネットに接続できない問題の解決策

Ubuntu をインストールしたばかりですが、開いたときにネットワーク接続がありませんでした。右上隅...

CentOS での mysql5.7 の詳細なインストールと設定のチュートリアル

インストールユーザーにインストール権限があることを確認してくださいルートスイッチなしsuルート(su...

Centos8 で Apache httpd2.4.37 を使用して Web サーバーをインストールする詳細な手順

ステップ 1: yum install httpd -y #httpd サービスをインストールします...

Ubuntu 20.04 Firefox でビデオを再生できない (Flash プラグインがない) 場合の解決策

1. Flashプラグインパッケージのダウンロードアドレス: https://get.adobe.c...

MySQLクエリ構文の概要

序文:この記事では主に、MySQL の where、group by、order by、limit、...

MySQL ビューの原理と基本操作例

この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...

インタラクションデザインと心理学の驚くべきつながり18選

デザイナーは心理学を理解する必要があるデザイナーが知るべき心理学という本は非常に興味深いです。まず、...

MySQL 8.0 の新機能: ハッシュ結合

MySQL 開発チームは、2019 年 10 月 14 日に MySQL 8.0.18 GA バージ...

流れと動的なライン効果を実現する純粋なCSSコード

アイデア:外側のボックスは背景を設定し、内側のボックスは背景の幅と高さを設定し、ボックスを動かすアニ...