作为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
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.
pt-online-schema-change --help 可以查看参数的使用,如果只是要修改个表结构,只需要知道几个简单的参数就可以了
截图如下:
为避免每次都要输入一堆参数,写个脚本复用一下。
#!/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
下面用例子来说明下。
如添加表字段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"
执行如下:
查看表结构已经修改完成:
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'"
执行如下:
查看表结构:
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)"
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来说只会应用到网页的样??式,毕竟真正要做印刷,还是会倾向通过排版软体来进行设计。
网页( 单位 )
网页( 属性名称 )
印刷(简单了解下)
以下将展示四种不同单位的示例,为了直观简单,四个示例都套用预设的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 的设定,因此使用上还是得稍微注意一下啰!
*请认真填写需求信息,我们会在24小时内与您取得联系。