如何导入1T数据到MYSQL数据库?

 问题:如何快速把1T数据,导入到mysql数据库中?

1、直接LOAD DATA INFILE

LOAD DATA INFILE 'path/to/bigfile.csv' INTO TABLE XXX_table;

这样会导致文件过大,主备复制断掉(备库跟不上),数据库CPU、内存等使用率冲高,而且效率也不太高。

2、分割成小文件 LOAD DATA INFILE 

LOAD DATA INFILE 'path/to/smallfile1.csv' INTO TABLE xxx_table;
LOAD DATA INFILE 'path/to/smallfile2.csv' INTO TABLE xxx_table;
LOAD DATA INFILE 'path/to/smallfile3.csv' INTO TABLE xxx_table;
LOAD DATA INFILE 'path/to/smallfile4.csv' INTO TABLE xxx_table;
LOAD DATA INFILE 'path/to/smallfile5.csv' INTO TABLE xxx_table;
...

这样文件小了,数据库CPU、内存等使用率冲高,得到缓解了,导入效率提提高了一些,但是主备复制还是会发生断掉(备库跟不上)。

3、能否看看导入每个文件时主备延迟多少,然后导入后sleep一下是不是就好了?

主备延迟查看方法:

①备库SHOW SLAVE STATUS。

SHOW SLAVE STATUS\G;

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master_host
                  Master_User: replication_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 154
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
          Exec_Master_Log_Pos: 154
        Seconds_Behind_Master: 139

Seconds_Behind_Master  就是主备延迟秒数,如果有复制延迟(Seconds_Behind_Master 不为 0),则表示备库还没有完全追上主库。

问题是生产上一般没办法直接访问备库,能访问一般也是只能select。于是继续向其他办法。

注意:即使能够读到延迟秒数,也不能直接按照这个秒数sleep,因为这是数据库的一个预估值,不太准确,所以能够获取到延迟秒数,建议做法是sleep 一定秒数(比如10秒),然后在查询这个值,在判断是否还需要继续sleep,直到主备复制延迟为0。

②能否通过,主库binlog大小评估需要sleep时间? 

SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000012 | 107       | test_db      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

mysql-bin.000012 是binlog正在写的文件名称,Position 是当前binlog记录的位置,即记录到107了。

那要怎么算生成了多少binlog呢?只需要在这个文件导入前后各执行一次就可以了。

文件导入前执行:

SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154       | test_db      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

文件导入后执行:

SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 100      | test_db      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

binlog跨文件了,再执行:SHOW BINARY LOGS;

SHOW BINARY LOGS;

+------------------+----------+
| Log_name         | File_size |
+------------------+----------+
| mysql-bin.000001 | 2000      | 
+------------------+----------+
| mysql-bin.000002 | 2000      | 
+------------------+----------+
| mysql-bin.000003 | 100       | 
+------------------+----------+

计算binlog大小:binlog_size = (2000-154) + 2000 + 100 = 3945

最后发现这个也不准确,因为这里面备库执行速度不仅取决于条数,还会受导入的数据量本身影响,即:越往后导入表的数据量越多速度会变慢。

③还有其他办法,来评估需要sleep时间? 

自己查询判断备库是否已经同步完成。操作方法:导入文件数据--->文件导入完成----->读取文件最后一条记录----->在主库查询确保能查询到记录------->备库查询直到能够查询到这条记录。

读取文件最后一行:

import org.apache.commons.io.input.ReversedLinesFileReader;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ReadLastLineWithCommonsIO {
    public static void main(String[] args) {
        File file = new File("path/to/your/file.txt");

        try (ReversedLinesFileReader reader = new ReversedLinesFileReader(file, StandardCharsets.UTF_8)) {
            String lastLine = reader.readLine();
            System.out.println("Last line: " + lastLine);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

好处:能够精准判断备库什么时候同步完成,而且顺便检查了数据的准确性。

留个正在看到问题:主备复制延迟,不是可以使用备库多线程并行复制吗?这个并行复制原理又是怎样的?

大家有好的办法欢迎随时交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/759157.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot】SpringBoot使用mail实现登录邮箱验证

📝个人主页:哈__ 期待您的关注 目录 一、前期准备 1 开启邮箱服务 2 SpringBoot导入依赖 3 创建application.yml配置文件 4 创建数据库文件 5 配置redis服务 二、验证邮件发送功能 三、注册功能实现邮箱验证 1 创建User实体类 2 创建UserPa…

java spring 拦截器和过滤器+过滤器处理数据

java spring 拦截器和过滤器过滤器处理数据 介绍Spring拦截器(Interceptor)导入依赖完整代码 Java过滤器(Filter)完整代码分为 2 个文件,请看下面BodyReaderHttpServletRequestWrapper.javaMyFilter.java Spring过滤器…

初识HTML

HTML语法规范 1、HTML标签是由尖括号包围的关键字&#xff0c;例如<html>。 2、HTML标签通常成对出现&#xff0c;例如<html></html>&#xff0c;此为双标签&#xff0c;标签对的第一个标签是开始标签&#xff0c;第二个标签是结束标签。 3、有些特殊标签…

揭秘多年免费听音乐、直播、影视的自用方案:手机、电视、电脑多平台0成本实现媒体自由(内含相关资源)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 多媒体自由 📒🎧 音乐资源📱安卓平台🍎 苹果平台💻 PC平台🎥 影视资源📱 安卓平台🍎 苹果平台📺 电视盒子💻 PC平台📥 电影下载📺 直播资源📱 手机平台💻 PC平台📺 电视盒子⚓️ 相关链接 ⚓️�…

【Python实战因果推断】9_元学习器4

目录 Double/Debiased Machine Learning Double/Debiased Machine Learning Double/Debiased ML 或 R-learner 可以看作是 FrischWaugh-Lovell 定理的改进版。其思路非常简单--在构建结果和治疗残差时使用 ML 模型 结果和干预残差&#xff1a; , 预估&#xff0c;预估 由于 …

Golang-slice理解

slice golang-slice语雀笔记整理 slicego为何设计slice&#xff1f;引用传递实现扩容机制 go为何设计slice&#xff1f; 切片对标其他语言的动态数组&#xff0c;底层通过数组实现&#xff0c;可以说是对数组的抽象&#xff0c;底层的内存是连续分配的所以效率高&#xff0c;可…

【操作系统】进程管理——进程控制和进程通信(个人笔记)

学习日期&#xff1a;2024.6.30 内容摘要&#xff1a;进程控制的概念&#xff0c;进程控制相关的“原语”&#xff0c;进程通信 进程控制 原语 进程控制用“原语”实现。原语是一种特殊的程序&#xff0c;它的执行具有原子性&#xff0c;也就是说&#xff0c;这段程序的执行…

计算机网络原理及应用

第一章 计算机网络概述 【1】局域网 局域网是指在某一区域内由多台计算机互联而成的计算机通信网络。 【1】互通 两个网络之间可以交换数据。 第二章 计算机网络的体系结构 【1】语义 何时发出何种控制信息&#xff0c;完成何种动作以及做出何种响应。 【2】简述网络协…

【Linux】性能分析器 perf 详解(一):简介、安装、stat命令演示

1、简介 perf 是由 Linux 官方提供的系统性能分析工具 。它包含两部分: perf_events ,Linux 内核中的一个子系统perf 命令,用户空间的应用程序内核子系统 perf_events 提供了性能计数器(hardware performance counters)和性能事件的支持,它以事件驱动型的方式工作,通过…

DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手

关于DarkGPT DarkGPT是一款功能强大的人工智能安全助手&#xff0c;该工具基于GPT-4-200k设计并实现其功能&#xff0c;可以帮助广大研究人员针对泄露数据库进行安全分析和数据查询相关的OSINT操作。 工具要求 openai1.13.3 requests python-dotenv pydantic1.10.12 工具安装 …

【机器学习】在【Pycharm】中的应用:【线性回归模型】进行【房价预测】

专栏&#xff1a;机器学习笔记 pycharm专业版免费激活教程见资源&#xff0c;私信我给你发 python相关库的安装&#xff1a;pandas,numpy,matplotlib&#xff0c;statsmodels 1. 引言 线性回归&#xff08;Linear Regression&#xff09;是一种常见的统计方法和机器学习算法&a…

miniconda 弹出黑窗

etc\conda\activate.d 和 envs 中不同环境中的 etc\conda\activated.d&#xff0c;只保留下图中的三个文件即可。

Facebook的投流技巧有哪些?

相信大家都知道Facebook拥有着巨大的用户群体和高转化率&#xff0c;在国外社交推广中的影响不言而喻。但随着Facebook广告的竞争越来越激烈&#xff0c;在Facebook广告上获得高投资回报率也变得越来越困难。IPIDEA代理IP今天就教大家如何在Facebook上投放广告的技巧&#xff0…

p2p、分布式,区块链笔记:试用ZeroTier组网

ZeroTier 是一种用于创建和管理虚拟局域网&#xff08;Virtual Local Area Network&#xff0c;VLAN&#xff09;的软件定义网络&#xff08;SDN&#xff09;解决方案。它可以通过互联网将多个设备安全地连接在一起&#xff0c;就像它们在同一个本地网络上一样。主要开发语言为…

zfile文件共享系统使用

1.简介 zfile是一款基于java开源的文件共享软件&#xff0c;有两种部署&#xff08;jar包和war包&#xff09;,非常适合广大的Java开发人员使用&#xff08;当然其他人员也可使用&#xff09;&#xff0c;或者你也可以称它为网盘&#xff0c;可以在Windows、MacOS、Linux上部署…

【操作系统期末速成】 EP01 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️1.1 考点一&#xff1a;操作系统的概率及特征 三、总结&#xff1a;&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动…

javaSE知识点整理总结(下)、MySQL数据库

目录 一、异常 1.常见异常类型 2.异常体系结构 3.异常处理 &#xff08;1&#xff09;finally &#xff08;2&#xff09;throws 二、JDBC 1.JDBC搭建 2.执行SQL语句两种方法 三、MySQL数据库 1.ddl 2.dml 3.dql &#xff08;1&#xff09;字符函数 &#xff08;…

Unidbg调用-补环境V3-Hook

结合IDA和unidbg,可以在so的执行过程进行Hook,这样可以让我们了解并分析具体的执行步骤。 应用场景:基于unidbg调试执行步骤 或 还原算法(以Hookzz为例)。 1.大姨妈 1.1 0x1DA0 public void hook1() {

Unity之自定义Text组件默认属性值

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之自定义Text组件默认属性值 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff01;…

48 - 按日期分组销售产品(高频 SQL 50 题基础版)

48 - 按日期分组销售产品 -- group_concat 分组拼接selectsell_date,count(distinct product) num_sold,group_concat(distinct product order by product separator ,) products fromActivities group bysell_date;