0
点赞
收藏
分享

微信扫一扫

MySQL - 35导出数据


select…into outfile

在MySQL中,可以使用SELECT…INTO OUTFILE语句将查询结果数据导出到文本文件。

#select...into outfile示例
SELECT * FROM employee INTO OUTFILE '/usr/local/employee.txt' // 文件存储路径
FIELDS TERMINATED BY ',' // 行间分隔符
ENCLOSED BY '"' // 值用双引号引起
LINES TERMINATED BY '\r\n'; // 字段间分隔符

secure_file_priv取值说明:

取值

描述

null

表示不允许导入导出


表示没有任何限制

指定路径

表示导入导出只能在指定路径下完成

mysql命令重定向查询结果

通常,我们使用mysql命令连接数据库,mysql命令有一个 -e 选项,可以执行指定的SQL语句,再 结合DOS的重定向操作符 ” > ” 可以将查询结果导出到文件。

#示例
mysql -h localhost -u root -p -D mydb -e "select * from employee" ~/employee.txt

使用mysqldump导出数据

mysqldump是MySQL用于转存储数据库的实用程序,它主要产生一个SQL脚本,其中包含创建数 据库、创建数据表、插入数据所必需的SQL语句。

# 导出mydb数据库(含数据)
mysqldump -h localhost -u root -p mydb > ~/mydb.sql
# 导出mydb数据库(不含数据)
mysqldump -h localhost -u root -p mydb --no-data > ~/mydb.sql
# 导出mydb.employee数据表
mysqldump -h localhost -u root -p mydb employee > ~/employee.sql
# 导出mydb数据库,忽略contacts表
mysqldump -h localhost -u root -p mydb --ignore-table mydb.contacts > ~/employee.sql

实战案例

创建数据

create table employee(
id int not null auto_increment primary key,
name varchar(30),
sex varchar(1),
salary int,
dept varchar(30)
);

insert into employee(name, sex, salary, dept) values('lily0', '1', 5500, 'deptA');
insert into employee(name, sex, salary, dept) values('lily1', '0', 4500, 'deptA');
insert into employee(name, sex, salary, dept) values('lily2', '0', 4200, 'deptB');
insert into employee(name, sex, salary, dept) values('lily3', '1', 7500, 'deptB');
insert into employee(name, sex, salary, dept) values('lily4', '0', 8500, 'deptA');
insert into employee(name, sex, salary, dept) values('lily5', '1', 6800, 'deptB');
insert into employee(name, sex, salary, dept) values('lily6', '1', 12000, 'deptA');
insert into employee(name, sex, salary, dept) values('lily7', '1', 3500, 'deptA');
insert into employee(name, sex, salary, dept) values('lily8', '1', 6000, 'deptC');
insert into employee(name, sex, salary, dept) values('lily9', '1', 8000, 'deptC');
insert into employee(name, sex, salary, dept) values('lily10', '0', 10000, 'deptA');
insert into employee(name, sex, salary, dept) values('lily11', '0', 4000, 'deptA');

mysql> select * from employee;
+----+--------+------+--------+-------+
| id | name | sex | salary | dept |
+----+--------+------+--------+-------+
| 1 | lily0 | 1 | 5500 | deptA |
| 2 | lily1 | 0 | 4500 | deptA |
| 3 | lily2 | 0 | 4200 | deptB |
| 4 | lily3 | 1 | 7500 | deptB |
| 5 | lily4 | 0 | 8500 | deptA |
| 6 | lily5 | 1 | 6800 | deptB |
| 7 | lily6 | 1 | 12000 | deptA |
| 8 | lily7 | 1 | 3500 | deptA |
| 9 | lily8 | 1 | 6000 | deptC |
| 10 | lily9 | 1 | 8000 | deptC |
| 11 | lily10 | 0 | 10000 | deptA |
| 12 | lily11 | 0 | 4000 | deptA |
+----+--------+------+--------+-------+
12 rows in set (0.01 sec)

1 使用 select…into outfile

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------------+
| Variable_name | Value |
+------------------+-------------+
| secure_file_priv | /usr/local/ |
+------------------+-------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM employee INTO OUTFILE '/usr/local/employee.txt'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
ERROR 1 (HY000): Can't create/write to file '/usr/local/employee.txt' (OS errno 13 - Permission denied)

mysql> SELECT * FROM employee INTO OUTFILE '/usr/local/employee.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
Query OK, 12 rows affected (0.00 sec)

问题

ERROR 1 (HY000): Can’t create/write to file ‘/usr/local/employee.txt’ (OS errno 13 - Permission denied)

解决方法:
进入usr文件夹,将没有权限的文件或是文件夹开发权限

root@9abe1dd59947:/# cd /usr
root@9abe1dd59947:/usr# chmod 777 local/

查看结果

root@9abe1dd59947:/usr/local# cat employee.txt 
"1","lily0","1","5500","deptA"
"2","lily1","0","4500","deptA"
"3","lily2","0","4200","deptB"
"4","lily3","1","7500","deptB"
"5","lily4","0","8500","deptA"
"6","lily5","1","6800","deptB"
"7","lily6","1","12000","deptA"
"8","lily7","1","3500","deptA"
"9","lily8","1","6000","deptC"
"10","lily9","1","8000","deptC"
"11","lily10","0","10000","deptA"
"12","lily11","0","4000","deptA"

2 使用mysqldump导出数据

root@9abe1dd59947:~# mysqldump -h localhost -u root -p mydb > ~/mydb.sql

查看结果

root@9abe1dd59947:~# cat mydb.sql 
-- MySQL dump 10.13 Distrib 8.0.20, for Linux (x86_64)
--
-- Host: localhost Database: mydb
-- ------------------------------------------------------
-- Server version 8.0.20

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `employee`
--

DROP TABLE IF EXISTS `employee`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `employee` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`sex` varchar(1) DEFAULT NULL,
`salary` int DEFAULT NULL,
`dept` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `employee`
--

LOCK TABLES `employee` WRITE;
/*!40000 ALTER TABLE `employee` DISABLE KEYS */;
INSERT INTO `employee` VALUES (1,'lily0','1',5500,'deptA'),(2,'lily1','0',4500,'deptA'),(3,'lily2','0',4200,'deptB'),(4,'lily3','1',7500,'deptB'),(5,'lily4','0',8500,'deptA'),(6,'lily5','1',6800,'deptB'),(7,'lily6','1',12000,'deptA'),(8,'lily7','1',3500,'deptA'),(9,'lily8','1',6000,'deptC'),(10,'lily9','1',8000,'deptC'),(11,'lily10','0',10000,'deptA'),(12,'lily11','0',4000,'deptA');
/*!40000 ALTER TABLE `employee` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2020-06-06 2:49:16
root@9abe1dd59947:~#


举报

相关推荐

0 条评论