머리말
데이터베이스는 설치 패키지의 템플릿 라이브러리가 될 것이기 때문에 그 불필요한 데이터를 삭제하고 일부 구성 데이터 만 유지해야하므로 auto_increment를 다시 실행하고 테이블 무리의 데이터를 지우는 것이 필요하지만 내가 찾았습니다. 설정 auto_increment 및 테이블 절단 후 DBeaver의 auto_increment는 여전히 원래 값이고 데이터 볼륨도 원래 값입니다.아무리 새로 고쳐도 쓸모가 없습니다.이것은 나를 매우 짜증나게 합니다. 그 결과 많은 정보를 확인한 결과 MySQL 자체의 문제인 것으로 판명되었고, Innodb는 테이블 정보를 MySQL의 information_schema 테이블에 즉시 저장하지 않기 때문에 DBeaver에 auto_increment가 설정되어 있어도 복원됩니다. 새로 고침 후.
F5를 누른 후
사실 수정은 성공했는데 새로고침 후 복원이 되어서 이 테이블의 데이터가 정말 지워졌는지 알 수가 없었고, auto_increment가 복원이 되었는지는 알 수 없었습니다.
예비 솔루션
MySQL의 Global 설정 수정에 대한 글을 많이 읽었는데, 이는 MySQL의 실행 효율에 심각한 영향을 미칠 것 같아서 시도해 보았지만 잘 되지 않았습니다. 예를 들면 다음과 같습니다.
글로벌 설정 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}")
pymysql을 사용하여 Python이 자체 데이터베이스에 연결하도록 한 다음 모든 테이블을 쿼리하고 루프에서 ANALYZE TABLE을 실행합니다.
파이썬으로 작성된 줄의 수는 정말 적고 실행하기 가장 편리합니다.
부록
pymysql 설치 방법은 다음과 같습니다.
가장 빠르고 안전한 설치 방법입니다.