今日もまた罠に落ちてしまいました。 私は以前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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Vue+Openlayer をベースに geojson を動的に読み込む方法
序文:ある日、DockerでMySQLサービスを構築したところ、MySQLのコマンドラインで中国語の...
目次MySQL の基本的な共通コマンド1. SQL文2. テーブルを作成する3. フィールドのプロパ...
Traceroute を使用すると、情報がコンピュータからインターネットの反対側のホストまでたどるパ...
init_connectの役割init_connect は通常、接続が来たときに、自動コミットを 0...
パフォーマンスは本当に重要ですか?パフォーマンスは重要であり、誰もがそれを知っています。なぜ私たちは...
MySQL データベースには増分バックアップ メカニズムはありませんが、マスター データベース内のす...
目次序文Vue 更新ビューパッチ同じVノードパッチVノード更新子供序文Vue は仮想 DOM を使用...
目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...
前回の記事では、Navicat for Mysql 接続エラー 1251 (接続失敗) の問題を解決...
インストール環境: CAT /etc/os-release CentOS システムのバージョン情報を...
https をサポートしていない Web サイトは、ブラウザによって徐々に安全でないとマークされるた...
私の最初のサーバープログラム現在、オンラインゲームの書き方を学んでいるので、サーバーサイドのプログラ...
ビンログBinLog は、データベース テーブル構造の変更 (テーブルの作成、変更など) とテーブル...
目次HTTP ハイジャック、DNS ハイジャック、XSS HTTPハイジャックDNSハイジャックXS...
序文:ストレージ エンジンはデータベースの中核です。MySQL の場合、ストレージ エンジンはプラグ...