diskgenius 数据迁移_活见鬼,明明删除了数据,空间却没减少! - *IT界农民工*

9b931590af39db02a2bdb12a258c9e61.png

34aa46c31d8f6a35f04cc9b772678b34.png

2b9e1293fcc6804ed5aa06358b7c101f.png

c1ce1e406384cc9ffbd3b76c4810d0a7.png

e455ec3570a9f4c23c6abc5e88e98a5e.png

迁移数据常用

d21c8c0be772370592344034af8d6db2.png

1、导出文件 - mysqldump 命令 

‍mysqldump 是 Mysql 自带的逻辑备份工具。其备份原理是通过协议连接到 Mysql 数据库,将需要备份的数据查询出来转换成对应的 insert 语句。当需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。 

常用命令:

mysqldump -uroot -p123456 --all-databases  >/tmp/all.sql
mysqldump -uroot -p123456 --databases  db  >/tmp/db.sql
mysqldump -uroot -p123456 --databases  db  --tables a >/tmp/a.sql
mysqldump -uroot -p123456 --databases db --tables a --where='id=1' >/tmp/a.sql
mysqldump -uroot -p123456 --no-data --databases db  >/tmp/db.sql

2、导入文件 - source 命令

source 命令可以将导出的 sql 文件导入进指定数据库。

操作步骤:

  • use 数据库;

  • soucre 已导出的 sql 文件。

ea951818f1fbd4caaacf5c1d6175b49e.png

迁移思路

1. 数据库A历史数据迁移到 hdfs(一种分布式文件系统)上进行归档;

2. 删除数据库A已归档的表,使用 drop 命令;

3. 数据库A上新建表,用于数据库B迁移;

4. 数据库B中除未完成单外都迁移至数据库A;

5. 脚本进行删除数据库B上已迁移数据。 

ec326513bfc9baf1e088884c8778457b.png

f3464dd7e52494248d81e70710774933.png

ff803b98c5fb7dbc5e57166ead1ca726.png

阿丁开讲

1、参数介绍

在 Innodb 存储引擎中,innodb_file_per_table 参数是用来控制表数据的存储方式的。

当参数为 OFF 的时候,所有数据都存放于默认路径下名为 ibdata* 的共享表空间里,即将数据库所有的表数据及索引文件存放到一个文件中。在删除数据表的时候,ibdata* 文件不会自动收缩。

当参数为 ON 的时候,每一个表都将存储在一个以 .ibd 为后缀的文件中。这样每个表都有了自己独立的表空间,通过 drop table 命令就可以将表空间进行回收。 

从 Mysql 5.6.6 版本开始,innodb_file_per_table 默认为 ON 状态。

2、参数设置

通过 show variables like '%per_table%' 命令,可以查看 innodb_file_per_table 参数的当前状态:

4d4028b8538cebe44f21cebe642eda2d.png

如果想修改参数的状态,可通过 SET GLOBAL 动态地修改为 ON 或 OFF,也可以在 中做永久性修改。需要注意的是,在 中修改后生效的话需要重启 mysqld 服务。 

疑问:如果之前参数为 OFF 状态,设置为 ON 状态后,表空间如何分配?

答案是仅对后续操作生效。

什么意思呢?修改前的数据还维持原状,也就是说之前的数据继续存放于 ibdata* 文件中,修改后的使用独立表空间。 

所以建议在开始就将该参数设置为 ON 状态。

4dada2ba3fa754e57833ae945dcff8cb.png

第二天

ae63dd6c588ba867f664ae31a0540804.png

47e2679dbf2d254d3ed1e0f63056d87b.png

176673b880c220bb48de7ff2bcd3fe3f.png 

阿丁二次开讲

在这之前要先介绍下 Innodb 存储数据所用的 B+ 树结构,画个图你理解下:

0d0b09b4a851b77ee0391c0c41ad9f03.png

在图中,P 代表一页数据,R 代表一行数据。

假设我们要删掉 R2 这条记录,InnoDB 引擎只会将其标记为删除状态,并不会真正把这行数据所占的空间释放掉,也就是说这个坑位还留着。如果后续所插入的数据在 R1 与 R3 之间的话,这个空间是可以被使用上的。

假设我们恰好删除了 R1、R2、R3 这三条记录,也就是说 P1 这一页的数据都被删掉了,那么 P1 所在的空间都会被标记为可复用。如果插入的数据需要使用新页的话,P1 的坑位就可以被利用起来了。 

那么你可能会问了,我插入的数据恰好巧妙的避开了这些位置呢。那我还能说啥,骚呗。这样会造成很多空间被浪费,如果删除大量的数据的话,被浪费的空间也会是巨大的。

ece246d66a1c74ae5c3d4940c09360c6.png

optimize table 的本质是 ALTER TABLE xxx ENGINE = InnoDB;

在版本之前,重建表的过程是这样的:

c836353e8a7d60467e49579ebc002416.png

65b081e1d86e048df9cdb70e74f38781.png

b92788bde65ac537fc4b1ba7467d5863.png

77f85842826c53a8f15f6b7e8c4880f5.png

bc4817c22c290c6509e4360572983e47.png

679252e1339dc73cc354c0bb58f6b1ac.png

然后用临时文件替换旧表,这样便实现了表的重建。

40837ce75374ec5f2671837ab4b8f4eb.png

注意

1、控制迁移速度,防止主从延迟导致线上故障;

2、创建大表时,使用下面的建表语句可节省 50% 左右的空间:

ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8

3、使用 optimize table 压缩表时,需要留够一定的空间。

关于作者

作者:大家好,我是莱乌,BAT搬砖工一枚。从小公司进入大厂,一路走来收获良多,想将这些经验分享给有需要的人,因此创建了公众号「IT界农民工」。定时更新,希望能帮助到你。

87f2a7a29bc1c32f1b9d7b7f7dbec105.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机小精灵t2_搭建S5P4418 ARM环境下 GPU OPENGL ES开发环境(适用 NANOPI2,3,M2,M3,T2,T3)...

本帖最后由 3guoyangyang7 于 2017-8-20 22:38 编辑先说一下背景,这几天做一个摄像头处理的qt项目,摄像头的像素是1280*720的,25fps,用qt的painter重绘widget窗体,会出现大量占cpu的情况,在刷新图片的时候整…

求出数组中元素的总和_数组中所有元素的总和可被给定数K整除

求出数组中元素的总和This program will help to find out the sum of elements in an array which is divisible by a number K. It uses the basic concept of modulo % or the remainder of a number. 该程序将帮助找出数组中被数字K整除的元素之和 。 它使用“&#xff05…

iphone短信尚未送达_第五期:从苹果 乔布斯 iPhone 说到张小龙 微信 理财通

这篇评测我是怀着敬畏之心写的。第一部分:从设计理念说起(一)说到设计理念,不得不先说下苹果的iPhone一)第一代iPhone于2007年1月9日由苹果公司前首席执行官史蒂夫乔布斯发布,并在2007年6月29日正式发售。让我们看一下第一代iPhone的几个细节…

74161功能表_分析图 11 所示电路 74161 的 Q 3 为高电平时功能。 74194 功能表如表 1 所示。 74161 功能表如表 2 所示。 (7.2分)_学小易找答案...

【多选题】下列各项中,关于交易性金融资产表述正确的是( )。 (5.0分)【简答题】JAVA融教材(2)-工作页-项目8——集合框架一.docx【单选题】甲公司2018年7月1日购入乙公司2018年1月1日发行的债券,支付价款为1 100万元(含已到付息期但尚未领取的债券利息20万元),另支付交易费用15…

Python | 不使用库函数将十进制数转换为二进制

Given a decimal number and we have to convert it into binary without using library function. 给定一个十进制数,我们必须不使用库函数就将其转换为二进制数。 Example: 例: Input: 10Output: 1010Python code to convert decimal to binary Pyth…

declare begin end 中if怎么写_习语系列第45期:”未雨绸缪“英语怎么说?

背景介绍:英语习语是指一系列特定词的组合,但从字面上看不容易被理解。广义的习语包括短语动词、俚语、谚语、行话等。这为我们参加四六级、雅思、托福、GRE/GMAT考试做阅读理解题时带来了不少困难。抛开考试不谈,如果只是想单纯地读懂经济学…

vue判断组件是否显示_vue组件中watch props根据v-if动态判断并挂载DOM的问题

问题复现:父组件中通过名为 source 的 prop 向子组件 chart 传入数据 import chart from ../components/chart export default {name: home, components: { chart }, data () {return {chartdata: [] } }, mounted () {settimeout(() => {this.chartdata = [ [89.3, 58212,…

两个链表求交集_实现两个排序链表的并集和交集

两个链表求交集In computer science, a linked list is a linear collection of data elements, whose order is not given by their physical placement in memory. Instead, each element points to the next. It is a data structure consisting of a collection of nodes w…

python在哪个城市工资高_专硕好还是学硕好?哪个更好就业工资高?

最近有备考的小伙伴咨询关于学硕和专硕的问题,一篇旧文分享下。昨天的文章专硕学费贵那么多会比学硕学的东西多吗?九大美院研究生学费对比(点击查看)受到了不少小伙伴的关注,大家就专硕和学硕的问题提出了不少疑义。有人认为专硕好&#xff0…

html input不能输入小数_【Python基础(八)】输入和输出

本节将会介绍python中的输入和输出操作,基础部分主要就是介绍input()和print()的用法,print()我们在之前的学习中已经多次使用了,并不陌生,这一节再详细的梳理一下print()中可以支持的各种方法。另外一大内容是文件的读写和OS命令…

comparator比较器用法_汽车三元催化器堵塞咋办?不拆不换,用这招清理干净、动力猛如虎...

如今汽车的价格是不断走低,很多人也能如愿成为有车人群。如今国庆假期即将到来,在国庆前买了车的朋友就能在长假里开着汽车出去好好游玩一番,这过程是想想都觉得美妙。不过作为车主,汽车不单要懂得开,也要学会保养&…

mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解

一、Insert操作Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键。文档结构采用类似JSON的BSON格式。常见的插入操作主要有单条插入和批量插入两种形式。插入时只是简单地将文档存入数据库…

51单片机怎么显示当前时间_51单片机玩转物联网基础篇06-LCD1602液晶显示器

前言本节我们开始学习LCD1602,LCD1602是字符型液晶显示屏,在实际项目中应用非常广泛,学完本节就可以逐步开发一些好玩的应用了。一、基础知识1.LCD1602简介LCD1602是字符型液晶显示模块,专门用于显示字母、数字、符号等点阵式LCD&…

在JavaScript中以Hours24:Minutes:Seconds格式获取当前时间

使用JavaScript获取当前时间 (Getting current time in JavaScript) To get the current time in JavaScript, we need to use three library functions of Date class, 要获取JavaScript中的当前时间 ,我们需要使用Date类的三个库函数, Date getHours(…

联想服务器如何u盘启动盘装系统,联想如何设置u盘启动

相信有不少网友都在使用联想电脑,它的性价比一直受到不少消费者的青睐。接下来教大家联想如何设置u盘启动,希望大家能喜欢。联想如何设置u盘启动步骤阅读1、按快捷键弹出启动选项,联想笔记本一般是F12或者F22、按TAB键切换App Menu菜单&#…

c语言负数左移右移_C语言 位运算符的运算规则

位运算是指按照二进制进行的运算,在C语言中,提供了6种的位运算符,他们分别是按位与(&),按位或(|),按位异或(^),按位取反&#xff…

Android 带着用户名的SharedPreferences

/*** 设置当前用户的签到信息* account&info;account&info** param context* param sign* author jrjin* time 2016-1-5 下午2:27:47*/public static void setSignInfo(Context context, String sign) {String account getAccount(context);if (TextUtils.isEmpty(acc…

python数据分析与可视化-Python数据分析与数据可视化

数据分析、数据挖掘与数据可视化是一个古老的话题,并非什么新生事物。近些年来,借助于计算机软硬件的飞速发展,数据分析、挖掘、可视化相关理论和技术在各领域的应用更是有了质的飞跃。饭店选址、公交路线与站牌规划、物流规划、春运加班车次…

c语言 函数的参数传递示例_C-用户定义的函数示例,没有参数,没有返回类型...

c语言 函数的参数传递示例Define a function with no argument and no return type in C language. 用C语言定义一个没有参数且没有返回类型的函数。 In the program, we have function named fun1 which has no argument and no return type (void is the return type - that…

的标题形状工具在哪里_自媒体如何搜集素材?标题、文章、图片素材收集3大途径!...

文:老彭自媒体大家好,我是老彭,很多人觉得做自媒体写内容很难,每天想写点东西又感觉无从下手,那么到底是什么原因造成的呢?其实最主要的原因还是自己平时看的太少,和素材储备不足所导致的。大家…