问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql给表增加字段会锁表,怎样才可以不锁表吗

发布网友 发布时间:2022-04-25 06:07

我来回答

2个回答

懂视网 时间:2022-04-08 00:11

MySQL5.6在线DDL不锁表(在线添加字段)

解答你也看一下
MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作?

操作如下:
1.注意磁盘空间(临时表目录)
2.当前内存剩余量
3.当前有没有大的事务在执行
4.innodb_online_alter_log_max_size参数
5.然后在从上添加,再在主上添加(不记录binlog),处理完成后再开启

如果直接先在主上操作,那么会导致主从延迟很大(在量比较大的情况下)。因为主从复制,从库的SQL线程是单进程,它接收到主库的BINLOG,要一条一条执行,一条SQL卡住了,后面的SQL就会排队等待,这时同步就延迟了

 

附注:

在之前的版本,InnoDB引擎是通过以下步骤来进行DDL的:
1 按照原始表(original_table)的表结构和DDL语句,新建一个不可见的临时表(tmp_table)----> create table tmp_table like original_table;
2 在原表上加write lock,阻塞所有更新操作(insert、delete、update等,一行行的把原表数据拷贝到临时表里,且更新索引)
3 执行insert into tmp_table select * from original_table
4 rename original_table和tmp_table,最后drop original_table
5 释放 write lock。

如查采用第三方工具推荐使用pt-online-schema-change

 

工作原理:
如果表有外键,除非使用 --alter-foreign-keys-method 指定特定的值,否则工具不予执行。
1 判断各种参数,是否符合操作条件
2 创建一个和原表一样的空表结构(tmp_table)
3 执行表结构修改,然后从原表中copy数据到上面创建的新表中
4 在原表上创建3个触发器(名称格式为pt_osc_库名_表名_操作类型),当copy 数据的过程中,把原表的更新操作更新到新表 (注意:如果表中已经定义了触发器这个工具就不能工作了)
CREATE TRIGGER `pt_osc_dba_t_del` AFTER DELETE ON `dba`.`t` FOR EACH ROW DELETE IGNORE FROM `dba`.`_t_new` WHERE `dba`.`_t_new`.`id` <=> OLD.`id`
CREATE TRIGGER `pt_osc_dba_t_upd` AFTER UPDATE ON `dba`.`t` FOR EACH ROW REPLACE INTO `dba`.`_t_new` (`id`, `a`, `b`, `c1`) VALUES (NEW.`id`, NEW.`a`, NEW.`b`, NEW.`c1`)
CREATE TRIGGER `pt_osc_dba_t_ins` AFTER INSERT ON `dba`.`t` FOR EACH ROW REPLACE INTO `dba`.`_t_new` (`id`, `a`, `b`, `c1`) VALUES (NEW.`id`, NEW.`a`, NEW.`b`, NEW.`c1`)
5 copy 完成以后,用rename table 新表代替原表,默认删除原表 (可以指定参数不删除原表操作)
6 删除触发器
这里要注意的是。。如果是小表。。直接在主上添加了
深圳@邱治军 mysql 中文网 9:46:41

大表要结合业务和时间点考虑是否在主上还是先在从上添加

 

 这个工具只能用在percona DB吗
深圳@邱治军 mysql中文网群2015/5/29 10:14:02
没啊
mysql percona mariadb都支持
只要是mysql版本
这工具要维护表的时候最适用了
定期整理mysql innodb 表碎片   你刚才说在线加字段,需要有前提条件
前提条件是什么
深圳@邱治军 mysql中文网群  10:29:32
没啥
添加主键要注意一下
普通字段没啥   

MySQL5.6在线DDL不锁表(在线添加字段)

标签:

热心网友 时间:2022-04-07 21:19

锁表一般是长时间占用表导致的,
试着使SELECT语句运行得更快;你可能必须创建一些摘要(summary)表做到这点。
用--low-priority-updates启动mysqld。这将给所有更新(修改)一个表的语句以比SELECT语句低的优先级。在这种情况下,在先前情形的最后的SELECT语句将在INSERT语句前执行。
你可以用LOW_PRIORITY属性给与一个特定的INSERT、UPDATE或DELETE语句较低优先级。
为max_write_lock_count指定一个低值来启动mysqld使得在一定数量的WRITE锁定后给出READ锁定。
通过使用SQL命令:SET SQL_LOW_PRIORITY_UPDATES=1,你可从一个特定线程指定所有的更改应该由用低优先级完成
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果银行拒贷有哪些办法 小天鹅滚筒洗衣机水位多少合适 阴阳师百闻牌攻略大全 百闻牌式神卡组阵容大全 阴阳师百闻牌三大妖狐阵容推荐 妖狐流派怎么搭配?-新手攻略-安族网... 阴阳师百闻牌妖狐快攻阵容 怎么搭配攻略推荐 阴阳师百闻牌妖狐技能攻略 妖狐属性及卡组搭配推荐-新手攻略-安族网... 阴阳师百闻牌妖狐最强卡组 阵容怎么搭配攻略 阴阳师百闻牌妖狐卡组推荐 怎么搭配攻略分享 带鹏字的公司名字大全 鹏字开头公司起名 叶罗丽娃娃玩具店在哪 五千公斤大米可以养活多少人? 电视这样了怎么办,老是显示没信号 耳麦坏了怎么办 一公斤大米四万个米粒,全国每人节约一粒大米,就相当于全国每天节约多少万平方?_百度问一问 看了一下,MYSQL在读写时会自动给表或者行加锁,那为什么还会出现所谓... 苹果二代蓝牙耳机麦克风时好时坏怎么回事,刚买的时候用了半年都是好好的,现在总是时好时坏? 如何给mysql表上锁 一个季节人们能吃多少,公斤大米? MySQL的SELECT.FOR UPDATE究竟起什么作用 耳麦坏了怎么修? 请问1公斤大米等于多少毫升啊{在线等啊} 1公斤大米有多少粒 麦克风没声音,耳麦如果坏了,怎么修?(拒绝复制) 耳机的耳麦坏了,怎么修理? 1公斤大米出多少米饭 1公斤大米等于多少升 苹果耳机麦克风坏了怎么修 之前买的cardo packtalk蓝牙耳机麦克风坏了怎么办? 我连自家wifi时不小心点了忘记密码,现在怎么就连不上去了,也找不到_百度问一问 1公斤大米有多少粒? 为什么耳机的耳麦坏了?可是还可以讲话,就是听不到声音 怎么回事? mysql 锁表会出现什么情况 一千克大米有多少粒 为什么我刚买了带耳机的麦克风两天就坏了 昨天还好好的,今天插在手机上就听不见任何音了 蓝牙耳机连上电脑后麦克风无声 电视没信号怎么办呢? 苹果耳机插上手机的时候还是手机话筒,耳机上的麦克风没声,是耳机坏了... 电视为什么打不开,总是显示没信号 怎样可以判断耳机麦克风坏了 电视总是没有信号? 耳麦话筒说不出话来,到可以听到声音,是不是话筒坏了,还是电脑里有什么设置没有开启啊 大家人寿久安19增额终身寿险性价比怎么样?线上怎么买? 为什么电视总出现无信号 电视总是显示视频无信号 每次打开电视总是无信号 114可以查车的保险吗 电视老是出现无信号是怎么会事? mtt30灭火器什么意思 USB接口的音箱插上去对电脑有坏处吗 电脑USB接口能输出音源吗