• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

一个-MySQL-在线-DDL-工具-ptonlineschemachange

php 搞代码 3年前 (2022-02-28) 18次浏览 已收录 0个评论

在运维线上MySQL数据库时,咱们总会对数据表进行 DDL 变更,批改增加字段或者索引。在对表进行 DDL 时,会锁表,当表比拟小比方小于1w上时,对前端影响较小,过后遇到千万级别的表就会影响前端利用对表的写操作。

pt-online-schema-change 是 percona 公司开发的一个工具,在percona-toolkit包外面能够找到这个性能,它是一个在线DDL工具,能够实现在线数据表 DDL 操作。

应用办法
比方须要运行 SQL 的 DDL 语句

ADD COLUMN mode tinyint(4) DEFAULT NULL AFTER status

能够通过如下命令进行

nohup pt-online-schema-change \
    --charset=utf8 \
    --no-version-check \
    --user="数据库用户" \
    --password="数据库明码" \
    --host="数据库地址" \
    P=3306,D="数据库",t="数据表" \
    --alter "ADD COLUMN mode tinyint(4) DEFAULT NULL AFTER status" \
    --execute &

参数阐明

--user=        连贯mysql的用户名
--password=    连贯mysql的明码
--host=        连贯mysql的地址
P=3306         连贯mysql的端口号
D=             连贯mysql的库名
t=             连贯mysql的表名
--alter        批改表构造的语句
--execute      执行批改表构造
--charset=utf8 应用utf8编码,防止中文乱码
--no-version-check  不查看版本,在阿里云服务器中个别退出此参数,否则会报错

工作过程
创立一个和要执行 alter 操作的表一样的新的空表构造(是 alter 之前的构造)

在新表执行 alter table 语句(速度应该很快)

在原表中创立触发器 3 个触发器别离对应 insert, update, delete 操作

以肯定块大小从原表拷贝数据到长期表,拷贝过程中通过原表上的触发器在原表进行的写操作都会更新到新建的长期表

Rename 原表到 old 表中,在把长期表 Rename 为原表

如果有参考该表的外键,依据 alter-foreign-keys-method 参数的值,检测外键相干的表,做相应设置的解决

默认最初将旧原表删除

装置办法
仅供参考(CentOS 7 验证)

sudo yum install -y perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5 perl-TermReadKey.x86_64
sudo rpm -ivh percona-toolkit-3.1.0-2.el7.x86_64.rpm

参考资料
https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:一个-MySQL-在线-DDL-工具-ptonlineschemachange

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址