MySQL导入数据报错:mysql 使用 load data local infile导入数据Loading local data is disabled(Error 3948)和Error 2068

Loading local data is disabled; this must be enabled on both the client and server sides

  • 问题背景

    在学习黑马的MySQL进阶课程时,由于为了测试SQL的性能指标,需要导入一个数据量特别大的表,表中有1000w条件记录(大约2.2GB的数据),此时老师已经将这1000w条记录拆分成5张表了,我需要使用load指令将这五张表导入数据库,结果执行指令的过程中Navicate报了了Loading local data is disabled; this must be enabled on both the client and server sides这个错误

  • 问题原因

    其实这个问题看一眼报错信息就知道了,是由于local_infile参数没有开启(MySQL默认是0表示关闭该参数)。该参数的作用是控制导入权限,也就是说MySQL默认是禁止直接从外部导入数据的,相对应的参数还有local_outfile,它是控制导出权限的。

  • 解决方法

    这里我就不单单地记录如何解决这个问题,还顺带记录如何批量导入大量数据的这个过程,以供日后参考

    • Step1:创建一张表 tb_sku

      CREATE TABLE `tb_sku` (
        `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品id',
        `sn` varchar(100) NOT NULL COMMENT '商品条码',
        `name` varchar(200) NOT NULL COMMENT 'SKU名称',
        `price` int(20) NOT NULL COMMENT '价格(分)',
        `num` int(10) NOT NULL COMMENT '库存数量',
        `alert_num` int(11) DEFAULT NULL COMMENT '库存预警数量',
        `image` varchar(200) DEFAULT NULL COMMENT '商品图片',
        `images` varchar(2000) DEFAULT NULL COMMENT '商品图片列表',
        `weight` int(11) DEFAULT NULL COMMENT '重量(克)',
        `create_time` datetime DEFAULT NULL COMMENT '创建时间',
        `update_time` datetime DEFAULT NULL COMMENT '更新时间',
        `category_name` varchar(200) DEFAULT NULL COMMENT '类目名称',
        `brand_name` varchar(100) DEFAULT NULL COMMENT '品牌名称',
        `spec` varchar(200) DEFAULT NULL COMMENT '规格',
        `sale_num` int(11) DEFAULT '0' COMMENT '销量',
        `comment_num` int(11) DEFAULT '0' COMMENT '评论数',
        `status` char(1) DEFAULT '1' COMMENT '商品状态 1-正常,2-下架,3-删除',
        PRIMARY KEY (`id`) USING BTREE
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
      
    • Step2:开启导入权限

      set global local_infile=1;
      
    • Step3:导入数据

      load data local infile '/root/sql/tb_sku1.sql' into table `tb_sku` fields terminated by ',' lines terminated by '\n';
      

      注意:要确保路径正确,同时需要导入五次,我有五张表:tb_sku1、tb_sku2、tb_sku3、tb_sku4、tb_sku5

结果还是出错了┭┮﹏┭┮/,报了一个LOAD DATA LOCAL INFILE file request rejected due to restrictions on access

经过百度,发现还需要有一个步骤(接着上面的步骤继续)

  • Step1:退出MySQL

    直接会按快捷键Ctrl+d

  • Step2:使用下面的指令进行登录

    mysql -u 用户名 -p --local-infile
    

终于成功了o((>ω< ))o
在这里插入图片描述


参考文章

猜你喜欢

转载自blog.csdn.net/qq_66345100/article/details/129977690