本文介绍: 解决MySQL的innodb更新information_schema表表数据不及时的问题,差点让DBeaver背锅

前言

由于数据库要做一个模板库,用于安装包中,因此需要删除那些不需要的数据,只保留一些配置方面的数据,因此要重做auto_increment,还要清空一堆表的数据,但是我发现设置auto_increment和截断表后DBeaver中的auto_increment还是原来的值,数据量也是原来的值,怎么刷新都没用,这就让我十分恼火了,还以为是DBeaver故意搞事情不更新结果查了一堆资料发现原来是MySQL自己的问题innodb不会立即将表信息保存到MySQL的information_schema表中,因此导致在DBeaver即使设置了auto_increment刷新一下还会还原

 按一下F5后

实则是修改成功的,但是刷新完就还原了,搞得我无法得知这个表是否真的被清空数据,且auto_increment还原了 

初步解决

我看了很多文章说的是修改MySQL的Global settings,但是这个会严重影响MySQL的执行效率,而且我试了一下,也不行,比如说:

SET GLOBAL innodb_stats_on_metadata=on;

上述语句执行后并没有什么用。

然后还有一句是

ANALYZE TABLE {表名};

这个确实有用,但是每次只能刷新一张表,我改了上百张表,得手动执行100多次,而且每次表名还不同,这谁受得了!因此必须要找一个更好解决方案

最后选择了Python

最终解决

使用Python刷新所有,代码如下:

import pymysql

connection = pymysql.Connection(
    host="127.0.0.1",
    port=3306,
    user="root",
    password='123456'
)

cursor = connection.cursor()
connection.select_db("test_db")
result = cursor.execute("show tables")
allTables: tuple = cursor.fetchall()

for table in allTables:
    tableName = table[0]
    print(f"table name is {tableName} start analyze")
    cursor.execute(f"ANALYZE TABLE {tableName}")

使用pymysqlpython连接到自己的数据库然后查询出所有的表,循环执行ANALYZE TABLE即可

不得不说Python写这玩意行数是真少,且执行最为方便。

附录

安装pymysql方法如下:

这样安装是最快且最稳妥的。

原文地址:https://blog.csdn.net/DCTANT/article/details/130196481

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_10823.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注