mysql 导入导出数据
以下是 MySQL 导出数据文件的常用方法及详细步骤:
一、使用 mysqldump
命令行工具(推荐)
功能:导出数据库结构和数据(生成 .sql
文件),适用于备份或迁移。
语法:
bashCopy Code
mysqldump -u 用户名 -p 数据库名 > 导出路径.sql
1. 导出整个数据库
bashCopy Code
mysqldump -u root -p mydb > /backup/mydb_backup.sql
- 输入密码后开始导出。
2. 导出指定表
bashCopy Code
mysqldump -u root -p mydb table1 table2 > /backup/tables.sql
3. 仅导出表结构(不含数据)
bashCopy Code
mysqldump -u root -p --no-data mydb > /backup/schema.sql
4. 仅导出数据(不含表结构)
bashCopy Code
mysqldump -u root -p --no-create-info mydb > /backup/data.sql
5. 导出时压缩文件
bashCopy Code
mysqldump -u root -p mydb | gzip > /backup/mydb_backup.sql.gz
二、使用 SELECT ... INTO OUTFILE
语句
功能:将查询结果导出为文本文件(如 CSV),适合数据分析。
权限要求:MySQL 用户需有 FILE
权限。
1. 导出查询结果到文件
sqlCopy Code
SELECT * FROM employees INTO OUTFILE '/tmp/employees.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
2. 自定义分隔符和格式
sqlCopy Code
SELECT id, name, salary FROM employees INTO OUTFILE '/tmp/employees.txt' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n';
3. 导出时处理特殊字符(如 CSV)
sqlCopy Code
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(图形化操作)
- 打开 Workbench,连接数据库。
- 导航到管理面板,点击 Data Export。
- 选择要导出的数据库或表,设置导出路径和格式(SQL 或 CSV)。
- 配置选项(如是否导出结构、数据行数限制等)。
- 点击 Start Export 开始导出。
四、命令行直接导出(mysql -e
+ 重定向)
适用于快速导出简单查询结果:
bashCopy Code
mysql -u root -p -e "SELECT * FROM mydb.employees" > /tmp/employees.txt
五、注意事项
-
文件权限:
SELECT ... INTO OUTFILE
需确保 MySQL 用户有服务器文件系统的写入权限。- 导出路径需在 MySQL 配置的
secure_file_priv
允许范围内(通过SHOW VARIABLES LIKE 'secure_file_priv';
查看)。
-
字符编码:
- 导出时指定字符集(如
CHARACTER SET utf8mb4
),避免乱码。
- 导出时指定字符集(如
-
大文件处理:
- 导出大型数据集时,建议分割文件或使用压缩(如
gzip
)。
- 导出大型数据集时,建议分割文件或使用压缩(如
-
跨平台兼容性:
- 使用
\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 导入数据呢
DeepSeek-R1满血版 回答完成
深度思考完成 用时14秒
以下是 MySQL 导入数据的常用方法及详细说明:
一、使用 mysql
命令行导入 SQL 文件
适用场景:导入通过 mysqldump
导出的 .sql
备份文件。
语法:
bashCopy Code
mysql -u 用户名 -p 数据库名 < 导入文件.sql
1. 导入整个数据库
bashCopy Code
mysql -u root -p mydb < /backup/mydb_backup.sql
- 输入密码后开始导入。
- 注意:需确保目标数据库已存在(除非 SQL 文件包含
CREATE DATABASE
语句)。
2. 仅导入表结构或数据
- 如果 SQL 文件仅包含表结构(如
schema.sql
)或仅数据(如data.sql
),直接运行上述命令即可。
3. 导入时显示进度(大文件建议)
bashCopy Code
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. 基础导入
sqlCopy Code
LOAD DATA INFILE '/tmp/employees.csv' INTO TABLE employees FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; -- 忽略标题行
2. 指定字符集(防止乱码)
sqlCopy Code
LOAD DATA INFILE '/tmp/orders.csv' INTO TABLE orders CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
3. 导入时跳过/映射字段
sqlCopy Code
LOAD DATA INFILE '/tmp/data.txt' INTO TABLE users FIELDS TERMINATED BY '|' (id, name, @dummy, email) -- 跳过第3列,用@dummy占位 SET created_at = NOW(); -- 动态添加字段值
4. 从客户端本地导入
sqlCopy Code
LOAD DATA LOCAL INFILE '/path/on/client/file.csv' INTO TABLE employees FIELDS TERMINATED BY ',';
- 需在客户端启动时添加
--local-infile
参数:bashCopy Code
mysql -u root -p --local-infile
三、使用 mysqlimport
工具(封装 LOAD DATA
)
适用场景:快速导入 CSV/TXT 文件到指定表。
语法:
bashCopy Code
mysqlimport -u 用户名 -p 数据库名 文件路径
1. 导入 CSV 文件到表
mysqlimport -u root -p --fields-terminated-by=',' --lines-terminated-by='\n' mydb /tmp/employees.csv
- 默认要求文件名与表名一致(如
employees.csv
对应表employees
)。
2. 忽略标题行
bashCopy Code
mysqlimport -u root -p --ignore-lines=1 mydb /tmp/employees.csv
四、使用 MySQL Workbench(图形化操作)
- 打开 Workbench,连接数据库。
- 导航到管理面板,点击 Data Import。
- 选择导入方式:
- Import from Self-Contained File:导入
.sql
备份文件。 - Import from CSV/TXT:导入文本文件到指定表。
- Import from Self-Contained File:导入
- 配置选项(如字符集、字段分隔符)。
- 点击 Start Import 开始导入。
五、命令行逐行导入(交互式)
bashCopy Code
mysql -u root -p mydb # 进入 MySQL 提示符后执行: mysql> source /backup/mydb_backup.sql;
六、注意事项
-
文件路径权限:
LOAD DATA INFILE
要求文件必须在 MySQL 服务器机器上,且路径需在secure_file_priv
允许范围内。- 检查
secure_file_priv
配置:sqlCopy Code
SHOW VARIABLES LIKE 'secure_file_priv';
-
字符编码一致性:
- 确保导入文件的字符集与数据库/表定义一致(如
utf8mb4
)。
- 确保导入文件的字符集与数据库/表定义一致(如
-
大文件导入优化:
- 禁用自动提交:导入前执行
SET autocommit=0;
,导入后执行COMMIT;
。 - 关闭外键检查:导入前执行
SET FOREIGN_KEY_CHECKS=0;
,导入后恢复为1
。 - 禁用索引:导入前删除索引,导入后重建(加速插入)。
- 禁用自动提交:导入前执行
-
错误处理:
- 使用
--force
参数忽略部分错误继续导入:bashCopy Code
mysql -u root -p mydb < backup.sql --force
- 检查错误日志定位问题:
bashCopy Code
tail -f /var/log/mysql/error.log
- 使用
-
验证数据完整性:
- 导入后检查表行数:
sqlCopy Code
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(); |
批量导入时优化性能 | 禁用索引、外键检查和自动提交 |
通过以上方法,可灵活选择适合场景的数据导入方式。如果是生产环境,建议先在测试环境验证导