如题所述
ããæ¥æºï¼oschina.net ä½è ï¼whats_java
ããMySQL å¨ä¿®æ¹è¡¨ç»æçæ¶åå¯è½ä¼ä¸æ产åçæ£å¸¸è¿è¡å½±åç¨æ·ä½éªï¼çè³æ´åçç»æï¼ä¸¢å¤±æ°æ®ãä¸æ¯ææçæ°æ®åºç®¡çåãç¨åºåãç³»ç»ç®¡çåé½é常äºè§£MySQLè½é¿å è¿ç§æ åµãDBAä¼ç»å¸¸ç¢°å°è¿ç§ç产ä¸æçæ åµï¼å½å级èæ¬ä¿®æ¹äºåºç¨å±åæ°æ®åºå±ï¼æè 缺ä¹ç»éªç管çåãå¼åå¨ä¸æ¯å¾äºè§£Mysqlå é¨å·¥ä½æºå¶çæ åµä¸ä¿®æ¹äºè§èæ件ã
ããçç¸æ¯ï¼
ããç´æ¥ä¿®æ¹è¡¨ç»æçè¿ç¨ä¸ä¼é表ï¼å¨5.6çæ¬ä¹åï¼
ããå¨çº¿çæ°æ®å®ä¹è¯è¨å¨5.6çæ¬ä¸æ»æ¯å¨çº¿çèä¸ä¹ä¼é表
ããå°±ç®ä½¿ç¨Perconaå·¥å ·å ï¼å¨çº¿ä¿®æ¹å®ä¹æ件ï¼ä¹ä¼æè¥å¹²ä¸ªæ¥éª¤ä¼é表
ããPercona MySQL æå¡å¨å¼åå¢éé¼å±ç¨æ·å¨è®¡åæè æ§è¡æ°æ®åºè¿ç§»çæ¶åå åæ们æ²éãæ们çç®æ æ¯åºäºç¨æ·ç»åºçåç§æ åµç»åºæä½³çæ¹æ¡ãæ¨å¨é¿å é表å½ç¨æ·å¯¹é常大ç表æ§è¡DDLï¼ä»¥ç¡®ä¿åºç¨è½å平常ä¸æ ·æ£å¸¸è¿è¡ï¼åæ¶ä¹å¨åªåæ¹åååºæ¶é´æå¢å ç³»ç»åè½ãæå·®çæ åµæ¯ç¡®ä¿é£äºç»ä¸èµ·å½æºçç³»ç»å¨é»é交ææ¶é´æ£å¸¸è¿è¡ã
ããæ们使ç¨ç大å¤æ°å®è£ å ä»ç¶å°äºMySQL5.6ï¼è¿éè¦æ们ä¸åå°è¯æ°çå®è£ ç¯å¢æ¥ææ°æ®åºè¿ç§»é æçæ失éå°æä½ãè¿å¯è½éè¦ä¸ä¸ªè½âå¨çº¿ä¿®æ¹è§èå®ä¹æ件âçå·¥å ·æ¥å级æè ä¿®æ¹è§èæ件ãMySQL5.6解å³è¿ä¸é®é¢çåæ³æ¯éè¿åå°é建表åé表çåºæ¯ï¼ä½è¿ä¸ªæ¹æ³ä¸è½è¦çææçå¯è½çæä½ï¼ä¾å¦å½ä¿®æ¹ä¸åçæ°æ®ç±»åæ¶å¿ ç¶éè¦å ¨è¡¨éæãPrzemysławå Malkowskiå¨å»å¹´å°½å¯è½è¯¦å°½ç讨论äºMysql5.6è¿è¡ä¸ä¿®æ¹å®ä¹ã
ããéç MySQL 5.7çæ°åè½, æ们寻æ±ä¸ä¼é表çDDLæä½ ä¾å¦; 表ä¼å å ç´¢å¼éå½å. (More info)
ãã对äºMysql5.6çç¨æ·ï¼æ好ç建议æ¯å顾ä¸ä¸æ°ç©éµæ¥çæå¨MYSQLä¹å¤æ§è¡å®ä¹çæ´æ¹ï¼å¥½æ¶æ¯æ¯æ们å¾æ é¿è§£å³è¿ä¸é®é¢ã
ãã说å®è¯ï¼é表æä½ä¼ç»å¸¸è¢«å¿½è§ï¼å¨æä½30M大å°ç表æ¶æ们æ´å¾åäºç´æ¥ä¿®æ¹ï¼ä½æ¯30Gï¼300Gç表就è¦èèä¸ä¸äºãå½ä½¿ç¨çä¸é«æè 对éå®æ¶é´è¦æ±ä¸æ¯å¾é«ççç³»ç»æ¥è¯´ç´æ¥æä½ä¹è®¸æ´å¥½ãå¯æ¯ï¼æ们常常ä¼éå°ä¸ä¸ªéè¦ç«å³æ§è¡çSQLï¼æè å 为æ§è½é®é¢éè¦ç´§æ¥å¢å ä¸ä¸ªç´¢å¼æ¥åå°å è½½æ¶é´ã
ããæ¯å¦éè¦å¨ç³»ç»å¨çº¿æä¿®æ¹è¡¨å®ä¹
ããä¸é¢æå°ï¼å¨çº¿ä¿®æ¹è¡¨å®ä¹æ¯å·¥ä½æµä¸çä¸ä¸ªæ¨¡åãé常æ¯ä¸éç解å³æ¹æ¡ï¼ä½ä¹ä¼éå°ä¸è½ä½¿ç¨çåºåï¼ä¾å¦ï¼å½æ个表使ç¨äºè§¦åå¨ãäºè§£pt-oscå¨æ们项ç®ä¸çå·¥ä½è¿ç¨å¾éè¦ï¼è®©æ们æ¥çä¸ä¸æºä»£ç ï¼
ãã[moore@localhost]$ egrep 'Step' pt-online-schema-change
ãã# æ¥éª¤ 1: å建ä¸ä¸ªæ°è¡¨
ãã# æ¥éª¤ 2: ä¿®æ¹æ¸ 空表. è¿åºè¯¥æ¯è¾å¿«,
ãã# Step 3: å建触åå¨æ¥æè·åå§è¡¨çæ¹å <--(éå®å æ°æ®)
ãã# Step 4: å¤å¶æ°æ®.
ãã# Step 5: éå½å表: <--(éå®å æ°æ®
ãã# Step 6: æ´æ°å¤é® å¦ææ¯å表.
ãã# Step 7: å é¤æ§è¡¨.
ããææä¸é¢ç¬¬ä¸æ¥å°ç¬¬äºæ¥é«äº®åºæ¥ï¼è¿æ¯é表å¯è½å¼èµ·ç³»ç»åæºçæ¶é´ãä½æ¥éª¤å 设计å¤é®æ´æ°æ¯ä¸ä¸ªå¾ªç¯çæä½ï¼æ¯é¿å å¨æ´æ°å ³ç³»çæ¶åéå«å°é建表ãæå¾å¤æ¹æ³å¯ä»¥ç¡®ä¿è¡¨çå®æ´æ§çº¦æï¼å¨pt-oscç说æææ¡£ä¸è¯¦ç»è¯´æäºï¼å¨å¼å§ä¹åé¢è§ä½ ç表ç»æå æ¬çº¦æï¼å¹¶ç¥éææ ·æä¿®æ¹è¡¨å®ä¹æé æçå½±åéå°æä½ã
ããæè¿ï¼æ们éç¥äºä¸ä¸ªæ¥æé«å¹¶åé«äºå¡éç³»ç»çç¨æ·è¿è¡pt-oscå¨å¤§åæ°æ®è¡¨ä¸ãè¿ä»¶äºå¯¹äºä»ä»¬æ¥è¯´å¾å¹³å¸¸ï¼å å°æ¶åæ们ç客æ被åç¥è¯¥å®¢æ·éå°äºæ大è¿æ¥æ°è¶ è¿çé®é¢ãè¿ä¸ªé®é¢æ¯å¦ä½äº§ççå¢ï¼å½pt-oscè¿è¡å°æ¥éª¤äºçæ¶åä¼å°è¯å»éå®æ°æ®å¹¶éå½åå表åéè表ï¼ç¶èè¿ä¸ä¼å¨å¼å¯äºå¡çæ¶åç«å³æ§è¡ï¼å æ¤è¿æ¡çº¿ç¨ä¼è¢«æå¨éå½ååé¢ãè¿è¡¨ç°å¨ç¨æ·åºç¨ä¸å°±æ¯ç³»ç»åæºãæ°æ®åºæ æ³å¼å¯æ°çè¿æ¥å¹¶ä¸ææç线ç¨é½è¢«é»å¡å¨éå½åå½ä»¤ä¹åã
ããæ°æ®è¢«é
ãã5.5.3çæ¬ç说æï¼å½å¼å¯ä¸ä¸ªäºå¡æ¶ä¼éå®å®ä¼ç¨å°çææ表çæ°æ®ï¼ä¸ä¾èµäºåå¨å¼æï¼ï¼å¹¶å¨äºå¡æ交çæ¶åéæ¾éãè¿æ ·åç¡®ä¿äºå¨å¼å¯äºå¡æé´ä¸è½ä¿®æ¹è¡¨çå®ä¹ã
ããé¿è¿æ¥çæ们å¯ä»¥éç¨ä¸äºæ°çææ¯æ¥é¿å è¿ç§æ åµï¼ä¾å¦non-default pt-oscçé项ï¼æ¢è¨ä¹å°±æ¯ä¸ä¼å é¤å表ææ°æ®æ¢å°æ°è¡¨ãè¿ç§èåè±ç¦»äºéè表å触åå¨ï¼æ们åºè¯¥é¼å±å°éå½åæä½åå¾åååã
ããæ ¡è®¢ï¼2.2çæ¬çperconaå·¥å ·æ°å¢äºä¸ä¸ªåéâtries ååéâset-vars å ±å被é¨ç½²ï¼è§£å³äºåç§pt-oscæä½å¯è½ä¼é表çæ åµãpt-osc (âset-vars)é»è®¤ä¼è®¾ç½®å¦ä¸çä¼è¯åéå½è¿æ¥å°æ°æ®åºæå¡å¨çæ¶åã
ããwait_timeout=10000
ããinnodb_lock_wait_timeout=1
ããlock_wait_timeout=60
ããå½ä½¿ç¨ âtries æ们å¯ä»¥é¢ç²åå°é´å«æä½ï¼å°è¯æ¬¡æ°ãå¨å°è¯çé´éçå¾ ãè¿ç§ç»åå¯ä»¥ç¡®ä¿pt-oscå¨åéçæ¶æºææèªå·±ççå¾ ä¼è¯è¿ç¨ï¼ç¡®ä¿çº¿ç¨å æ ç空é²ï¼å¹¶æä¾ç»æ们循ç¯æä½æ¥è·å管çå 触åå¨ãéå½åãä¿®æ¹å¤é®èé æçéã
ããâtries swap_tables:5:0.5,drop_triggers:5:0.5
ããå®éè¿°äºå³ä¾¿ä½¿ç¨äºè¯¸å¦pt-oscä¹ç±»çå·¥å ·ï¼å åäºè§£ä½ æ³è§£å³çé®é¢æ¯å¾éè¦ãä¸é¢çæµç¨å¾ä¼å¸®å©ä½ å½ä½ äºè§£ä¿®æ¹äºMYSQLæ°æ®åºçç»æç注æäºé¡¹ã请ä»ç»é 读建议尽管æäºå¾ä¸æªæ åºï¼ä¾å¦ç£ç空é´ï¼IOå è½½çã
ããéæ©åéçDDLæä½
ããç¡®ä¿è½æ¸ æ¥äºè§£å¨ä¿®æ¹è¡¨ç»æå¯¹ä½ çç³»ç»ä¼äº§çä½ç§å½±åï¼å¹¶éæ©åéçæ¹æ³æ¥ä½¿è¿ç§å½±åéå°æä½ãææ¶è¿æå³çéè¦å°æ¹å¨å»¶æç´å°ç³»ç»å°äºä¸å¸¸ä½¿ç¨çæ¶åæè 使ç¨è½å¨æä½æé´ä¸é表çå·¥å ·ãå½ä½ 表ä¸æ触åå¨çæ¶åä¸è¬ç´æ¥ä¿®æ¹è¡¨ç»æã
ãã-大å¤æ°æ åµä¸pt-oscæ£æ¯æ们æéè¦ç
ãã-å¨å¾å¤æ¡ä¾ä¸pt-oscæ¯éè¦çï¼ä½æ¯ç¨æ³éè¦ç¨ä½è°æ´
ãã-å¨å°æ°æ åµä¸pt-oscä¸æ¯å¾åéï¼æ们éè¦èèæ¬å°é»å¡ä¿®æ¹ï¼æè éç¨è½¬ç§»çæä½æ¹æå¨å¯æ¬éä¸å¤å¶ã