MySQL 导入数据 ERROR 1227 错误
2026-01-16 by dongnan
问题描述
mysql 导入数据时,提示如下错误:
ERROR 1227 (42000) at line 9972 in file: '/root/demo.sql': Access denied; you need (at least one of) the SUPER privilege(s) for this operation
环境描述
MySQL 5.7.37
问题原因
导入视图(VIEW)时,如果 SQL 中的 DEFINER 用户与你当前导入用户不同,MySQL 需要 SUPER 权限才能继续,否则直接报错。
首先定位到 9972行
sed -n '9972p' demo.sql
/*!50001 CREATE ALGORITHM=UNDEFINED */
然后定位其 10行范围
sed -n '9970,9979p' demo.sql
/*!50001 SET character_set_results = utf8mb4 */;
/*!50001 SET collation_connection = utf8mb4_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`demo-user`@`%` SQL SECURITY DEFINER */
/*!50001 VIEW `view_cxgmqd` AS select `p`.`product_code` AS `product_code`,round((coalesce(`n`.`asset_nav_total`,0) / 10000),2) AS `asset_nav_total`,coalesce(`n`.`nav_date`,now()) AS `nav_date`,`p`.`product_name` AS `product_name` from (((select `demo-db`.`cd_product`.`product_code`
解决方法
把 .sql 文件中所有 DEFINER=... 删除:
sed -i 's/\/\*!50013 DEFINER=`demo-user`@`%` SQL SECURITY DEFINER \*\///g' demo.sql
或更干脆删掉所有 DEFINER:
sed -i 's/DEFINER=`[^`]*`@`[^`]*`//g' demo.sql
然后再导入即可成功。
其它
对比 sed、awk、head、tail 定位到目标行需要的时间:
文件信息
du -h demo.sql
568M demo.sql
wc -l demo.sql
10096 demo.sql
sed 花费时间
time sed -n '9972p' /root/demo.sql
/*!50001 CREATE ALGORITHM=UNDEFINED */
real 0m0.607s
user 0m0.121s
sys 0m0.217s
head/tail 花费时间
time head -n 9972 /root/demo.sql | tail -n 1
/*!50001 CREATE ALGORITHM=UNDEFINED */
real 0m0.717s
user 0m0.331s
sys 0m0.833s
awk 花费时间
time awk 'NR==9972' /root/demo.sql
/*!50001 CREATE ALGORITHM=UNDEFINED */
real 0m0.173s
user 0m0.064s
sys 0m0.108s
小结
- awk 最快,适合大文件。
- sed 其次,
- 单行:sed -n 'Np'
- 范围:sed -n 'N,Mp'
- head与tail 组合低后。
参考
- ChatGPT