当前位置: 首页 > news >正文

mysql 超大 sql 文件导入过程

问题

最近遇到 2 个超大 sql 文件导入,好一通折腾

文档在哪里

调优参数太多,文档都看不过来
找到这些参数也费劲,

  1. ubuntu 在 /etc/mysql/mysql.conf.d/mysqld.cnf 中找到这个链接

    ......
    #
    # The MySQL  Server configuration file.
    #
    # For explanations see
    # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
    
  2. centos 7 在 /etc/my.cnf 中找到这个链接

     # For advice on how to change settings please see# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
    
  3. 官方调优文档
    14.15 InnoDB Startup Options and System Variables

  4. 耐心去阅读文档中那么多参数,需要勇气!
    最终我也是从这里 mysql使用多cpu抄来的

     # wzh 20230814# Set the number of CPUs to be used by MySQL #  # to half of the total available CPUsinnodb_thread_concurrency = 2## Set the number of buffer pool instancesinnodb_buffer_pool_instances = 2# #  # Set the size of the query cachequery_cache_size = 64M## wzh 20230814 bulk_insert_buffer_size = 2Ginnodb_log_buffer_size = 2Ginnodb_autoinc_lock_mode = 2#
    

调优后 三种导入方式对比

  1. 方式一: 使用 mysql source 命令,直接导入一个大文件 (18G)

    为了统计用时和绘画内部优化,将实际mysqldump 文件包含到 all.sql

     # cat all.sqlSET GLOBAL innodb_lru_scan_depth=256;set session sql_mode = 'ALLOW_INVALID_DATES';SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;show global variables like 'innodb_lru_scan_depth';show variables like '%sql_mode%';  show variables like '%autocommit';show variables like '%unique_checks';show variables like '%foreign_key_checks';select now();-- one file 18Gsource /home/XXXdata/20191230_135112.sql;show global variables like 'innodb_lru_scan_depth';show variables like '%sql_mode%';show variables like '%autocommit';show variables like '%unique_checks';show variables like '%foreign_key_checks';select now();
    

    导入过程

     mysql > tee out-20230816.txtmysql > source /home/XXXdata/all.sql
    

    查看结果

     # cat out-20230816.txt......| 2023-08-16 08:17:02 |......| 2023-08-16 14:26:40 |
    

    总共耗时 6 小时 +

  2. 方式2⃣️: 使用shell 命令行后台任务,直接导入一个大文件 (18G)

    为了统计用时和绘画内部优化,将实际mysqldump 文件包含到 all.sql

     # cat all.sql 同前一个方式
    

    shell 后台任务

     # nohup  mysql -uroot -pPassword@123 --default-character-set=utf8 --force zXXX< /home/zXXX/all.sql > /home/out-20230817.txt 2>&1 &
    

    查看执行结果

     # cat out-20230817.txt......2023-08-16 21:08:52......2023-08-17 01:43:14
    

    用时 大约5 小时

  3. 方式三:SQLDumpSplitter切割 sql 文件 ( 每个 2G),使用 mysql source 命令,

    切割后的结果

     # ls *.sql -l-rw-r--r--. 1 root root 2147482476 8月  10 14:13 20191230_135112_0.sql-rw-r--r--. 1 root root 2147482521 8月  10 14:15 20191230_135112_1.sql-rw-r--r--. 1 root root 2147482263 8月  10 14:17 20191230_135112_2.sql-rw-r--r--. 1 root root 2147482371 8月  10 14:19 20191230_135112_3.sql-rw-r--r--. 1 root root 2147481971 8月  10 14:21 20191230_135112_4.sql-rw-r--r--. 1 root root 2147481699 8月  10 14:24 20191230_135112_5.sql-rw-r--r--. 1 root root 2147482612 8月  10 14:25 20191230_135112_6.sql-rw-r--r--. 1 root root 2147482594 8月  10 14:27 20191230_135112_7.sql-rw-r--r--. 1 root root  959044232 8月  10 14:28 20191230_135112_8.sql-rw-r--r--. 1 root root       1096 8月  16 14:14 all.sql
    

    all.sql

     # cat all.sql SELECT DATABASE();select now();SET GLOBAL innodb_lru_scan_depth=256;set session sql_mode = 'ALLOW_INVALID_DATES';SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;show global variables like 'innodb_lru_scan_depth';show variables like '%sql_mode%';  show variables like '%autocommit';show variables like '%unique_checks';show variables like '%foreign_key_checks';-- 00source /home/XXXdata/20191230_135112_0.sql ;-- 01source /home/XXXdata/20191230_135112_1.sql ;-- 02source /home/XXXdata/20191230_135112_2.sql ;-- 03source /home/XXXdata/20191230_135112_3.sql ;-- 04source /home/XXXdata/20191230_135112_4.sql ;-- 05source /home/XXXdata/20191230_135112_5.sql ;-- 06source /home/XXXdata/20191230_135112_6.sql ;-- 07source /home/XXXdata/20191230_135112_7.sql ;-- 08source /home/XXXdata/20191230_135112_0.sql ;-- ALL OKshow global variables like 'innodb_lru_scan_depth';show variables like '%sql_mode%';show variables like '%autocommit';show variables like '%unique_checks';show variables like '%foreign_key_checks';SELECT DATABASE();select now();
    

    导入过程

     mysql > tee out-20230816.txtmysql > source /home/XXXdata/all.sql
    

    查看结果

     cat out-20230816.txt......| 2023-08-16 08:17:02 |......| 2023-08-16 13:15:21 | 
    

    总共耗时大约 5 小时

不调优,使用shell 命令行后台任务,直接导入一个大文件 (18G)

  1. 注释掉 my.cnf 中的调优, restart mysqld 服务

     # cat /etc/my.cnf# wzh 20230814# Set the number of CPUs to be used by MySQL #  # to half of the total available CPUs# innodb_thread_concurrency = 2## Set the number of buffer pool instances#innodb_buffer_pool_instances = 2#  # Set the size of the query cache# query_cache_size = 64M## wzh 20230814 # bulk_insert_buffer_size = 2G# innodb_log_buffer_size = 2G# innodb_autoinc_lock_mode = 2# wzh 20230817# default-time-zone='Asia/Shanghai'explicit_defaults_for_timestamp=truelog_timestamps=SYSTEM
    

    这就和安装完 mysql 5.7 之后,全部使用缺省值一样了

  2. shell 后台任务

     nohup  mysql -uroot -pPassword@123 --default-character-set=utf8 --force zXXX< /home/zXXX/all.sql > /home/out-20230817.txt 2>&1 &
    
  3. 查看结果

    cat /home/out-20230817.txt


    2023-08-18 14:50:11

    2023-08-18 19:43:37

    大约 5 小时,对比前面调优没有多大改进?

原因分析

决定实际完成快慢的,是该进程的 CPU 占用时间( cputime ) ?

以下是中途记录的一段

#  ps -eo pid,euid,euser,lstart,etime,cputime,cmd | grep mysql
...1877     0 root     Fri Aug 18 08:22:21 2023    01:20:06 00:00:59 mysql -uroot -px xxxxxxxxxx --default-character-set=utf8 --force zXXX
...

可以看到,本次运行时间 01:20:06 ,CPU 占用时间 00:00:59 ,说明效率很高!

之前曾经有过运行一晚上,实际 cputime 才 2 个小时,效率太低了!

总结

  1. 切割 SQL 文件并不能显著改善导入速度 (也许我切割到 2G 还是太大了,感觉应该 1G )

  2. 使用 shell 命令行 和 mysql source 命令要快大约 20%-30%

  3. 使用多 CPU 和增加缓存等办法,没有测出有明显效果

  4. 影响导入速度的还是导入过程中的错误忽略 sql_mode = ‘ALLOW_INVALID_DATES’ 和 autocommit 等优化

  5. shell 命令行 加上 --force

  6. 不要同时执行 2 个或以上大任务,互相影响!

  7. 提前判断好需要的硬盘空间,不要等最后才知道 disk full ,前功尽弃!

    查看磁盘空间

    df -h

    如果可以找到原始的数据库来源,查看数据库文件大小

    $ sudo du -sh /var/lib/mysql/zXXX
    26G /var/lib/mysql/zXXX

相关文章:

mysql 超大 sql 文件导入过程

问题 最近遇到 2 个超大 sql 文件导入&#xff0c;好一通折腾 文档在哪里 调优参数太多&#xff0c;文档都看不过来 找到这些参数也费劲, ubuntu 在 /etc/mysql/mysql.conf.d/mysqld.cnf 中找到这个链接 ...... # # The MySQL Server configuration file. # # For explanat…...

【悬挂绝缘子的串效模型】测量每个绝缘子盘之间的电压并测量串效研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

P3957 [NOIP2017 普及组] 跳房子

题目背景 NOIP2017 普及组 T4 题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏&#xff0c;也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下&#xff1a; 在地面上确定一个起点&#xff0c;然后在起点右侧画 nn 个格子&#xff0c;这些…...

VR数字工厂多元化展现,打造数字企业工厂名片

5G时代&#xff0c;各种营销都在走数字化的路子&#xff0c;VR数字工厂用VR赋能工厂数字升级&#xff0c;将企业环境、工厂生产、产品研发、质检运输等流程&#xff0c;无死角720度的展示在客户面前&#xff0c;不仅可以提升自身企业的实力&#xff0c;还可以提高客户的信任感。…...

uniapp封装组件,选中后右上角显示对号√样式(通过css实现)

效果&#xff1a; 一、组件封装 1、在项目根目录下创建components文件夹&#xff0c;自定义组件名称&#xff0c;我定义的是xc-button 2、封装组件代码 <template><view class"handle-btn"><view :class"handleIdCode 1 ? select : unSelec…...

华为OD面试(部分)

笔试与性格测验 一面 问题和算法题都挺简单的 二面 Java内存泄漏 算法题思路不对&#xff0c;没写完只说了下思路&#xff1a;Leetcode516. Longest Palindromic Subsequence hr面&#xff08;资面&#xff09; 最后告诉我hr面挂了。其实这不是最重要的&#xff0c;因为还…...

从零做软件开发项目系列之一综论软件项目开发

1 引言 有一个三个泥瓦匠的故事。 三个泥瓦匠在砌墙&#xff0c;一个人走过来&#xff0c;问他们在干什么。   第一个泥瓦匠没好气地说&#xff0c;你没看见吗&#xff1f;我在辛苦地砌墙呢。   第二个回答&#xff0c;我们正在建一座高楼。   第三个则洋溢着喜悦说&…...

msvcp110.dll是什么意思,msvcp110.dll丢失的解决方法

装好软件或游戏之后&#xff0c;一打开就跳出各种报错信息的情况小伙伴一定见过&#xff0c;其中缺少各种msvcp110.dll文件最常见。小伙伴们一定奇怪&#xff0c;用得好好的电脑&#xff0c;怎么会缺文件呢&#xff1f;为啥其他游戏/应用就没事呢&#xff1f;其实这些“丢失”的…...

【报错】git push --set-upstream origin XXXX重名

您在尝试将分支推送到远程仓库时遇到了错误。错误信息表明&#xff0c;由于已经存在名为 refs/heads/xingfan/demo 的文件夹&#xff0c;Git 无法创建分支 refs/heads/xingfan。 要解决此问题&#xff0c;您可以尝试重命名本地分支&#xff0c;然后将其推送到远程仓库。以下是…...

探索树算法:C语言实现二叉树与平衡树

探索树算法&#xff1a;C语言实现二叉树与平衡树 树是计算机科学中一个重要且广泛应用的数据结构&#xff0c;它在许多领域都有着重要作用。本篇博客将深入介绍两种常见的树算法&#xff1a;二叉树遍历和平衡二叉树&#xff08;AVL树&#xff09;&#xff0c;并提供在C语言中的…...

Ubuntu 20.04(服务器版)安装 Anaconda

0、Anaconda介绍 Anaconda是一个开源的Python发行版本&#xff0c;包含了包括Python、Conda、科学计算库等180多个科学包及其依赖项。因此&#xff0c;安装了Anaconda就不用再单独安装CUDA、Python等。 CUDA&#xff0c;在进行深度学习的时候&#xff0c;需要用到GPU&#xf…...

IDEA项目实践——JavaWeb简介以及Servlet编程实战

系列文章目录 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 IDEA项目实践——Spring框架简介,以及IOC注解 IDEA项目实践——Spring当…...

【Freertos基础入门】队列(queue)的使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么&#xff1f;二、队列的操作二、示例代码总结 前言 本系列基于stm32系列单片机来使用freerots FreeRTOS是一个广泛使用的开源实时操作系统&…...

从零构建深度学习推理框架-8 卷积算子实现

其实这一次课还蛮好理解的&#xff1a; 首先将kernel展平&#xff1a; for (uint32_t g 0; g < groups; g) {std::vector<arma::fmat> kernel_matrix_arr(kernel_count_group);arma::fmat kernel_matrix_c(1, row_len * input_c_group);for (uint32_t k 0; k < k…...

【Spring Boot】JdbcTemplate数据连接模板 — JdbcTemplate入门

JdbcTemplate入门 本节从基础的部分开始介绍什么是JDBC、什么是JdbcTemplate&#xff0c;然后介绍Spring Boot项目如何使用JdbcTemplate操作数据库。 1.JdbcTemplate简介 1.1 什么是JDBC JDBC&#xff08;Java Data Base Connectivity&#xff0c;Java数据库连接&#xff0…...

视频汇聚集中存储EasyCVR平台调用iframe地址视频无法播放,该如何解决?

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…...

从今天起,重新出发

2017年的时候&#xff0c;我还是一名在校大学生&#xff0c;当时为了准备实习面试写下了第一篇学习笔记。 2018年我开始工作&#xff0c;简单记录了使用 Airflow 的踩坑记录。 一直到今天我已经是一个工作了五年的社畜&#xff0c;但是很遗憾没有把工作中的成长记录下来。 当…...

Java多态详解(1)

多态 多态的概念 所谓多态&#xff0c;通俗地讲&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 比如&#xff1a; 这一时间爆火的“现代纪录片”中&#xff0c;麦克阿瑟总是对各种“名人”有不同的评价&…...

optee读取Arm系统寄存器的模板

先写一个通用的内联函数模板,然后再通过宏控来定义各种读写函数。 (core/arch/arm/include/arm64.h)/** Templates for register read/write functions based on mrs/msr*/#define DEFINE_REG_READ_FUNC_(reg, type, asmreg) \ sta...

VSCode 使用总结

快捷键 在 Visual Studio Code (VSCode) 中&#xff0c;有许多常用的快捷键可以提高编程效率。以下是一些常见的 VSCode 编程项目快捷键&#xff1a; 编辑器操作&#xff1a; 撤销&#xff1a;Ctrl Z重做&#xff1a;Ctrl Shift Z复制&#xff1a;Ctrl C剪切&#xff1a;C…...

GuLi商城-前端基础Vue-使用Vue脚手架进行模块化开发

自己亲自实践&#xff1a; mac安装webpack webpack 简介Webpack 是一个非常流行的前端构建工具&#xff0c;它可以将多个模块&#xff08;包括CSS、JavaScript、图片等&#xff09;打包成一个或多个静态资源文件&#xff08;bundle&#xff09;&#xff0c;以便用于部署到生产…...

LeetCode450. 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点 文章目录 [450. 删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)一、题目二、题解方法一&#xff1a;递归&#xff08;一种麻烦的方法&#xff09;方法二&#xff1a;优化后的递归 一、题目 给定一个二叉搜索树的根…...

Java动态调试技术原理及实践

文章目录 Java动态调试技术原理及实践引言故事场景一:开发调试动态调试技术简介Java Instrumentation简介动态调试技术实践案例分析场景二:线上问题排查动态调试技术实践案例分析总结Java动态调试技术原理及实践 引言 在日常的软件开发过程中,调试是一个非常重要的环节。当…...

Lua + Redis 实战代码

--[[luarocks install luasocket module socket not foundhttps://github.com/nrk/redis-lua最历害的是&#xff0c;用redis 去跑lua&#xff0c;分布式锁&#xff0c;限流&#xff0c;]]--local redis require("redis");local config{host"127.0.0.1&…...

类的访问限定符,实例化,对象存储方式,this指针

目录 类的定义 类的两种定义方式&#xff1a; 访问限定符 类的实例化 类对象的存储方式 this指针 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a; 之前在数据结构初阶中&#xff0c;用C语…...

《Linux从练气到飞升》No.15 Linux 环境变量

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…...

Spring Boot 重启命令

Spring Boot 重启命令 本文描述了一个重启Spring Boot命令执行过程和示例 本文利用kill -9 关闭进程&#xff0c;不优雅&#xff0c;会突然中断程序&#xff0c;可能导致数据和逻辑异常 搜索微信小程序【亚特技术】在资源中搜索【优雅】可得到Spring Boot如何优化重启 1. 过…...

pdf怎么合并在一起?这几个合并方法了解一下

pdf怎么合并在一起&#xff1f;在日常工作、学习和生活中&#xff0c;我们常常会遇到需要将多个PDF文件合并成一个文件的情况。比如&#xff0c;在学术论文写作中&#xff0c;我们可能需要将多篇论文合并成一个文件进行打印和提交。在工作中&#xff0c;我们可能需要将多个报告…...

【仿写tomcat】七、项目结构优化以及代码开源

仿写tomcat 项目结构开源地址 项目结构 到目前为止&#xff0c;博主的仿写tomcat就告一段落了&#xff0c;后续有时间了还会继续补充功能&#xff0c;现在的项目结构如下。 在保证功能的前提下作出的改动有&#xff1a; 将各个类中的参数统一成了Config类&#xff0c;通过对…...

泛微E8配置自定义触发流程失败

在新公司接了个配置泛微流程触发的活。因为泛微的官方文档并没有详细的操作指引&#xff0c;在测试环境配置之后、要触发的流程可以手工提交&#xff0c;但是触发一直不成功。简单记录下业务场景和其他处理信息&#xff0c;以供参考。 应用版本 目前使用了泛微 E8 &#xff0…...