Pt-archiver 迁移数据到TiDB 5.4 LOAD DATA LOCAL INFILE 问题

【 TiDB 使用环境`】测试环境

【 TiDB 版本】 5.4.0 3.0.3

【遇到的问题】
使用pt-archiver 3.3.1 迁移数据到TiDB 遇到下述报错:
DBD::mysql::st execute failed: LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. [for Statement “LOAD DATA LOCAL INFILE ? INTO TABLE load_test.employees(emp_no,birth_date,first_name,last_name,gender,hire_date)” with ParamValues: 0=‘/tmp/4_PQCfSADupt-archiver’] at /usr/local/Cellar/percona-toolkit/3.3.1/libexec/bin/pt-archiver line 6876.

TiDB 用户:


其他我知道的设置:

【复现路径】
pt 语句:
pt-archiver --source u=root,h=host,P=3306,D=employees,t=employees --dest h=host,P=4000,u=root,D=load_test,t=employees --no-check-charset --where “1=1” --progress=500 --txn-size=1000 --limit=500 --statistics --no-delete --ask-pass --bulk-insert

【问题现象及影响】
使用参数 --bulk-insert 出现这个错误,去掉此参数可以正常一条一条insert,但是很慢.
测试了5.4.0 和 3.0.3 都是相同情况
【附件】


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

加个不检查版本参数 看看可以不

谢谢回复,我加了 --no-version-check 还是相同的报错,我看别人是可以用的,可能是我的TiDB设置哪里不对MySQL数据归档至TiDB

sqlmode检查过了?

我刚才把TiDB 的sql mode (global & session) 改成和MySQL一致的了,还是相同的报错

mysql> show variables like 'sql_mode';

±--------------±-----------------------+
| Variable_name | Value |
±--------------±-----------------------+
| sql_mode | NO_ENGINE_SUBSTITUTION |
±--------------±-----------------------+
1 row in set (0.01 sec)

重新试了一下并且开启了general log.
另外我自己在TiDB server放文件手动 LOAD DATA LOCAL INFILE 是可以成功的。。
[2022/04/08 06:05:59.561 +00:00] [INFO] [session.go:1867] [GENERAL_LOG] [conn=20] [user=root@10.28.101.45] [schemaVersion=24] [txnStartTS=0] [current_db=load_test] [sql=“LOAD DATA LOCAL INFILE ‘/tmp/0Lbw2phsBypt-archiver’ INTO TABLE load_test.employees(emp_no,birth_date,first_name,last_name,gender,hire_date)”]
这里的’/tmp/0Lbw2phsBypt-archiver’ 和pt archiver的报错应该是一样的,但是现实的是 INFO不是ERROR…

谢谢兄弟们,我发现应该是 /tmp 的问题,pt-archiver需要写临时文件做bulk insert的前提准备,我换了一个跑pt的机器就好了…:sweat_smile:

临时文件的问题

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。