MySQL 数据导出

1. 核心导出方式一:SELECT...INTO OUTFILE 语句

(1)基本说明

  • 作用:将 MySQL 查询结果直接导出到服务器端的文本文件
  • 核心属性:✅ 是 LOAD DATA INFILE 的逆操作(后者用于将文件导入数据库)✅ 执行需拥有 FILE 权限,输出文件路径需 MySQL 服务器具备写入权限✅ 输出文件不可重复创建(防止原有数据被篡改)✅ UNIX 系统下,文件归 MySQL 服务器所有,仅可读,可能无法直接删除

(2)基本语法

复制代码
SELECT column1, column2, ...
INTO OUTFILE 'file_path'
[FIELDS TERMINATED BY '分隔符']  -- 配置列分隔符,如逗号、制表符
[LINES TERMINATED BY '分隔符']   -- 配置行分隔符,如\n(换行)、\r\n
FROM your_table
WHERE your_conditions;

(3)典型实例

导出 users 表 id/name/email 列为 CSV 格式:

复制代码
SELECT id, name, email
INTO OUTFILE '/tmp/user_data.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
FROM users;

导出为带双引号包裹值的 CSV 格式:

复制代码
SELECT * FROM passwd INTO OUTFILE '/tmp/runoob.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

2. 核心导出方式二:mysqldump 命令行工具

(1)基本说明

  • 作用:MySQL 官方备份工具,生成包含 CREATE TABLE、INSERT 等命令的 SQL 脚本
  • 核心特点:支持导出整库、指定表、仅数据库结构、压缩文件,可实现跨主机数据传输

(2)基本语法

复制代码
mysqldump -u 用户名 -p 密码 -h 主机名 数据库名 [表名] > 输出文件.sql

参数说明:

参数 作用
-u 指定 MySQL 登录用户名
-p 提示输入密码(建议不直接写在命令中,避免密码泄露)
-h 指定远程 MySQL 主机地址(本地连接可省略)
--no-data 仅导出数据库结构,不包含数据
--all-databases 导出 MySQL 服务器中所有数据库(MySQL 3.23.12 及以上版本支持)

(3)常见场景实例

导出场景 命令示例
导出整个数据库 mysqldump -u root -p mydatabase > mydatabase_backup.sql
导出数据库中指定表 mysqldump -u root -p mydatabase mytable > mytable_backup.sql
仅导出数据库结构 mysqldump -u root -p --no-data mydatabase > mydatabase_struct.sql
导出并压缩文件 mysqldump -u root -p mydatabase | gzip > mydatabase_backup.sql.gz
远程数据库拷贝到本地 mysqldump -h 远程 IP -P 端口 -u root -p mydatabase > dump.txt

(4)跨主机数据传输

本地导出后导入远程数据库(需提前在远程创建数据库):

复制代码
# 步骤1:本地导出数据
mysqldump -u root -p mydatabase > dump.txt
# 步骤2:导入远程数据库
mysql -u root -p -h other-host.com mydatabase < dump.txt

直接通过管道传输到远程数据库(需两台服务器互通):

复制代码
mysqldump -u root -p mydatabase | mysql -h other-host.com mydatabase

3. 常见错误及解决

(1)错误提示

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

(2)错误原因

未配置 MySQL 导出文件的合法路径,或导出路径不在secure_file_priv配置范围内

(3)解决步骤

  1. 登录 MySQL,执行命令查看配置:show variables like '%secure%';
  2. 若查询结果中secure_file_priv为 null,修改配置文件:
    • Windows:编辑 my.ini,在[mysqld]节点下添加secure_file_priv=E:/TEST(自定义合法路径)
    • Linux:编辑 my.cnf,在[mysqld]节点下添加secure_file_priv=/tmp/mysql_export
  3. 重启 MySQL 服务,使配置生效
  4. 导出时指定配置的合法路径:select * from tb_test into outfile "E:/TEST/test.txt";
相关推荐
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
小白男神3 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
深圳老胡3 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her13 天前
并查集-听课笔记
笔记·算法·并查集
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net