作為DBA,我們也常常會碰到這樣的需求:需要在不影響線上業(yè)務(wù)的情況下給表添加一個(gè)字段或索引。如果是一張只有幾百或幾千條記錄的小表,這樣的需求是非常容易解決的。但如果所管理的表數(shù)據(jù)量已經(jīng)上億、而且應(yīng)用與數(shù)據(jù)庫交互非常頻繁,不允許停機(jī)窗口的出現(xiàn),這樣的需求又該如何滿足?
大多數(shù)的alter table操作都會涉及l(fā)ock-->copy to new table-->rename-->unlock的過程,鎖表時(shí)間會很長,而且alter table 的process不可被kill,一旦執(zhí)行就不可回退。
在MySQL5.5和之前版本,在運(yùn)行的生產(chǎn)環(huán)境對大表(超過數(shù)百萬紀(jì)錄)執(zhí)行Alter操作是一件很困難的事情。因?yàn)閷⒅亟ū砗玩i表,影響用戶者的使用。
從MySQL5.6開始,Online DDL特性被引進(jìn)。他增強(qiáng)了很多種類的Alter Table操作避免拷貝表和鎖表,在運(yùn)行Alter操作的同時(shí)允許運(yùn)行select,insert,update,delete語句。因此在最新版本,我們可以通過使用ALGORITHM和LOCK選項(xiàng)抑制文件拷貝和加鎖。
但是即使在MySQL5.6,仍然有一些Alter操作(增加/刪除列,增加/刪除主鍵,改變數(shù)據(jù)類型等)需要重建表。并不建議直接在線上使用alter table。如果線上有DDL的需求我們建議使用以下兩種方式:
1、主從架構(gòu)輪詢修改
2、使用在線修改工具online-schema-change
對于第一種方式,使用的前提是,你的數(shù)據(jù)庫架構(gòu)是一個(gè)集群,如果不是,也就無所謂的輪詢修改。修改的原理就是利用主從服務(wù),在應(yīng)用無感知的情況下,得到停機(jī)窗口,進(jìn)行修改。今天我們著重講第二種方式,利用第三方工具實(shí)現(xiàn)在線大表的DDL操作。這種方式在alter操作更改表結(jié)構(gòu)的時(shí)候不用鎖定表,也就是說執(zhí)行alter的時(shí)候不會阻塞寫和讀取操作。
參考官網(wǎng):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 可以查看參數(shù)的使用,如果只是要修改個(gè)表結(jié)構(gòu),只需要知道幾個(gè)簡單的參數(shù)就可以了
截圖如下:
為避免每次都要輸入一堆參數(shù),寫個(gè)腳本復(fù)用一下。
#!/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"
執(zhí)行如下:
查看表結(jié)構(gòu)已經(jīng)修改完成:
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'"
執(zhí)行如下:
查看表結(jié)構(gòu):
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工具還有很多其他的參數(shù),可以有很多限制,比如限制CPU、線程數(shù)量、從庫狀態(tài)等等,不過我做過一個(gè)超過1000W表的結(jié)構(gòu)修改,發(fā)現(xiàn)幾乎不影響性能,很穩(wěn)定很流暢的就修改了表結(jié)構(gòu),所以,對以上常規(guī)參數(shù)的使用基本能滿足業(yè)務(wù)。
注意一定要在業(yè)務(wù)低峰期做,這樣才能確保萬無一失。
后面會分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注一下~
托武寧路沿線科研院所和國家機(jī)器人檢測與評定中心等重點(diǎn)項(xiàng)目,普陀區(qū)聯(lián)動(dòng)華東師范大學(xué)、同濟(jì)大學(xué)等院校資源,把武寧路打造成為帶動(dòng)全區(qū)轉(zhuǎn)型發(fā)展的創(chuàng)新軸線。
武寧路,上海連接長三角的交通主動(dòng)脈之一。近期,川流不息的通衢串起欣喜連連——這一側(cè),走過70年的新中國首個(gè)工人新村——曹楊新村,以城市更新更迭出一個(gè)破圈的百禧公園;那一側(cè),一個(gè)新近成立的“華普人才基金”讓建校70年的華東師大與所在區(qū)域深度合作,依托人才及項(xiàng)目產(chǎn)生更大破圈溢出效應(yīng)。
一頭聚焦人才育用,一頭發(fā)力宜居宜業(yè),更緊扣引才用才留才全周期,這正是“大院大所大企大校”資源集聚并不占優(yōu)勢的普陀區(qū),貫徹落實(shí)黨的十九屆六中全會精神、中央人才工作會議精神,面向未來發(fā)展所下出的一盤大棋局,贏得競爭主動(dòng)所鍛鑄的一招先手棋——以“人才”這一要素為發(fā)力點(diǎn),以此帶動(dòng)、撬動(dòng)所有關(guān)鍵資源、要素融通匯聚,從而助推整個(gè)區(qū)域?qū)崿F(xiàn)從硬核實(shí)力到軟實(shí)力的全面躍變提升。
正如普陀區(qū)委書記姜冬冬所說,將把握人才“第一資源”,激活創(chuàng)新“第一動(dòng)力”,實(shí)現(xiàn)發(fā)展“第一要?jiǎng)?wù)”,打造近悅遠(yuǎn)來、宜居宜業(yè)的良好人才生態(tài),聚天下英才而用之,成為區(qū)域發(fā)展最關(guān)鍵的戰(zhàn)略資源、最核心的力量支撐。
躍變提升:以人才打開自身發(fā)展“兩個(gè)扇面”
武寧路沿線,匯聚著19家科研院校、48家功能平臺和200多家高新技術(shù)企業(yè)。未來,其閃亮標(biāo)簽是“武寧創(chuàng)新發(fā)展軸”。
除了武寧路,普陀區(qū)域地理標(biāo)識中還有長度等同于半個(gè)馬拉松賽程、蜿蜒流淌的蘇州河。未來,這一綠色生態(tài)岸線同樣將化身為強(qiáng)勁發(fā)展動(dòng)線,與武寧創(chuàng)新發(fā)展軸一同構(gòu)成體現(xiàn)區(qū)域新功能的“新T臺”——集聚各類創(chuàng)新要素、平臺載體,完善科創(chuàng)服務(wù)體系,促進(jìn)科技創(chuàng)新與產(chǎn)業(yè)融合發(fā)展。
功以才成,業(yè)由才廣。有什么樣的人才結(jié)構(gòu),從某種程度上決定了區(qū)域產(chǎn)業(yè)結(jié)構(gòu),更關(guān)系區(qū)域經(jīng)濟(jì)發(fā)展韌勁。要開辟新賽道,聚合競爭新優(yōu)勢,普陀區(qū)對于人才的熱望從來沒有像今天這般強(qiáng)烈。
如何將上海輻射長三角的“西大堂”變?yōu)榕渲酶叨速Y源要素的“新門戶”,從而打開普陀區(qū)自身發(fā)展的“兩個(gè)扇面”?
過去五年,普陀區(qū)騰籠換鳥,先后關(guān)閉了銅川路水產(chǎn)市場等一系列初級商貿(mào)市場,引進(jìn)360華東大安全總部、阿里數(shù)字農(nóng)業(yè)供應(yīng)鏈中心、京東上海中心等一批“五型經(jīng)濟(jì)”頭部企業(yè)及項(xiàng)目,拉開了以數(shù)字化驅(qū)動(dòng)的海納小鎮(zhèn)、金沙島(中新合作)科技城等建設(shè)序幕,實(shí)現(xiàn)了從原先以房地產(chǎn)業(yè)、傳統(tǒng)商貿(mào)業(yè)等為支撐,到以科技創(chuàng)新為驅(qū)動(dòng)的轉(zhuǎn)型升級。智能軟件、研發(fā)服務(wù)、科技金融、生命健康4個(gè)重點(diǎn)產(chǎn)業(yè)在經(jīng)濟(jì)發(fā)展中的比重達(dá)28%。現(xiàn)代服務(wù)業(yè)在經(jīng)濟(jì)中的占比創(chuàng)歷史新高。
以中以(上海)創(chuàng)新園為例,截至目前,園區(qū)已和40余家科技企業(yè)、科研機(jī)構(gòu)、中介服務(wù)機(jī)構(gòu)及中以合作項(xiàng)目簽訂協(xié)議,實(shí)際入駐企業(yè)60余家,初步形成醫(yī)療健康與生命科學(xué)、人工智能與機(jī)器人、互聯(lián)網(wǎng)與信息技術(shù)的產(chǎn)業(yè)集聚。過去五年的爬坡過坎,在姜冬冬看來,正是為加速轉(zhuǎn)型而積蓄動(dòng)能。當(dāng)下,更要用好人才這一“激活因子”,助推各項(xiàng)工作在新起點(diǎn)躍變提升。
先手棋:為干事創(chuàng)業(yè)者提供廣闊舞臺
翻開普陀區(qū)“十四五”藍(lán)圖,一項(xiàng)“411”產(chǎn)業(yè)倍增計(jì)劃亮眼。即智能軟件、研發(fā)服務(wù)、科技金融、生命健康4個(gè)重點(diǎn)產(chǎn)業(yè)稅收比重每年增加1個(gè)百分點(diǎn),到“十四五”時(shí)期末將合計(jì)比重達(dá)40%,這也將為人才提供廣闊的產(chǎn)業(yè)舞臺。這正是普陀區(qū)下好人才工作“先手棋”的一個(gè)具象剖面。
前不久結(jié)束的普陀區(qū)第十一次黨代會正式提出“建設(shè)近悅遠(yuǎn)來的人才發(fā)展新高地”目標(biāo)任務(wù)。既要善于整合區(qū)內(nèi)資源,形成工作合力,又敢于引入外部力量,持續(xù)探索創(chuàng)新。
首先,向內(nèi)挖潛。今年中央人才工作會議召開后,普陀區(qū)第一時(shí)間發(fā)布“才聚普陀”人才新政,進(jìn)一步支持高層次人才創(chuàng)新創(chuàng)業(yè),提高了人才開發(fā)培育、人才安居等支持標(biāo)準(zhǔn),不斷做強(qiáng)“政策磁場”。建好中以(上海)創(chuàng)新園、上海清華國際創(chuàng)新中心“兩大金字招牌”,重點(diǎn)聚焦“卡脖子”領(lǐng)域研究,建設(shè)研究平臺,推動(dòng)人才引進(jìn)、團(tuán)隊(duì)搭建、成果轉(zhuǎn)化,更好融入全市重點(diǎn)產(chǎn)業(yè)布局;做優(yōu)上海機(jī)器人研發(fā)與轉(zhuǎn)化、上海工業(yè)控制系統(tǒng)安全創(chuàng)新2個(gè)功能型平臺,強(qiáng)化與華東師大等區(qū)域內(nèi)高校、科研院所深度合作。以“華普人才基金”為例,以政府小投入撬動(dòng)社會資源大參與。
同時(shí),巧借外力,積極引入創(chuàng)新主體和社會組織,主動(dòng)融入長三角一體化發(fā)展戰(zhàn)略,謀求人才工作突破創(chuàng)新。與浙江清華長三角研究院合作建立孵化器,通過科研合作、項(xiàng)目孵化,建立人才吸引的離岸平臺,加快高層次人才引進(jìn)、智力成果轉(zhuǎn)化。
對此,不少企業(yè)深有感觸。360集團(tuán)華東大安全總部去年4月落戶普陀區(qū),今年又加碼整合新業(yè)務(wù)新板塊落子。360數(shù)科副總裁田帆表示:“當(dāng)下的普陀區(qū),正似一口熱氣騰騰的‘大火鍋’,等待著所有干事創(chuàng)業(yè)者的‘眾人拾柴’,360非常樂意參與其間。”
主戰(zhàn)場:謀布適合人才落定發(fā)展的大生態(tài)全周期
對人才而言,最具吸引力的要素之一:人盡其才,才盡其用。
普陀區(qū)不斷優(yōu)化營商環(huán)境,從產(chǎn)業(yè)鏈、生態(tài)鏈兩端形成閉環(huán),更有針對性地引才留才,建設(shè)人才發(fā)展新高地,讓人才的根扎得更深,更好地“聚天下英才而用之”,力爭在人才這一“主戰(zhàn)場”實(shí)現(xiàn)大作為。
一方面,將人才政策納入產(chǎn)業(yè)政策體系,圍繞企業(yè)發(fā)展、科技創(chuàng)新、人才培育給予多層次支持,促進(jìn)產(chǎn)業(yè)精準(zhǔn)引才。同時(shí),積極發(fā)揮創(chuàng)新創(chuàng)業(yè)平臺對各類智力資源、創(chuàng)新要素的柔性吸附,讓更多優(yōu)秀人才走到科技創(chuàng)新的前臺、走上事業(yè)發(fā)展的舞臺。特別是,全力打響“人靠譜(普)、事辦妥(陀)”金名片,延伸打造“人靠譜(普)、才無憂”等服務(wù)品牌,緊扣人才所關(guān)切,從多維度提升人才服務(wù)效能。在強(qiáng)化服務(wù)的基礎(chǔ)上,更謀布適合人才落定發(fā)展的大生態(tài)、全周期,實(shí)現(xiàn)“人靠譜(普)、才相聚”。
看得見的是有形的載體建設(shè)、政策扶持,看不見的是人才鏈、生態(tài)鏈的融通匯聚,最終發(fā)生良好化學(xué)反應(yīng)。
普陀區(qū)織密人才服務(wù)網(wǎng)絡(luò),做強(qiáng)“人才管家”團(tuán)隊(duì),深化“人才優(yōu)享卡”服務(wù),推動(dòng)“人才服務(wù)一件事”集成,提供“全程幫辦”“24小時(shí)便利店式服務(wù)”,幫助人才解決“急難愁盼”,當(dāng)好人才的“最佳合伙人”“最暖店小二”。
針對人才關(guān)心的安居問題,普陀區(qū)積極拓寬人才公寓房源籌集渠道,率先開發(fā)“人才安居平臺”,盤活5000多套租賃房源,讓人才在線上輕松完成各類流程手續(xù)。“十四五”期間,將積極籌集社會化安居房源,提供萬套人才公寓。
“搶抓機(jī)遇,乘勢而上,努力實(shí)現(xiàn)經(jīng)濟(jì)發(fā)展高質(zhì)量、城區(qū)形象高顏值、人民生活高品質(zhì)、城區(qū)治理高效能、干部人才高素質(zhì),讓人才成為其間關(guān)鍵一招,奮力跑出加速度。”姜冬冬這樣篤信。
作者:張曉鳴 顧一瓊
編輯:范菁
于繪圖和印刷而言,「單位」很相當(dāng)重要的,然而在網(wǎng)頁排版里,單位也是同樣具有重要性,在CSS3 普及以來,更添加了一些方便好用的單位( px、em、rem.. .等),這篇文章將整理這些常用的CSS 單位,希望能夠幫助到你在工作上能使用的更加得心應(yīng)手。
目前我們接觸的范圍來說,若要把單位做區(qū)分,最簡單可以分為「網(wǎng)頁」和「印刷」兩大類,通常對于CSS來說只會應(yīng)用到網(wǎng)頁的樣??式,畢竟真正要做印刷,還是會傾向通過排版軟體來進(jìn)行設(shè)計(jì)。
網(wǎng)頁( 單位 )
網(wǎng)頁( 屬性名稱 )
印刷(簡單了解下)
以下將展示四種不同單位的示例,為了直觀簡單,四個(gè)示例都套用預(yù)設(shè)的div格式,純粹改變font-size看看有何不同,由于子元素若沒有設(shè)定font-size,會自動(dòng)繼承父元素的font-size,使用上就應(yīng)該要預(yù)先初始化字體大小,下面這兩段CSS可以將所有的元素字體大小預(yù)設(shè)為16px,接下來可以進(jìn)行個(gè)別調(diào)整。
html{ font-size:16px; } html * { font-size: 1rem; }
1、px
px 是絕對單位,因此只要設(shè)定多少px,就會精確的呈現(xiàn),對于一些講求精準(zhǔn)位置的排版而言十分有用,如示例展示的,指定多大 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是相對單位,為每個(gè)子元素通過「倍數(shù)」乘以父元素的px值,如果我們每一層div都使用1.2em,最內(nèi)層就會是16px x 1.2 x 1.2 x 1.2 x 1.2 x 1.2=39.8px。(瀏覽器預(yù)設(shè)字體大小為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是相對單位,為每個(gè)元素通過「倍數(shù)」乘以根元素的px值,如果我們每一層div都使用1.2rem,最內(nèi)層就會是16px x 1.2=19.2px。(根元素指的是html的font-size,預(yù)設(shè)為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,最內(nèi)層就會是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,其余六種分別對應(yīng)h6~h1的標(biāo)簽文字大小,根據(jù)W3C的規(guī)范,以medium預(yù)設(shè)16px為基礎(chǔ)(若html字體預(yù)設(shè)大小改變,medium也會跟著變),使用固定的百分比乘以medium的大小,例如xx-small預(yù)設(shè)為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>
熟悉了字體大小單位之后,你就更夠能有系統(tǒng)的進(jìn)行設(shè)計(jì)整個(gè)網(wǎng)站的CSS字體架構(gòu),不過font-size 本身和font-family 有著一些復(fù)雜的關(guān)系,不同的font-family 有時(shí)也會影響font-size 的設(shè)定,因此使用上還是得稍微注意一下啰!
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。