MySQL基础day03_数据的导入、导出-MySQL 5.6
注:把数据按照一定格式存放到文件里才能进行数据的导入。
1,数据导入的条件
把文件里的内容保存到数据的表里;
把数据按照一定格式存放文件里;
注:默认情况下,只有管理员才有权限导入数据!!!
将/etc/passwd文件里导入到userdb.user_tab表中:
格式:load data infile ‘文件名‘ into table表名fields terminated by ‘分隔符‘ lines terminated by \n‘;
示例:将/etc/passwd导入到userdb.user_tab表中
load data infile ‘/etc/passwd‘ into table userdb.user_tab fields terminated by ‘:‘ lines terminated by ‘\n‘;
2,数据导出
把表中的记录导出的系统文件里;
把userdb.user_tab表中的文件导出:
格式:select * from导出的表名 into outfile ‘导出的文件名‘ fields terminated by ‘分隔符‘ lines terminated by ‘\n‘;
select * from导出的表名 into outfile ‘/目录/文件名‘ fields terminated by ‘分隔符‘ lines terminated by ‘\n‘;
示例:
select * from userdb.user_tab into outfile ‘user.txt‘ fields terminated by ‘||‘ lines terminated by ‘\n‘;
注:
使用导出文件名的时候,导出的文件在当前所在的数据库中,如果使用use切换到任何库,则导出到/var/lib/mysql目录下;
如果导出到/目录/文件名,则在建立目录的时候,需要先赋予其他用户w权限,并且关闭SELinux,否则导入时候将没有权限写入;
SELinux是控制的程序对文件的权限;
getenforce查看SELinux的状态;
setenforce 0/1来修改SELinux的状态;(1代表开启,0代表关闭);
SELinux的配置文件为/etc/sysconfig/selinux,如果修改为永久性关闭,需要将SELINUX字段设置为disable:SELINUX=disabled
示例:把系统文件/etc/passwd的内容保存到数据库服务器上的userdb库的user_tab表里create database userdb;
create table userdb.user_tab(
name varchar(30),
passwd char(1) default ‘x‘,
uid int(3) not null,
gid int(3) not null,
infor varchar(30),
work varchar(30),
home varchar(15) not null default ‘/sbin/nologin‘
index(username),
unique(uid)
);
测试插入一个一行值之后删除掉该段:
insert into userdb.user_tab values(‘root‘,‘x‘,0,0,‘root‘,‘/root‘,‘/bin/bash‘);
delete from userdb.user_tab where name=‘root‘;
使用load导入:
load data infile ‘/etc/passwd‘ into table userdb.user_tab fields terminated by ‘:‘ lines terminated by ‘\n‘;
导出到user.txt:
select * from userdb.user_tab into outfile ‘user.txt‘ fields terminated by ‘||‘ lines terminated by ‘\n‘;
注:导出的位置为当前数据库的目录,也就是/var/lib/mysql/数据库名目录下;
由于当前没有切换到任何目录,所以,会保存到/var/lib/mysql目录。
导出到/bakdb目录下:
[[email protected] ~]# chmod o+w /bakdb/ //将bakdb的所有者改为mysql也行
[[email protected] ~]# ll -d /bakdb/
drwxr-xrwx. 2 root root 4096 3月 17 19:36 /bakdb/
[[email protected] ~]# getenforce //查看当前selinux的状态
Enforcing //Enforcing为强制状态
mysql> select * from userdb.user_tab into outfile ‘/bakdb/user.txt‘ fields terminated by ‘$‘ lines terminated by ‘\n‘; //尝试导出,由于selinux的原因,会有permission denied拒绝提示!!!
ERROR 1 (HY000): Can‘t create/write to file ‘/bakdb/user.txt‘ (Errcode: 13 -Permission denied)
mysql> quit
Bye
[[email protected] ~]# setenforce 0 //临时关闭selinux
[[email protected] ~]# getenforce //查看selinux的状态,permissive表示允许
Permissive
[[email protected] ~]# vim /etc/sysconfig/selinux
[[email protected] ~]# grep -vE "^#|^$" /etc/sysconfig/selinux
SELINUX=disabled
SELINUXTYPE=targeted
mysql> select * from userdb.user_tab into outfile ‘/bakdb/user.txt‘ fields terminated by ‘$‘ lines terminated by ‘\n‘; //尝试导出,成功!!!
Query OK, 34 rows affected (0.00 sec)
mysql> quit
Bye
[[email protected] ~]# ll /bakdb/user.txt
-rw-rw-rw-. 1mysql mysql1725 3月 17 19:36 /bakdb/user.txt
小扩展:
selinux是限制进程对数据的权限
iptables是控制数据包的传输
总结:数据库信息导出时,不指定目录的情况下,默认到数据库目录内,当指定目录的时候,需要注意selinux权限,Redhat Enterprise 6版本的系统,默认都是开启的;
使用getenforce来查看selinux的状态;
setenforce 0/1来设置状态;
做的时候建议先使用setenforce 0关闭selinux;