数据导入导出
数据导入导出
搜索路径
查看搜索路径
安装服务时已自动创建
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


浙公网安备 33010602011771号