当前位置: 首页 > news >正文

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

数据库表中最大自增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.lryc.cn/news/401036.html

相关文章:

  • 深入理解FFmpeg--libavformat接口使用(一)
  • 坚持日更的意义何在?
  • 内容长度不同的div如何自动对齐展示
  • Qt中https的使用,报错TLS initialization failed和不能打开ssl.lib问题解决
  • P2p网络性能测度及监测系统模型
  • zookeeper相关总结
  • 【openwrt】Openwrt系统新增普通用户指南
  • 【GD32】从零开始学GD32单片机 | WDGT看门狗定时器+独立看门狗和窗口看门狗例程(GD32F470ZGT6)
  • 详解曼达拉升级:如何用网络拓扑结构扩容BSV区块链
  • 编译打包自己的云手机(redroid)镜像
  • 自动驾驶的规划控制简介
  • java配置nginx网络安全,防止国外ip访问,自动添加黑名单,需手动重新加载nginx
  • ARP协议
  • Qt程序图标更改以及程序打包
  • 普通人还有必要学习 Python 之类的编程语言吗?
  • 「Python」基于Gunicorn、Flask和Docker的高并发部署
  • 在攻防演练中遇到的一个“有马蜂的蜜罐”
  • 一文了解MySQL的表级锁
  • LVS+Keepalive高可用
  • 网络安全防御【防火墙安全策略用户认证综合实验】
  • IOS上微信小程序密码框光标离开提示存储密码解决方案
  • AWS CDN新增用户ip 地区 城市 响应头
  • Elasticsearch基础概念
  • Redis 7.x 系列【24】哨兵模式配置项
  • SpringBoot+Vue实现简单的文件上传(策略模式)
  • 软考中级科目包含哪些?应该考哪个?
  • ArcGIS Enterprise 命令行组件创建配置
  • Web组成架构
  • 「Pytorch」roLabelImg 图像异常旋转 bug
  • java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】