MySQL8导入数据的报错`secure-file-priv``Permission denied``Incorrect integer value`

2018/11/14

MySQL8默认已经安装好了,详情可见博主上篇博文

导入数据进入数据表里面时候,遇到了三个报错。这三个问题之前也遇到过,也是费了不少劲,故在此记录。


博主的准备工作:用TPCDS工具包,生成好数据,创建好MySQL表。

在这里插入图片描述
接下来就是导入数据。


secure-file-priv option

如果直接导入,首先我们会遇到这样的一个报错

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

我们进入MySQL,输入show global variables like '%secure_file_priv%';查看参数secure_file_priv:
在这里插入图片描述
这个secure_file_priv是什么意思呢?secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。并且:
secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
secure_file_priv 为 /xxx 时,表示限制mysqld只能在/xxx目录中执行导入导出,其他目录不能执行。
secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。
为了方便,我们设置成空值:修改MySQL配置文件,博主是vim /etc/mysql/my.cnf
在这里插入图片描述

注:

  • 具体你的my.cnf在哪,用find命令找吧(find / -name my.cnf)
  • my.ini和my.cnf的区别是,前者在win环境下,后者Linux。
  • 当然了,一般来说etc/my.cnf etc/mysql/my.cnf /usr/etc/my.cnf这三个系统使用的优先级从前到后。
  • my.cnf这个配置文件很厉害的,之后可能还会提到具体里面怎么配置。可以参考下这个:
    https://blog.csdn.net/johnstrive/article/details/46770447

之后我们得关闭MySQL服务器再重启service mysql stop service mysql start。再看:
在这里插入图片描述
解决这个问题。


导入文件的权限问题

接下来就报这个错:
ERROR 29 (HY000) at line 1: File '/home/darcy/space_extended/MySQL/Data/newData_1/warehouse/warehouse' not found (OS errno 13 - Permission denied)
就是说MySQL没有操作这个文件的权限。
那我手动把要操作的文件全都改成777如何呢?还是不行报一样的错。
查了一下资料,在centos里面,有个叫selinux的东西,在ubuntu里面有个对应的叫做AppArmor.
这里有对selinux的介绍:https://www.linuxidc.com/Linux/2012-02/55533.htm。
总的来说,selinux对哪些daemon可以进行怎么样的操作是有限制的,在ubuntu里面就是AppArmor。在这里博主选择了最粗暴的方法,直接关闭AppArmor(service apparmor teardown),因为我只是在本地测试,所以没有什么太大影响,但是要是搞服务器的小伙伴再查下其他方法吧,类似CENTOS,setsebool -P mysqld_disable_trans=1单独给MySQL开启权限。
解决


Incorrect integer value

ERROR 1366 (HY000) at line 1: Incorrect integer value: ‘’ for column ‘cc_closed_date_sk’ at row 1
insert-call_center时间: 0s

这句话在说在向call_center表的cc_closed_date_sk健插入数据时候格式不对,错误出现在生成数据的第一行。那我们看下向call_center导入的数据:
在这里插入图片描述对应cc_closed_date_sk的值是NULL,这就是说他没能识别出空值。
我们来解决问题:
不少博文说,这是由于sql-mode设置问题,把my.cnf里面默认

sql-mode= ”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

改为

sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

再重启mysql即可,这种方法在MySQL5.7里面是可以的(之前平台上面试过确实可以)。不过在8里面报错了,那我们看下官方文档:
在这里插入图片描述
支持的模式只有这几种,我们发现并没有NO_AUTO_CREATE_USER,也就是说不会自动创建用户而已,缺少这个和我们的需求并不冲突,以后注意这点就好。我们再看下Strict SQL Mode是个什么:
在这里插入图片描述
那我们就不要这个就好了。进入my.cnf修改。博主这个里面甚至都没有sql-mode语句,无妨,我们在[mysqld]下面加一行就行。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/BugOverseas/article/details/84075170
今日推荐