能直接用命令行导入初始数据,关键就三步:确认服务运行、创建目标库、执行导入命令;跳过 create database 或路径含中文,source 会报错“找不到文件”,mysql -u root -p db_name

能直接用命令行导入初始数据,关键就三步:确认服务运行、创建目标库、执行导入命令;跳过 CREATE DATABASE 或路径含中文,source 会报错“找不到文件”,mysql -u root -p db_name 则更鲁棒。
确认MySQL服务已启动且root可登录
导入前必须验证连接通路,否则所有导入操作都会失败。常见错误是服务没起来,或密码记错导致 Access denied。
- Windows 下检查服务状态:
net start | findstr MySQL,没输出说明服务未运行 - Linux/macOS 执行:
sudo systemctl is-active mysql,返回active才算正常 - 尝试登录:
mysql -u root -p,输入密码后看到mysql>提示符才算通过 - 如果卡在密码输入或提示
Can't connect to local MySQL server,先别急着导入,回去查服务和端口(默认3306)
创建数据库并指定 utf8mb4 字符集
绝大多数 SQL 初始化脚本不带 CREATE DATABASE,直接导入会报错 Unknown database。字符集设错则后续插入 emoji 或中文可能乱码。
- 登录后执行:
CREATE DATABASE IF NOT EXISTS myapp DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; - 不要用
utf8——MySQL 的utf8实际只支持 BMP 字符,utf8mb4才完整兼容 Unicode - 如果脚本里已有
CREATE DATABASE和USE xxx,可跳过这步,但要确保该库名与脚本一致 - 执行
SHOW DATABASES;确认库已存在,避免拼写差异(比如my_appvsmyapp)
用 mysql 命令行重定向导入(推荐)
这是最稳定、可脚本化、支持大文件的方式。相比 source,它不依赖客户端当前上下文,也不受路径空格/中文影响。
- 退出 MySQL 客户端(输入
exit或 Ctrl+D) - 在终端中执行:
mysql -u root -p myapp ,其中 <code>myapp是上一步建的库名 - 如果 SQL 文件开头含
CREATE DATABASE和USE,可省略库名:mysql -u root -p - 导入无声即成功;出错时会明确指出第几行语法错,或提示
Table 'xxx' already exists(此时加DROP TABLE IF EXISTS或清库重试) - Windows 路径用正斜杠或双反斜杠:
C:/data/init.sql或C:\data\init.sql,单反斜杠会报错
用 source 命令导入(仅限小文件、调试场景)
source 在交互式环境里方便验证单条语句,但对路径敏感、不支持相对路径、无法捕获导入进度,不适合部署。
- 登录后先
USE myapp;,再执行:SOURCE C:/data/init.sql;(注意结尾有分号) - 路径必须是绝对路径,且不能含中文、空格、括号;例如
E:项目init.sql会失败,得改成E:/project/init.sql - SQL 文件内每条语句必须以分号结尾,否则
source会卡住等待输入 - 若提示
Failed to open file,八成是路径错或权限不足——MySQL 客户端不读取你当前 CMD 的工作目录,而是按绝对路径找
真正容易被忽略的是字符集和路径规范:哪怕 SQL 文件本身是 UTF-8 编码,如果没在建库时指定 utf8mb4,或者导入时没加 --default-character-set=utf8mb4 参数,中文字段存进去就是问号。还有人把 SQL 文件放在桌面,路径带「我的文档」这种中文目录,source 直接静默失败——这些坑都得手动绕过去,没法靠报错自动提示。











