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

pt-archiver删除数据库的数据表/各种报错类型

这篇帖子是前面文的一部分延申

mysqlimport导入一亿数据的csv文件/一行命令删除表-CSDN博客

如需转载,标记出处

目录

pt-archiver命令格式

如果执行后出现下面报错

1)Cannot find an ascendable index in table at /usr/bin/pt-archiver line 3233.

2)ERROR 1030 (HY000): Got error 100 - 'InnoDB error' from storage engine或者ERROR 3 (HY000): Error writing file '/tmp/MLfd=35' (OS errno 28 - No space left on device)

3)DBD::mysql::st execute failed: Incorrect TIMESTAMP value: '0000-00-00 00:00:00' [for Statement "SELECT /*!40001 SQL_NO_CACHE */ `userid`,`itemid`,`categoryid`,`timestamp` FROM `uba`.`userBehavior` FORCE INDEX(`idx_userid`) WHERE (timestamp != '0000-00-00 00:00:00') ORDER BY `userid` LIMIT 1000"] at /usr/bin/pt-archiver line 6586.

(4)文件系统根目录上的磁盘空间不足


这个删除好慢要等挺久的,如果要数据表里的数据全删,直接用就好了

TRUNCATE TABLE LargeTableGO

pt-archiver命令格式

 先下载一个pt-archiver,时间太久忘记原来的命令了,复制黏贴下面的命令他会提示你安装命令

pt-archiver --source h=127.0.0.1,D=uba,t=userBehavior \
> --purge --limit 10000 --commit-each --no-check-charset \
> --where "timestamp = '0000-00-00 00:00:00'" \
> --user root --password 'root'

解释:

  • --source h=127.0.0.1,D=uba,t=userBehavior:指定 MySQL 数据库连接的主机(127.0.0.1),数据库名(uba)以及表名(userBehavior)。
  • --purge:在删除数据后,直接从数据库中删除这些记录,而不是将其转移到其他地方。
  • --limit 10000:控制每次处理的记录数,增加它的值可以减少操作次数
  • --commit-each:每删除一批数据(1000条),就立即提交事务,确保数据删除不会因为其他问题导致回滚。
  • -no-check-charset 跳过字符集检查,减少不必要开销
  • --where "timestamp = '0000-00-00 00:00:00'":仅删除 timestamp 等于 '0000-00-00 00:00:00' 的记录
  • --user root --password 'root':使用用户名 root 和密码 'root' 进行 MySQL 连接。

整体来说,这条命令的目的是从 userBehavior 表中按批次删除数据,每次删除最多 1000 条记录,且仅删除 timestamp 字段为 '0000-00-00 00:00:00' 的记录。

如果执行后出现下面报错

1)Cannot find an ascendable index in table at /usr/bin/pt-archiver line 3233.

说明没创建索引

其中id_userID下划线后面的userID一定要和表中的列名保持一致,大小写也一样

CREATE INDEX idx_userID ON userBehavior(userID);

2)ERROR 1030 (HY000): Got error 100 - 'InnoDB error' from storage engine或者ERROR 3 (HY000): Error writing file '/tmp/MLfd=35' (OS errno 28 - No space left on device)

这俩表明存储不够,将存储目录tmpdir 移动到更大的分区

1.显示数据库服务器的临时目录路径。

SHOW VARIABLES LIKE 'tmpdir';


#创建新的 tmpdir 目录sudo mkdir -p /mnt/mysqltmp
sudo chown -R mysql:mysql /mnt/mysqltmp
sudo chmod 1777 /mnt/mysqltmp  # 确保目录对 MySQL 具有正确权限#修改 MySQL 配置 编辑 MySQL 配置文件(通常是 /etc/mysql/my.cnf 或 /etc/my.cnf)
#Ubuntu/Debian: /etc/mysql/my.cnf 是主配置文件
#CentOS/RHEL: /etc/my.cnf 是默认的主配置文件[mysqld]
tmpdir=/mnt/mysqltmp#重启 MySQL 以使更改生效sudo systemctl restart mysql
--sql里面验证是否生效 执行:SHOW VARIABLES LIKE 'tmpdir';

如果你的mnt也满了,换更大空间的目录,我自己用/dev/shm/mysqltmp成功的

成功了!!


3)DBD::mysql::st execute failed: Incorrect TIMESTAMP value: '0000-00-00 00:00:00' [for Statement "SELECT /*!40001 SQL_NO_CACHE */ `userid`,`itemid`,`categoryid`,`timestamp` FROM `uba`.`userBehavior` FORCE INDEX(`idx_userid`) WHERE (timestamp != '0000-00-00 00:00:00') ORDER BY `userid` LIMIT 1000"] at /usr/bin/pt-archiver line 6586.

表明时间戳出错

解决办法

关掉严格模式(临时性解决)

-- 临时禁用严格模式
SET GLOBAL sql_mode = '';-- 恢复严格模式
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

(4)文件系统根目录上的磁盘空间不足

我自己的虚拟机已经扩充过一次,直接去看教程吧

【2023年全新保姆级教程】解决Ubuntu文件系统磁盘空间不足low disk space on filesystem root-CSDN博客


http://www.mrgr.cn/news/92892.html

相关文章:

  • 制造业中的“大数据”:如何实现精准决策?
  • 《UE5_C++多人TPS完整教程》学习笔记33 ——《P34 关卡与大厅之间的过渡(Transition Level And Lobby)》
  • Java实现pdf文件压缩(aspose-pdf实现压缩、itextpdf去除aspose-pdf版权水印)
  • cuda-12.4.0 devel docker 中源码安装 OpenAI triton
  • 代码随想录算法训练营第三十天 | 卡码网46.携带研究材料(二维解法)、卡码网46.携带研究材料(滚动数组)、LeetCode416.分割等和子集
  • 自然语言处理:文本表示
  • Linux系统服务安全检测手记
  • 本地搭建Ollama运行各种平台的大模型(deepseek),配合AnythingLLM-UI界面使用
  • 【漫话机器学习系列】111.指数之和的对数(Log-Sum-Exp)
  • 动态规划多阶段报童模型,c++ 实现, java 实现
  • yolov8,yolo11,yolo12 服务器训练到部署全流程 笔记
  • Verilog:I2C控制器
  • 【RAG】Embeding 和 Rerank学习笔记
  • Excel基础(详细篇):总结易忽视的知识点,有用的细节操作
  • 基因枷锁下的太空梦 —— 千钧一发电影观后感
  • (原创)用python语言基于paddleocr构建批量识别实现纸质和电子的增值税专用发票程序
  • 【漫话机器学习系列】112.逻辑回归(Logistic Regression)
  • Linux tar命令
  • 【漫话机器学习系列】114.逻辑 Sigmoid 函数
  • LE AUDIO广播规范之BASE