分为 mysqldump(命令行,最常用)、mysql 命令导入 sql 文件、select … into outfile /load data infile(文本批量导入导出)、Navicat/DBeaver 图形工具四种方式。
环境:MySQL 5.7 / 8.0,注意 8.0 对文件路径、secure_file_priv 有严格限制。
一、导出数据(mysqldump)
1. 导出整个数据库(包含表结构 + 数据)
# 语法
mysqldump -u用户名 -p 数据库名 > 导出文件.sql
#示例
mysqldump -uroot -p testdb > testdb_full.sql
执行后输入密码,把整个 testdb 导出为 sql 脚本。
2. 只导出表结构,不要数据
mysqldump -uroot -p -d testdb > testdb_schema.sql
3. 只导出数据,不要表结构
mysqldump -uroot -p -t testdb > testdb_data.sql
4. 导出库中部分表
#导出t_user、t_order两张表
mysqldump -uroot -p testdb t_user t_order > two_table.sql
5. 导出所有数据库
mysqldump -uroot -p --all-databases > all_db.sql
6. 带压缩导出(linux)
mysqldump -uroot -p testdb | gzip > testdb.sql.gz
常用参数说明
生产 InnoDB 完整备份示例:
mysqldump -uroot -p -R -E --triggers --single-transaction testdb > test_bak.sql

二、导入 SQL 文件
方式 1:shell 直接用 mysql 命令导入(推荐)
mysql -uroot -p testdb < testdb_full.sql
注意:testdb 数据库需要提前建好。
压缩包导入:
gzip -d -c testdb.sql.gz | mysql -uroot -p testdb
方式 2:登录 mysql 客户端内 source 导入
mysql -uroot -p
use testdb;
source /data/backup/testdb_full.sql;
source 后面是绝对路径,Windows 注意路径斜杠写
/。
三、文本 CSV/TXT 批量导出导入(select into outfile /load data infile)
⚠️ MySQL8.0 受
secure_file_priv参数限制,只能导出到指定目录,查看:
show variables like '%secure_file_priv%';
1. 导出表数据为 csv 文件
SELECT * FROM t_user
INTO OUTFILE '/var/lib/mysql-files/t_user.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
2. 从 csv 导入表
LOAD DATA INFILE '/var/lib/mysql-files/t_user.csv'
INTO TABLE t_user
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS; --忽略csv表头第一行
注意:
LOAD DATA INFILE权限要求高;本地文件可以用LOAD DATA LOCAL INFILE,需要客户端与服务端同时开启 local_infile。

四、图形化工具导出导入
Navicat
导出:数据库右键 → 转储 SQL 文件
导入:数据库右键 → 运行 SQL 文件
DBeaver
右键数据库 / 表 → 导出→SQL 脚本;导入→执行脚本文件
五、常见踩坑
mysqldump 不是 mysql 客户端命令,是独立工具,Windows 需要保证
mysql/bin加入环境变量。导入报错
Unknown database:先手动创建数据库create database testdb;字符集乱码:导出指定字符集
--default-character-set=utf8mb4
mysqldump -uroot -p --default-character-set=utf8mb4 testdb > bak.sql
大库导入慢:mysql 导入时关闭自动提交,sql 脚本开头加上
SET autocommit=0;
...业务sql...
COMMIT;
MySQL8.0
local_infile默认关闭,需要开启才能本地 load data。
六、简单速记
整库备份:
mysqldump -u -p db > xxx.sql恢复:
mysql -u -p db < xxx.sql客户端内恢复:
use db; source '文件路径'
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢