- 作者: FS8C 2006òq?2æœ?9æ—? 星期äº?15:37  回å¤åQ?åQ?/font> |  引用åQ?åQ?/font> åŠ å…¥åšé‡‡
MySQL 备䆾和æ¢å¤?转脓)
MySQL 备䆾和æ¢å¤?
MySQL 备䆾和æ¢å¤?/h1>
作者:剙‡‘è£ï¼ˆEmail:åQ‰ï¼Œæ¥æºåQ?a >http://imysql.cnåQŒè{载请注明译者和出处åQŒåƈ且ä¸èƒ½ç”¨äºŽå•†ä¸šç”¨é€”,˜q者必½I¶ã€?/span>
日期åQ?006/10/01
本文讨论 MySQL 的备份和æ¢å¤æœºåˆ¶åQŒä»¥åŠå¦‚何维护数æ®è¡¨åQŒåŒ…括最主è¦çš„两¿U表¾cÕdž‹åQ?code> å’?åQŒæ–‡ä¸è®¾è®¡çš„ MySQL 版本ä¸?5.0.22ã€?/p>
ç›®å‰ MySQL 支æŒçš„å…费备份工å…ähœ‰åQ?code>åQŒè¿˜å¯ä»¥ç”?SQL è¯æ³•˜q›è¡Œå¤‡ä†¾åQ?code> 或è€?åQŒåˆæˆ–者备ä»?code>åQŒè¿˜å¯ä»¥æ˜?code>。MyISAM 表是ä¿å˜æˆæ–‡ä»¶çš„å½¢å¼åQŒå› æ¤ç›¸å¯Òޝ”è¾ƒå®¹æ˜“å¤‡ä»½ï¼Œä¸Šé¢æåˆ°çš„å‡ ¿U方法都å¯ä»¥ä½¿ç”¨ã€?code> 所有的表都ä¿å˜åœ¨åŒä¸€ä¸ªæ•°æ®æ–‡ä»?
ä¸ï¼ˆä¹Ÿå¯èƒ½æ˜¯å¤šä¸ªæ–‡äšgåQŒæˆ–者是独立的表½Iºé—´æ–‡äšgåQ‰ï¼Œç›¸å¯¹æ¥è¯´æ¯”较ä¸å¥½å¤‡ä†¾åQŒå…费的æ–ÒŽ¡ˆå¯ä»¥æ˜?code>ã€?code>åQŒæˆ–者用
�/p>
1ã€mysqldump
1.1 备䆾
是采用SQL¾U§åˆ«çš„备份机åˆÓž¼Œå®ƒå°†æ•°æ®è¡¨å¯¼æˆ?SQL 脚本文äšgåQŒåœ¨ä¸åŒçš?MySQL 版本之间å‡çñ”时相å¯Òޝ”较åˆé€‚,˜q™ä¹Ÿæ˜¯æœ€å¸¸ç”¨çš„备份方法ã€?br>现在æ¥è®²ä¸€ä¸?
的一些主è¦å‚敎ͼš
- --compatible=name
它告è¯?mysqldumpåQŒå¯¼å‡ºçš„æ•°æ®ž®†å’Œå“ªç§æ•°æ®åº“或哪个旧版本的 MySQL æœåŠ¡å™¨ç›¸å…¼å®¹ã€‚å€¼å¯ä»¥äØ“
½{‰ï¼Œè¦ä‹Éç”¨å‡ ä¸ªå€û|¼Œç”¨é€—å·ž®†å®ƒä»¬éš”开。当然了åQŒå®ƒòq¶ä¸ä¿è¯èƒ½å®Œå…¨å…¼å®¹ï¼Œè€Œæ˜¯ž®½é‡å…¼å®¹ã€?
- --complete-insertåQ?c
导出的数æ®é‡‡ç”¨åŒ…å«å—ŒDµå的完æ•?
æ–¹å¼åQŒä¹Ÿž®±æ˜¯æŠŠæ‰€æœ‰çš„值都写在一行。这么åšèƒ½æé«˜æ’入效率,但是å¯èƒ½ä¼šå—åˆ?
傿•°çš„媄å“而导致æ’å…¥å¤±è´¥ã€‚å› æ¤ï¼Œéœ€è¦è°}æ…Žä‹Éç”¨è¯¥å‚æ•°åQŒè‡³ž®‘æˆ‘ä¸æŽ¨èã€?
- --default-character-set=charset
æŒ‡å®šå¯¼å‡ºæ•°æ®æ—‰™‡‡ç”¨ä½•¿Uå—½W¦é›†åQŒå¦‚果数æ®è¡¨ä¸æ˜¯é‡‡ç”¨é»˜è®¤çš?
å—符集的è¯ï¼Œé‚£ä¹ˆå¯¼å‡ºæ—¶å¿…™åÀLŒ‡å®šè¯¥é€‰é¡¹åQŒå¦åˆ™å†‹Æ¡å¯¼å…¥æ•°æ®åŽž®†äñ”ç”ŸäØ•ç 问题ã€?/p>
- --disable-keys
告诉
�
è¯å¥çš„开头和¾l“尾增åŠ
å’?
è¯å¥åQŒè¿™èƒ½å¤§å¤§æé«˜æ’å…¥è¯å¥çš„速度åQŒå› 为它是在æ’入完所有数æ®åŽæ‰é‡å»ºçƒ¦å¼•的。该选项åªé€‚åˆ
表�/p>
- --extended-insert = true|false
默认情况下,
å¼€å?
模å¼åQŒå› æ¤ä¸æƒ³ç”¨å®ƒçš„çš„è¯åQŒå°±ä½¿ç”¨æœ¬é€‰é¡¹åQŒè®¾å®šå®ƒçš„å€égØ“
å›_¯ã€?
- --hex-blob
使用åå…˜q›åˆ¶æ ¼å¼å¯¼å‡ºäºŒè¿›åˆ¶å—½W¦ä¸²å—段。如果有二进制数æ®å°±å¿…须使用本选项。媄å“到的嗌D늱»åž‹æœ‰
�/p>
- --lock-all-tablesåQ?x
在开始导å‡ÞZ¹‹å‰ï¼Œæäº¤è¯äh±‚é”定所有数æ®åº“ä¸çš„æ‰€æœ‰è¡¨åQŒä»¥ä¿è¯æ•°æ®çš„一致性。这是一个全局读é”åQŒåƈ且自动关é—?
å’?
选项�/p>
- --lock-tables
它和
¾cÖM¼¼åQŒä¸˜q‡æ˜¯é”定当å‰å¯¼å‡ºçš„æ•°æ®è¡¨åQŒè€Œä¸æ˜¯ä¸€ä¸‹åé”定全部库下的表。本选项åªé€‚用äº?
表,如果�
表å¯ä»¥ç”¨
选项�/p>
- --no-create-infoåQ?t
åªå¯¼å‡ºæ•°æ®ï¼Œè€Œä¸æ·ÕdŠ
è¯å¥ã€?/p>
- --no-dataåQ?d
ä¸å¯¼å‡ÞZ“Q何数æ®ï¼Œåªå¯¼å‡ºæ•°æ®åº“表结构ã€?/p>
- --opt
˜q™åªæ˜¯ä¸€ä¸ªå¿«æ·é€‰é¡¹åQŒç‰åŒäºŽåŒæ—¶æ·ÕdŠ
选项。本选项能让
很快的导出数æ®ï¼Œòq¶ä¸”导出的数æ®èƒ½å¾ˆå¿«å¯¼å›žã€‚该选项默认开å¯ï¼Œä½†å¯ä»¥ç”¨
¼›ç”¨ã€‚注æ„,如果˜q行
没有指定
�
选项åQŒåˆ™ä¼šå°†æ•´ä¸ª¾l“果集放在内å˜ä¸ã€‚如果导出大数æ®åº“çš„è¯å¯èƒ½ä¼šå‡ºçŽ°é—®é¢˜ã€?/p>
- --quickåQ?q
该选项在导出大表时很有用,它强�
从æœåŠ¡å™¨æŸ¥è¯¢å–å¾—è®°å½•ç›´æŽ¥è¾“å‡ºè€Œä¸æ˜¯å–得所有记录厞®†å®ƒä»¬ç¼“å˜åˆ°å†…å˜ä¸ã€?/p>
- --routinesåQ?R
导出å˜å‚¨˜q‡ç¨‹ä»¥åŠè‡ªå®šä¹‰å‡½æ•°ã€?/p>
- --single-transaction
该选项在导出数æ®ä¹‹å‰æäº¤ä¸€ä¸?
SQLè¯å¥åQ?code> ä¸ä¼šé˜Õd¡žä»ÖM½•应用½E‹åºä¸”能ä¿è¯å¯¼å‡ºæ—¶æ•°æ®åº“的一致性状æ€ã€‚它åªé€‚用于事务表åQŒä¾‹å¦?
å’?
�br>本选项�
选项是互斥的åQŒå› ä¸?
会ä‹Éä»ÖM½•挂è“v的事务éšå«æäº¤ã€?br>è¦æƒ³å¯¼å‡ºå¤§è¡¨çš„è¯åQŒåº”¾l“åˆä½¿ç”¨
选项�
- --triggers
åŒæ—¶å¯¼å‡ºè§¦å‘器。该选项默认å¯ç”¨åQŒç”¨
¼›ç”¨å®ƒã€?/p>
其他傿•°è¯¦æƒ…请å‚考手册,我通常使用以下 SQL æ¥å¤‡ä»? 表:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr --default-character-set=utf8 --opt --extended-insert=false \ --triggers -R --hex-blob -x db_name > db_name.sql
使用以下 SQL æ¥å¤‡ä»? 表:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr --default-character-set=utf8 --opt --extended-insert=false \ --triggers -R --hex-blob --single-transaction db_name > db_name.sql
1.2 ˜q˜åŽŸ
ç”? 备䆾出æ¥çš„æ–‡ä»¶æ˜¯ä¸€ä¸ªå¯ä»¥ç›´æŽ¥å€’å…¥çš?SQL 脚本åQŒæœ‰ä¸¤ç§æ–ÒŽ³•å¯ä»¥ž®†æ•°æ®å¯¼å…¥ã€?/p>
- 直接�
客户�
例如åQ?/p>
/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql
- ç”?SOURCE è¯æ³•
其实˜q™ä¸æ˜¯æ ‡å‡†çš„ SQL è¯æ³•åQŒè€Œæ˜¯
客户端æä¾›çš„功能åQŒä¾‹å¦‚:
SOURCE /tmp/db_name.sql;
˜q™é‡Œéœ€è¦æŒ‡å®šæ–‡ä»¶çš„¾l对路径åQŒåƈ且必™åÀL˜¯
˜q行用户(例如 nobody)有æƒé™è¯»å–的文äšgã€?/p>
2�mysqlhotcopy
2.1 备䆾
是一ä¸?PERL ½E‹åºåQŒæœ€åˆç”±Tim Bunce¾~–写。它使用
å’?
�
æ¥å¿«é€Ÿå¤‡ä»½æ•°æ®åº“。它是备份数æ®åº“或å•个表的最快的途径åQŒä½†å®ƒåªèƒ½è¿è¡Œåœ¨æ•°æ®åº“æ–‡ä»Óž¼ˆåŒ…括数æ®è¡¨å®šä¹‰æ–‡ä»¶ã€æ•°æ®æ–‡ä»¶ã€çƒ¦å¼•æ–‡ä»Óž¼‰æ‰€åœ¨çš„æœºå™¨ä¸Šã€?code> åªèƒ½ç”¨äºŽå¤‡ä†¾
åQŒåƈ且åªèƒ½è¿è¡Œåœ¨
å’?
¾pÈ»Ÿä¸Šã€?/p>
支æŒä¸€‹Æ¡æ€§æ‹·è´å¤šä¸ªæ•°æ®åº“åQŒåŒæ—¶è¿˜æ”¯æŒæ£åˆ™è¡¨è¾¾ã€‚ä»¥ä¸‹æ˜¯å‡ ä¸ªä¾‹ååQ?/p>
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name /tmp (把数æ®åº“目录 db_name 拯‚´åˆ?/tmp ä¸? root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name_1 ... db_name_n /tmp root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name./regex/ /tmp
更详¾l†çš„使用æ–ÒŽ³•è¯ähŸ¥çœ‹æ‰‹å†Œï¼Œæˆ–者调用下é¢çš„命ä×oæ¥æŸ¥çœ? 的帮助:
perldoc /usr/local/mysql/bin/mysqlhotcopy
注æ„åQŒæƒ³è¦ä‹Éç”?åQŒå¿…™å»è¦æœ?
æƒé™åQŒåƈ且还必须è¦èƒ½å¤Ÿæœ‰è¯Õd– 目录的æƒé™ã€?
2.2 ˜q˜åŽŸ
备䆾出æ¥çš„æ˜¯æ•´ä¸ªæ•°æ®åº“目录,使用时å¯ä»¥ç›´æŽ¥æ‹·è´åˆ°
指定çš? (在这里是 )目录下å³å¯ï¼ŒåŒæ—¶è¦æ³¨æ„æƒé™çš„问题åQŒå¦‚下例åQ?/p>
root#cp -rf db_name /usr/local/mysql/data/
root#chown -R nobody:nobody /usr/local/mysql/data/ (ž®?db_name 目录的属ä¸ÀL”¹æˆ?mysqld
˜q行用户)
3ã€?SQL è¯æ³•备䆾
3.1 备䆾
è¯æ³•其实å’?
的工作原ç†å·®ä¸å¤šåQŒéƒ½æ˜¯é”è¡¨ï¼Œç„¶åŽæ‹¯‚´æ•°æ®æ–‡äšg。它能实现在¾U¿å¤‡ä»½ï¼Œä½†æ˜¯æ•ˆæžœä¸ç†æƒ»I¼Œå› æ¤ä¸æŽ¨èä‹Éç”¨ã€‚å®ƒåªæ‹·è´è¡¨¾l“构文äšgå’Œæ•°æ®æ–‡ä»Óž¼Œä¸åŒæ—¶æ‹·è´çƒ¦å¼•æ–‡ä»Óž¼Œå› æ¤æ¢å¤æ—¶æ¯”较慢ã€?br>例ååQ?/p>
BACK TABLE tbl_name TO '/tmp/db_name/';
注æ„åQŒå¿…™å»è¦æœ? æƒé™æ‰èƒ½æ‰§è¡Œæœ¬SQLåQŒåƈ且目å½? 必须能被
用户å¯å†™åQŒå¯¼å‡ºçš„æ–‡äšgä¸èƒ½è¦†ç›–å·²ç»å˜åœ¨çš„æ–‡ä»Óž¼Œä»¥é¿å…安全问题ã€?
则是把数æ®å¯¼å‡ºæ¥æˆäؓ普通的文本文äšgåQŒå¯ä»¥è‡ªå®šä¹‰å—段间隔的方å¼ï¼Œæ–¹ä¾¿å¤„熘q™äº›æ•°æ®ã€?br>例ååQ?/p>
SELECT INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;
注æ„åQŒå¿…™å»è¦æœ? æƒé™æ‰èƒ½æ‰§è¡Œæœ¬SQLåQŒåƈ且文ä»? 必须能被
用户å¯å†™åQŒå¯¼å‡ºçš„æ–‡äšgä¸èƒ½è¦†ç›–å·²ç»å˜åœ¨çš„æ–‡ä»Óž¼Œä»¥é¿å…安全问题ã€?
3.2 æ¢å¤
ç”? æ–ÒŽ³•备䆾出æ¥çš„æ–‡ä»Óž¼Œå¯ä»¥˜q行
è¯å¥æ¥æ¢å¤æ•°æ®è¡¨ã€?br>例ååQ?/p>
RESTORE TABLE FROM '/tmp/db_name/';
æƒé™è¦æ±‚¾cÖM¼¼ä¸Šé¢æ‰€˜q°ã€?/p>
ç”? æ–ÒŽ³•备䆾出æ¥çš„æ–‡ä»Óž¼Œå¯ä»¥˜q行
è¯å¥æ¥æ¢å¤æ•°æ®è¡¨ã€?br>例ååQ?/p>
LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;
æƒé™è¦æ±‚¾cÖM¼¼ä¸Šé¢æ‰€˜q°ã€‚倒入数æ®ä¹‹å‰åQŒæ•°æ®è¡¨è¦å·²¾lå˜åœ¨æ‰è¡Œã€‚如果担心数æ®ä¼šå‘生é‡å¤åQŒå¯ä»¥å¢žåŠ? 关键嗿¥æ›¿æ¢å·²æœ‰è®°å½•或者用
关键嗿¥å¿½ç•¥ä»–们ã€?/p>
4ã€?å¯ç”¨äºŒè¿›åˆ¶æ—¥å¿?binlog)
采用 的方法相å¯ÒŽ¥è¯´æ›´ç‰|´»åQŒçœå¿ƒçœåŠ›ï¼Œè€Œä¸”˜q˜å¯ä»¥æ”¯æŒå¢žé‡å¤‡ä»½ã€?/p>
å¯ç”¨ æ—¶å¿…™å»è¦é‡å¯
。首先,关é—
åQŒæ‰“å¼€
åQŒåŠ å…¥ä»¥ä¸‹å‡ è¡Œï¼š
server-id = 1 log-bin = binlog log-bin-index = binlog.index
ç„¶åŽå¯åЍ ž®±å¯ä»¥äº†ã€‚è¿è¡Œè¿‡½E‹ä¸ä¼šäñ”ç”?
以åŠ
åQŒå‰é¢çš„æ–‡äšgæ˜?
记录所有对数æ®çš„æ›´æ–°æ“作,åŽé¢çš„æ–‡ä»¶åˆ™æ˜¯æ‰€æœ?
的烦引,都ä¸èƒ½è½»æ˜“åˆ é™¤ã€‚å…³äº?
的信æ¯è¯·æŸ¥çœ‹æ‰‹å†Œã€?/p>
需è¦å¤‡ä»½æ—¶åQŒå¯ä»¥å…ˆæ‰§è¡Œä¸€ä¸?SQL è¯å¥åQŒè®© ¾lˆæ¢å¯¹å½“å‰?
的写入,ž®±å¯ä»¥æŠŠæ–‡äšg直接备䆾åQŒè¿™æ ïLš„è¯å°±èƒ½è¾¾åˆ°å¢žé‡å¤‡ä»½çš„目的了:
FLUSH LOGS;
如果是备份å¤åˆ¶ç³»¾lŸä¸çš„从æœåŠ¡å™¨ï¼Œ˜q˜åº”该备ä»? å’? æ–‡äšgã€?
备䆾出æ¥çš? æ–‡äšgå¯ä»¥ç”?MySQL æä¾›çš„å·¥å…?
æ¥æŸ¥çœ‹ï¼Œå¦‚:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
该工具å…è®æ€½ 昄¡¤ºæŒ‡å®šçš„æ•°æ®åº“下的所æœ?SQL è¯å¥åQŒåƈ且还å¯ä»¥é™å®šæ—‰™—´èŒƒå›´åQŒç›¸å½“的方便åQŒè¯¦¾l†çš„è¯ähŸ¥çœ‹æ‰‹å†Œã€?/p>
æ¢å¤æ—Óž¼Œå¯ä»¥é‡‡ç”¨¾cÖM¼¼ä»¥ä¸‹è¯å¥æ¥åšåˆŽÍ¼š
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name
æŠ? 输出çš?SQL è¯å¥ç›´æŽ¥ä½œäØ“è¾“å…¥æ¥æ‰§è¡Œå®ƒã€?/p>
å¦‚æžœä½ æœ‰½Iºé—²çš„æœºå™¨ï¼Œä¸å¦¨é‡‡ç”¨˜q™ç§æ–¹å¼æ¥å¤‡ä»½ã€‚由于作ä¸? çš„æœºå™¨æ€§èƒ½è¦æ±‚ç›¸å¯¹ä¸æ˜¯é‚£ä¹ˆé«˜ï¼Œå› æ¤æˆæœ¬ä½Žï¼Œç”¨ä½Žæˆæœ¬ž®Þpƒ½å®žçŽ°å¢žé‡å¤‡ä†¾è€Œä¸”˜q˜èƒ½åˆ†æ‹…ä¸€éƒ¨åˆ†æ•°æ®æŸ¥è¯¢åŽ‹åŠ›åQŒä½•ä¹è€Œä¸ä¸ºå‘¢åQ?/p>
5ã€?ç›´æŽ¥å¤‡ä†¾æ•°æ®æ–‡äšg
相较å‰å‡ ¿Uæ–¹æ³•ï¼Œå¤‡ä†¾æ•°æ®æ–‡äšg最为直接ã€å¿«é€Ÿã€æ–¹ä¾¿ï¼Œ¾~ºç‚¹æ˜¯åŸºæœ¬ä¸Šä¸èƒ½å®žçŽ°å¢žé‡å¤‡ä†¾ã€‚äØ“äº†ä¿è¯æ•°æ®çš„一致性,需è¦åœ¨é 背文äšgå‰ï¼Œæ‰§è¡Œä»¥ä¸‹ SQL è¯å¥åQ?/p>
FLUSH TABLES WITH READ LOCK;
也就是把内å˜ä¸çš„æ•°æ®éƒ½åˆ·æ–°åˆ°¼‚盘ä¸ï¼ŒåŒæ—¶é”定数æ®è¡¨ï¼Œä»¥ä¿è¯æ‹·è´è¿‡½E‹ä¸ä¸ä¼šæœ‰æ–°çš„æ•°æ®å†™å…¥ã€‚è¿™¿U方法备份出æ¥çš„æ•°æ®æ¢å¤ä¹Ÿå¾ˆ½Ž€å•,直接拯‚´å›žåŽŸæ¥çš„æ•°æ®åº“目录下å›_¯ã€?/p>
注æ„åQŒå¯¹äº? ¾cÕdž‹è¡¨æ¥è¯ß_¼Œ˜q˜éœ€è¦å¤‡ä»½å…¶æ—¥å¿—æ–‡äšgåQŒå³
æ–‡äšgã€‚å› ä¸ºå½“
表æŸåæ—¶åQŒå°±å¯ä»¥ä¾é ˜q™äº›æ—¥å¿—æ–‡äšgæ¥æ¢å¤ã€?/p>
6ã€?备䆾½{–ç•¥
对于ä¸ç‰¾U§åˆ«ä¸šåŠ¡é‡çš„¾pÈ»Ÿæ¥è¯´åQŒå¤‡ä»½ç–ç•¥å¯ä»¥è¿™ä¹ˆå®šåQšç¬¬ä¸€‹Æ¡å…¨é‡å¤‡ä»½ï¼Œæ¯å¤©ä¸€‹Æ¡å¢žé‡å¤‡ä»½ï¼Œæ¯å‘¨å†åšä¸€‹Æ¡å…¨é‡å¤‡ä»½ï¼Œå¦‚æ¤ä¸€ç›´é‡å¤ã€‚而对于é‡è¦çš„且ç¹å¿™çš„¾pÈ»Ÿæ¥è¯´åQŒåˆ™å¯èƒ½éœ€è¦æ¯å¤©ä¸€‹Æ¡å…¨é‡å¤‡ä»½ï¼Œæ¯å°æ—¶ä¸€‹Æ¡å¢žé‡å¤‡ä»½ï¼Œç”šè‡³æ›´é¢‘¾Jã€‚äØ“äº†ä¸å½±å“¾U¿ä¸Šä¸šåŠ¡åQŒå®žçŽ°åœ¨¾U¿å¤‡ä»½ï¼Œòq¶ä¸”能增é‡å¤‡ä»½ï¼Œæœ€å¥½çš„办法ž®±æ˜¯é‡‡ç”¨ä¸ÖM»Žå¤åˆ¶æœºåˆ¶()åQŒåœ¨
机器上åšå¤‡ä†¾ã€?/p>
7ã€?数殾l´æŠ¤å’Œç¾é𾿢å¤?/h3>
ä½œäØ“ä¸€åDBA(我目å‰è¿˜ä¸æ˜¯åQŒå‘µå‘?åQŒæœ€é‡è¦çš„工作内容之一是ä¿è¯æ•°æ®è¡¨èƒ½å®‰å…¨ã€ç¨³å®šã€é«˜é€Ÿä‹Éç”¨ã€‚å› æ¤ï¼Œéœ€è¦å®šæœŸç»´æŠ¤ä½ 的数æ®è¡¨ã€‚以ä¸?SQL è¯å¥ž®±å¾ˆæœ‰ç”¨åQ?/p>
CHECK TABLE æˆ?REPAIR TABLEåQŒæ£€æŸ¥æˆ–¾l´æŠ¤ MyISAM è¡?
OPTIMIZE TABLEåQŒä¼˜åŒ?MyISAM è¡?
ANALYZE TABLEåQŒåˆ†æž?MyISAM è¡?
当然了,上题q™äº›å‘½ä×o起始都å¯ä»¥é€šè¿‡å·¥å…·
æ¥å®Œæˆï¼Œåœ¨è¿™é‡Œä¸ä½œè¯¦˜q°ã€?/p>
表则å¯ä»¥é€šè¿‡æ‰§è¡Œä»¥ä¸‹è¯å¥æ¥æ•´ç†ç¢Žç‰‡ï¼Œæé«˜ç´¢å¼•速度åQ?/p>
ALTER TABLE tbl_name ENGINE = Innodb;
˜q™å…¶å®žæ˜¯ä¸€ä¸?
æ“作åQŒè¡¨é¢ä¸Šçœ‹ä»€ä¹ˆä¹Ÿä¸åšåQŒå®žé™…ä¸Šé‡æ–°æ•´ç†¼„Žç‰‡äº†ã€?/p>
通常使用�
表å¯ä»¥ç”¨ä¸Šé¢æåˆ°çš„æ¢å¤æ–¹æ³•æ¥å®Œæˆã€‚如果是索引å了åQŒå¯ä»¥ç”¨
工具æ¥é‡å»ºçƒ¦å¼•。而对äº?
表æ¥è¯ß_¼Œž®±æ²¡˜q™ä¹ˆç›´æŽ¥äº†ï¼Œå› äØ“å®ƒæŠŠæ‰€æœ‰çš„è¡¨éƒ½ä¿å˜åœ¨ä¸€ä¸ªè¡¨½Iºé—´äº†ã€‚丘q?
有一个检查机制å«
åQŒåªè¦ä¿å˜äº†æ—¥å¿—æ–‡äšgåQŒå°±èƒ½æ ¹æ®æ—¥å¿—文件æ¥ä¿®å¤é”™è¯¯ã€‚å¯ä»¥åœ¨ æ–‡äšgä¸ï¼Œå¢žåР以䏋傿•°åQŒè®©
在å¯åŠ¨æ—¶è‡ªåŠ¨‹‚€æŸ¥æ—¥å¿—æ–‡ä»Óž¼š
innodb_force_recovery = 4
å…³äºŽè¯¥å‚æ•°çš„ä¿¡æ¯è¯ähŸ¥çœ‹æ‰‹å†Œã€?/p>
8ã€?æ€È»“
åšå¥½æ•°æ®å¤‡ä†¾åQŒå®šåªå¥½åˆé€‚的备䆾½{–ç•¥åQŒè¿™æ˜¯ä¸€ä¸ªDBA所åšäº‹æƒ…的一ž®éƒ¨åˆ†ï¼Œä¸‡äº‹å¼€å¤´éš¾åQŒå°±ä»ŽçŽ°åœ¨å¼€å§‹å§åQ?/p>
æ¥å®Œæˆï¼Œåœ¨è¿™é‡Œä¸ä½œè¯¦˜q°ã€?/p>
表则å¯ä»¥é€šè¿‡æ‰§è¡Œä»¥ä¸‹è¯å¥æ¥æ•´ç†ç¢Žç‰‡ï¼Œæé«˜ç´¢å¼•速度åQ?/p>
æ“作åQŒè¡¨é¢ä¸Šçœ‹ä»€ä¹ˆä¹Ÿä¸åšåQŒå®žé™…ä¸Šé‡æ–°æ•´ç†¼„Žç‰‡äº†ã€?/p>
表å¯ä»¥ç”¨ä¸Šé¢æåˆ°çš„æ¢å¤æ–¹æ³•æ¥å®Œæˆã€‚如果是索引å了åQŒå¯ä»¥ç”¨
工具æ¥é‡å»ºçƒ¦å¼•。而对äº?
表æ¥è¯ß_¼Œž®±æ²¡˜q™ä¹ˆç›´æŽ¥äº†ï¼Œå› äØ“å®ƒæŠŠæ‰€æœ‰çš„è¡¨éƒ½ä¿å˜åœ¨ä¸€ä¸ªè¡¨½Iºé—´äº†ã€‚丘q?
有一个检查机制å«
åQŒåªè¦ä¿å˜äº†æ—¥å¿—æ–‡äšgåQŒå°±èƒ½æ ¹æ®æ—¥å¿—文件æ¥ä¿®å¤é”™è¯¯ã€‚å¯ä»¥åœ¨ æ–‡äšgä¸ï¼Œå¢žåР以䏋傿•°åQŒè®©
在å¯åŠ¨æ—¶è‡ªåŠ¨‹‚€æŸ¥æ—¥å¿—æ–‡ä»Óž¼š]]>
ä¸ÞZ»€ä¹ˆä¼šæœ‰è¿™ä¸ªçŽ©æ„å‘¢åQŒé¦–先,˜q™æ˜¯jar的全¿UŽÍ¼šJavaTM Archive (JAR) fileåQŒæ˜¯çš„,ž®±æ˜¯javaå˜æ¡£æ–‡äšg。这有点¾cÖM¼¼zipæ–‡äšgåQŒæƒ³ä¸€æƒ›_®ƒæ˜¯å¹²ä»€ä¹ˆçš„用的呢,压羃åQ?没错ž®±æ˜¯è¦åŽ‹¾~©ï¼Œž®†æˆ‘们原先零散的东西攑ֈ°ä¸€ä¸‹ï¼Œé‡æ–°¾l„织åQŒæ‰€æœ‰è¿™äº›ç›®çš„åªæœ‰ä¸€ä¸ªï¼šæ–¹ä¾¿åQ好了,ä¸ç”¨½Ž¡ä»–是怎么压羃的,我们的é‡ç‚ÒŽ˜¯å“ªäº›æ˜¯æˆ‘们è¦åŽ‹ç¾ƒçš?输入)åQŒè¿˜æœ‰åŽ‹¾~©æˆäº†ä»€ä¹?输出)åQŒè¿›è€Œå°†å®ƒå‘å¸?部çÖv)ã€?
那我们的输入(è¦åŽ‹¾~©çš„东西)ä¸»è¦æ˜¯classæ–‡äšgåQŒè¿˜æœ‰è¾…助的资æº(˜q™å…¶ä¸å¯èƒ½æœ‰å›„¡‰‡åQŒjspæ–‡äšgåQŒhtmlæ–‡äšg½{‰ç‰)。Jar技术在jdk1.1版本ä¸å°±å·²å˜åœ¨ï¼Œåœ?.2ä¸åˆæœ‰äº†å¢žå¼ºã€‚接下æ¥è¯´è¯´jar的好处å§åQŒè¿™æ˜¯å®˜æ–¹çš„æè¿°åQšå®‰å…¨ï¼Œå¿«é€Ÿä¸‹è½½ï¼ŒåŽ‹ç¾ƒåQŒçŒŽå–包åQŒç‰ˆæœ¬åŒ–åŒ…ï¼Œå¯æºã€?
说了˜q™ä¹ˆå¤šï¼Œæˆ‘们现在开始实施ã€?
先打开命ä×oæç¤º½W?win2000或在˜q行½{里执行cmd命ä×oåQŒwin98为DOSæç¤º½W?åQŒè¾“å…¥jar –help,ç„¶åŽå›žèžR(å¦‚æžœä½ ç›˜ä¸Šå·²¾l有了jdk1.1或以上版æœ?åQŒçœ‹åˆîC»€ä¹ˆï¼š
用法åQšjar {ctxu}[vfm0Mi] [jar-æ–‡äšg] [manifest-æ–‡äšg] [-C 目录] æ–‡äšgå?...
选项åQ?
-c åˆ›å¾æ–°çš„å˜æ¡£
-t åˆ—å‡ºå˜æ¡£å†…容的列è¡?
-x å±•å¼€å˜æ¡£ä¸çš„命å的(或所有的〕文ä»?
-u æ›´æ–°å·²å˜åœ¨çš„å˜æ¡£
-v 生æˆè¯¦ç»†è¾“å‡ºåˆ°æ ‡å‡†è¾“å‡ÞZ¸Š
-f æŒ‡å®šå˜æ¡£æ–‡äšgå?
-m åŒ…å«æ¥è‡ªæ ‡æ˜Žæ–‡äšgçš„æ ‡æ˜Žä¿¡æ?
-0 åªå˜å‚¨æ–¹å¼ï¼›æœªç”¨ZIPåŽ‹ç¾ƒæ ¼å¼
-M ä¸äñ”生所有项的清å•(manifest〕文ä»?
-i 为指定的jaræ–‡äšg产生索引信æ¯
-C 改å˜åˆ°æŒ‡å®šçš„目录åQŒåƈ且包å«ä¸‹åˆ—æ–‡ä»Óž¼š
å¦‚æžœä¸€ä¸ªæ–‡ä»¶åæ˜¯ä¸€ä¸ªç›®å½•,它将被递归处ç†ã€?
清å•åQˆmanifest〕文件åå’Œå˜æ¡£æ–‡ä»¶å都需è¦è¢«æŒ‡å®šåQŒæŒ‰'m' å’?'f'æ ‡å¿—æŒ‡å®šçš„ç›¸åŒé¡ºåºã€?
½CÞZ¾‹1åQšå°†ä¸¤ä¸ªclassæ–‡äšgå˜æ¡£åˆîC¸€ä¸ªåä¸?'classes.jar' çš„å˜æ¡£æ–‡ä»¶ä¸åQ?
jar cvf classes.jar Foo.class Bar.class
½CÞZ¾‹2åQšç”¨ä¸€ä¸ªå˜åœ¨çš„æ¸…å•åQˆmanifeståQ‰æ–‡ä»?'mymanifest' ž®?foo/ ç›®å½•ä¸‹çš„æ‰€æœ‰æ–‡ä»¶å˜æ¡£åˆ°ä¸€ä¸ªåä¸?'classes.jar' çš„å˜æ¡£æ–‡ä»¶ä¸åQ?
jar cvfm classes.jar mymanifest -C foo/ .
æ¥ä¸ªž®ä¾‹å试试看åQ?
æˆ‘ä»¬åªæœ‰ä¸€ä¸ªHelloWorldåQŒå¦‚下:
public class HelloWorld{
public static void main(String[] args){
System.out.println(“Hi, Hello World!�;
}
}
我将˜q™ä¸ªjavaæ–‡äšgå˜åˆ°C盘跟目录下,okåQŒæŽ¥ä¸‹æ¥åQ?
åœ¨å…ˆå‰æ‰“开的命令æ½Cºç¬¦ä¸?è·Œ™{到C盘æ½Cºç¬¦ä¸?åQŒæˆ‘们输入javac HelloWorld.javaåQŒç„¶åŽç‘ô¾l输入:jar cvf hello.jar HelloWorld.classåQŒå›žè½¦åŽåŽÖM½ çš„C盘看看,多了什么,没错 hello.jar ã€?
基本的æ¥éª¤æˆ‘们现在都知é“äº†ï¼Œä½ å¯ä»¥è‡ªå·±åŽ»ž®è¯•一下éšç€jaråŽé¢çš„傿•°çš„ä¸åŒåQŒç»“果有什么å˜åŒ–ã€?
ç´§æŽ¥ç€æˆ‘们看看如何˜q行我们的jar包ã€?
在进入æ£é¢˜ä¹‹å‰ï¼Œä½ è¦å…ˆæ‰“开我们刚刚åšå¥½çš„jar包看看,多了什么呢åQŒMETA-INF目录åQŸå†çœ‹çœ‹é‡Œé¢æ˜¯ä»€ä¹ˆï¼Œ˜q˜æœ‰ä¸€ä¸ªMANIFEST.MFæ–‡äšgæ˜¯ä¸æ˜¯ï¼Ÿç”¨æ–‡æœ¬ç¼–辑器(我这里是UltraEdit)打开它看看:
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
ž®±æ˜¯˜q™æ ·ã€‚è¿™é‡Œæˆ‘ä»¬å¯¹å®ƒè¿›è¡Œä¿®æ”¹ï¼ŒåŠ ä¸€å¥ï¼šMain-Class: HelloWorld (在第三行)。这个就是我们之å‰å†™çš„那个类åQŒä¹Ÿž®±æ˜¯æˆ‘们的入å£ç±»ã€‚也å»I¼Œ
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
Main-Class: HelloWorld
接下æ¥ï¼Œæˆ‘们在命令æ½Cºç¬¦é‡Œæ‰§è¡Œï¼š
jar umf MANIFEST.MF app.jar
˜q™æ ·æˆ‘们使用了我们自å·Þqš„MANIFEST.MFæ–‡äšg对原æ¥é»˜è®¤çš„˜q›è¡Œäº†æ›´æ–°ã€‚ä½ ä¸å¦¨å¯ä»¥å†è¿›åŽÈœ‹çœ‹æ˜¯ä¸æ˜¯æ·ÖM¸Šäº†Main-Class: HelloWorld˜q™ä¸€å¥ã€?
OkåQŒè¿™ä¸ªæœ€åŽçš„一æ¥äº†åQŒæ¥éªŒè¯æˆ‘们åšçš„一切,在命令æ½Cºç¬¦ä¸è¾“入:
java -jar hello.jar(执行)
出现了什么,――Hi, Hello World!
æˆ‘ä»¬å†æ¥çœ‹çœ‹jaræ–‡äšg在tomcatä¸å‘布,注æ„åQšåœ¨tomcat䏿ˆ‘们就ä¸èƒ½å†ç”¨jar˜q™ç§æ ¼å¼åQŒè€Œæ”¹waræ ¼å¼åQŒå®ƒæ˜¯ä¸“门用于web应用的,其实整个˜q‡ç¨‹ä¸‹æ¥åŸºæœ¬ä¸Šå’Œjar是类似的åQ?
å…ˆå‡†å¤‡æˆ‘ä»¬è¦æ‰“包的资æºã€?
扑ֈ°å˜æ”¾tomcatçš„webapps目录åQŒè¿›åˆ°å…¶ä¸ï¼Œæ–°å¾ä¸€ä¸ªæ–‡ä»¶å¤¹åQŒè¿™é‡Œå‘½å䨓helloåQŒå†˜q›åŽ»æ–°å¾WEB-INFæ–‡äšg夹,å†è¿›åŽÀL–°å»ºclassesæ–‡äšgå¤¹ï¼Œæ¤æ—¶æˆ‘们也将我们唯一的servletåQŒHelloWorld.java攑ֈ°˜q™é‡ŒåQŒåœ¨ä¸Žclasses目录åŒçñ”下å¾ç«‹ä¸€æ–‡äšgweb.xml。OkåQŒç›®å‰æˆ‘ä»¬åˆæ¥å¾ç«‹äº†ä¸€ä¸ªç®€å•çš„web应用。Â?br />
在命令æ½Cºç¬¦ä¸‹è¿›åˆ°å…ˆå‰åˆ›åˆ¶çš„hello目录下,执行 jar cvf hello.war * åQŒæˆ‘们便得到hello.war。将它拷è´è‡³webapps目录下,okåQŒæ¥çœ‹æœ€åŽä¸€æ¥ï¼Œæ‰“å¼€tomcat的目录confä¸çš„server.xmlåQŒåŠ å…¥ï¼š
reloadable="true"/>
大功告æˆåQè¿è¡Œå®ƒåQŒå¯åЍtomcatåQŒåŽåœ¨æµè§ˆå™¨ä¸è¾“å…¥http://localhost:8080/hello/HelloWorldåQŒæœ‰äº†å—åQ?
好了åQŒå°±˜q™ä¹ˆå¤šï¼Œå¸Œæœ›å¯¹ä½ 有点帮助ã€?/font>
补充åQ?
############
jar基本æ“作åQ?
############
1. 创å¾jaræ–‡äšg
jar cf jar-file input-file(s)
c---want to Create a JAR file.
f---want the output to go to a file rather than to stdout.
eg: 1)jar cf myjar.jar query_maintain_insert.htm
2)jar cvf myjar.jar query_maintain_insert.htm
v---Produces verbose(详细� output.
3)jar cvf myjar.jar query_maintain_insert.htm mydirectory
4)jar cv0f myjar.jar query_maintain_insert.htm mydirectory
0---don't want the JAR file to be compressed.
5)jar cmf MANIFEST.MF myjar.jar yahh.txt
m---Used to include manifest information from an existing manifest file.
6)jar cMf MANIFEST.MF myjar.jar yahh.txt
M---the default manifest file should not be produced.
7)jar cvf myjar.jar *
*---create all contents in current directory.
2. 察看jaræ–‡äšg
jar tf jar-file
t---want to view the Table of contents of the JAR file.
eg: 1)jar vft yahh.jar
v---Produces verbose(详细� output.
3. æå–jaræ–‡äšg
jar xf jar-file [archived-file(s)]
x---want to extract files from the JAR archive.
eg: 1)jar xf yahh.jar yahh.txt(ä»…æå–文件yahh.txt)
2)jar xf yahh.jar alex/yahhalex.txt(ä»…æå–目录alex下的文äšgyahhalex.txt)
3)jar xf yahh.jar(æå–该jar包ä¸çš„æ‰€æœ‰æ–‡ä»¶æˆ–目录)
4. 修改Manifestæ–‡äšg
jar cmf manifest-addition jar-file input-file(s)
m---Used to include manifest information from an existing manifest file.
5. æ›´æ–°jaræ–‡äšg
jar uf jar-file input-file(s)
u---want to update an existing JAR file. Â
]]>