在 MySQL 中导入 SQL 文件是常见的操作,主要有两种常用方法,适用于不同场景:
适合在终端直接操作,无需先登录 MySQL,尤其适合导入较大的 SQL 文件。
-
确保目标数据库存在(如果 SQL 文件已包含建库语句,可跳过此步):
mysql -u 用户名 -p
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4;
exit;
-
执行导入命令:
mysql -u 用户名 -p 目标数据库名 < /path/to/your/file.sql
-
示例:导入
/home/backup/db_backup.sql到mydb数据库
mysql -u root -p mydb < /home/backup/db_backup.sql
-
输入密码后开始导入,完成后会自动返回终端(无进度提示,需耐心等待)。
适合已登录 MySQL 客户端的情况,会显示执行过程日志。
-
登录 MySQL 并切换到目标数据库:
mysql -u 用户名 -p
USE 目标数据库名;
-
执行 source 命令导入:
-
示例:
source /home/backup/db_backup.sql;
-
注意:必须使用绝对路径,且文件路径中不能有空格(有空格需用引号包裹)。
-
导入大文件超时:编辑 MySQL 配置文件(my.cnf或mysqld.cnf),增加以下配置后重启服务:
[mysqld]
max_allowed_packet=200M # 允许的最大数据包大小
wait_timeout=600 # 连接超时时间(秒)
-
中文乱码问题:导入时指定字符集:
mysql -u root -p --default-character-set=utf8mb4 mydb < backup.sql
-
权限错误:确保当前用户有目标数据库的写入权限:
GRANT ALL PRIVILEGES ON 目标数据库名.* TO '用户名'@'localhost';
FLUSH PRIVILEGES;
-
SQL 文件过大无法导入:
-
可将文件分割为多个小文件(如用
split命令)
-
或使用工具如
mysqldump的扩展参数优化导入速度。
-
导入前建议备份目标数据库,避免数据覆盖
-
确保 SQL 文件路径正确,且 MySQL 进程有读取该文件的权限
-
导入包含
CREATE DATABASE语句的 SQL 文件时,无需指定数据库名,直接执行:
mysql -u root -p < backup.sql
根据 SQL 文件大小和操作习惯选择合适的方法,两种方式都能高效完成导入操作。