数据导入导出

数据导入导出

搜索路径

查看搜索路径

安装服务时已自动创建
mysql> show variables like "secure_file_priv" ;  //查看

| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.00 sec)

[feng@192 ~]$ ls -ld /var/lib/mysql-files/
drwxr-x---. 2 mysql mysql 6 11月 29 2016 /var/lib/mysql-files/


修改搜索路径

操作步骤
-创建目录并修改所有者-修改主配置文件
-重启服务

]# mkdir /myload
]# chown mysql /myload]# vim /etc/my.cnf
[mysqld]
secure_file_priv="/myload ":wq
]# systemctl restart mysqld


数据导入

命令格式

数据导入步骤

一默认只有root用户有数据导入权限-建表
-导入数据

命令格式

mysql> load data infile   "目录名/文件名”

into    table  库名.表名
fields  terminated  by  "分隔符”

lines  terminated  by  "\n";

注意事项

具体如下:
-字段分隔符要与文件一致
-表字段类型和字段个数要与文件匹配-导入数据时指定文件的绝对路径

问题现象

数据导入失败

一报错1: Errcode: 13 - Permission denied: .. .

-报错2:Data too long for column .....


mysql> load data infile "/tmp/a.txt"into table user fieldsterminated by ":" lines terminated by "\n";
ERROR 29 (HY0o0): File '/tmp/a.txt' not found (Errcode: 13 -Permission denied)
mysql> load data infile "/tmp/a.txt" into table user fieldsterminated by ":" lines terminated by "\n";
ERROR 1406(22001): Data too long for column 'comment' at row 1

 

问题1∶
- SELinux策略阻止访问文件
-可执行setenforce 0禁用SELinux问题2∶
-导入数据与字段类型不匹配,需要修改字段类型:alter table表 modify字段名类型


数据导出

命令格式

·格式1
> select命令  into   outfile“     目录名/文件名”;
·格式2
> select命令  into   outfile  “目录名/文件名”
fields   terminated   by  “分隔符”;
·格式3
> select命令  into   outfile  “目录名/文件名”

fields   terminated   by  “分隔符”
lines   terminated   by   "\n” ;

注意事项

具体如下∶
一导出数据行数由SQL查询决定。

-导出的是表记录,不包括字段名。

-自动创建存储数据的文件。

一存储数据文件,具有唯一性。

问题现象·

导出数据保存到自定义目录失败

-报错:(Errcode: 13 - Permission denied) .. ..mysql> select user,host from mysql.user into outfile"/datadir/b.txt";
ERROR 1(HYOO0): Can't create/write to file '/datadir/b.txt'(Errcode:13 - Permission denied)

故障分析及排除
·原因分析
-对目录没有w权限解决办法
- 让mysql用户对目录有w权限
[root@dbsvr1 ~]# chown mysql /datadir/[root@dbsvr1 ~]# ls -ld /datadir
drwxr-xr-x.2 mysql root 40965月 20 23:09 /datadir

案例1:数据导入导出

1.1 问题

  • 修改检索目录为/myload
  • 将/etc/passwd文件导入db3库的user表里,并添加行号字段。
  • 将db3库user表所有记录导出, 存到/myload/user.txt 文件里。

步骤一:修改检索目录为/myload

1)修改配置文件,重启服务

]# mkdir  /myload  
]# chown  mysql  /myload 
]# vim  /etc/my.cnf
        [mysqld]
        secure_file_priv="/myload”
:wq
]# systemctl  restart mysqld


mysql> show  variables  like  “secure_file_priv”;  //查看
 +------------------+-----------------------+
| Variable_name    | Value                          |
+------------------+-----------------------+
| secure_file_priv   | /myload/   |
+------------------+-----------------------+     

Mysql>           

2)新建db3库、user表

[root@dbsvr1 ~]# mysql -u root –p123456
mysql> CREATE DATABASE db3;
create table db3.user(
        name char(50),
        password  char(1),      
        uid int,
        gid int,
        comment  char(150),     
        homedir char(50),       
        shell   char(50)        
);
Query OK, 0 rows affected (0.70 sec)
Mysql>

步骤二:将/etc/passwd文件导入db3库的user表里,并添加行号字段。

1)拷贝文件到检索目录下

[root@dbsvr1 ~]# 
[root@dbsvr1 ~]# cp  /etc/passwd   /myload/

2)导入数据

[root@dbsvr1 ~]# mysql –uroot –ptarena
mysql> load data infile "/myload/passwd" into table db3.user
       fields terminated by ":" lines terminated by "\n" ; //导入数据
//

将文件中的数据“/myload/passwd”加载到表 db3.user 中
以“:”结尾的字段 以“\n”结尾的行

mysql> select  * from  db3.user;  //查看表记录

 

 

mysql> alter table  db3.user
    -> add
    -> id  int primary key auto_increment first;  //添加行号id 字段

mysql> select  * from  db3.user; //查看表记录

 

 

步骤三:将db3库user表所有记录导出, 存到/myload/user.txt 文件里。

1)查询要导出的数据

	mysql> select  * from  db3.user ;			

2)导出数据

mysql> select  * from  db3.user  into outfile "/myload/user1.txt";

3)查看文件内容

]# cat  /myload/user1.txt 

 

 

posted @ 2022-02-19 16:22  东山有耳  阅读(158)  评论(0)    收藏  举报