整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

超详细的pt-online-schema-chang

超详细的pt-online-schema-change工具功能介绍,值得收藏

作为DBA,我们也常常会碰到这样的需求:需要在不影响线上业务的情况下给表添加一个字段或索引。如果是一张只有几百或几千条记录的小表,这样的需求是非常容易解决的。但如果所管理的表数据量已经上亿、而且应用与数据库交互非常频繁,不允许停机窗口的出现,这样的需求又该如何满足?

大多数的alter table操作都会涉及lock-->copy to new table-->rename-->unlock的过程,锁表时间会很长,而且alter table 的process不可被kill,一旦执行就不可回退。

在MySQL5.5和之前版本,在运行的生产环境对大表(超过数百万纪录)执行Alter操作是一件很困难的事情。因为将重建表和锁表,影响用户者的使用。

从MySQL5.6开始,Online DDL特性被引进。他增强了很多种类的Alter Table操作避免拷贝表和锁表,在运行Alter操作的同时允许运行select,insert,update,delete语句。因此在最新版本,我们可以通过使用ALGORITHM和LOCK选项抑制文件拷贝和加锁。

但是即使在MySQL5.6,仍然有一些Alter操作(增加/删除列,增加/删除主键,改变数据类型等)需要重建表。并不建议直接在线上使用alter table。如果线上有DDL的需求我们建议使用以下两种方式:

1、主从架构轮询修改

2、使用在线修改工具online-schema-change

对于第一种方式,使用的前提是,你的数据库架构是一个集群,如果不是,也就无所谓的轮询修改。修改的原理就是利用主从服务,在应用无感知的情况下,得到停机窗口,进行修改。今天我们着重讲第二种方式,利用第三方工具实现在线大表的DDL操作。这种方式在alter操作更改表结构的时候不用锁定表,也就是说执行alter的时候不会阻塞写和读取操作。

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


1、用法

pt-online-schema-change [OPTIONS] DSN

pt-online-schema-change alters a table’s structure without blocking reads or writes. Specify the database and table in the DSN. Do not use this tool before reading its documentation and checking your backups carefully.


2、参数

pt-online-schema-change --help 可以查看参数的使用,如果只是要修改个表结构,只需要知道几个简单的参数就可以了

  • --user=连接mysql的用户名
  • --password=连接mysql的密码
  • --host=连接mysql的地址
  • P=3306 连接mysql的端口号
  • D=连接mysql的库名
  • t=连接mysql的表名
  • --alter 修改表结构的语句
  • --execute 执行修改表结构
  • --charset=utf8 使用utf8编码,避免中文乱码
  • --no-version-check 不检查版本,在阿里云服务器中一般加入此参数,否则会报错

截图如下:


3、脚本复用

为避免每次都要输入一堆参数,写个脚本复用一下。

#!/bin/bash
#copyright by hwb 
table=$1
alter_conment=$2
cnn_host='172.16.xx'
cnn_user='root'
cnn_pwd='xxxx'
cnn_db='lcpdb'
echo "$table"
echo "$alter_conment"
pt-online-schema-change --charset=utf8 --no-version-check --user=${cnn_user} --password=${cnn_pwd} --host=${cnn_host} P=3306,D=${cnn_db},t=$table --alter "${alter_conment}" --execute --no-check-alter

下面用例子来说明下。


4、添加表字段

如添加表字段SQL语句为:

ALTER TABLE tb_test ADD COLUMN column1 tinyint(4) DEFAULT NULL;

那么使用pt-online-schema-change则可以这样写

sh pt_epms.sh tb_test "ADD COLUMN column1 tinyint(4) DEFAULT NULL"

执行如下:

查看表结构已经修改完成:


5、修改表字段

SQL语句:

ALTER TABLE tb_test MODIFY COLUMN id int(11) unsigned NOT NULL DEFAULT '0';

pt-online-schema-change工具:

sh pt_epms.sh tb_test "MODIFY COLUMN id int(11) unsigned NOT NULL DEFAULT '0'"

执行如下:

查看表结构:


6、修改表字段名

SQL语句:

ALTER TABLE tb_test CHANGE COLUMN name adress varchar(30);

pt-online-schema-change工具:

sh pt_epms.sh tb_test "CHANGE COLUMN name address varchar(30)"


7、添加索引

SQL语句:

ALTER TABLE tb_test ADD INDEX idx_address(address);

pt-online-schema-change工具:

sh pt_epms.sh tb_test "ADD INDEX idx_address(address)"


总结

pt-online-schema-change工具还有很多其他的参数,可以有很多限制,比如限制CPU、线程数量、从库状态等等,不过我做过一个超过1000W表的结构修改,发现几乎不影响性能,很稳定很流畅的就修改了表结构,所以,对以上常规参数的使用基本能满足业务。

注意一定要在业务低峰期做,这样才能确保万无一失。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

托武宁路沿线科研院所和国家机器人检测与评定中心等重点项目,普陀区联动华东师范大学、同济大学等院校资源,把武宁路打造成为带动全区转型发展的创新轴线。

武宁路,上海连接长三角的交通主动脉之一。近期,川流不息的通衢串起欣喜连连——这一侧,走过70年的新中国首个工人新村——曹杨新村,以城市更新更迭出一个破圈的百禧公园;那一侧,一个新近成立的“华普人才基金”让建校70年的华东师大与所在区域深度合作,依托人才及项目产生更大破圈溢出效应。

一头聚焦人才育用,一头发力宜居宜业,更紧扣引才用才留才全周期,这正是“大院大所大企大校”资源集聚并不占优势的普陀区,贯彻落实党的十九届六中全会精神、中央人才工作会议精神,面向未来发展所下出的一盘大棋局,赢得竞争主动所锻铸的一招先手棋——以“人才”这一要素为发力点,以此带动、撬动所有关键资源、要素融通汇聚,从而助推整个区域实现从硬核实力到软实力的全面跃变提升。

正如普陀区委书记姜冬冬所说,将把握人才“第一资源”,激活创新“第一动力”,实现发展“第一要务”,打造近悦远来、宜居宜业的良好人才生态,聚天下英才而用之,成为区域发展最关键的战略资源、最核心的力量支撑。

跃变提升:以人才打开自身发展“两个扇面”

武宁路沿线,汇聚着19家科研院校、48家功能平台和200多家高新技术企业。未来,其闪亮标签是“武宁创新发展轴”。

除了武宁路,普陀区域地理标识中还有长度等同于半个马拉松赛程、蜿蜒流淌的苏州河。未来,这一绿色生态岸线同样将化身为强劲发展动线,与武宁创新发展轴一同构成体现区域新功能的“新T台”——集聚各类创新要素、平台载体,完善科创服务体系,促进科技创新与产业融合发展。

功以才成,业由才广。有什么样的人才结构,从某种程度上决定了区域产业结构,更关系区域经济发展韧劲。要开辟新赛道,聚合竞争新优势,普陀区对于人才的热望从来没有像今天这般强烈。

如何将上海辐射长三角的“西大堂”变为配置高端资源要素的“新门户”,从而打开普陀区自身发展的“两个扇面”?

过去五年,普陀区腾笼换鸟,先后关闭了铜川路水产市场等一系列初级商贸市场,引进360华东大安全总部、阿里数字农业供应链中心、京东上海中心等一批“五型经济”头部企业及项目,拉开了以数字化驱动的海纳小镇、金沙岛(中新合作)科技城等建设序幕,实现了从原先以房地产业、传统商贸业等为支撑,到以科技创新为驱动的转型升级。智能软件、研发服务、科技金融、生命健康4个重点产业在经济发展中的比重达28%。现代服务业在经济中的占比创历史新高。

以中以(上海)创新园为例,截至目前,园区已和40余家科技企业、科研机构、中介服务机构及中以合作项目签订协议,实际入驻企业60余家,初步形成医疗健康与生命科学、人工智能与机器人、互联网与信息技术的产业集聚。过去五年的爬坡过坎,在姜冬冬看来,正是为加速转型而积蓄动能。当下,更要用好人才这一“激活因子”,助推各项工作在新起点跃变提升。

先手棋:为干事创业者提供广阔舞台

翻开普陀区“十四五”蓝图,一项“411”产业倍增计划亮眼。即智能软件、研发服务、科技金融、生命健康4个重点产业税收比重每年增加1个百分点,到“十四五”时期末将合计比重达40%,这也将为人才提供广阔的产业舞台。这正是普陀区下好人才工作“先手棋”的一个具象剖面。

前不久结束的普陀区第十一次党代会正式提出“建设近悦远来的人才发展新高地”目标任务。既要善于整合区内资源,形成工作合力,又敢于引入外部力量,持续探索创新。

首先,向内挖潜。今年中央人才工作会议召开后,普陀区第一时间发布“才聚普陀”人才新政,进一步支持高层次人才创新创业,提高了人才开发培育、人才安居等支持标准,不断做强“政策磁场”。建好中以(上海)创新园、上海清华国际创新中心“两大金字招牌”,重点聚焦“卡脖子”领域研究,建设研究平台,推动人才引进、团队搭建、成果转化,更好融入全市重点产业布局;做优上海机器人研发与转化、上海工业控制系统安全创新2个功能型平台,强化与华东师大等区域内高校、科研院所深度合作。以“华普人才基金”为例,以政府小投入撬动社会资源大参与。

同时,巧借外力,积极引入创新主体和社会组织,主动融入长三角一体化发展战略,谋求人才工作突破创新。与浙江清华长三角研究院合作建立孵化器,通过科研合作、项目孵化,建立人才吸引的离岸平台,加快高层次人才引进、智力成果转化。

对此,不少企业深有感触。360集团华东大安全总部去年4月落户普陀区,今年又加码整合新业务新板块落子。360数科副总裁田帆表示:“当下的普陀区,正似一口热气腾腾的‘大火锅’,等待着所有干事创业者的‘众人拾柴’,360非常乐意参与其间。”

主战场:谋布适合人才落定发展的大生态全周期

对人才而言,最具吸引力的要素之一:人尽其才,才尽其用。

普陀区不断优化营商环境,从产业链、生态链两端形成闭环,更有针对性地引才留才,建设人才发展新高地,让人才的根扎得更深,更好地“聚天下英才而用之”,力争在人才这一“主战场”实现大作为。

一方面,将人才政策纳入产业政策体系,围绕企业发展、科技创新、人才培育给予多层次支持,促进产业精准引才。同时,积极发挥创新创业平台对各类智力资源、创新要素的柔性吸附,让更多优秀人才走到科技创新的前台、走上事业发展的舞台。特别是,全力打响“人靠谱(普)、事办妥(陀)”金名片,延伸打造“人靠谱(普)、才无忧”等服务品牌,紧扣人才所关切,从多维度提升人才服务效能。在强化服务的基础上,更谋布适合人才落定发展的大生态、全周期,实现“人靠谱(普)、才相聚”。

看得见的是有形的载体建设、政策扶持,看不见的是人才链、生态链的融通汇聚,最终发生良好化学反应。

普陀区织密人才服务网络,做强“人才管家”团队,深化“人才优享卡”服务,推动“人才服务一件事”集成,提供“全程帮办”“24小时便利店式服务”,帮助人才解决“急难愁盼”,当好人才的“最佳合伙人”“最暖店小二”。

针对人才关心的安居问题,普陀区积极拓宽人才公寓房源筹集渠道,率先开发“人才安居平台”,盘活5000多套租赁房源,让人才在线上轻松完成各类流程手续。“十四五”期间,将积极筹集社会化安居房源,提供万套人才公寓。

“抢抓机遇,乘势而上,努力实现经济发展高质量、城区形象高颜值、人民生活高品质、城区治理高效能、干部人才高素质,让人才成为其间关键一招,奋力跑出加速度。”姜冬冬这样笃信。

作者:张晓鸣 顾一琼

编辑:范菁

于绘图和印刷而言,「单位」很相当重要的,然而在网页排版里,单位也是同样具有重要性,在CSS3 普及以来,更添加了一些方便好用的单位( px、em、rem.. .等),这篇文章将整理这些常用的CSS 单位,希望能够帮助到你在工作上能使用的更加得心应手。

「网页」和「印刷」的单位

目前我们接触的范围来说,若要把单位做区分,最简单可以分为「网页」和「印刷」两大类,通常对于CSS来说只会应用到网页的样??式,毕竟真正要做印刷,还是会倾向通过排版软体来进行设计。

网页( 单位 )

  • px:绝对单位,代表屏幕中每个「点」( pixel )。
  • em:相对单位,每个子元素通过「倍数」乘以父元素的px值。
  • rem:相对单位,每个元素通过「倍数」乘以根元素的px值。
  • %:相对单位,每个子元素通过「百分比」乘以父元素的px值。

网页( 属性名称 )

  • medium:预设值,等于16px ( h4预设值)
  • xx-small:medium的0.6倍( h6预设值)
  • x-small:medium的0.75倍
  • small:medium的0.8倍( h5预设值,W3C定义为0.89,实测约为0.8 )
  • large:medium的1.1倍( h3预设值,W3C定义为1.2,实测约为1.1 )
  • x-large:medium的1.5倍( h2预设值)
  • xx-large:medium的2倍( h1预设值)
  • smaller:约为父层的80%
  • larger:约为父层的120%

印刷(简单了解下)

  • pt:印刷机的每个「点」,定义为1 pt = 1/72 in,如果在72 dpi的系统上1 px=1 pt,但如果在96 dpi的系统上1 px=0.75 pt ( 72 /96=0.75 )。
  • in:英寸,在96 dpi的系统上1 in=96 px。
  • cm:厘米,在96 dpi的系统上1 cm=37.795275593333 px。
  • mm:毫米,在96 dpi的系统上1 mm=3.7795275593333 px。

示例展示

以下将展示四种不同单位的示例,为了直观简单,四个示例都套用预设的div格式,纯粹改变font-size看看有何不同,由于子元素若没有设定font-size,会自动继承父元素的font-size,使用上就应该要预先初始化字体大小,下面这两段CSS可以将所有的元素字体大小预设为16px,接下来可以进行个别调整。

html{
 font-size:16px;
}
html * {
 font-size: 1rem;
}

1、px

px 是绝对单位,因此只要设定多少px,就会精确的呈现,对于一些讲求精准位置的排版而言十分有用,如示例展示的,指定多大 px 字体就会多大。

<div style="font-size:16px;">16px
 <div style="font-size:20px;">20px
 <div style="font-size:24px;">24px
 <div style="font-size:16px;">16px
 <div style="font-size:32px;">32px</div>
 </div>
 </div>
 </div>
</div>

2、em

em是相对单位,为每个子元素通过「倍数」乘以父元素的px值,如果我们每一层div都使用1.2em,最内层就会是16px x 1.2 x 1.2 x 1.2 x 1.2 x 1.2=39.8px。(浏览器预设字体大小为16px,若无特别指定则会直接继承父元素字体大小)

<div style="font-size:1.2em;">1.2em
 <div style="font-size:1.2em;">1.2em
 <div style="font-size:1.2em;">1.2em
 <div style="font-size:1.2em;">1.2em
 <div style="font-size:1.2em;">1.2em</div>
 </div>
 </div>
 </div>
</div>

3、rem

rem是相对单位,为每个元素通过「倍数」乘以根元素的px值,如果我们每一层div都使用1.2rem,最内层就会是16px x 1.2=19.2px。(根元素指的是html的font-size,预设为16px )。

<div style="font-size:1.2rem;">1.2rem
 <div style="font-size:1.2rem;">1.2rem
 <div style="font-size:1.2rem;">1.2rem
 <div style="font-size:1.2rem;">1.2rem
 <div style="font-size:1.2rem;">1.2rem</div>
 </div>
 </div>
 </div>
</div>

4、%

%百分比是相对单位,和em大同小异,简单来说em就是百分比除以一百,如果我们每一层div都使用120%,就等同于1.2em,最内层就会是16px x 1.2 x 1.2 x 1.2 x 1.2 x 1.2=39.8px。

<div style="font-size:120%;">120%
 <div style="font-size:120%;">120%
 <div style="font-size:120%;">120%
 <div style="font-size:120%;">120%
 <div style="font-size:120%;">120%</div>
 </div>
 </div>
 </div>
</div>

5、small、medium、large...等

字体大小的属性有七种,分别是xx-small、x-small、small、medium、large、x-large和xx-large,除了x-small,其余六种分别对应h6~h1的标签文字大小,根据W3C的规范,以medium预设16px为基础(若html字体预设大小改变,medium也会跟着变),使用固定的百分比乘以medium的大小,例如xx-small预设为16px x 0.6=9.6px(浏览器显示为12px )。

<div style="font-size:xx-small;">xx-small
 <div style="font-size:x-small;">x-small
 <div style="font-size:small;">small
 <div style="font-size:medium;">medium
 <div style="font-size:large;">large
 <div style="font-size:x-large;">x-large
 <div style="font-size:xx-large;">xx-large</div>
 </div>
 </div>
 </div>
 </div>
 </div>
</div>

6、larger、smaller

larger 和smaller 就是固定百分比为单位,larger 为父层的120%,smaller 为父层的80%。

<div style="font-size:medium;">medium
 <div style="font-size:larger;">larger
 <div style="font-size:larger;">larger
 <div style="font-size:larger;">larger
 <div style="font-size:smaller;">smaller
 <div style="font-size:smaller;">smaller
 <div style="font-size:smaller;">smaller</div>
 </div>
 </div>
 </div>
 </div>
 </div>
</div>

小结

熟悉了字体大小单位之后,你就更够能有系统的进行设计整个网站的CSS字体架构,不过font-size 本身和font-family 有着一些复杂的关系,不同的font-family 有时也会影响font-size 的设定,因此使用上还是得稍微注意一下啰!