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(图形化操作)
- 打开 Workbench,连接数据库。
- 导航到管理面板,点击 Data Export。
- 选择要导出的数据库或表,设置导出路径和格式(SQL 或 CSV)。
- 配置选项(如是否导出结构、数据行数限制等)。
- 点击 Start Export 开始导出。
四、命令行直接导出(mysql -e
+ 重定向)
适用于快速导出简单查询结果:
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
SELECT ... INTO OUTFILE \'/path/file.csv\' FIELDS TERMINATED BY \',\'
SELECT id,name FROM table INTO OUTFILE \'/path/data.txt\'
以下是 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(图形化操作)
- 打开 Workbench,连接数据库。
- 导航到管理面板,点击 Data Import。
- 选择导入方式:
- Import from Self-Contained File:导入
.sql
备份文件。 - Import from CSV/TXT:导入文本文件到指定表。
- Import from Self-Contained File:导入
- 配置选项(如字符集、字段分隔符)。
- 点击 Start Import 开始导入。
五、命令行逐行导入(交互式)
mysql -u root -p mydb # 进入 MySQL 提示符后执行: mysql> source /backup/mydb_backup.sql;
六、注意事项
-
文件路径权限:
LOAD DATA INFILE
要求文件必须在 MySQL 服务器机器上,且路径需在secure_file_priv
允许范围内。- 检查
secure_file_priv
配置:SHOW VARIABLES LIKE \'secure_file_priv\';
-
字符编码一致性:
- 确保导入文件的字符集与数据库/表定义一致(如
utf8mb4
)。
- 确保导入文件的字符集与数据库/表定义一致(如
-
大文件导入优化:
- 禁用自动提交:导入前执行
SET autocommit=0;
,导入后执行COMMIT;
。 - 关闭外键检查:导入前执行
SET FOREIGN_KEY_CHECKS=0;
,导入后恢复为1
。 - 禁用索引:导入前删除索引,导入后重建(加速插入)。
- 禁用自动提交:导入前执行
-
错误处理:
-
mysql -u root -p mydb < backup.sql --force
- 检查错误日志定位问题:
tail -f /var/log/mysql/error.log
-
-
验证数据完整性:
- 导入后检查表行数:
SELECT COUNT(*) FROM employees;
- 导入后检查表行数:
七、常用示例汇总
.sql
备份文件mysql -u root -p mydb < backup.sql
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();