首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mysql千万级大添加字段

MySQL 大数据添加新字段 有时候我们在测试环境给一个添加字段,但是在线上环境添加一个字段,却极其的慢。...执行加字段操作就会,这个过程可能需要很长时间甚至导致服务崩溃。...into user_new(filed1,filed2…) select filed1,filed2,… from user 删除旧表,重命名新的名字为旧表的名字 建议是在脱机的情况下执行,避免在执行迁移数据过程中有新数据进来...online ddl的知识) 使用pt_osc添加 如果较大 但是读写不是太大,且想尽量不影响原的读写,可以用percona tools进行添加,相当于新建一张添加了字段的新,再将原的数据复制到新中...,复制历史数据期间的数据也会同步至新,最后删除,将新重命名为原表表名,实现字段添加 先在从库添加 再进行主从切换 如果一张数据量大且是热表(读写特别频繁),则可以考虑先在从库添加,再进行主从切换

9.9K30
您找到你想要的搜索结果了吗?
是的
没有找到

RDS更新数据恢复

收到公司产品人员消息,让我恢复一个的数据 通过了解系统是公司很多年前的一个老系统,面向美国用户的,数据库是阿里云的rds 所在区为美国弗吉尼亚mysql版本为5.6,产品在update操作时候字段名称写错了...,把一个字段值覆盖掉了 UPDATE tab_xxxx set imgxx=REPLACE(zip_linkxx,"aaa","bbb.com") where img like "%bbb.bb%" 找操作人员询问了执行的语句...,执行的大概时间点,要到rds登录方式等 1.第一想到的恢复方法是通过binlog日志进行恢复 登录rds控制台在备份恢复的日志备份中找binlog 发现binlog每4个小时备份一次,需要的日志没有下载列表...2.既然需要的日志,是不是可以通过全备进行恢复整个(由于是老系统这基本不会更新),不过看到全备的文件压缩后30多个G就放弃这种方法(30G下载就需要很长时间了) 3.第三种方法远程获取binlog...日志 mysqlbinlog --read-from-remote-server 远程获取Binlog日志 通过客户端连接实例,执行如下SQL语句,查看并记录logs中的Log_name列值,该值即为

6.2K101

探寻大删除字段慢的原因

《大删除字段为何慢?》的案例中,提到删除一张大字段,产生了很多等待,但是测试环境模拟的现象,看起来和生产,略有区别。...产生在删除字段上。...关于大字段,有些老师朋友,提供了他们碰见的问题,以及建议, 1. kill删除字段的会话,再次查询会报ORA-12986,需要truncate才能继续,此时要是没备份,就凉凉了。 ?...执行完毕后再次查询test1,就OK了 2.可以尝试逻辑删除,然后再物理删除,即线上置为unused,等维护窗口,再删除这个字段,如下面这篇文章, https://blog.csdn.net/caimaohua...如果有停机时间,可以采用CTAS重建,间接删除字段。 针对这个问题,我们采用的,算是第五种方法,即不动这字段,作为备份字段,未来新需求要增加字段,就直接改这字段,当然这是有些前提的, 1.

1.2K20

06 | 全局 :给加个字段怎么有这么多阻碍?

业务的更新不只是增删改数据(DML),还有可能是加字段等修改结构的操作(DDL)。不论是哪种方法,一个库被全局锁上以后,你要对里面任何一个做加字段操作,都是会被锁住的。...因此,如果有两个线程要同时给一个字段,其中一个要等另一个执行完才能开始执行。 虽然MDL 是系统默认会加的,但却是你不能忽略的一个机制。...比如下面这个例子,我经常看到有人掉到这个坑里:给一个小加个字段,导致整个库挂了。 你肯定知道,给一个字段,或者修改字段,或者加索引,需要扫描全的数据。...你现在应该知道了,事务中的 MDL ,在语句执行开始时申请,但是语句结束后并不会马上释放,而会等到整个事务提交后再释放。 基于上面的分析,我们来讨论一个问题,如何安全地给小字段?...如果你要变更的是一个热点,虽然数据量不大,但是上面的请求很频繁,而你不得不加个字段,你该怎么做呢? 这时候 kill 可能未必管用,因为新的请求马上就来了。

38630

MySQL实战之全局:给加个字段怎么有这么多阻碍

业务的更新不只是增删改数据(DML),还有可能是加字段等修改结构的操作(DDL)。不论哪种方法,一个库被全局锁上以后,你要对里面任何做加字段,都是会被锁住的。...但是,即使没有被全局锁住,加字段也不是一帆风顺的,因为你还会碰到下面要结束的。 3. MySQL里面级别的有两种,一种是,一种是元数据(meta data lock MDL)。...读写之间、写之间是互斥的,用来保证变更结构操作的安全性。因此如果有两个线程要同时给一个字段,其中一个要等另一个执行完成才开始执行。...虽然MDL是系统默认加的,但是你却不能忽略一个机制,比如下面的例子,我经常看到有人掉到这个坑里:给一个小加个字段,导致整个库挂了。...你肯定知道,给一个字段、或者修改字段、或者加索引,需要扫描全的数据。在对大操作的时候,你肯定会特别小心,以免对线上服务造成影响。而实际上,即使是小,操作不慎也会出现问题。

1.5K00

pt-osc 亿级大在线不变更字段与索引

NO.1 背景 大家在日常工作中,往往需要对数据库的结构做变更,一般涉及到增删字段,修改字段属性等ALTER的操作。 然而,在大场景下,特别是千万级、亿级的大,如果处理不当。...这些操作往往会引发的巨大隐患,特别是在生产环境中,一旦在变更结构过程中,出现了长时间,会导致用户产生的数据长时间无法正常变更到中,进而导致服务功能异常,结果将是灾难性的。...但是如果出现的话,万一有用户使用服务,服务将不可用。...,不会丢失掉用户的新操作数据; 4、按块拷贝数据到新,拷贝过程对数据行持有S; 5、重命名,将原重命名为老表,命名为“_正式名_old”,将新重命名为正式,可通过配置决定执行完成后是否删除掉老表...在测试库中,准备了一张1600万数据的大,目标为对大添加一个字段,分别使用存储过程和pt-osc工具,进行测试。 4.1 使用存储过程 首先使用存储过程做测试,为防止,每次只更新200行。

1.1K20

删除一个中所有含重复字段的数据

删除一个中所有含重复字段的数据     这天写了一个管理社工库的软件,就用我最熟悉的SQLite数据库,把从各处导出的数据(账号、密码、邮箱)存到本地数据库里,以后也方便随时查找。    ...我们可以通过SQL语句批量删除user_email重复的数据,只保留其user_id值最小的那一行。...DELETE FROM datebase,我的名叫datebase,这个不说了。WHERE user_email IN,我的email字段的名字叫user_email,我们主要看后面括号中的内容。...括号中是一个子句:SELECT user_email FROM datebase GROUP BY user_email HAVING COUNT(user_email) > 1,意思是:在datebase中查找...所以DELETE FROM datebase WHERE user_email IN (select的返回值)就是删除所有user_name重复的行。

1.4K20

MySQL实战第六讲 - 全局 :给加个字段怎么有这么多阻碍?

业务的更新不只是增删改数据(DML),还有可能是加字段等修改结构的操作(DDL)。不论是哪种方法,一个库被全局锁上以后,你要对里面任何一个做加字段操作,都是会被锁住的。...但是,即使没有被全局锁住,加字段也不是就能一帆风顺的,因为你还会碰到接下来我们要介绍的。...因此,如果有两个线程要同时给一个字段,其中一个要等另一个执行完才能开始执行。 虽然 MDL 是系统默认会加的,但却是你不能忽略的一个机制。...比如下面这个例子,我经常看到有人掉到这个坑里:给一个小加个字段,导致整个库挂了。 你肯定知道,给一个字段,或者修改字段,或者加索引,需要扫描全的数据。...你现在应该知道了,事务中的 MDL ,在语句执行开始时申请,但是语句结束后并不会马上释放,而会等到整个事务提交后再释放。 基于上面的分析,我们来讨论一个问题,如何安全地给小字段

1.1K30

Class文件字段

字段主要由以下属性构成: u2的访问标志 u2的简单名称索引 u2的描述符 u2的字段属性数量 具体的属性信息 access_flags 作为一个熟悉Java开发的同学来说,对于的类中的字段的修饰符必定不会陌生...对于数组类型,需要加一个前置的[,如果是二维数组则是[[ attributes 在字段的结尾有一个属性集合,用来描述一些额外的信息,这个属性集合我们在后面会详细详解,先给大家看一下属性都是有哪些类型...,每种属性作用的范围各不相同,有的是作用在方法上,有的则是作用在字段上,如下图所示: ?...ClassTest { private transient int m; private int inc() { return m + 1; } } 经过编译后我们的字段如下...-v 反编译的class文件)我们可以看出常量池中的第5项是m,该字段段的描述符为0x0006,在常量池重视个I,说明该字段的数据类型为int,紧接着后面该是该字段的属性,该字段没有属性,因此是0x0000

1K10

MySQL 全局和行

// MySQL 全局和行 // 最近在极客时间看丁奇大佬的《MySQL45讲》,真心觉得讲的不错,把其中获得的一些MySQL方向的经验整理整理分享给大家,有兴趣同学可以购买相关课程进行学习...今天分享的内容是MySQL的全局和行。...而 --single-transaction方法只适用于所有的使用事务引擎的库; 2、 MySQL里面级别的有两种,一种是,一种是元数据(MDL) 的加锁方式为lock tables...当前线程也不能对表t1做写的操作 MDL元数据是指在对一个做增删改查的时候,MySQL会对该加MDL读,防止另外一个线程对该做变更操作,当对一个做表结构变更的时候,会对该加MDL写。...MDL不需要显式使用,在访问一个的时候会被自动加上 MDL可能会造成MySQL宕掉!!!

4.4K20

MySQL中的、行

页面:开销和加锁时间界于和行之间;会出现死锁;锁定粒度界于和行之间,并发度一般 MySQL模式(MyISAM) MySQL有两种模式:共享(Table Read Lock...MySQL模式     MySQL的有两种模式:共享读(Table Read Lock)和独占写(Table Write Lock)。...模式的兼容如下表 MySQL中的兼容性 当前模式/是否兼容/请求模式 None 读 是 是 否 写 是 否 否     可见,对MyISAM的读操作,不会阻塞其他用户对同一的读请求...例如,将concurrent_insert系统变量为2,总是允许并发插入;同时,通过定期在系统空闲时段执行OPTIONMIZE TABLE语句来整理空间碎片,收到因删除记录而产生的中间空洞。...不可重复读(Non-Repeatable Reads):一个事务在读取某些数据已经发生了改变、或某些记录已经被删除了!这种现象叫做“不可重复读”。

4.8K10

并发 (三):myisam

在之前我们讲到了并发下的重要性,以及在php中怎么实现文件 现在我们来讲讲关于mysql之间的:和行 MyISAM MyISAM 存储引擎只支持,这也是MySQL 开始几个版本中唯一支持的类型...模式 所谓,就是按为单位直接锁住整个 MySQL的有两种模式:共享读(Table Read Lock)和独占写(Table Write Lock)。...在前面的文章已经讲过了共享和独占,不多解释 如何加 MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有加读,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的加写...当concurrent_insert设置为1时,如果MyISAM中没有空洞(即的中间没有被删除的行),MyISAM允许在一个进程读的同时,另一个进程从尾插入记录。这也是MySQL的默认设置。...例如,将concurrent_insert系统变量设为2,总是允许并发插入;同时,通过定期在系统空闲时段执行 OPTIMIZE TABLE语句来整理空间碎片,收回因删除记录而产生的中间空洞。

1.4K20
领券