mysql 快速导入超大SQL文件(10G以上)

mysql 快速导入超大SQL文件(10G以上)

最近项目需要导入人家的数据,文件在10G以上,下面是实际总结记录,避免再次踩坑。

一般优化方法:

登录mysql
mysql -u root -p密码

创建数据库
CREATE DATABASE 数据库名;
设置参数
set sql_log_bin=OFF;//关闭日志
set autocommit=0;//关闭autocommit自动提交模式
set names utf8;

use 数据库名;

开启事务
START TRANSACTION;
引入SQL文件
source 文件的路径;
成功后事务提交 
COMMIT; 

这种方法可以提高导入速度,但是没解决根本,如果表的外键和索引比较多的话,照样很慢。


最好的方法是:先分别导出建表语句和数据语句,然后手工建表,删除外键和索引,然后再导入数据这样就会非常快

导出结构不导出数据
mysqldump --opt -d -u root -p密码 数据库名> xxx.sql 
或者mysqldump --no-data   -u username -p* database_name > xxx.sql  

导出低于8.0版本的MySQL数据库时,会出现Unknown table ‘column_statistics’ in information_schema的错误.   加选项--column-statistics=0就可以了
mysqldump --opt -d --column-statistics=0 -u root -p密码 数据库名> xxx.sql

导出数据不导出结构
mysqldump --opt -t  -uroot -p密码  数据库名 > xxx.sql 

备注:导出、导入数据用MYSQLDUMP,不要用NAVICAT。

 


备注:实战示例,解疑答惑。

           --不间端地思考,实时地批判你的工作!

要将一个大小为100GB的SQL文件导入MySQL数据库中,需要考虑几个关键因素如服务器资源、网络带宽及优化策略等。以下是详细的步骤: ### 一、准备阶段 #### 确保有足够的磁盘空间 首先确认你的MySQL服务器上有足够的可用存储空间来保存这个大尺寸的数据集。 #### 检查并调整MySQL配置参数 编辑 MySQL 配置文件 (通常是 `my.cnf` 或者 `my.ini`) 来增加一些限制性的设置值以便更好地处理大型数据量的操作: ```bash # 设置最大允许包大小 max_allowed_packet = 512M # 调整InnoDB缓冲池大小(视内存情况而定) innodb_buffer_pool_size = XG # 根据实际情况替换X # 其它必要的性能改进选项... ``` 修改完配置之后记得重启MySQL服务使其生效。 ### 二、选择合适的工具与命令行操作 对于如此庞大的SQL脚本直接通过常规的方式很可能效率低下甚至失败。这里推荐几种更高效的办法来进行大规模数据迁移: **1. 使用 `mysqlslap` 工具** 虽然这不是官方推荐的最佳方案之一,但对于某些场景来说可能足够用了。 不过由于其主要用于基准测试而非实际生产环境下的大批量插入任务因此并不作为首选项。 **2. 分割 SQL 文件再逐段加载** 考虑到整个文件过大导致的一次性读取困难以及潜在的风险点(例如中途断电),可以先利用类似unix/linux系统的文本分割指令预先对原始`.sql`文档按合理分界切分成若干个小部分后再逐一运行它们各自对应的部分内容至目标库内。 **3. 利用专用传输软件 - Maatkit's mk-parallel-dump 和 mk-parallel-restore** Maatkit是一套非常实用高效的管理维护开源集合,在此特指其中两个专门用于快速备份恢复工作的组件:mk-parallel-dump负责导出;mk-parallel-restore则用来做相应的还原工作,并且支持并发执行提高速度减少耗时。 **4. 直接采用mysqldump + gzip压缩组合拳路数** 如果你获取的是未经任何特殊处理过的纯文本格式sql脚本,则可以直接尝试下面这条命令完成任务(当然前提条件是你已经把待解析的内容事先经过了适当的归档压缩): ```shell gunzip < huge_file.sql.gz | mysql -u [username] -p[password] dbname ``` > **注意:** `[username]`, `[password]`, 和 `dbname` 替换为你自己的用户名、密码和想要导入的目标数据库名。(去掉方括号) 此外还需要留意是否有关联索引建立的问题,因为大量的INSERT语句可能会使得创建索引变得极其缓慢。可以在开始前暂时禁用外键约束检查并且延迟重建非聚集索引直到全部记录都被成功加入进来以后再去开启。 最后别忘了定期监控进度状况以免遇到意外错误停止等问题影响整体计划安排!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值