运维检查:mysql表自增id是否快要用完

server/2024/9/24 4:23:59/

数据库表中最大自增ID用完会报错。判断是否接近或达到自增ID类型的最大值:‌
对于MySQL中的自增ID,‌如果使用的是int类型,‌其无符号(‌unsigned)‌的最大值可以达到2^32 - 1,‌即4294967295。‌如果使用的是有符号的bigint类型 2^63 - 1,无符号的 2^64 - 1。如果查询到的最大ID值接近或达到这个数值,‌那么自增ID可能即将用完或已经用完。‌

<?php// 数据库配置
$host = 'localhost';
$db = 'your_database';
$user = 'your_username';
$pass = 'your_password';try {// 创建PDO实例$pdo = new PDO("mysql:host={$host};dbname={$db};charset=utf8mb4", $user, $pass);$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// 获取所有表名$stmt = $pdo->query('SHOW TABLES');$tables = [];while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {$tables[] = array_shift($row); // 将表名提取出来}foreach ($tables as $table) {try {// 查询表的自增字段状态$stmt = $pdo->prepare('SHOW TABLE STATUS LIKE :table');$stmt->bindParam(':table', $table);$stmt->execute();$tableStatus = $stmt->fetch(PDO::FETCH_ASSOC);if (null !== $tableStatus['Auto_increment']) {// 检查自增ID是否接近最大值, 假设使用的是BIGINT类型$maxId = getTableAutoIncrementMaxId($pdo, $table);// 检查自增ID是否接近最大值if (($maxId - $tableStatus['Auto_increment']) < 10000) {echo "警告:表 {$table} 的自增ID即将用尽,当前ID: {$tableStatus['Auto_increment']}, 最大ID: {$maxId}\n";} else {echo "表 {$table} 的自增ID正常,当前ID: {$tableStatus['Auto_increment']}\n";}} else {echo "----表 {$table} 没有自增字段\n";}} catch (PDOException $e) {echo "表 {$table} 的查询出现错误: ".$e->getMessage()."\n";}}
} catch (PDOException $e) {echo '数据库连接失败: '.$e->getMessage();
}/*** 判断表的子序自增ID是否存在,跟根据自增类型获取ID最大值** @param $pdo* @param $table** @return float|int|object*/
function getTableAutoIncrementMaxId($pdo, $table)
{$powNum = 31;// 准备SQL查询语句$stmt = $pdo->prepare("SHOW COLUMNS FROM {$table} WHERE Extra='auto_increment'");// 执行查询$stmt->execute();// 查找自增字段$column = $stmt->fetch(PDO::FETCH_ASSOC);if (!empty($column)) {// 检查bigint类型if (false !== strpos($column['Type'], 'bigint')) {$powNum = 63;}// 无符号(‌unsigned)‌if (false !== strpos($column['Type'], 'unsigned')) {++$powNum;}}return pow(2, $powNum) - 1;
}


http://www.ppmy.cn/server/62270.html

相关文章

sentinel源码分析: dashboard与微服务的交互、pull模式持久化

文章目录 原始方式微服务端规则如何保存规则如何加载进内存微服务端接收控制台请求控制台推送规则总结 pull拉模式官方demo如何整合Spring Cloud整合Spring Cloud 前置知识 SentinelResource的实现原理、SphU.entry()方法中ProcessorSlotChain链、entry.exit() 建议先会使用se…

HDFS 块重构和RedundancyMonitor详解

文章目录 1. 前言2 故障块的重构(Reconstruct)2.1 故障块的状态定义和各个状态的统计信息2.2 故障文件块的查找收集2.2.1 Mis Replica的检测2.2.2 延迟队列(postponedMisreplicatedBlocks)的构造和实现向postponedMisreplicatedBlocks中添加Block从postponedMisreplicatedBlock…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

玩转HarmonyOS NEXT之IM应用首页布局

本文从目前流行的垂类市场中&#xff0c;选择即时通讯应用作为典型案例详细介绍HarmonyOS NEXT的各类布局在实际开发中的综合应用。即时通讯应用的核心功能为用户交互&#xff0c;主要包含对话聊天、通讯录&#xff0c;社交圈等交互功能。 应用首页 创建一个包含一列的栅格布…

【Oracle】实验三 Oracle数据库的创建和管理

【实验目的】 掌握Oracle数据库的创建方法使用DBCA创建数据库在数据库中装入SCOTT用户及其表 【实验内容】 使用DBCA创建数据库&#xff0c;名为MYDB&#xff0c;找到其初始化文件(文本型和服务器型文件都要找到)&#xff0c;查看各类默认位置并记录下来(包括物理文件所在目…

Perl高手秘籍:自定义操作符的炼金术

&#x1f31f; Perl高手秘籍&#xff1a;自定义操作符的炼金术 Perl是一种极其灵活的编程语言&#xff0c;它不仅支持内置的操作符&#xff0c;还允许开发者定义自己的操作符。自定义操作符可以极大地增强Perl代码的表达力和功能性。本文将深入探讨如何在Perl中定义自定义操作…

超市管理系统 需求分析与设计 UML 方向

一、项目介绍 1.1项目背景 随着经济一体化和电子商务的迅速发展&#xff0c;网络传播信息的速度打破了传统信息传递的模式&#xff0c;互联网的高速发展和计算机应用在各个高校进展迅速&#xff0c;更多信息化产品的突飞猛进&#xff0c;让现代的管理模式也发生了巨大的变化&…

自然语言处理基本概念

自然语言处理基本概念 所有学习循环神经网络的人都是看这一篇博客长大的&#xff1a; https://colah.github.io/posts/2015-08-Understanding-LSTMs/ import jieba import torch from torch import nns1 "我吃饭了&#xff01;" s2 "今天天气很好&#xff01…