MySQL 命令行导入 SQL 文件
1. 使用命令行直接导入
mysql -u your_username -p your_database < your_file.sql
2.分割大型 SQL 文件
如果 SQL 文件非常大,可以将其分割成多个小文件:
# 使用 split 命令分割文件(每 1000 行一个文件)
split -l 1000 large_file.sql chunk_# 逐个导入分割后的文件
for file in chunk_*; doecho "Importing $file..."mysql -u your_username -p your_database < $file
done
3.使用进度显示工具(推荐)
对于大型 SQL 文件,可以使用 pv
命令(Pipe Viewer)来显示导入进度:
# 安装 pv(如果尚未安装)
sudo apt-get install pv # Ubuntu/Debian
sudo yum install pv # CentOS/RHEL# 使用 pv 导入
pv your_file.sql | mysql -u your_username -p your_database
使用pv
监控导入进度
安装好后,你可以用下面这个命令来导入并查看进度:
pv ssy-edu_2025-09-12_11-39-04_mysql_data.sql | mysql -ussy -qh -p ssy-qh
执行后,pv
会显示一个进度条,包括已用时间、进度百分比、数据传输速率和预计剩余时间(ETA)。
显示更多信息
如果你想看更详细的信息,可以加上-pterb
参数:
pv -pterb ssy-edu_2025-09-12_11-39-04_mysql_data.sql | mysql -ussy -qh -p ssy-qh
-p
:显示进度条-t
:显示已用时间-e
:显示预计剩余时间(ETA)-r
:显示数据传输速率-b
:显示已传输的字节数
如果暂时无法安装pv
查看MySQL进程状态 | mysql -u user -p -e 'SHOW PROCESSLIST;' | 查看当前执行的SQL语句和状态 |
4.其他优化点
先清空数据库再导入 是一个非常合理且推荐的做法,尤其是在你反复遇到 Table already exists
错误和查询中断的情况下。这可以确保一个干净的初始状态,避免很多冲突。
但是,请务必谨慎操作,因为清空数据库会永久删除所有现有数据。
🚨 非常重要:首先备份!(如果你需要保留当前数据)
如果你当前数据库里有需要保留的数据,请先备份:
# 使用 mysqldump 备份整个数据库
mysqldump -u your_username -p your_database > backup_before_import.sql
或者只备份某些重要的表。
使用 MySQL 命令(逐行执行)
-- 方法A:
-- 1. 连接到 MySQL
mysql -u your_username -p-- 2. 选择你的数据库
USE your_database_name;-- 3. 禁用外键检查,避免删除时因外键约束而失败
SET FOREIGN_KEY_CHECKS = 0;-- 4. 生成并执行删除所有表的命令
-- 这会查询出所有表名,并生成一系列的 DROP TABLE 语句
SELECT CONCAT('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'your_database_name';-- 【注意】上面一句只会生成命令,不会执行。你需要复制输出的结果,然后粘贴执行。
-- 或者使用以下更自动化的方法:
-- 方法B:使用命令行工具(更高效,一键完成)
# 此命令会直接清空整个数据库
mysql -u your_username -p -e "SET FOREIGN_KEY_CHECKS = 0; \
SELECT CONCAT('DROP TABLE IF EXISTS \`', table_name, '\`;') \
FROM information_schema.tables \
WHERE table_schema = 'your_database_name'" | \
grep '^DROP' | \
mysql -u your_username -p your_database_name
一句更强力的清空命令(包括视图和存储过程):
# 1. 删除整个数据库(这会删除所有数据和表结构)
mysql -u your_username -p -e "DROP DATABASE your_database_name;"# 2. 创建一个新的空数据库
mysql -u your_username -p -e "CREATE DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
这是最彻底的方法,推荐使用。