返回顶部
首页 > 资讯 > 数据库 >如何解决通过shell脚本模拟MySQL自增列的不一致问题
  • 181
分享到

如何解决通过shell脚本模拟MySQL自增列的不一致问题

2024-04-02 19:04:59 181人浏览 八月长安
摘要

小编给大家分享一下如何解决通过shell脚本模拟Mysql自增列的不一致问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!    mysql的自增列问题其实很有意思,

小编给大家分享一下如何解决通过shell脚本模拟Mysql自增列的不一致问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

   mysql的自增列问题其实很有意思,在重启数据库之后,会按照max(id)+1的方式来计算,这样一个看起来有些别扭的实现方式在早期版本就饱受诟病,在Mysql 5.7都没有解决掉,终于在8.0松口了,计划在这个版本中修复。

   而重启会带来自增列一类的潜在问题,而如果不重启其实也有可能会有自增列的不一致问题。和两个参数table_definition_cache和table_open_cache还是密切相关的。

  主要的原因是什么呢,引用阿里数据库内核团队的解释(https://www.kancloud.cn/taobaomysql/monthly/67171):一方面InnoDB表自增值是存储在表对象中的,表对象又是放在缓存中的,如果表太多而不能全部放在缓存中的话,老的表就会被置换出来,这种被置换出来的表下次再使用的时候,就要重新打开一遍,对自增列来说,这个过程就和实例重启类似,需要 select max(id) + 1 算一下自增值。

  表对象缓存大小由 table_definition_cache 系统变量控制,最小值为400,表缓存相关的另一个系统变量是table_open_cache,这个控制的是所有线程打开表的缓存大小,这个缓存放在server层。

   我在查看了5.6.14的环境之后,发现这个值已经提升到了500,而在MySQL 5.7中,提升到了1400,可见这方面了下了大功夫。

  MySQL 5.6.14的参数值情况

# mysqladmin var|grep table_open_cache
| table_open_cache                           | 256
| table_open_cache_instances                 | 1  
# mysqladmin var|grep table_definition_cache
| table_definition_cache                     | 500

MySQL 5.7中的参数值情况:

mysql> show variables like 'table_definition_cache';
| Variable_name          | Value |
| table_definition_cache | 1400  |


mysql> show variables like 'table_open_cache';
| Variable_name    | Value |
| table_open_cache | 2000  | 阿里的同学给出了testcase的伪代码,我就来实现以下,给出shell版本的测试脚本。

首先我们可以模拟一下这个测试的基线,把两个变量都修改为400.

SET GLOBAL table_definition_cache = 400;
SET GLOBAL table_open_cache = 400;

然后使用如下的shell脚本,仔细来看,脚本逻辑很简单了。

生成500个表,然后插入一条数据,修改自增列值,然后查询表里的数据,使得数据能够刷出,稍作等待,查看show create table的结果。

for i in {1..500}
do
mysql   test_new <<EOF
CREATE TABLE t$i(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(30), PRIMARY KEY(id)) ENGINE=InnoDB;
INSERT INTO t$i(name) VALUES("InnoDB");
ALTER TABLE t$i AUTO_INCREMENT = 100;
EOF
done

for i in {1..500}
do
mysql    test_new <<EOF
SELECT * FROM t$i;
EOF
done

sleep 10;

for i in {1..3}
do
mysql   test_new <<EOF
SHOW CREATE TABLE t$i;
EOF
done

测试完成之后,来查看自增列的值情况.

在5.6.14中效果很明显。

Table   Create Table
t1      CREATE TABLE `t1` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `name` varchar(30) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

而在5.7中,发现这类问题竟然还复现不了了,至于是代码层级做了修复还是和其它参数有关,就需要深入一下了。

Table   Create Table
t1      CREATE TABLE `t1` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `name` varchar(30) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=latin1

看完了这篇文章,相信你对“如何解决通过shell脚本模拟MySQL自增列的不一致问题”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: 如何解决通过shell脚本模拟MySQL自增列的不一致问题

本文链接: https://lsjlt.com/news/62506.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何解决通过shell脚本模拟MySQL自增列的不一致问题
    小编给大家分享一下如何解决通过shell脚本模拟MySQL自增列的不一致问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!    MySQL的自增列问题其实很有意思,...
    99+
    2024-04-02
  • 如何通过shell脚本对mysql的增删改查
    这篇文章主要介绍了如何通过shell脚本对mysql的增删改查,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。shell操作mysql获取mysql默认密码新安装的mysql,...
    99+
    2023-06-20
  • 如何解决BOX模型解释不一致问题
    小编给大家分享一下如何解决BOX模型解释不一致问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 在FF和IE中的BOX模型解...
    99+
    2024-04-02
  • 如何解决 shell 脚本重复执行的问题
    简介 flock 是文件锁命令,它可以保证linux系统上进程之间安全的访问临界资源,在shell脚本中,可以用来控制逻辑的互斥性 实例1 现有脚本 a.sh, 内容如下 #!/bin/bash echo "[...
    99+
    2022-06-04
    shell 脚本重复执行 解决shell脚本重复执行
  • 如何解决不能通过mysql.sock连接MySQL问题
    这篇文章主要为大家展示了“如何解决不能通过mysql.sock连接MySQL问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决不能通过mysql.soc...
    99+
    2024-04-02
  • 如何解决MySQL自增ID用完的问题
    本篇内容介绍了“如何解决MySQL自增ID用完的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!自增id...
    99+
    2024-04-02
  • 如何解决MySQL存储时间出现不一致的问题
    小编给大家分享一下如何解决MySQL存储时间出现不一致的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!用Java在获取了系统时间后,存入MySQL数据库时,当时间的类型为datetime或Timestamp时发现数据库...
    99+
    2023-06-14
  • 如何解决Mysql乘法除法精度不一致问题
    这篇文章主要介绍如何解决Mysql乘法除法精度不一致问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!问题今天在写项目功能的时候,有一个统计金额的情况,然后需要进行单位转换,所以写下...
    99+
    2024-04-02
  • 如何解决mysql的int型主键自增问题
    这篇文章主要介绍“如何解决mysql的int型主键自增问题”,在日常操作中,相信很多人在如何解决mysql的int型主键自增问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决mysql的int型主键自...
    99+
    2023-06-20
  • 解决VMWare 虚拟机centos 时间与本地时间不一致的问题
    VM Ware 虚拟机centos 时间与本地时间不一致,如下图。大致是时区设置的问题,设置为中国标准时区即可,CST。 解决办法 1.安装时间同步插件 ntpdate yum i...
    99+
    2024-04-02
  • 如何解决vue前后端端口不一致的问题
    本篇内容主要讲解“如何解决vue前后端端口不一致的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决vue前后端端口不一致的问题”吧!vue前后端端口不一致在config  i...
    99+
    2023-06-20
  • 如何解决docker中mysql时间与系统时间不一致问题
    这篇文章将为大家详细讲解有关如何解决docker中mysql时间与系统时间不一致问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在Docker中装mysql时,发现数据库时间与系统时间相差8个小时。...
    99+
    2023-06-22
  • 如何解决node.js在Linux下执行shell命令、.sh脚本的问题
    小编给大家分享一下如何解决node.js在Linux下执行shell命令、.sh脚本的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!首先,引入子进程模块var process = requ...
    99+
    2023-06-28
  • 如何解决MySQL到DB2的技术转型过程中的数据一致性问题?
    如何解决MySQL到DB2的技术转型过程中的数据一致性问题?随着企业业务的发展和需求的变化,很多企业在数据存储和管理方面选择了将原本的MySQL数据库转向DB2数据库。然而,在这个技术转型的过程中,由于两种数据库的存储机制和特性不同,可能会...
    99+
    2023-10-22
    MySQL DB 关键词: 数据一致性问题
  • 如何解决Mysql更新自增主键id遇到的问题
    这篇文章主要为大家展示了“如何解决Mysql更新自增主键id遇到的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Mysql更新自增主键id遇到的问题”这篇文章吧。为什么要更新自增id...
    99+
    2023-06-21
  • 如何解决Oracle expdp/impdp数据迁移过程中字符集不一致的问题
    这篇文章给大家介绍如何解决Oracle expdp/impdp数据迁移过程中字符集不一致的问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前提:   &...
    99+
    2024-04-02
  • 如何解决Pytorch在测试与训练过程中的验证结果不一致问题
    小编给大家分享一下如何解决Pytorch在测试与训练过程中的验证结果不一致问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!引言今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,...
    99+
    2023-06-15
  • 如何通过Ajax手动解决WordPress WP-PostViews不计数的问题
    这篇文章将为大家详细讲解有关如何通过Ajax手动解决WordPress WP-PostViews不计数的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。某个网站开启了M...
    99+
    2024-04-02
  • 如何在Unix系统中使用Java来解决Shell脚本的负载问题?
    如何在Unix系统中使用Java来解决Shell脚本的负载问题? 在Unix系统中,Shell脚本是非常常见的一种脚本语言。它可以方便地实现各种操作,比如文件操作、进程管理、网络操作等等。但是,在一些特定的场景中,Shell脚本的性能可能无...
    99+
    2023-08-03
    unix load shell
  • Excel数据导入Mysql常见问题汇总:如何解决导入日期格式不一致的问题?
    Excel数据导入Mysql常见问题汇总:如何解决导入日期格式不一致的问题?在进行数据导入时,经常会遇到Excel中日期格式与Mysql数据库中日期格式不一致的情况。这种问题的出现可能导致数据导入失败或者数据显示出错。本文将介绍一些解决这一...
    99+
    2023-10-22
    Excel MySQL 导入
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作