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目录下: [root@localhost ~]# mkdir /bakdb [root@localhost ~]# chmod o+w /bakdb/ //将bakdb的所有者改为mysql也行 [root@localhost ~]# ll -d /bakdb/ drwxr-xrwx. 2 root root 4096 3月 17 19:36 /bakdb/ [root@localhost ~]# getenforce //查看当前selinux的状态 Enforcing //Enforcing为强制状态 [root@localhost ~]# mysql -p 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 [root@localhost ~]# setenforce 0 //临时关闭selinux [root@localhost ~]# getenforce //查看selinux的状态,permissive表示允许 Permissive [root@localhost ~]# vim /etc/sysconfig/selinux [root@localhost ~]# grep -vE "^#|^$" /etc/sysconfig/selinux SELINUX=disabled SELINUXTYPE=targeted [root@localhost ~]# mysql -p 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 [root@localhost ~]# ll /bakdb/user.txt -rw-rw-rw-. 1 mysql mysql 1725 3月 17 19:36 /bakdb/user.txt [root@localhost ~]# |
小扩展:
selinux是限制进程对数据的权限
iptables是控制数据包的传输
总结:数据库信息导出时,不指定目录的情况下,默认到数据库目录内,当指定目录的时候,需要注意selinux权限,Redhat Enterprise 6版本的系统,默认都是开启的;
使用getenforce来查看selinux的状态;
setenforce 0/1来设置状态;
做的时候建议先使用setenforce 0关闭selinux;
转载于:https://blog.51cto.com/murongqingqqq/1378318