> 技术文档 > mysql 导入导出数据_mysqldump导入sql文件

mysql 导入导出数据_mysqldump导入sql文件

一、使用 mysqldump 命令行工具(推荐)

功能‌:导出数据库结构和数据(生成 .sql 文件),适用于备份或迁移。
语法‌:

mysqldump -u 用户名 -p 数据库名 > 导出路径.sql

1. 导出整个数据库

mysqldump -u root -p mydb > /backup/mydb_backup.sql

  • 输入密码后开始导出。
2. 导出指定表

mysqldump -u root -p mydb table1 table2 > /backup/tables.sql

3. 仅导出表结构(不含数据)

mysqldump -u root -p --no-data mydb > /backup/schema.sql

4. 仅导出数据(不含表结构)

mysqldump -u root -p --no-create-info mydb > /backup/data.sql

5. 导出时压缩文件

mysqldump -u root -p mydb | gzip > /backup/mydb_backup.sql.gz

二、使用 SELECT ... INTO OUTFILE 语句

功能‌:将查询结果导出为文本文件(如 CSV),适合数据分析。
权限要求‌:MySQL 用户需有 FILE 权限。

1. 导出查询结果到文件

SELECT * FROM employees INTO OUTFILE \'/tmp/employees.csv\' FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\\n\';

2. 自定义分隔符和格式

SELECT id, name, salary FROM employees INTO OUTFILE \'/tmp/employees.txt\' FIELDS TERMINATED BY \'|\' LINES TERMINATED BY \'\\r\\n\';

3. 导出时处理特殊字符(如 CSV)

SELECT * FROM orders INTO OUTFILE \'/tmp/orders.csv\' CHARACTER SET utf8mb4 FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'\"\' ESCAPED BY \'\' LINES TERMINATED BY \'\\n\';

注意‌:

  • 文件路径需在 MySQL 有权限写入的位置(默认仅允许导出到服务器本地目录,如 /tmp)。
  • 若需导出到客户端机器,可使用 LOCAL 关键字(需启用 --local-infile)。

三、使用 MySQL Workbench(图形化操作)

  1. 打开 Workbench‌,连接数据库。
  2. 导航到管理面板‌,点击 ‌Data Export‌。
  3. 选择要导出的数据库或表‌,设置导出路径和格式(SQL 或 CSV)。
  4. 配置选项‌(如是否导出结构、数据行数限制等)。
  5. 点击 ‌Start Export‌ 开始导出。

四、命令行直接导出(mysql -e + 重定向)

适用于快速导出简单查询结果:

mysql -u root -p -e \"SELECT * FROM mydb.employees\" > /tmp/employees.txt

五、注意事项

  1. 文件权限‌:

    • SELECT ... INTO OUTFILE 需确保 MySQL 用户有服务器文件系统的写入权限。
    • 导出路径需在 MySQL 配置的 secure_file_priv 允许范围内(通过 SHOW VARIABLES LIKE \'secure_file_priv\'; 查看)。
  2. 字符编码‌:

    • 导出时指定字符集(如 CHARACTER SET utf8mb4),避免乱码。
  3. 大文件处理‌:

    • 导出大型数据集时,建议分割文件或使用压缩(如 gzip)。
  4. 跨平台兼容性‌:

    • 使用 \\r\\n 换行符确保 Windows 兼容性。

六、常用示例汇总

场景 命令 快速备份数据库 mysqldump -u root -p mydb > backup.sql 导出 CSV SELECT ... INTO OUTFILE \'/path/file.csv\' FIELDS TERMINATED BY \',\' 导出指定字段 SELECT id,name FROM table INTO OUTFILE \'/path/data.txt\' 导出压缩文件 `mysqldump -u root -p mydb gzip > backup.sql.gz`

以下是 MySQL 导入数据的常用方法及详细说明:

一、使用 mysql 命令行导入 SQL 文件

适用场景‌:导入通过 mysqldump 导出的 .sql 备份文件。
语法‌:

mysql -u 用户名 -p 数据库名 < 导入文件.sql 
1. 导入整个数据库

mysql -u root -p mydb < /backup/mydb_backup.sql

  • 输入密码后开始导入。
  • 注意‌:需确保目标数据库已存在(除非 SQL 文件包含 CREATE DATABASE 语句)。
2. 仅导入表结构或数据
  • 如果 SQL 文件仅包含表结构(如 schema.sql)或仅数据(如 data.sql),直接运行上述命令即可。
3. 导入时显示进度(大文件建议)

pv /backup/large_backup.sql | mysql -u root -p mydb

  • 需安装 pv 工具(Pipe Viewer),实时显示导入进度。

二、使用 LOAD DATA INFILE 导入文本文件

适用场景‌:导入 CSV、TXT 等格式数据文件(需与导出的 SELECT ... INTO OUTFILE 格式匹配)。
权限要求‌:MySQL 用户需有 FILE 权限,且文件路径需在 secure_file_priv 允许范围内。

1. 基础导入

LOAD DATA INFILE \'/tmp/employees.csv\' INTO TABLE employees FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\\n\' IGNORE 1 ROWS; -- 忽略标题行

2. 指定字符集(防止乱码)

LOAD DATA INFILE \'/tmp/orders.csv\' INTO TABLE orders CHARACTER SET utf8mb4 FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'\"\' LINES TERMINATED BY \'\\n\';

3. 导入时跳过/映射字段

LOAD DATA INFILE \'/tmp/data.txt\' INTO TABLE users FIELDS TERMINATED BY \'|\' (id, name, @dummy, email) -- 跳过第3列,用@dummy占位 SET created_at = NOW(); -- 动态添加字段值

4. 从客户端本地导入

LOAD DATA LOCAL INFILE \'/path/on/client/file.csv\' INTO TABLE employees FIELDS TERMINATED BY \',\';

  • 需在客户端启动时添加 --local-infile 参数:

    mysql -u root -p --local-infile

三、使用 mysqlimport 工具(封装 LOAD DATA

适用场景‌:快速导入 CSV/TXT 文件到指定表。
语法‌:

mysqlimport -u 用户名 -p 数据库名 文件路径

1. 导入 CSV 文件到表

mysqlimport -u root -p --fields-terminated-by=\',\' --lines-terminated-by=\'\\n\' mydb /tmp/employees.csv

  • 默认要求文件名与表名一致(如 employees.csv 对应表 employees)。
2. 忽略标题行

mysqlimport -u root -p --ignore-lines=1 mydb /tmp/employees.csv

四、使用 MySQL Workbench(图形化操作)

  1. 打开 Workbench‌,连接数据库。
  2. 导航到管理面板‌,点击 ‌Data Import‌。
  3. 选择导入方式‌:
    • Import from Self-Contained File‌:导入 .sql 备份文件。
    • Import from CSV/TXT‌:导入文本文件到指定表。
  4. 配置选项‌(如字符集、字段分隔符)。
  5. 点击 ‌Start Import‌ 开始导入。

五、命令行逐行导入(交互式)

mysql -u root -p mydb # 进入 MySQL 提示符后执行: mysql> source /backup/mydb_backup.sql;

六、注意事项

  1. 文件路径权限‌:

    • LOAD DATA INFILE 要求文件必须在 MySQL 服务器机器上,且路径需在 secure_file_priv 允许范围内。
    • 检查 secure_file_priv 配置:

      SHOW VARIABLES LIKE \'secure_file_priv\';

  2. 字符编码一致性‌:

    • 确保导入文件的字符集与数据库/表定义一致(如 utf8mb4)。
  3. 大文件导入优化‌:

    • 禁用自动提交‌:导入前执行 SET autocommit=0;,导入后执行 COMMIT;
    • 关闭外键检查‌:导入前执行 SET FOREIGN_KEY_CHECKS=0;,导入后恢复为 1
    • 禁用索引‌:导入前删除索引,导入后重建(加速插入)。
  4. 错误处理‌:

    • mysql -u root -p mydb < backup.sql --force

    • 检查错误日志定位问题:

      tail -f /var/log/mysql/error.log

  5. 验证数据完整性‌:

    • 导入后检查表行数:
      SELECT COUNT(*) FROM employees; 

七、常用示例汇总

场景 命令 导入 .sql 备份文件 mysql -u root -p mydb < backup.sql 快速导入 CSV 到表 mysqlimport -u root -p --fields-terminated-by=\',\' mydb /tmp/employees.csv 动态插入字段 LOAD DATA INFILE \'file.csv\' INTO TABLE t1 (col1, col2) SET created_at=NOW(); 批量导入时优化性能 禁用索引、外键检查和自动提交