mysql sql大文件导入正确姿势

 更新时间:2025年02月18日 13:00:07   投稿:mdxy-dxy  
在 MySQL 中导入大文件时,mysql source 导入大文件速度太慢,可能会遇到性能问题或内存限制,以下是一些优化导入大文件的建议,需要的朋友可以参考一下

在 MySQL 中导入大文件时,mysql source 导入大文件速度太慢,可能会遇到性能问题或内存限制。以下是一些优化导入大文件的建议,需要的朋友可以参考一下

1. 使用 LOAD DATA INFILE

LOAD DATA INFILE 是 MySQL 提供的快速导入数据的方式,比逐条 INSERT 语句快得多。

LOAD DATA INFILE '/path/to/your/file.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS; -- 如果有标题行,可以忽略

2. 调整 MySQL 配置

如果文件非常大,可能需要调整 MySQL 的配置参数:

  • max_allowed_packet: 增加允许的最大数据包大小。
  • innodb_buffer_pool_size: 增加 InnoDB 缓冲池的大小,以提高性能。
  • bulk_insert_buffer_size: 增加批量插入缓冲区的大小。
SET GLOBAL max_allowed_packet = 1G;
SET GLOBAL innodb_buffer_pool_size = 2G;
SET GLOBAL bulk_insert_buffer_size = 256M;

3. 分批导入

如果文件过大,可以将其拆分为多个小文件,分批导入。

4. 禁用索引和外键检查

在导入数据时,禁用索引和外键检查可以显著提高性能。

ALTER TABLE your_table DISABLE KEYS;
SET FOREIGN_KEY_CHECKS = 0;

-- 导入数据

ALTER TABLE your_table ENABLE KEYS;
SET FOREIGN_KEY_CHECKS = 1;

5. 使用命令行工具

可以使用 mysql 命令行工具导入数据:

mysql -u username -p database_name < /path/to/your/file.sql

6. 使用 mysqldump 和 mysqlimport

对于大型 SQL 文件,可以使用 mysqldump 导出数据,再使用 mysqlimport 导入。

mysqldump -u username -p database_name > backup.sql
mysql -u username -p database_name < backup.sql

7. 使用第三方工具

有一些第三方工具可以帮助导入大文件,如 pt-archiver 或 mydumper/myloader

8. 优化表结构

确保表结构合理,避免不必要的索引和约束,以提高导入速度。

9. 使用事务

将多个 INSERT 语句放在一个事务中,可以减少提交次数,提高性能。

START TRANSACTION;

INSERT INTO your_table VALUES (...);
INSERT INTO your_table VALUES (...);
-- 更多 INSERT 语句

COMMIT;

10. 监控和调整

在导入过程中,监控系统资源使用情况(如 CPU、内存、磁盘 I/O),并根据需要调整配置。

通过这些方法,可以有效地导入大文件到 MySQL 数据库中。

11.解决方案

  • 关闭二进制日志和事务自动提交
  • 手动开启事务,导入数据
  • 提交事务
  • 重新开启二进制日志和事务自动提交
set sql_log_bin=off;
set autocommit=0;
start transaction;
source 文件.sql;
commit;
set sql_log_bin=on;
set autocommit=1;

到此这篇关于mysql sql大文件导入正确姿势的文章就介绍到这了,更多相关mysql 大文件导入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较

    深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较

    本篇文章是对MySQL数据库MyISAM与InnoDB存储引擎的比较进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Mysql解决数据库N+1查询问题

    Mysql解决数据库N+1查询问题

    在本篇文章里小编给大家分享了关于Mysql解决数据库N+1查询问题的相关知识点内容,需要的朋友们参考下。
    2019-07-07
  • MySQL中通过EXPLAIN如何分析SQL的执行计划详解

    MySQL中通过EXPLAIN如何分析SQL的执行计划详解

    这篇文章主要给大家介绍了关于MySQL中通过EXPLAIN如何分析SQL的执行计划的相关资料,文中通过图文以及示例代码介绍的非常详细,对大家的学习或者工作具有一定的安康学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • MySQL查询缓存的小知识

    MySQL查询缓存的小知识

    这篇文章主要介绍了MySQL查询缓存的的相关资料,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-12-12
  • MySQL学习第三天 Windows 64位操作系统下验证MySQL

    MySQL学习第三天 Windows 64位操作系统下验证MySQL

    MySQL学习第三天教大家如何在Windows 64位操作系统下验证MySQL,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • MySQL中INSERT INTO的具体使用

    MySQL中INSERT INTO的具体使用

    INSERT INTO 是 MySQL 数据库中非常重要的一种 SQL 命令,用于将新行插入到表中,本文主要介绍了MySQL中INSERT INTO的具体使用,感兴趣的可以了解一下
    2024-03-03
  • MySql各种查询方式详解

    MySql各种查询方式详解

    如果是做数据分析,MySQL里面最重要、最常用的就是数据查询,数据查询不只是简单查询数据库中存储的数据,还要根据需求对数据进行筛选、聚合,以及确定数据以什么样的格式进行显示。MySQL提供了强大、灵活的语句和函数来实现查询的操作
    2022-07-07
  • MySQL中触发器入门简单实例与介绍

    MySQL中触发器入门简单实例与介绍

    本文章来mysql初学者介绍在mysql怎么创建触发器及触发器在mysql执行顺序,下面我来给大家详细介绍
    2013-08-08
  • MySQL高效安全地清空多张表的数据的方法

    MySQL高效安全地清空多张表的数据的方法

    在日常的数据库开发与维护工作中,我们常常需要清空一张或多张表中的数据,无论是为了重置测试环境、执行数据迁移前的准备,还是应对某些特殊业务逻辑,如何高效、安全、规范地清空多张表的数据,是每个数据库使用者必须掌握的核心技能,下面跟着小编一起来看看吧
    2025-11-11
  • 使用mysqld_multi实现单系统中配置多个MySQL服务器实例

    使用mysqld_multi实现单系统中配置多个MySQL服务器实例

    这篇文章主要介绍了使用mysqld_multi实现单系统中配置多个MySQL服务器实例,mysqld_multi可用于在一台物理服务器运行多个Mysql服务,mysqld_multi是管理多个mysqld的服务进程,这些服务进程程序不同的unix socket或是监听于不同的端口,需要的朋友可以参考下
    2014-09-09

最新评论