今日もまた罠に落ちてしまいました。 私は以前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 を動的に読み込む方法
目次1. テンプレート2. ジェネリック3. ジェネリック再帰4. デフォルトのジェネリックパラメー...
MySQLのインストール、設定、最適化は参考用です。具体的な内容は次のとおりです。 MySQL ダウ...
この記事の例では、画像切り替え効果を実現するためのVueの具体的なコードを参考までに共有しています。...
rm コマンドrm コマンドは、ファイルを削除するときによく使用されるコマンドです。ファイルまたはデ...
雑談はここまでにして、インターネット上で見つかる高性能な Yahoo ウェブサイトを構築するための数...
目次序文: 1. コンセプト2. モジュール化の利点3. 複数のスクリプトタグを導入した後の問題1....
この記事では、弾性ナビゲーション効果を実現するためのJavaScriptの具体的なコードを参考までに...
1. maxPostSize を設定する理由は何ですか? tomcat コンテナには送信データのサイ...
アリアルArial は、多くの Microsoft アプリケーションとともに配布されるサンセリフ T...
目次1. Centosイメージを取得する2. nginxイメージをビルドする3. MySQLイメージ...
この記事では、参考までに、シンプルなページカウントダウンを実装するためのJavaScriptの具体的...
1. サーバーの購入1. 私はAlibaba Cloudのサーバーを選択しました。学生向けで月額9...
序文この記事では、山括弧のその他の用途をさらに詳しく見ていきます。前回の記事では、山括弧 (<...
目次概要1. フロントエンドとバックエンドの分離とWeb APIの優先ルート設計2. Axiosネッ...
目次序文-リンクカスタムネットワーク質問する序文前回は、 -Linkパラメータを使用してコンテナ間の...