MySQL 几种导数据的方法与遇到的问题

2023-09-18 14:10:22

零、说在前面

        MySQL导数据通常使用第三方工具和MySQL自身的工具,本文分别就这两类方法分别介绍。

一、第三方工具之 Navicat

1.1、Navicat的“数据传输”工具

        打开Navicat,点击“工具”标签,找到“数据传输”,即可看到操作界面。这里不对这个工具本身做过多介绍,侧重点在于工具中的一些配置选项的含义的介绍上。如下图所示

        上图的传输选项选择好之后,点击下一步,看到如下界面。然后根据需要选择传递哪些表或哪些对象。选好后点击“下一步”

        以传输单表举例。选中左侧的某个表,然后可以在右侧看到“高级”选项,这里重点说一下高级选项中的一些参数

       点击“下一步”开始数据传输阶段,如果一切顺利,那么过一段时间传输就完成了。

1.2、感想

        上图中的“对每个记录集使用事务”勾选项,个人认为不会对数据源库有太大影响,仅仅当目标库开启了binlog后,才会对目标库有影响。众所周知有许多条件会个触发binlog写入磁盘,而完成一次事务也是触发条件之一。因此当这个选项被勾选后,那么我理解每一条插入语句都会被包装成一个事物,那么就会造成频繁的写binlog进而造成过多的IO开销,但好处就是不会造成关键数据的丢失。所以根据数据的重要程度来决定是否勾选这个选项吧。

二、MySQL自身工具之 mysqldump

2.1、使用方法

        linux 操作系统下,通常会使用mysqldump 这种基于数据的逻辑备份方式来导出数据,此方法在恢复数据阶段的速度不是很快,但胜在稳定而且备份的文件是基于数据的,所以能不受数据库引擎影响。

        导库命令格式为 "mysqldump -u登录名 -p 库名  > 路径 文件名";导表与导库方式的区别在于需要加上表名,命令格式为 "mysqldump -u登录名 -p 库名 表名 > 文件期望保存的路径 文件名",如下图所示

        上图中的导出数据的命令本身沒有什么可说的,只要命令正确就能导出成功。上图中有一点要说的就是我在导出命令前还加了一个 time 命令,目的是查看操作过程中的耗时情况。当导出操作成功后,会看到如上图下面三行所示的内容,其含义分别是 

real: 实际用时,即从命令开始到命令结束的总用时,包括所有进程执行和阻塞等待的时间
user: 用户进程的CPU用时
sys:  CPU内核中执行系统命令调用花费的时间

        当需要使用导出的文件进行数据恢复数据时的命令不再区分全库导入还是单表导入,命令都是 "mysql -u登录名 -p 库名 < 文件路径 文件名 ",成功之后会在库中看到最新的数据,如下图所示

2.2、加快dump导数据的速度

        如果MySQL打开了二进制日志,那么必然会影响写入速度,因此可以临时修改binlog的模式。关于binlog的一些原理,我将在稍后另开帖子补完。这里只说做法。

        第一,将 innodb_flush_log_at_trx_commit 参数从默认值1改为0。其含义是把数据库操作写入binlog 和 将数据写入磁盘的频率固定为一秒一次,且不受数据库操作是否含有事务的影响。

        第二,将 sync_binlog 参数设置为0,此时 数据库操作写入binlog文件和写入磁盘的频率受操作系统控制,不受数据库操作次数阈值的控制。

三、遇到的问题

3.1、磁盘空间不足

        我在使用mysqldump导入单表的数据时,发现很久很久都没有动静,其耗时远高于导出数据用时,可以在MySQL的命令行中执行 "SHOW PROCESSLIST" 命令,如下图所示

        在三次执行show processlist 命令后,观察这几次time字段的值,不难发现的一个insert 语句消耗了太多的时间却毫无进展。可以确认的是这个插入语句没有什么特殊考虑应该是某个环节出现了问题。

        通过排查发现原来是存储空间满了。解决方法见我的 VMWare虚拟机扩容并挂载磁盘 帖子扩容即可解决 ,此处就不再赘述了。

        此外,除了使用“show processlist”命令查看之外,还可以通过使用 "show status" 命令查看收发的数据量增幅大小来判断任务是否有进展。如下图所示

        需要注意的地方在于,做查询条件的参数名一定要用大写,切切!

3.2、字符集编码不一致 

       目前常用的MySQL版本多为5.7和8.0。其中5.7的编码默认为 latin1,而8.0及以后默认的utf-8编码是 utf8mb4。因此需要在互导数据之前确认一下源头与目标的字符集是否統一。同时建议新建数据库最好都使用 utf8mb4 编码。

更多推荐

计算机网络选择题笔记

令牌环:令牌环上传输的小的数据(3个字节的一种特殊帧)叫为令牌,谁有令牌谁就有传输权限。如果环上的某个工作站收到令牌并且有信息发送,它就改变令牌中的一位(该操作将令牌变成一个帧开始序列),添加想传输的信息,然后将整个信息发往环中的下一工作站。ARP协议作用:数据帧从源节点传送到目标节点通常需要经过许多中间节点。通常,数

注意力机制代码

注意力机制(AttentionMechanism)是深度学习中常用的一种技术,用于在处理序列数据时聚焦于不同部分的信息。以下是一个简单的注意力机制示例代码,使用Python和PyTorch库实现。这个示例是一个自定义的注意力机制,可以用于文本序列的处理,例如机器翻译。首先,确保你已经安装了PyTorch库。然后,可以使

Python 实现 PDF 文件转换为图片 / PaddleOCR

文章用于学习记录文章目录前言一、PDF文件转换为图片二、OCR图片文字识别提取三、服务器端下载运行PaddleOCR四、下载权重文件总结前言文字识别(OpticalCharacterRecognition,简称OCR)是指将图片、扫描件或PDF、OFD文档中的打印字符进行检测识别成可编辑的文本格式。一、PDF文件转换为

解决tomcat中文乱码问题终极大招

前言乱码问题是所有开发人员一定会遇到的问题,可惜的是,讲乱码解决方案的人往往讲不到重点。我们都知道引起乱码的原因就是编码不一样导致的。所以我们的终极解决方案就是让程序里的编码和tomcat的编码一致就行。由此引出了我们的第一个问题,tomcat控制台的编码是多少?tomcat控制台的编码是多少?这个问题很多人都会让你去

[2023.09.15]: Yew SSR模式下的条件编译问题

昨天才写了Rust的条件编译,没想到这个问题还没完。昨天我还为它的强大而赞叹不已,自以为对它了解了八九成,然而今天我才猛然意识到,这个里面的深度远超我的想象。我估计,我现在只了解其中的冰山一角吧。故事从客户端post数据的后端api说起。习以为常的思维影响着我解决问题的方式,对于这种问题,我通常会寻找一个库来处理后端的

(入门向)面向萌新的算法比赛入门指南

什么是算法算法是指解决问题或完成特定任务的一系列明确指令或步骤集合。它是一个定义良好、逐步执行的操作序列,用于将输入转换为输出。算法可用于计算、数据处理、自动化控制、问题解决等各个领域。算法通常由一系列简单的操作组成,这些操作可以是基本的数学运算、逻辑判断、条件分支、循环控制等。通过组合和重复执行这些操作,算法能够解决

大模型从入门到应用——LangChain:代理(Agents)-[工具包(Toolkit)]

分类目录:《大模型从入门到应用》总目录LangChain系列文章:基础知识快速入门安装与环境配置链(Chains)、代理(Agent:)和记忆(Memory)快速开发聊天模型模型(Models)基础知识大型语言模型(LLMs)基础知识LLM的异步API、自定义LLM包装器、虚假LLM和人类输入LLM(HumanInpu

数据结构——红黑树

1.什么是红黑树?红黑树是一种特定类型的二叉树,用于组织数据。它是一种平衡二叉查找树(AVL树)的变体,每个结点都带有颜色属性(红色或黑色)。在红黑树中,从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。具体来说,红黑树满足以下性质:每个结点要么是红色,要么是黑色。根结点是黑色。每个叶结点(NIL或空结点)是黑色

PHP8的类与对象的基本操作之类的实例化-PHP8知识详解

定义完类和方法后,并不是真正创建一个对象。类和对象可以描述为如下关系。类用来描述具有相同数据结构和特征的“一组对象”,“类”是“对象”的抽象,而“对象”是“类”的具体实例,即一个类中的对象具有相同的“型”,但其中每个对象却具有各不相同的“值”。例如,人就是一个抽象概念,即人类,但是程序员小张就是人类中具体的一个实例,即

TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案

一、方案背景随着人工智能技术的快速发展以及视频监控系统在全国范围内的迅速推进,基于AI视频智能分析技术的智能视频监控与智慧监管系统,也已经成为当前行业的发展趋势。在工业制造与工业生产领域,工厂对设备的巡检管理、维护维修、资产管理、安全运行管理等方面也提出了更高的监管要求。二、方案介绍TSINGSEE青犀视频围绕AI算法

网络安全(黑客)自学笔记

前言作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。计算机各领域的知识水平决定你渗透水平的上限。【1】比如:你编程水平高,那你在代码审计的时候就会比别人强,写出的漏洞利用工具就会比别人的好用;【2】比如:你数据库知识水平高,那你在进行SQL注入攻击的时候,你就可以写出更多更好的SQL注入语句

热文推荐