2020-12-17

什么是SQL?
SQL是i通用的,功能极强的关系数据库语言,集数据查询,数据操作,数据控制功能于一体

数据库三大范式是什么

前言:小白一枚,记录踩过的坑,有错误的地方麻烦路过的大牛纠正一下,谢谢

背景:将mysql中的数据导出为excel,当数据量较大时,可以尝试使用select into outfile
将数据导入Mysql时,可以使用命令load data infile,该命令比insert into 速度快
软件版本:centos 7 和mysql 5.7
问题描述:
尝试将数据库里的数据通过命令select into outfile和命令load data infile
导出和导入到目录tmp/下报错 ERROR1290
在这里插入图片描述

解决的思路:
查看secure_file_priv的值:
secure_file_priv为NULL 表示不允许导⼊导出
secure_file_priv为指定⽂件夹时,表示mysql的导⼊导出只能发⽣在指定的⽂件夹
secure_file_priv设置为空,则表示没有任何限制
在这里插入图片描述
所以将secure_file_priv设置为空 ,
[root@localhost ***]# vim /etc/my.cnf
修改如:secure-file-priv=‘ ‘
在这里插入图片描述
然后再次尝试导入,ok
在这里插入图片描述

一般linux系统中的selinux都是关闭的,可以查看状态
[root@localhost ***]# sestatus;
SELinux status: disabled(现在是关闭状态)
如果是关闭状态导入文件可以成功

如果是开启状态可以通过以下两种办法进行处理:

尝试一
关闭selinux

1.关闭selinux
通过vim命令进入selinux的配置文件
按O插入 esc推出编辑 :wq!保存并退出

[root@localhost ***]# vim /etc/selinux/config

找到SELINUX=enforcing:将enforcing 改为 disabled
重启系统才能生效,重启时间会比较久
重启后查看selinux状态

[root@localhost ***]# sestatus;
SELinux status: disabled(现在是关闭状态)

2.再次导入,ok
mysql> select * into outfile ‘ ’ from p;
Query OK, 6 rows affected (0.14 sec)

尝试二:
1.selinux是开启状态
[root@localhost ***]# sestatus;
SELinux status: enforcing (现在是开启状态)

2.修改目录/tmp的安全上下文
要让mysql能够导入/tmp目录下的文件,
首先就要让mysql和/tmp各自对应的安全上下文一致,
需要先确认他们各自的安全上下文
使用的命令
ls -Zd 目录 查看目录的安全上下文
ps auxZ | grep 进程 查看进程的安全上下文

/home/mysql/的安全上下文

[root@localhost ***]# ls -Zd /home/mysql/
system_u:object_r:user_home_dir_t:s0 /home/mysql/

这一行对应为:(身份字段:角色:类型:灵敏度)
拥有者系统,类型文件,安全上下文user_home_dir_t,灵敏度s0

mysql的安全上下文

[root@localhost ***]# ps auxZ |grep mysqld
system_u:system_r:mysqld_t:s0 mysql

两者的安全上下文不一致

mysql> select * into outfile ‘/home/mysql/c.txt’ from p;
ERROR 1 (HY000): Can’t create/write to file ‘/home/mysql/c.txt’ (Errcode: 13 - Permission denied)

参考mysql的数据目录修改安全上下文

[root@localhost ***]# ls -Zd /var/lib/mysql
system_u:object_r:mysqld_db_t:s0 /var/lib/mysql

使用chcon 命令:

[root@localhost ***]# chcon -Rt mysqld_db_t /home/mysql/
[root@localhost ***]# ls -Zd /home/mysql/
system_u:object_r:mysqld_db_t:s0 /home/mysql/

4 再次尝试导出数据,ok
mysql> select * into outfile ‘/home/mysql/c.txt’ from p;
Query OK, 6 rows affected (0.24 sec)
导出成功

所以要操作对应的文件,要满足selinux和对用的权限
先记录下吧

非常感谢作者学到了很多,少踩很多坑)
SELinux安全上下文查看方法(超详细)
[http://c.biancheng.net/view/1149.html]

整理下命令
1 查看文件的安全上下文 ls -Z 文件
2 查看目录的安全上下文 ls -Zd 目录
3 查看进程的安全上下文 ps auxZ | grep 进程
4 编辑selinux的配置文件 vim /etc/selinux/config
5 查询SELinux的运行模式 getenforce
6 查看selinux的状态sestatus
stenforce 只能进行两种模式的切换:
[root@localhost ~]# setenforce 选项
选项:
0: 切换成 permissive(宽容模式);
1: 切换成 enforcing(强制模式);

7 安全目录解读
system_u:object_r:httpd_sys_content_t:s0:[类别]
#身份字段:角色:类型:灵敏度:[类别]

8 seinfo 查询selinux信息,命令格式如下:
[root@localhost ~]# seinfo [选项]
选项:
-u: 列出SELinux中所有的身份(user);
-r: 列出SELinux中所有的角色(role);
-t: 列出SELinux中所有的类型(type);
-b: 列出所有的布尔值(也就是策略中的具体规则名称);
-x: 显示更多的信息;

9 设置文件或目录的权限 chcon 命令,格式如下:
[root@localhost ~]# chcon [选项] 文件或目录
选项:
-R: 递归,当前目录和目录下的所有子文件同时设置;
-t: 修改安全上下文的类型字段,最常用;
-u: 修改安全上下文的身份字段;
-r: 修改安全上下文的角色字段;

10 修改目录及子文件所有者
chown -R mysql:mysql /home/mysql/
11 查看目录的权限 ls -dl /home/mysql/
12 把文件的安全上下文恢复成默认的安全上下文,restorecon 命令格式如下:
[root@localhost ~] # restorecon [选项】 文件或目录
选项:
-R:递归.当前目录和目录下所有的子文件同时恢复;
-V:把恢复过程显示到屏幕上;

13 记录下
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t “/www(/.*)?”
#这条命令会给/www/目录及目录下的所有内容设定默认安全上下文类型是httpd_sys_content_t
[root@localhost ~# semanage fcontext -l | grep “/www”
查看目录/www的默认安全上下文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值