文档章节

热修改mysql数据库 (生产环境中增加字段、索引不发生锁表)

o
 osc_4nmshwhm
发布于 2018/08/07 10:05
字数 976
阅读 17
收藏 0

精选30+云产品,助力企业轻松上云!>>>

首先不得不在该篇里面梳理一个数据库热增加删除字段表的工具pt-online-schema-change这个工具在前面我的博文 《关于utf8mb4的学习了解笔记》里面有提到过,他是一个online的ddl(data definition language)工具。由于mysql 的ddl语句在执行的时候会锁表,在数据量大的情况下锁表就会严重影响正常的数据写入。

既然都说到这里了,也总结一下我在网上查到的innodb在ddl的时候所执行的操作:

1. 按照原始表(original_table)的表结构和ddl语句,新建一个不可见的临时表(temporary_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

 

通过以上的步骤我们可以很容易的发现,这样操作在表锁定的情况是只能查询,不能写入。为了解决这个问题所以PERCONA公司推出了一个不会阻塞的工具pt-online-schema-change。

这里不得不再次介绍一下pt-online-schema-change是怎么做到在不阻塞写入的情况下改动数据库的:

1. 首先创建一个和你要执行的alter操作的表一样的空的表结构。

2. 执行我们赋予的表结构的修改,然后copy原表中的数据到新表里面。

3. 在原表上创建一个触发器在数据copy的过程中,将原表的更新数据的操作全部更新到新的表中来。 这里特别注意一下,如果原表中已经定义了触发器那么工具就不能工作了。

4. copy完成之后,用rename table 新表代替原表,默认删除原表。

了解了原理之后,理解起来就似乎不那么困难了。感觉这些问题也并不是什么高大上的问题了。下面看看具体使用

pt-online-schema-change h=ip_address,u=user_name,D=database,t=table --alter "add column shop_id int(11) DEFAULT NULL " --set-vars --lock-wait-timeout=3 --ask-pass --execute

以上就是大致语法,这里来介绍几个参数:

--set-vars:

type: string; default: wait_timeout=10000

Set these MySQL variables. Immediately after connecting to MySQL, this string will be appended to SET and executed.

 字符串类型,在链接到mysql之后立即设置mysql变量,这个变量会给展示这些设置和执行。
--lock-wait-timeout:

type: int; default: 1

Set the session value of innodb_lock_wait_timeout. This option helps guard against long lock waits if the data-copy queries become slow for some reason. Setting this option dynamically requires the InnoDB plugin, so this works only on newer InnoDB and MySQL versions. If the setting’s current value is greater than the specified value, and the tool cannot set the value as desired, then it prints a warning. If the tool cannot set the value but the current value is less than or equal to the desired value, there is no error.

 类型int,默认值是1秒

设置一个session值为innodb_lock_wait_timeout.这个选项帮助你防止一个长时间的锁等待,这种情况一般会发生在比如说数据拷贝的时候,变得非常慢。设置这个选项需要innodb的插件,所以要innodb引擎和mysql比较新。如果设置的这个值比需要的值大,而且这个工具不能设置为一个需要值的话,就会报出warning。反之如果工具不能设置这个值,但是这个值又比所需要的值小的话,就不会发生什么。

--ask-for:

  在连接数据库的时候提示输入密码。  

--execute参数

  只有加了这个参数,才会去真正执行添加触发器拷贝数据等一系列操作。

其他想要了解更加相信的信息可以访问这个文档https://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html 这是官方文档,基本上疑问都可以从这里得到解答。

上一篇: umask
下一篇: boost::program_options
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
数据库方面

1.MYSQL数据库引擎区别 · MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL...

盼望明天
2015/04/02
211
0
mysql大表在不停机的情况下增加字段该怎么处理

MySQL中给一张千万甚至更大量级的表添加字段一直是比较头疼的问题,遇到此情况通常该如果处理?本文通过常见的三种场景进行案例说明。 1、 环境准备 数据库版本: 5.7.25-28(Percona 分支)...

懂点IT的耿小厨
06/20
0
0
总结的一些MySQL数据库优化技巧

一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善。这篇文章主要谈谈MySQL数据库在发展周期中所面临的问题及优化方案,暂且抛...

osc_4jx0jzfh
2018/05/16
3
0
【原创】记一次MySQL大表高并发写入引发CPU飙升的排障过程

目录 一.故障现象... 1 二.初步分析... 2 三.排障过程... 2 1.排查是否QPS或insert并发请求上升导致问题发生... 2 2.排查是否锁资源等待或block导致了insert变慢... 3 3.排查是否表上无...

osc_jisalpua
2018/06/27
26
0
MySQL 管理之道读书总结

最近读了《MySQL 管理之道》一书,做了以下总结,希望对大家有所帮助。在这里非常感谢作者的辛勤付出。 影响 MySQL 性能的因素: 影响 MySQL InnoDB 引擎性能的最主要因素就是磁盘 I/ O,目前...

M104
2018/07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

图解ARP协议(二)ARP***原理与实践

一、ARP***概述 在上篇文章里,我给大家普及了ARP协议的基本原理,包括ARP请求应答、数据包结构以及协议分层标准,今天我们继续讨论大家最感兴趣的话题:ARP***原理是什么?通过ARP***可以做...

osc_91g5cdgs
13分钟前
0
0
shell进度条实现

#!/bin/bashb=''i=0while [ $i -le  100 ]do    printf "progress:[%-50s]%d%%\r" $b $i    sleep 0.1    i=`expr 2 + $i`            b=#$b......

osc_npw5uz1o
15分钟前
13
0
通过ssh实现登录服务器脚本

版本v1 #!/bin/bash########################author: Bovin########################show all host infos of serverList.txtif [[ -f $HOME/.serverList.txt ]]then  hos......

osc_lt2jwwhb
16分钟前
0
0
VMware Fusion下Centos联网

1.VMware Fusion设置选择“网络适配器” 2.“连接我的网络适配器”选择“与我的mac共享” 3.编辑centos的ip配置文件 [root@Centos ~]# more /etc/sysconfig/network-scripts/ifcfg-eth0D...

osc_pg5rp78i
17分钟前
0
0
Kickstart配置文件参数详解

kickstart是什么? KickStart是一种无人值守的安装方法。它的工作原理时在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成K...

osc_r9yyhhqz
18分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部