导入 MySQL
好,直接给你工程师级、可落地、不翻车的导入方法。导入比导出更容易出事故,我会把该注意的坑一起讲清楚。
一、最标准、最可靠的导入方式
1️⃣ 先创建数据库(如果还没有)
mysql -u root -p -e "CREATE DATABASE db_name DEFAULT CHARSET utf8mb4;"
不要指望 sql 里一定有
CREATE DATABASE,这是很多人翻车点。
2️⃣ 导入 SQL 文件
mysql -u root -p db_name < db.sql
如果是压缩文件:
gunzip < db.sql.gz | mysql -u root -p db_name
二、生产环境 / 大库导入必加配置(非常重要)
🚀 防止导入慢 / 卡死
mysql -u root -p \
--max_allowed_packet=1G \
--default-character-set=utf8mb4 \
db_name < db.sql
三、常见错误 & 对策(实话)
❌ 1. ERROR 1049: Unknown database
👉 你没建库
✔️ 先 CREATE DATABASE
❌ 2. ERROR 1007: Can't create database; database exists
👉 SQL 里有 CREATE DATABASE
✔️ 删除该语句,或:
mysql -u root -p < db.sql
(不指定 db,让 SQL 自己建)
❌ 3. 字符集乱码(中文变问号)
👉 99% 是字符集不一致
✔️ 导入时明确指定:
mysql --default-character-set=utf8mb4 -u root -p db_name < db.sql
❌ 4. ERROR 1418 / 1227(存储过程 / 权限)
👉 权限不足
✔️ 两种选择:
方式 A(推荐):用 root 导
方式 B:跳过 DEFINER
sed -i '' 's/DEFINER=`[^`]*`@`[^`]*`/DEFINER=CURRENT_USER/g' db.sql
(mac 适用)
❌ 5. GTID 报错(云数据库常见)
ERROR 1840: GTID_PURGED can only be set when GTID_EXECUTED is empty
✔️ 解决方式:
SET GLOBAL gtid_purged='';
或在导出阶段就关掉(你之前如果照我说的做,一般不会踩)
四、Docker / 云 MySQL 导入
Docker 容器
docker exec -i mysql \
mysql -u root -p db_name < db.sql
压缩版:
gunzip < db.sql.gz | docker exec -i mysql mysql -u root -p db_name
五、导入完成后必须做的 3 个检查
1️⃣ 表是否完整
SHOW TABLES;
2️⃣ 行数是否正常
SELECT COUNT(*) FROM some_table;
3️⃣ 字符集是否一致
SHOW CREATE TABLE some_table;
看是否是 utf8mb4
六、一句实话(重点)
-
导入是“破坏性操作”
-
在生产环境:
- 永远先导入到新库
- 永远不要覆盖原库
- 永远不要用 GUI 点导入
你现在这个导入是:
- 本地?
- 服务器?
- Docker?
- RDS / 云数据库?
- 数据量多大?
给我这几个信息,我可以直接给你一条定制级、可复制粘贴的导入命令,保证不踩雷。

浙公网安备 33010602011771号