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

如需转载,标记出处


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

TRUNCATE TABLE LargeTable
 GO

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'

解释:

整体来说,这条命令的目的是从 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成功的

成功了!!

img

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)文件系统根目录上的磁盘空间不足

img点击并拖拽以移动编辑

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

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

5)ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

报错原因

这个报错大部分情况下是配置文件和sock文件的问题。今天下午按照常规处理实在没辙了,直接返回之前的快照。现在晚上又遇到它了,冤家路窄,结果我搞定了

数据库存储的太多,日志文件满了

比如我的

img点击并拖拽以移动编辑

img点击并拖拽以移动编辑

解决方法

这个问题有点普遍,我单开了一篇