如何用mysqldump导出MySQL表数据并导入到同结构其他表
问题分析与解决
核心操作错误
你用mysqldump执行导入完全搞错了——mysqldump是专门的导出工具,导入数据必须用mysql客户端命令。
修正后的导出命令
要生成纯INSERT语句、无锁表、无任何结构相关内容,给你的导出命令补充几个关键参数:
mysqldump -u root -p --no-create-info --skip-add-drop-table --single-transaction --quick icicle_db users > users_existing.sql
各参数作用:
--no-create-info:跳过表创建语句,只导出数据行--skip-add-drop-table:禁止生成DROP TABLE语句(默认会附带,防止误删目标表)--single-transaction:启动事务导出,全程不锁表(仅针对InnoDB引擎,百万级大表必备)--quick:逐行读取数据,避免占用过多内存,适合大表导出场景
正确的导入命令
因为导出的SQL里默认写的是原表名users,这里提供两种稳妥的导入方式:
方式1:直接导入(需确保目标表结构完全一致)
mysql -u root -p --force icicle_db < users_existing.sql
--force参数的作用是:即使遇到“表已存在”这类警告,也继续执行插入操作。
方式2:替换表名后导入(更安全,彻底规避原表名问题)
sed 's/`users`/`users_new`/g' users_existing.sql | mysql -u root -p icicle_db
这条命令会把SQL文件里的原表名users批量替换成目标表名users_new,直接导入到目标表,完全不用担心原表名的引用问题。
百万级数据导入优化建议
- 导入前关闭自动提交:登录MySQL后执行
SET autocommit=0;,导入完成后再执行COMMIT;,能大幅提升导入速度 - 临时关闭索引和外键约束:导入前执行
ALTER TABLE users_new DISABLE KEYS;和SET FOREIGN_KEY_CHECKS=0;,导入完成后再开启ALTER TABLE users_new ENABLE KEYS;和SET FOREIGN_KEY_CHECKS=1;,避免每次插入都更新索引,节省大量时间
内容的提问来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

