如何在MySQL中执行SQL脚本文件?
- 主机动态
- 2025-05-29
- 4
准备工作
-
环境确认


- 确保已安装MySQL Server(推荐5.7及以上版本)
- 确认mysql命令行工具或可视化工具(如Workbench)可用
- 获取数据库连接信息:主机地址、端口、用户名、密码
-
脚本验证

- 检查SQL脚本语法(建议使用mysql -t测试模式)
- 确认脚本编码格式为UTF-8(避免中文乱码)
- 重要操作前备份数据库: mysqldump -u [用户名] -p [数据库名] > backup.sql
命令行执行方法(专业推荐)
方法1:直接输入脚本
mysql -u root -p -D target_db < script.sql
- -D指定目标数据库
- 输入密码后自动执行脚本文件
方法2:交互式执行
mysql> USE target_db; mysql> SOURCE /path/to/script.sql;
- 实时查看执行反馈
- 支持断点续执行(出错时可跳过报错语句)
高级参数
mysql --default-character-set=utf8mb4 --force -v -t < script.sql
- --force:忽略错误继续执行
- -v:显示执行的SQL语句
- -t:以表格格式输出结果
可视化工具操作
MySQL Workbench
- 连接数据库服务器
- 菜单栏选择 File > Open SQL Script
- 打开脚本文件后点击 闪电图标 执行
- 通过 Output 面板查看执行结果
Navicat
- 右键目标数据库选择 Execute SQL File
- 设置字符集与错误处理方式(建议选择UTF-8和遇错停止)
- 通过执行日志分析结果
编程语言集成(开发者适用)
Python示例
import mysql.connector config = { 'user': 'root', 'password': 'your_password', 'host': '127.0.0.1', 'database': 'target_db', 'raise_on_warnings': True } with open('script.sql', 'r', encoding='utf-8') as f: sql_script = f.read() conn = mysql.connector.connect(**config) cursor = conn.cursor() try: for result in cursor.execute(sql_script, multi=True): if result.with_rows: print("查询结果:", result.fetchall()) conn.commit() except mysql.connector.Error as err: print(f"执行错误: {err}") finally: cursor.close() conn.close()
PHP示例
<?php $mysqli = new mysqli("localhost", "user", "password", "target_db"); $script = file_get_contents('script.sql'); if ($mysqli->multi_query($script)) { do { if ($result = $mysqli->store_result()) { $result->free(); } } while ($mysqli->next_result()); } if ($mysqli->errno) { echo "错误: ".$mysqli->error; } $mysqli->close(); ?>
常见问题处理
| 问题现象 | 解决方案 |
|---|---|
| Access denied | 检查用户权限:GRANT ALL ON target_db.* TO 'user'@'host' |
| 中文乱码 | 脚本保存为UTF-8格式,连接时设置charset=utf8mb4 |
| 外键约束失败 | 执行前禁用检查:SET FOREIGN_KEY_CHECKS=0 |
| 大文件执行慢 | 使用mysqlimport或拆分脚本 |
最佳实践建议
- 生产环境操作规范
- 执行前在测试环境验证脚本
- 使用事务包裹DDL操作: START TRANSACTION; ALTER TABLE users ADD COLUMN phone VARCHAR(20); COMMIT;
- 性能优化
- 超过10MB的脚本建议分割执行
- 禁用自动提交:SET autocommit=0;
- 安全审计
- 通过general_log记录执行历史
- 重要操作需DBA二次确认
引用说明
本文技术细节来源于:
- MySQL 8.0 Reference Manual (https://dev.mysql.com/doc/)
- Percona数据库最佳实践白皮书
- 阿里云RDS操作指南