µÚ15Õ£º´æ´¢ÒýÇæºÍ±íÀàÐÍ

Ŀ¼ ·µ»ØMySQL 5.1²Î¿¼ÊÖ²á

15.1. MyISAM´æ´¢ÒýÇæ

15.1.1. MyISAMÆô¶¯Ñ¡Ïî

15.1.2.¼üËùÐèµÄ¿Õ¼ä

15.1.3. MyISAM±íµÄ´æ´¢¸ñʽ

15.1.4. MyISAM±íµÄÎÊÌâ

15.2. InnoDB´æ´¢ÒýÇæ

15.2.1. InnoDB¸ÅÊö

15.2.2. InnoDBÁªÏµÐÅÏ¢

15.2.3. InnoDBÅäÖÃ

15.2.4. InnoDBÆô¶¯Ñ¡Ïî

15.2.5. ´´½¨InnoDB±í¿Õ¼ä

15.2.6. ´´½¨InnoDB±í

15.2.7. Ìí¼ÓºÍɾ³ýInnoDBÊý¾ÝºÍÈÕÖ¾Îļþ

15.2.8. InnoDBÊý¾Ý¿âµÄ±¸·ÝºÍ»Ö¸´

15.2.9. ½«InnoDBÊý¾Ý¿âÒÆµ½Áíһ̨»úÆ÷

15.2.10. InnoDBÊÂÎñÄ£ÐͺÍËø¶¨

15.2.11. InnoDBÐÔÄܵ÷½ÚÌáʾ

15.2.12. ¶à°æ±¾µÄʵʩ

15.2.13. ±íºÍË÷Òý½á¹¹

15.2.14.Îļþ¿Õ¼ä¹ÜÀíºÍ´ÅÅÌI/O

15.2.15. InnoDB´íÎó´¦Àí

15.2.16. ¶ÔInnoDB±íµÄÏÞÖÆ

15.2.17. InnoDB¹ÊÕÏÕï¶ÏºÍÅųý

15.3. MERGE´æ´¢ÒýÇæ

15.3.1. MERGE±í ·½ÃæµÄÎÊÌâ

15.4. MEMORY(HEAP)´æ´¢ÒýÇæ

15.5. BDB(BerkeleyDB)´æ´¢ÒýÇæ

15.5.1. BDBÖ§³ÖµÄ²Ù×÷ϵͳ

15.5.2. °²×°BDB

15.5.3. BDBÆô¶¯Ñ¡Ïî

15.5.4. BDB±íµÄÌØÐÔ

15.5.5. ÐÞ¸ÄBDBËùÐèµÄÊÂÒË

15.5.6. ¶ÔBDB±íµÄÏÞÖÆ

15.5.7. ʹÓÃBDB±íʱ¿ÉÄÜ ³öÏֵĴíÎó

15.6. EXAMPLE´æ´¢ÒýÇæ

15.7. FEDERATED´æ´¢ÒýÇæ

15.7.1. °²×°FEDERATED´æ´¢ÒýÇæ

15.7.2. FEDERATED´æ´¢ÒýÇæµÄ½éÉÜ

15.7.3. ÈçºÎʹÓÃFEDERATED±í

15.7.4. FEDERATED´æ´¢ÒýÇæµÄ¾ÖÏÞ

15.8. ARCHIVE´æ´¢ÒýÇæ

15.9. CSV´æ´¢ÒýÇæ

15.10.BLACKHOLE´æ´¢ÒýÇæ

MySQLÖ§³ÖÊý¸ö´æ´¢ÒýÇæ×÷Ϊ¶Ô²»Í¬±íµÄÀàÐ͵Ĵ¦ÀíÆ÷¡£MySQL´æ´¢ÒýÇæ°üÀ¨´¦ÀíÊÂÎñ°²È«±íµÄÒýÇæºÍ´¦Àí·ÇÊÂÎñ°²È«±íµÄÒýÇæ£º

·         MyISAM¹ÜÀí·ÇÊÂÎñ±í¡£ËüÌṩ¸ßËÙ´æ´¢ºÍ¼ìË÷£¬ÒÔ¼°È«ÎÄËÑË÷ÄÜÁ¦¡£MyISAMÔÚËùÓÐMySQLÅäÖÃÀï±»Ö§³Ö£¬ËüÊÇĬÈϵĴ洢ÒýÇæ£¬³ý·ÇÄãÅäÖÃMySQLĬÈÏʹÓÃÁíÍâÒ»¸öÒýÇæ¡£

·         MEMORY´æ´¢ÒýÇæÌṩ¡°ÄÚ´æÖС±±í¡£MERGE´æ´¢ÒýÇæÔÊÐí¼¯ºÏ½«±»´¦ÀíͬÑùµÄMyISAM±í×÷Ϊһ¸öµ¥¶ÀµÄ±í¡£¾ÍÏñMyISAMÒ»Ñù£¬MEMORYºÍMERGE´æ´¢ÒýÇæ´¦Àí·ÇÊÂÎñ±í£¬ÕâÁ½¸öÒýÇæÒ²¶¼±» ĬÈϰüº¬ÔÚMySQLÖС£

×¢ÊÍ£ºMEMORY´æ´¢ÒýÇæÕýʽµØ±»È·¶¨ÎªHEAPÒýÇæ¡£

·         InnoDBºÍBDB´æ´¢ÒýÇæÌṩÊÂÎñ°²È«±í¡£BDB±»°üº¬ÔÚΪ֧³ÖËüµÄ²Ù×÷ϵͳ·¢²¼µÄMySQL-Max¶þ½øÖÆ·Ö·¢°æÀï¡£InnoDBÒ² ĬÈϱ»°üÀ¨ÔÚËùÓÐMySQL 5.1¶þ½øÖÆ·Ö·¢°æÀÄã¿ÉÒÔ°´ÕÕϲºÃͨ¹ýÅäÖÃMySQLÀ´ÔÊÐí»ò½ûÖ¹ÈÎÒ»ÒýÇæ¡£

·         EXAMPLE´æ´¢ÒýÇæÊÇÒ»¸ö“´æ¸ù”ÒýÇæ£¬Ëü²»×öʲô¡£Äã¿ÉÒÔÓÃÕâ¸öÒýÇæ´´½¨±í£¬µ«Ã»ÓÐÊý¾Ý±»´æ´¢ÓÚÆäÖлò´ÓÆäÖмìË÷¡£Õâ¸öÒýÇæµÄÄ¿µÄÊÇ·þÎñ £¬ÔÚMySQLÔ´´úÂëÖеÄÒ»¸öÀý×Ó£¬ËüÑÝʾ˵Ã÷ÈçºÎ¿ªÊ¼±àдд洢ÒýÇæ¡£Í¬Ñù£¬ËüµÄÖ÷ÒªÐËȤÊǶԿª·¢Õß¡£

·         NDB ClusterÊDZ»MySQL ClusterÓÃÀ´ÊµÏַָ¶ą̀¼ÆËã»úÉϵıíµÄ´æ´¢ÒýÇæ¡£ËüÔÚMySQL-Max 5.1¶þ½øÖÆ·Ö·¢°æÀïÌṩ¡£Õâ¸ö´æ´¢ÒýÇæµ±Ç°Ö»±»Linux, Solaris, ºÍMac OS X Ö§³Ö¡£ÔÚδÀ´µÄMySQL·Ö·¢°æÖУ¬ÎÒÃÇÏëÒªÌí¼ÓÆäËüƽ̨¶ÔÕâ¸öÒýÇæµÄÖ§³Ö£¬°üÀ¨Windows¡£

·         ARCHIVE´æ´¢ÒýÇæ±»ÓÃÀ´ÎÞË÷ÒýµØ£¬·Ç³£Ð¡µØ¸²¸Ç´æ´¢µÄ´óÁ¿Êý¾Ý¡£

·         CSV´æ´¢ÒýÇæ°ÑÊý¾ÝÒÔ¶ººÅ·Ö¸ôµÄ¸ñʽ´æ´¢ÔÚÎı¾ÎļþÖС£

·         BLACKHOLE´æ´¢ÒýÇæ½ÓÊܵ«²»´æ´¢Êý¾Ý£¬²¢ÇÒ¼ìË÷×ÜÊÇ·µ»ØÒ»¸ö¿Õ¼¯¡£

·         FEDERATED´æ´¢ÒýÇæ°ÑÊý¾Ý´æÔÚÔ¶³ÌÊý¾Ý¿âÖС£ÔÚMySQL 5.1ÖУ¬ËüÖ»ºÍMySQLÒ»Æð¹¤×÷£¬Ê¹ÓÃMySQL C Client API¡£ÔÚδÀ´µÄ·Ö·¢°æÖУ¬ÎÒÃÇÏëÒªÈÃËüʹÓÃÆäËüÇý¶¯Æ÷»ò¿Í»§¶ËÁ¬½Ó·½·¨Á¬½Óµ½ÁíÍâµÄÊý¾ÝÔ´¡£

ѰÇóÑ¡ÔñÒ»¸ö´æ´¢ÒýÇæµÄ°ïÖú£¬Çë²ÎÔÄ14.4½Ú£¬¡°Ñ¡ÔñÒ»¸ö´æ´¢ÒýÇæ”¡£

ÕâÒ»Õ½²Êö³ýNDB ClusterÍâµÄÿһ¸öMySQL´æ´¢ÒýÇæ£¬NDB ClusterÔÚµÚ17Õ£ºMySQL ClusterÖнéÉÜ¡£

µ±Äê´´½¨Ò»¸öбíµÄʱºò£¬Äã¿ÉÒÔͨ¹ýÌí¼ÓÒ»¸öENGINE »òTYPE Ñ¡Ïîµ½CREATE TABLEÓï¾äÀ´¸æËßMySQLÄãÒª´´½¨Ê²Ã´ÀàÐÍµÄ±í£º

CREATE TABLE t (i INT) ENGINE = INNODB;
CREATE TABLE t (i INT) TYPE = MEMORY;

ËäÈ»TYPEÈÔÈ»ÔÚMySQL 5.1Öб»Ö§³Ö£¬ÏÖÔÚENGINEÊÇÊ×Ñ¡µÄÊõÓï¡£

Èç¹ûÄãÊ¡ÂÔµôENGINE»òTYPEÑ¡ÏĬÈϵĴ洢ÒýÇæ±»Ê¹Óá£Ò»°ãµÄĬÈÏÊÇMyISAM£¬µ«Äã¿ÉÒÔÓÃ--default-storage-engine»ò--default-table-type·þÎñÆ÷Æô¶¯Ñ¡ÏîÀ´¸Ä±äËü£¬»òÕßͨ¹ýÉèÖÃstorage_engine»òtable_typeϵͳ±äÁ¿À´¸Ä±ä¡£

µ±MySQL±»ÓÃMySQLÅäÖÃÏòµ¼°²×°ÔÚWindowsƽ̨ÉÏ£¬InnoDB´æ´¢ÒýÇæÌæ´úMyISAM´æ´¢ÒýÇæ×÷ÎªÌæ´ú£¬Çë²ÎÔÄ2.3.5.1½Ú£¬¡°½éÉÜ”¡£

Òª°ÑÒ»¸ö±í´ÓÒ»¸öÀàÐÍתµ½ÁíÒ»¸öÀàÐÍ£¬¿ÉʹÓÃALTER TABLEÓï¾ä£¬Õâ¸öÓï¾äÖ¸Ã÷еÄÀàÐÍ£º

ALTER TABLE t ENGINE = MYISAM;
ALTER TABLE t TYPE = BDB;

Çë²ÎÔÄ13.1.5½Ú£¬¡°CREATE TABLEÓï·¨”ºÍ13.1.2½Ú£¬¡°ALTER TABLEÓï·¨”¡£

Èç¹ûÄãÊÔ×ÅʹÓÃÒ»¸öδ±»±àÒë½øMySQLµÄ´æ´¢ÒýÇæ£¬»òÕßÊÔ×ÅÓÃÒ»¸ö±»±àÒë½øMySQLµ«Ã»Óб»¼¤»îµÄ´æ´¢ÒýÇæ£¬MySQLÈ¡¶ø´úÖ®µØ´´½¨Ò»¸öMyISAMÀàÐÍµÄ±í¡£µ±ÄãÔÚÖ§³Ö²»Í¬´æ´¢ÒýÇæµÄMySQL·þÎñÆ÷Ö®¼ä¿½±´±íµÄʱºò£¬ÉÏÊöµÄÐÐΪÊǺܷ½±ãµÄ¡££¨ÀýÈ磬ÔÚÒ»¸ö¸´Öƽ¨Á¢ÖУ¬¿ÉÄÜÄãµÄÖ÷·þÎñÆ÷ΪÔö¼Ó°²È«¶øÖ§³Ö ÊÂÎñ´æ´¢ÒýÇæ£¬µ«´Ó·þÎñÆ÷Ϊ¸ü¿ìµÄËٶȶø½öʹÓ÷ÇÊÂÎñ´æ´¢ÒýÇæ¡£)

ÔÚ²»¿ÉÓõÄÀàÐͱ»Ö¸¶¨Ê±£¬×Ô¶¯ÓÃMyISAM±íÀ´Ìæ´ú£¬Õâ»á¶ÔMySQLµÄÐÂÓû§Ôì³É»ìÏý¡£ÎÞÂÛºÎʱһ¸ö±í±»×Ô¶¯¸Ä±ä֮ʱ£¬²úÉúÒ»¸ö¾¯¸æ¡£

MySQL×ÜÊÇ´´½¨Ò»¸ö.frmÎļþÀ´±£³Ö±íºÍÁе͍Òå¡£±íµÄË÷ÒýºÍÊý¾Ý¿ÉÄܱ»´æ´¢ÔÚÒ»¸ö»ò¶à¸öÎļþÀÕâÈ¡¾öÓÚ±íµÄÀàÐÍ¡£·þÎñÆ÷ÔÚ´æ´¢ÒýÇæ¼¶±ðÖ®ÉÏ´´½¨.frmÎļþ¡£µ¥¶ÀµÄ´æ´¢ÒýÇæ´´½¨ÈκÎÐèÒªÓÃÀ´¹ÜÀí±íµÄ¶îÍâÎļþ¡£

Ò»¸öÊý¾Ý¿â¿ÉÒÔ°üº¬²»Í¬ÀàÐÍµÄ±í¡£

ÊÂÎñ°²È«±í(TST) ±ÈÆð·ÇÊÂÎñ°²È«±í (NTST)Óм¸´óÓÅÊÆ£º

·         ¸ü°²È«¡£¼´Ê¹MySQL±ÀÀ£»òÓöµ½Ó²¼þÎÊÌ⣬Ҫô×Ô¶¯»Ö¸´£¬ÒªÃ´´Ó±¸·Ý¼ÓÊÂÎñÈÕÖ¾»Ö¸´£¬Äã¿ÉÒÔÈ¡»ØÊý¾Ý¡£

·         Äã¿ÉÒԺϲ¢Ðí¶àÓï¾ä£¬²¢ÓÃCOMMITÓï¾äͬʱ½ÓÊÜËüÃÇÈ«²¿£¨Èç¹ûautocommit±»½ûÖ¹µô£©¡£

·         Äã¿ÉÒÔÖ´ÐÐROLLBACKÀ´ºöÂÔÄãµÄ¸Ä±ä£¨Èç¹ûautocommit±»½ûÖ¹µô£©¡£

·         Èç¹û¸üÐÂʧ°Ü£¬ÄãµÄËùÓиı䶼±ä»ØÔ­À´¡££¨Ó÷ÇÊÂÎñ°²È«±í£¬ËùÓз¢ÉúµÄ¸Ä±ä¶¼ÊÇÓÀ¾ÃµÄ£©¡£

·         ÊÂÎñ°²È«´æ´¢ÒýÇæ¿ÉÒÔ¸øÄÇЩµ±Ç°ÓöÁµÃµ½Ðí¶à¸üеıíÌṩ¸üºÃµÄ²¿Êð¡£

ËäÈ»MySQLÖ§³ÖÊý¸öÊÂÎñ°²È«´æ´¢ÒýÇæ£¬Îª»ñµÃ×îºÃ½á¹û£¬Äã²»Ó¦¸ÃÔÚÒ»¸öÊÂÎñÄÇ»ìºÏ²»Í¬±íÀàÐÍ¡£Èç¹ûÄã»ìºÏ±íÀàÐͻᷢÉúÎÊÌ⣬¸ü¶àÐÅÏ¢Çë²ÎÔÄ13.4.1½Ú£¬¡°START TRANSACTION, COMMITºÍROLLBACK Syntax”¡£

Èç¹ûÄãûÓÐÖ¸¶¨ÅäÖÃÖµµÄ»°£¬InnoDBʹÓÃĬÈϵÄÅäÖÃÖµ¡£Çë²ÎÔÄ15.2.3½Ú£¬¡°InnoDBÅäÖÔ¡£

·ÇÊÂÎñ°²È«±í×ÔÉíÓм¸¸öÓŵ㣬ÒòΪûÓÐÊÂÎñ¿ªÖ§£¬ËùÓÐÓŵ㶼ÄܳöÏÖ£º

·         ¸ü¿ì

·         ÐèÒª¸üÉٵĴÅÅ̿ռä

·         Ö´ÐиüÐÂÐèÒª¸üÉÙµÄÄÚ´æ

Äã¿ÉÒÔÔÚͬһ¸öÓï¾äÖкϲ¢ÊÂÎñ°²È«ºÍ·ÇÊÂÎñ°²È«±íÀ´»ñµÃÁ½Õß×îºÃµÄÇé¿ö¡£¾¡¹ÜÈç´Ë£¬ÔÚautocommit±»½ûÖ¹µôµÄÊÂÎñÀ±ä»»µ½·ÇÊÂÎñ°²È«±íÒÀ¾É¼´Ê±Ìá½»£¬²¢ÇÒ²»»á±»»Ø¹ö¡£

15.1. MyISAM´æ´¢ÒýÇæ

15.1.1. MyISAMÆô¶¯Ñ¡Ïî

15.1.2.¼üÐèÒªµÄ¿Õ¼ä

15.1.3. MyISAM±í´æ´¢¸ñʽ

15.1.4. MyISAM±íµÄÎÊÌâ

MyISAMÊÇ Ä¬ÈÏ´æ´¢ÒýÇæ¡£Ëü»ùÓÚ¸üÀϵÄISAM´úÂ룬µ«ÓкܶàÓÐÓõÄÀ©Õ¹¡££¨×¢ÒâMySQL 5.1²»Ö§³ÖISAM£©¡£

ÿ¸öMyISAMÔÚ´ÅÅÌÉÏ´æ´¢³ÉÈý¸öÎļþ¡£µÚÒ»¸öÎļþµÄÃû×ÖÒÔ±íµÄÃû×Ö¿ªÊ¼£¬À©Õ¹ÃûÖ¸³öÎļþÀàÐÍ¡£.frmÎļþ´æ´¢±í¶¨Òå¡£Êý¾ÝÎļþµÄÀ©Õ¹ÃûΪ.MYD (MYData)¡£Ë÷ÒýÎļþµÄÀ©Õ¹ÃûÊÇ.MYI (MYIndex)¡£

ÒªÃ÷È·±íʾÄãÏëÒªÓÃÒ»¸öMyISAM±í¸ñ£¬ÇëÓÃENGINE±íÑ¡ÏîÖ¸³öÀ´£º

CREATE TABLE t (i INT) ENGINE = MYISAM;

×¢ÊÍ£ºÀϰ汾µÄMySQLʹÓÃTYPE¶ø²»ÊÇENGINE£¨ÀýÈ磬TYPE = MYISAM£©¡£MySQL 5.1ΪÏòϼæÈݶøÖ§³ÖÕâ¸öÓï·¨£¬µ«TYPEÏÖÔÚ±»ÇáÊÓ£¬¶øENGINEÊÇÊ×ÏȵÄÓ÷¨¡£

Ò»°ãµØ£¬ENGINEÑ¡ÏîÊDz»±ØÒªµÄ£»³ý·ÇĬÈÏÒѾ­±»¸Ä±äÁË£¬MyISAMÊÇĬÈÏ´æ´¢ÒýÇæ¡£

Äã¿ÉÒÔÓÃmyisamchk¹¤¾ßÀ´¼ì²é»òÐÞ¸´MyISAM±í¡£Çë²ÎÔÄ5.9.5.6½Ú£¬¡°Ê¹ÓÃmyisamchk×ö±ÀÀ£»Ö¸´”¡£ÄãÒ²¿ÉÒÔÓÃmyisampackÀ´Ñ¹ËõMyISAM±í£¬ÈÃËüÃÇÕ¼¸üÉٵĿռ䡣Çë²ÎÔÄ8.2½Ú£¬¡°myisampack£¬²úÉúѹËõ¡¢Ö»¶ÁµÄMyISAM±í”¡£

ÈçÏÂÊÇMyISAM´æ´¢ÒýÇæµÄÒ»Ð©ÌØÕ÷£º

·         ËùÓÐÊý¾ÝÖµÏÈ´æ´¢µÍ×Ö½Ú¡£ÕâʹµÃÊý¾Ý»úºÍ²Ù×÷ϵͳ·ÖÀë¡£¶þ½øÖÆÇá±ãÐÔµÄΨһҪÇóÊÇ»úÆ÷ʹÓò¹Â루Èç×î½ü20ÄêµÄ»úÆ÷ÓеÄÒ»Ñù£©ºÍIEEE¸¡µã¸ñʽ£¨ÔÚÖ÷Á÷»úÆ÷ÖÐÒ²ÍêÈ«ÊÇÖ÷µ¼µÄ£©¡£Î¨Ò»²»Ö§³Ö¶þ½øÖƼæÈÝÐԵĻúÆ÷ÊÇǶÈëʽϵͳ¡£ÕâЩϵͳÓÐʱʹÓÃÌØÊâµÄ´¦ÀíÆ÷¡£

ÏÈ´æ´¢Êý¾ÝµÍ×Ö½Ú²¢²»ÑÏÖØµØÓ°ÏìËÙ¶È£»Êý¾ÝÐÐÖеÄ×Ö½ÚÒ»°ãÊÇδÁªºÏµÄ£¬´ÓÒ»¸ö·½Ïò¶ÁδÁªºÏµÄ×Ö½Ú²¢²»±È´Ó·´Ïò¶Á¸üÕ¼Óøü¶àµÄ×ÊÔ´¡£·þÎñÆ÷ÉϵĻñÈ¡ÁÐÖµµÄ´úÂëÓëÆäËü´úÂëÏà±È²¢²»ÏÔµÃʱ¼ä½ô¡£

·        ´óÎļþ£¨´ï63λÎļþ³¤¶È£©ÔÚÖ§³Ö´óÎļþµÄÎļþϵͳºÍ²Ù×÷ϵͳÉϱ»Ö§³Ö¡£

·         µ±°Ñɾ³ýºÍ¸üм°²åÈë»ìºÏµÄʱºò£¬¶¯Ì¬³ß´çµÄÐиüÉÙË鯬¡£ÕâҪͨ¹ýºÏ²¢ÏàÁÚ±»É¾³ýµÄ¿é£¬ÒÔ¼°ÈôÏÂÒ»¸ö¿é±»É¾³ý£¬¾ÍÀ©Õ¹µ½ÏÂÒ»¿éÀ´×Ô¶¯Íê³É¡£

·         ÿ¸öMyISAM±í×î´óË÷ÒýÊýÊÇ64¡£ Õâ¿ÉÒÔͨ¹ýÖØÐ±àÒëÀ´¸Ä±ä¡£Ã¿¸öË÷Òý×î´óµÄÁÐÊýÊÇ16¸ö¡£

·         ×î´óµÄ¼ü³¤¶ÈÊÇ1000×Ö½Ú¡£ÕâÒ²¿ÉÒÔͨ¹ý±àÒëÀ´¸Ä±ä¡£¶ÔÓÚ¼ü³¤¶È³¬¹ý250×Ö½ÚµÄÇé¿ö£¬Ò»¸ö³¬¹ý1024×ֽڵĵļü¿é±»ÓÃÉÏ¡£

·         BLOBºÍTEXTÁпÉÒÔ±»Ë÷Òý¡£

·         NULLÖµ±»ÔÊÐíÔÚË÷ÒýµÄÁÐÖС£Õâ¸öռÿ¸ö¼üµÄ0-1¸ö×Ö½Ú¡£

·         ËùÓÐÊý×Ö¼üÖµÒÔ¸ß×Ö½ÚΪÏȱ»´æ´¢ÒÔÔÊÐíÒ»¸ö¸ü¸ßµØË÷ÒýѹËõ¡£

·        µ±¼Ç¼ÒÔÅźÃÐòµÄ˳Ðò²åÈ루¾ÍÏñÄãʹÓÃÒ»¸öAUTO_INCREMENTÁÐ֮ʱ£©£¬Ë÷ÒýÊ÷±»Åü¿ªÒÔ±ã¸ß½Úµã½ö°üº¬Ò»¸ö¼ü¡£Õâ¸ÄÉÆÁËË÷ÒýÊ÷µÄ¿Õ¼äÀûÓÃÂÊ¡£

·         ÿ±íÒ»¸öAUTO_INCREMENÁеÄÄÚ²¿´¦Àí¡£MyISAMΪINSERTºÍUPDATE²Ù×÷×Ô¶¯¸üÐÂÕâÒ»ÁС£ÕâʹµÃAUTO_INCREMENTÁиü¿ì£¨ÖÁÉÙ10%£©¡£ÔÚÐòÁж¥µÄÖµ±»É¾³ýÖ®ºó¾Í²»ÄÜÔÙÀûÓᣣ¨µ±AUTO_INCREMENTÁб»¶¨ÒåΪ¶àÁÐË÷ÒýµÄ×îºóÒ»ÁУ¬¿ÉÒÔ³öÏÖÖØÊ¹ÓôÓÐòÁж¥²¿É¾³ýµÄÖµµÄÇé¿ö £©¡£AUTO_INCREMENTÖµ¿ÉÓÃALTER TABLE»òmyisamchÀ´ÖØÖá£

·         Èç¹ûÊý¾ÝÎļþÖмäµÄ±íûÓÐ×ÔÓÉ¿éÁË£¬ÔÚÆäËüÏ̴߳ӱí¶ÁµÄͬʱ£¬Äã¿ÉÒÔINSERTÐÂÐе½±íÖС££¨Õâ±»ÈÏʶΪ²¢·¢²Ù×÷ £©¡£×ÔÓÉ¿éµÄ³öÏÖÊÇ×÷Ϊɾ³ýÐеĽá¹û£¬»òÕßÊÇÓñȵ±Ç°ÄÚÈݶàµÄÊý¾Ý¶Ô¶¯Ì¬³¤¶ÈÐиüеĽá¹û¡£µ±ËùÓÐ×ÔÓɿ鱻ÓÃÍ꣨ÌîÂú£©£¬Î´À´µÄ²åÈëÓÖ±ä³É²¢·¢¡£

·         Äã¿ÉÒÔ°ÑÊý¾ÝÎļþºÍË÷ÒýÎļþ·ÅÔÚ²»Í¬Ä¿Â¼£¬ÓÃDATA DIRECTORYºÍINDEX DIRECTORYÑ¡ÏîCREATE TABLEÒÔ»ñµÃ¸ü¸ßµÄËÙ¶È£¬Çë²ÎÔÄ13.1.5½Ú£¬¡°CREATE TABLEÓï·¨”¡£

·         ÿ¸ö×Ö·ûÁпÉÒÔÓÖ²»Í¬µÄ×Ö·û¼¯£¬Çë²ÎÔĵÚ10Õ £º¡°×Ö·û¼¯Ö§³Ö¡±¡£

·         ÔÚMyISAMË÷ÒýÎļþÀïÓÖÒ»¸ö±êÖ¾£¬Ëü±íÃ÷±íÊÇ·ñ±»ÕýÈ·¹Ø±Õ¡£Èç¹ûÓÃ--myisam-recoverÑ¡ÏîÆô¶¯mysqld£¬MyISAM±íÔÚ´ò¿ªµÃʱºò±»×Ô¶¯¼ì²é£¬Èç¹û±»±í±»²»Ç¡µ±µØ¹Ø±Õ£¬¾ÍÐÞ¸´±í¡£

·         Èç¹ûÄãÓÃ--update-stateÑ¡ÏîÔËÐÐmyisamchk£¬Ëü±ê×¢±íΪÒѼì²é¡£myisamchk --fastÖ»¼ì²éÄÇЩûÓÐÕâ¸ö±êÖ¾µÄ±í¡£

·         myisamchk --analyzeΪ²¿·Ö¼ü´æ´¢Í³¼ÆÐÅÏ¢£¬Ò²ÎªÕû¸ö¼ü´æ´¢Í³¼ÆÐÅÏ¢¡£

·         myisampack¿ÉÒÔ´ò°üBLOBºÍVARCHARÁС£

MyISAMÒ²Ö§³ÖÏÂÁÐÌØÕ÷£º

·         Ö§³Ötrue VARCHARÀàÐÍ£»VARCHARÁÐÒÔ´æ´¢ÔÚ2¸ö×Ö½ÚÖеij¤¶ÈÀ´¿ªÊ¼¡£

·         ÓÐVARCHARµÄ±í¿ÉÒÔÓй̶¨»ò¶¯Ì¬¼Ç¼³¤¶È¡£

·         VARCHARºÍCHARÁпÉÒÔ¶à´ï64KB¡£

·         Ò»¸ö±»¸ãÂÒµÄÒѼÆËãË÷Òý¶Ô¿É¶ÔUNIQUEÀ´Ê¹Óá£ÕâÔÊÐíÄãÔÚ±íÄÚÈκÎÁеĺϲ¢ÉÏÓÐUNIQUE¡££¨¾¡¹ÜÈç´Ë£¬Äã²»ÄÜÔÚÒ»¸öUNIQUEÒѼÆËãË÷ÒýÉÏËÑË÷£©¡£

¶ÔMyISAM´æ´¢ÒýÇæ£¬ÓÐÒ»¸ö¸üÏêϸµÄÂÛ̳ÔÚhttp://forums.mysql.com/list.php?21¡£

15.1.1MyISAMÆô¶¯Ñ¡Ïî

ÏÂÁжÔmysqld µÄÑ¡Ïî¿ÉÓÃÀ´¸Ä±äMyISAM±íµÄÐÐΪ£º

·         --myisam-recover=mode

ÉèÖÃΪ±ÀÀ£MyISAM±í×Ô¶¯»Ö¸´µÄģʽ¡£

·         --delay-key-write=ALL

¶ÔÈκÎMyISAM±íµÄд²Ù×÷Ö®¼ä²»ÒªË¢Ð¼ü»º³åÇø¡£

×¢ÊÍ£ºÈç¹ûÄãÒªÕâô×ö¡£µ±±íÔÚʹÓÃÖÐ֮ʱ£¬ÄãÓ¦¸Ã²»Ê¹ÓÃÀ´×ÔÁíÒ»¸ö³ÌÐòµÄMyISAM±í£¨±ÈÈç´ÓÁíÒ»¸öMySQL·þÎñÆ÷»òÓÃmyisamchk£©¡£Õâô×ö»áµ¼ÖÂË÷Òý±»ÆÆ»µ¡£

¶ÔʹÓÃ--delay-key-writeµÄ±í£¬Ê¹ÓÃ--external-lockingûÓаïÖú¡£

Çë²ÎÔÄ5.3.1½Ú£¬¡°mysqldÃüÁîÐÐÑ¡Ï£

ÏÂÁÐϵͳ±äÁ¿Ó°ÏìMyISAM±íµÄÐÐΪ£º

·         bulk_insert_buffer_size

ÓÃÔÚ¿é²åÈëÓÅ»¯ÖеÄÊ÷»º³åÇøµÄ´óС¡£×¢ÊÍ£ºÕâÊÇÒ»¸öper threadµÄÏÞÖÆ¡£

·         (OBSOLETE) myisam_max_extra_sort_file_size

Õâ¸ö²ÎÊýÒѾ­²»ÔÚMySQLÖÐʹÓá£

·         myisam_max_sort_file_size

Èç¹ûÁÙʱÎļþ»á±äµÃ³¬¹ýË÷Òý£¬²»ÒªÊ¹ÓÿìËÙÅÅÐòË÷Òý·½·¨À´´´½¨Ò»¸öË÷Òý¡£×¢ÊÍ£ºÕâ¸ö²ÎÊýÒÔ×Ö½ÚµÄÐÎʽ¸ø³ö¡£

·         myisam_sort_buffer_size

ÉèÖûָ´±í֮ʱʹÓõĻº³åÇøµÄ³ß´ç¡£

Çë²ÎÔÄ5.3.3½Ú£¬¡°·þÎñÆ÷ϵͳ±äÁ¿”¡£

Èç¹ûÓÃ--myisam-recoverÑ¡ÏîÆô¶¯mysqld£¬×Ô¶¯»Ö¸´±»¼¤»î¡£ÔÚÕâÖÖÇé¿öÏ£¬µ±·þÎñÆ÷´ò¿ªÒ»¸öMyISAM±í֮ʱ£¬·þÎñÆ÷»á¼ì²éÊÇ·ñ±í±»±êעΪ±ÀÀ££¬»òÕß±íµÄ´ò¿ª¼ÆÊý±äÁ¿ÊÇ·ñ²»Îª0ÇÒÄãÕýÓÃ--skip-external-lockingÔËÐзþÎñÆ÷¡£Èç¹ûÕâЩÌõ¼þµÄÈκÎÒ»¸öÎªÕæ£¬ÏÂÁÐÇé¿ö·¢Éú£º

·         ±í±»²é´í¡£

·         Èç¹û·þÎñÆ÷·¢ÏÖÒ»¸ö´íÎó£¬ËüÊÔ×Å×ö¿ìËÙ±íÐÞ¸´£¨ÅÅÐòÇÒ²»ÖØÐ´´½¨Êý¾ÝÎļþ£©¡£

·         Èç¹ûÐÞ¸´ÒòΪÊý¾ÝÎļþÖеÄÒ»¸ö´íÎó¶øÊ§°Ü£¨ÀýÈ磬һ¸öÖØ¸´¼ü´íÎ󣩣¬·þÎñÆ÷»áÔٴγ¢ÊÔÐÞ¸´£¬ÕâÒ»´ÎÖØ½¨Êý¾ÝÎļþ¡£

·         Èç¹ûÐÞ¸´ÈÔȻʧ°Ü£¬·þÎñÆ÷ÓþÉÐÞ¸´Ñ¡Ïî·½·¨ÔÙÖØÊÔÒ»´ÎÐÞ¸´£¨Ò»ÐнÓÒ»ÐеØÐ´£¬²»ÅÅÐò£©¡£Õâ¸ö·½·¨Ó¦¸ÃÄÜÐÞ¸´ÈκÎÀàÐ͵ĴíÎ󣬲¢ÇÒÐèÒªºÜµÍµÄ´ÅÅ̿ռ䡣

Èç¹û»Ö¸´²»Äܹ»´ÓÏÈǰÍê³ÉµÄÓï¾äÀï»Ö¸´ËùÓÐÐУ¬¶øÇÒÄã²»ÄÜÔÚ--myisam-recoverÑ¡ÏîÖµÖ¸¶¨FORCE£¬×Ô¶¯ÐÞ¸´»áÖÕÖ¹£¬²¢ÔÚ´íÎóÈÕÖ¾ÀïдһÌõ´íÎóÐÅÏ¢£º

Error: Couldn't repair table: test.g00pages

Èç¹ûÄãÖ¸¶¨FORCE£¬È¡¶ø´úÖ®µØ£¬ÀàËÆÕâÑùµÄÒ»¸ö¾¯¸æ±»¸ø³ö£º

Warning: Found 344 of 354 rows when repairing ./test/g00pages

×¢ÊÍ£ºÈç¹û×Ô¶¯»Ö¸´Öµ°üÀ¨BACKUP£¬»Ö¸´½ø³Ì´´½¨Îļþ²¢ÓÃtbl_name-datetime.BAKÐÎʽȡÃû¡£ÄãÓ¦¸ÃÓÐÒ»¸öcron½Å±¾£¬Ëü×Ô¶¯°ÑÕâЩÎļþ´ÓÊý¾Ý¿âÄ¿Â¼ÒÆµ½±¸·ÝýÖÊÉÏ¡£

15.1.2.¼üËùÐèµÄ¿Õ¼ä

MyISAM±íʹÓÃBÐÍÊ÷Ë÷Òý¡£Äã¿ÉÒÔ´ÖÂԵؼÆËãË÷ÒýÎļþµÄ´óСΪ(key_length+4)/0.67, ¼ÓÉÏËùÓеļüÖ®ºÍ¡£µ±ËùÓмüÒÔÅÅÐòµÄ˳Ðò²åÈë²¢ÇÒ±íûÓÐÈκÎѹËõµÄ¼ü֮ʱ£¬ÒÔÉϹÀ¼ÆÊǶÔ×µÄÇé¿öµÄ¡£

×Ö·û´®Ë÷ÒýÊDZ»¿Õ¼äѹËõµÄ¡£Èç¹ûµÚÒ»¸ö×Ö·û´®Ë÷Òý²¿·ÖÊÇ×Ö·û´®£¬ËüÒ²±»¼Óǰ׺ѹËõ¡£Èç¹û×Ö·û´®ÁÐÓÐÐí¶àÍÏÒ·¿Õ¼ä£¬»ò×Ö·û´® ÁÐÊÇÒ»¸ö×ÜÊDz»ÓÃÍêÈ«³¤¶ÈµÄVARCHARÁУ¬¿Õ¼äѹËõʹµÃË÷ÒýÎļþ±È×Çé¿öʱµÄÊýֵҪС¡£Ç°×ºÑ¹Ëõ±»ÓÃÔÚÒÔ×Ö·û´®¿ªÊ¼µÄ¼üÉÏ¡£Èç¹ûÓÐÐí¶à¾ßÓÐͬһǰ׺µÄ×Ö·û´®£¬Ç°×ºÑ¹ËõÊÇÓаïÖúµÄ¡£

ÔÚMyISAM±í£¬ÄãÒ²¿ÉÒÔÔÚ´´½¨±íµÄʱºòͨ¹ýÖ¸¶¨PACK_KEYS=1À´Ç°×ºÑ¹ËõÊý×Ö¡£µ±Êý×Ö±»ÒÔ¸ß×Ö½ÚÓÅÏȴ洢֮ʱ£¬ÈôÄãÓÐÐí¶à¾ßÓÐͬһǰ׺µÄÕûÊý ¼ü£¬ÉÏÊö·½·¨ÊÇÓаïÖúµÄ¡£

15.1.3MyISAM±íµÄ´æ´¢¸ñʽ

15.1.3.1. ¾²Ì¬£¨¹Ì¶¨³¤¶È£©±íÌØÕ÷

15.1.3.2. ¶¯Ì¬±íÌØÕ÷

15.1.3.3. ÒÑѹËõ±íÌØÕ÷

MyISAMÖ§³ÖÈýÖÖ²»Í¬´æ´¢¸ñʽ¡£ÆäÖÐÁ½¸ö£¨¹Ì¶¨¸ñʽºÍ¶¯Ì¬¸ñʽ)¸ù¾ÝÕýʹÓõÄÁеÄÀàÐÍÀ´×Ô¶¯Ñ¡Ôñ¡£µÚÈý¸ö£¬¼´ÒÑѹËõ¸ñʽ£¬Ö»ÄÜʹÓÃmyisampack¹¤¾ßÀ´´´½¨¡£

µ±ÄãCREATE»òALTERÒ»¸öûÓÐBLOB»òTEXTÁÐµÄ±í£¬Äã¿ÉÒÔÓÃROW_FORMAT±íÑ¡ÏîÇ¿ÖÆ±íµÄ¸ñʽΪFIXED»òDYNAMIC¡£Õ⠻ᵼÖÂCHARºÍVARCHARÁÐÒòFIXED¸ñʽ±ä³ÉCHAR£¬»òÒòDYNAMIC¸ñʽ±ä³ÉVARCHAR¡£

ͨ¹ýÓÃALTER TABLEÖ¸¶¨ROW_FORMAT={COMPRESSED | DEFAULT}£¬Äã¿ÉÒÔѹËõ»ò½âѹËõ±í£¬Çë²ÎÔÄ13.1.5½Ú£¬¡°CREATE TABLEÓï·¨”¡£

15.1.3.1. ¾²Ì¬£¨¹Ì¶¨³¤¶È£©±íÌØÕ÷

¾²Ì¬¸ñʽÊÇMyISAM±íµÄĬÈÏ´æ´¢¸ñʽ¡£µ±±í²»°üº¬±äÁ¿³¤¶ÈÁУ¨VARCHAR, BLOB, »òTEXT£©Ê±£¬Ê¹ÓÃÕâ¸ö¸ñʽ¡£Ã¿Ò»ÐÐÓù̶¨×Ö½ÚÊý´æ´¢¡£

MyISAMµÄÈýÖÖ´æ´¢¸ñʽÖУ¬¾²Ì¬¸ñʽ¾Í×î¼òµ¥Ò²ÊÇ×ȫµÄ£¨ÖÁÉÙ¶ÔÓÚ±ÀÀ£¶øÑÔ£©¡£¾²Ì¬¸ñʽҲÊÇ×î¿ìµÄon-disk¸ñʽ¡£¿ìËÙÀ´×ÔÓÚÊý¾ÝÎļþÖеÄÐÐÔÚ´ÅÅÌÉϱ»ÕÒµ½µÄÈÝÒ×·½Ê½£ºµ±°´ÕÕË÷ÒýÖеÄÐкŲéÕÒÒ»¸öÐÐʱ£¬ÓÃÐг¤¶È³ËÒÔÐкš£Í¬Ñù£¬µ±É¨ÃèÒ»¸ö±íµÄ ʱºò£¬ºÜÈÝÒ×ÓÃÿ¸ö´ÅÅ̶Á²Ù×÷¶ÁÒ»¶¨ÊýÁ¿µÄ¼Ç¼¡£

µ±MySQL·þÎñÆ÷ÕýÍùÒ»¸ö¹Ì¶¨¸ñʽMyISAMÎļþдµÄʱºò£¬Èç¹û¼ÆËã»ú±ÀÀ£ÁË£¬°²È«ÊÇÏÔÈ»µÄ¡£ÔÚÕâÖÖÇé¿öÏ£¬myisamchk¿ÉÒÔÈÝÒ׵ؾö¶¨Ã¿ÐдÓÄÄÀ↑ʼµ½ÄÄÀï½áÊø£¬ËùÒÔËüͨ³£¿ÉÒÔÊÕ»ØËùÓмǼ£¬³ýÁËдÁËÒ»²¿·ÖµÄ¼Ç¼¡£×¢Ò⣬»ùÓÚÊý¾ÝÐУ¬MyISAM±íË÷Òý¿ÉÒÔÒ»Ö±±»ÖØÐ¹¹½¨¡£

¾²Ì¬¸ñʽ±íµÄÒ»°ãÌØÕ÷£º

·         CHARÁжÔÁпí¶ÈÊǿռäÌî²¹µÄ¡£

·         ·Ç³£¿ì¡£

·         ÈÝÒ×»º´æ¡£

·         ±ÀÀ£ºóÈÝÒ×ÖØ½¨£¬ÒòΪ¼Ç¼λÓڹ̶¨Î»Öá£

·         ÖØÐÂ×éÖ¯ÊDz»±ØÒªµÄ£¬³ý·ÇÄãɾ³ý¾ÞÁ¿µÄ¼Ç¼²¢ÇÒÏ£ÍûΪ²Ù×÷ϵͳÌÚ³ö´ÅÅ̿ռ䡣Ϊ´Ë£¬¿ÉʹÓÃOPTIMIZE TABLE»òÕßmyisamchk -r¡£

·         ͨ³£±È¶¯Ì¬¸ñʽ±íÐèÒª¸ü¶àµÄ´ÅÅ̿ռ䡣

15.1.3.2. ¶¯Ì¬±íÌØÕ÷

Èç¹ûÒ»¸öMyISAM±í°üº¬Èκοɱ䳤¶È ÁУ¨VARCHAR, BLOB»òTEXTDynamic£©£¬»òÕßÈç¹ûÒ»¸ö±í±»ÓÃROW_FORMAT=DYNAMICÑ¡ÏîÀ´´´½¨£¬¶¯Ì¬´æ´¢¸ñʽ±»Ê¹Óá£

Õâ¸ö¸ñʽ¸üΪ¸´ÔÓÒ»µã£¬ÒòΪÿÐÐÓÐÒ»¸ö±íÃ÷ÐÐÓж೤µÄÍ·¡£µ±Ò»¸ö¼Ç¼ÒòΪ¸üеĽá¹û±»±äµÃ¸ü³¤£¬¸Ã¼Ç¼Ҳ¿ÉÒÔÔÚ³¬¹ýÒ»¸öλÖô¦½áÊø¡£

Äã¿ÉÒÔʹÓÃOPTIMIZE TABLE»òmyisamchkÀ´¶ÔÒ»¸ö±íÕûÀíË鯬¡£Èç¹ûÔÚÒ»¸ö±íÖÐÓÐÄãÆµ·±·ÃÎÊ»ò¸Ä±äµÄ¹Ì¶¨³¤¶È ÁУ¬±íÖÐÒ²ÓÐһЩ¿É±ä³¤¶ÈÁУ¬½öΪ±ÜÃâË鯬¶ø°ÑÕâЩ¿É±ä³¤¶ÈÁÐÒÆµ½ÆäËü±í¿ÉÄÜÊÇÒ»¸öºÃÖ÷Òâ¡£

¶¯Ì¬¸ñʽ±íµÄÒ»°ãÌØÕ÷£º

·         ³ýÁ˳¤¶ÈÉÙÓÚ4µÄÁÐÍ⣬ËùÓеÄ×Ö·û´®ÁÐÊǶ¯Ì¬µÄ¡£

·         ÔÚÿ¸ö¼ÇÂ¼Ç°ÃæÊÇÒ»¸öλͼ£¬¸Ãλͼ±íÃ÷ÄÄÒ»Áаüº¬¿Õ×Ö·û´®£¨¶ÔÓÚ×Ö·û´®ÁУ©»òÕß0£¨¶ÔÓÚÊý×ÖÁУ©¡£×¢Ò⣬Õâ²¢²»°üÀ¨°üº¬NULLÖµµÄÁС£Èç¹ûÒ»¸ö×Ö·ûÁÐÔÚÍÏÒ·¿Õ¼äÒÆ³ýºó³¤¶ÈΪÁ㣬»òÕßÒ»¸öÊý×Ö ÁÐΪÁãÖµ£¬Õâ¶¼ÔÚλͼÖбê×¢ÁËÇÒÁв»±»±£´æµ½´ÅÅÌ¡£ ·Ç¿Õ×Ö·û´®±»´æÎªÒ»¸ö³¤¶È×Ö½Ú¼Ó×Ö·û´®µÄÄÚÈÝ¡£

·         ͨ³£±È¹Ì¶¨³¤¶È±íÐèÒª¸üÉٵĴÅÅ̿ռ䡣

·         ÿ¸ö¼Ç¼½öʹÓñØÐè´óСµÄ¿Õ¼ä¡£¾¡¹ÜÈç´Ë£¬Èç¹ûÒ»¸ö¼Ç¼±ä´ó£¬Ëü¾Í°´ÐèÒª±»·Ö¿ª³É¶àƬ£¬Ôì³É¼Ç¼Ë鯬µÄºó¹û¡£±ÈÈ磬ÄãÓÃÀ©Õ¹Ðг¤¶ÈµÄÐÅÏ¢¸üÐÂÒ»ÐУ¬¸ÃÐоͱäµÃÓÐË鯬¡£ÔÚÕâÖÖÇé¿öÏ£¬Äã¿ÉÒÔʱ²»Ê±ÔËÐÐOPTIMIZE TABLE»òmyisamchk -rÀ´¸ÄÉÆÐÔÄÜ¡£¿ÉʹÓÃmyisamchk -eiÀ´»ñÈ¡±íµÄͳ¼ÆÊý¾Ý¡£

·         ¶¯Ì¬¸ñʽ±íÔÚ±ÀÀ£ºóÒª±È¾²Ì¬¸ñʽ±í¸üÄÑÖØ½¨£¬ÒòΪһ¸ö¼Ç¼¿ÉÄܱ»·ÖΪ¶à¸öË鯬ÇÒÁ´½Ó£¨Ë鯬£©¿ÉÄܱ»¶ªÊ§¡£

·         ¶¯Ì¬³ß´ç¼Ç¼ÆÚÍûµÄÐ㤶ÈÓÃÏÂÁбí´ïʽÀ´¼ÆË㣺

·                3
·                + (number of columns + 7) / 8
·                + (number of char columns)
·                + (packed size of numeric columns)
·                + (length of strings)
·                + (number of NULL columns + 7) / 8

¶Ôÿ¸öÁ´½ÓÐèÒª¶îÍâµÄ6×Ö½Ú¡£ÔÚÒ»¸ö¸üе¼ÖÂÒ»¸ö¼Ç¼µÄÀ©´ó֮ʱ£¬Ò»¸ö¶¯Ì¬¼Ç¼±»Á´½ÓÁË¡£Ã¿¸öÐÂÁ´½ÓÖÁÉÙÊÇ20×Ö½Ú£¬ËùÒÔÏÂÒ»¸öÀ©´ó¿ÉÄÜÔÚͬÑùµÄÁ´½ÓÀï½øÐС£Èç¹û²»ÊÇ£¬ÔòÁíÒ»¸öÁ´½Ó½«±»½¨Á¢¡£Äã¿ÉÒÔʹÓÃmyisamchk -edÀ´ÕÒ³öÁ´½ÓµÄÊýÄ¿¡£ËùÓеÄÁ´½Ó¿ÉÒÔÓÃmyisamchk -rÀ´ÒƳý¡£

15.1.3.3. ÒÑѹËõ±íÌØÕ÷

ÒÑѹËõ´æ´¢¸ñʽÊÇÓÉmyisampack¹¤¾ß´´½¨µÄÖ»¶Á¸ñʽ¡£

ËùÓÐMySQL·Ö·¢°æÀﶼĬÈϰüÀ¨myisampack¡£ÒÑѹËõ±í¿ÉÒÔÓÃmyisamchkÀ´½âѹËõ¡£

ÒÑѹËõ±íÓÐÏÂÁÐÌØÕ÷£º

·         ÒÑѹËõ±íÕ¼¾Ý·Ç³£Ð¡µÄ´ÅÅ̿ռ䡣Õâ×îС»¯ÁË´ÅÅÌÓÃÁ¿£¬µ±Ê¹ÓûºÂýµÄ´ÅÅÌ£¨ÈçCD-ROM)֮ʱ£¬ÕâÊǺÜÓÐÓõġ£

·         ÿ¸ö¼Ç¼ÊDZ»µ¥¶ÀѹËõµÄ£¬ËùÒÔÖ»Óзdz£Ð¡µÄ·ÃÎÊ¿ªÖ§¡£ÒÀ¾Ý±íÖÐ×î´óµÄ¼Ç¼£¬Ò»¸ö¼Ç¼µÄÍ·ÔÚÿ¸ö±íÖÐÕ¼¾Ý1µ½3¸ö×Ö½Ú¡£Ã¿¸ö Áб»²»Í¬µØÑ¹Ëõ¡£Í¨³£Ã¿¸öÁÐÓÐÒ»¸ö²»Í¬µÄHuffmanÊ÷¡£Ò»Ð©Ñ¹ËõÀàÐÍÈçÏ£º

o        ºó׺¿Õ¼äѹËõ¡£

-        ǰ׺¿Õ¼äѹËõ¡£

-        ÁãÖµµÄÊýÓÃÒ»¸öλÀ´´æ´¢¡£

-        Èç¹ûÔÚÒ»¸öÕûÐÍÁÐÖеÄÖµÓÐÒ»¸öСµÄ·¶Î§£¬Áб»ÓÃ×îС¿ÉÄܵÄÀàÐÍÀ´´æ´¢¡£±ÈÈ磬һ¸öBIGINTÁУ¨8×Ö½Ú£©£¬Èç¹ûËùÓÐËüµÄÖµÔÚ-128µ½127·¶Î§ÄÚ£¬Ëü¿ÉÒÔ±»´æ´¢ÎªTINYINTÁУ¨1×Ö½Ú£©

-        Èç¹ûÒ»¸ö ÁнöÓÐһС×é¿ÉÄܵÄÖµ£¬ÁеÄÀàÐͱ»×ª»¯³ÉENUM¡£

-        Ò»¸ö ÁпÉÒÔʹÓÃÏÈǰѹËõÀàÐ͵ÄÈÎÒâºÏ²¢¡£

·         ¿ÉÒÔ´¦Àí¹Ì¶¨³¤¶È»ò¶¯Ì¬³¤¶È¼Ç¼¡£

15.1.4MyISAM±í ·½ÃæµÄÎÊÌâ

15.1.4.1. Ë𻵵ÄMyISAM±í

15.1.4.2. δ±»Êʵ±¹Ø±ÕµÄ±íµÄÎÊÌâ

MySQLÓÃÀ´´æ´¢Êý¾ÝµÄÎļþ¸ñʽÒѾ­±»¹ã·º²âÊÔ¹ý£¬µ«×ÜÊÇÓе¼ÖÂÊý¾Ý±í±äµÃË𻵵Ļ·¾³¡£

15.1.4.1. Ë𻵵ÄMyISAM±í

¼´Ê¹MyISAM±í¸ñʽ·Ç³£¿É¿¿£¨SQLÓï¾ä¶Ô±í×öµÄËùÓиıäÔÚÓï¾ä·µ»ØÖ®Ç°±»Ð´Ï£©£¬Èç¹ûÏÂÁÐÈκÎʼþ·¢Éú£¬ÄãÒÀÈ»¿ÉÒÔ»ñµÃËð»µµÄ±í£º

·         mysqld½ø³ÌÔÚдÖм䱻ɱµô¡£

·         ·¢ÉúδԤÆÚµÄ¼ÆËã»ú¹Ø±Õ£¨ÀýÈ磬¼ÆËã»ú±»¹Ø±Õ£©¡£

·         Ó²¼þ¹ÊÕÏ¡£

·         Äã¿ÉÒÔͬʱÔÚÕý±»·þÎñÆ÷Ð޸ĵıíÉÏʹÓÃÍⲿ³ÌÐò£¨Èçmyisamchk£©¡£

·         MySQL»òMyISAM´úÂëµÄÈí¼þȱÏÝ¡£

Ò»¸öË𻵵ıíµÄµäÐÍÖ¢×´ÈçÏ£º

·         µ±ÔÚ´Ó±íÖÐÑ¡ÔñÊý¾Ý֮ʱ£¬ÄãµÃµ½ÈçÏ´íÎó£º

·                Incorrect key file for table: '...'. Try to repair it

·         ²éѯ²»ÄÜÔÚ±íÖÐÕÒµ½Ðлò·µ»Ø²»ÍêÈ«µÄÊý¾Ý¡£

Äã¿ÉÒÔÓÃCHECK TABLE statementÓï¾äÀ´¼ì²éMyISAM±íµÄ½¡¿µ£¬²¢ÓÃREPAIR TABLEÐÞ¸´Ò»¸ö Ë𻵵ÄMyISAM±í¡£µ±mysqld²»ÔËÐÐ֮ʱ£¬ÄãÒ²¿ÉÒÔÓÃmyisamchkÃüÁî¼ì²é»òÐÞÀíÒ»¸ö±í¡£Çë²ÎÔÄ13.5.2.3½Ú£¬¡°CHECK TABLEÓï·¨”£¬ 13.5.2.6½Ú£¬¡°REPAIR TABLEÓï·¨”£¬ºÍ5.9.5½Ú£¬¡°myisamchk — MyISAM±íά»¤¹¤¾ß”¡£

Èç¹ûÄãµÄ±í±äµÃƵ·±Ë𻵣¬ÄãÓ¦¸ÃÊÔ×ÅÈ·¶¨ÎªÊ²Ã´»áÕâÑùµÄÔ­Òò¡£ÒªÃ÷°×µÄ×îÖØÒªµÄÊÂÊDZí±äµÃËð»µÊDz»ÊÇÒòΪ·þÎñÆ÷±ÀÀ£µÄ½á¹û¡£Äã¿ÉÒÔÔÚ´íÎóÈÕÖ¾ÖвéÕÒ×î½üµÄrestarted mysqldÏûÏ¢À´ÔçÆÚÑéÖ¤Õâ¸ö¡£Èç¹û´æÔÚÕâÑùÒ»¸öÏûÏ¢£¬Ôò±íËð»µÊÇ·þÎñÆ÷ËÀµôµÄÒ»¸ö½á¹ûÊǺÜÓпÉÄܵġ£·ñÔò£¬Ë𻵿ÉÄÜÔÚÕý³£²Ù×÷Öз¢Éú¡£ÕâÊÇÒ»¸öȱÏÝ¡£ÄãÓ¦¸ÃÊÔ×Å´´½¨Ò»¸öչʾÕâ¸öÎÊÌâµÄ¿ÉÖØ¸´Éú³ÉµÄ²âÊÔ°¸Àý¡£Çë²ÎÔÄA.4.2½Ú£¬¡°Èç¹ûMySQL±£³Ö±ÀÀ££¬¸ÃÔõô×ö” ¼°E.1.6½Ú£¬¡°Èç¹û³öÏÖ±í±ÀÀ££¬ÇëÉú³É²âÊÔ°¸Àý”¡£

15.1.4.2. Î´±»Êʵ±¹Ø±ÕµÄ±íµÄÎÊÌâ

ÿ¸öMyISAMË÷ÒýÎļþ(.MYI)ÔÚÍ·ÓÐÒ»¸ö¼ÆÊýÆ÷£¬Ëü¿ÉÒÔ±»ÓÃÀ´¼ì²éÒ»¸ö±íÊÇ·ñ±»Ç¡µ±µØ¹Ø±Õ¡£Èç¹ûÄã´ÓCHECK TABLE»òmyisamchkµÃµ½ÏÂÁо¯¸æ£¬Òâζ×ÅÕâ¸ö¼ÆÊýÆ÷ÒѾ­²»Í¬²½ÁË£º

clients are using or haven't closed the table properly

Õâ¸ö¾¯¸æ²¢²»ÊÇÍêÈ«Òâζ×űíÒѱ»ÆÆ»µ£¬µ«ÄãÖÁÉÙÓ¦¸Ã¼ì²é±í¡£

¼ÆÊýÆ÷µÄ¹¤×÷·½Ê½ÈçÏ£º

·         ±íÔÚMySQLÖеÚÒ»´Î±»¸üУ¬Ë÷ÒýÎļþÍ·µÄ¼ÆÊýÆ÷¼ÓÒ»¡£

·         ÔÚδÀ´µÄ¸üÐÂÖУ¬¼ÆÊýÆ÷²»±»¸Ä±ä¡£

·         µ±±íµÄ×îºóʵÀý±»¹Ø±Õ£¨ÒòΪһ¸ö²Ù×÷FLUSH TABLE»òÒòΪÔÚ±í»º³åÇøÖÐûÓпռ䣩֮ʱ£¬Èô±íÒѾ­ÔÚÈκε㱻¸üУ¬Ôò¼ÆÊýÆ÷¼õÒ»¡£

·         µ±ÄãÐÞÀí»ò¼ì²é±í²¢ÇÒ·¢ÏÖ±íÍêºÃ֮ʱ£¬¼ÆÊýÆ÷±»ÖØÖÃΪÁã¡£

·         Òª±ÜÃâÓëÆäËü¿ÉÄܼì²é±íµÄ½ø³Ì½øÐÐÊÂÎñµÄÎÊÌ⣬Èô¼ÆÊýÆ÷ΪÁ㣬ÔڹرÕʱ¼ÆÊýÆ÷²»¼õÒ»¡£

»»¾ä»°À´Ëµ£¬¼ÆÊýÆ÷Ö»ÓÐÔÚÏÂÁÐÇé¿ö»á²»Í¬²½£º

·         MyISAM±í²»ËæµÚÒ»´Î·¢³öµÄLOCK TABLESºÍFLUSH TABLES±»¸´ÖÆ¡£

·         MySQLÔÚÒ»´Î¸üкÍ×îºó¹Ø±ÕÖ®¼ä±ÀÀ££¨×¢Ò⣬±í¿ÉÄÜÒÀÈ»ÍêºÃ£¬ÒòΪMySQL×ÜÊÇÔÚÿ¸öÓï¾äÖ®¼äΪÿ¼þÊ·¢³öд²Ù×÷£©¡£

·         Ò»¸ö±í±»myisamchk --recover»òmyisamchk --update-stateÐ޸ģ¬Í¬Ê±±»mysqldʹÓá£

·         ¶à¸ömysqld·þÎñÆ÷ÕýʹÓÃ±í£¬²¢ÇÒÒ»¸ö·þÎñÆ÷ÔÚÒ»¸ö±íÉÏÖ´ÐÐREPAIR TABLE»òCHECK TABLE£¬Í¬Ê±¸Ã±íÒ²±»ÁíÒ»¸ö·þÎñÆ÷ʹÓá£ÔÚÕâ¸ö½á¹¹ÖУ¬Ê¹ÓÃCHECK TABLEÊǰ²È«µÄ£¬ËäÈ»Äã¿ÉÄÜ´ÓÆäËü·þÎñÆ÷Éϵõ½¾¯¸æ¡£¾¡¹ÜÈç´Ë£¬REPAIR TABLEÓ¦¸Ã±»±ÜÃ⣬ÒòΪµ±Ò»¸ö·þÎñÆ÷ÓÃÒ»¸öеÄÊý¾ÝÎļþÌæ´ú¾ÉµÄ֮ʱ£¬ÕⲢûÓз¢ËÍÐźŵ½ÆäËü·þÎñÆ÷ÉÏ¡£

×ܵÄÀ´Ëµ£¬ÔÚ¶à·þÎñÆ÷Ö®¼ä·ÖÏíÒ»¸öÊý¾ÝĿ¼ÊÇÒ»¸ö»µÖ÷Òâ¡£Çë²ÎÔÄ5.12½Ú£¬¡°ÔÚͬһ¸ö»úÆ÷ÉÏÔËÐжà¸öMySQL·þÎñÆ÷” »ñµÃ¸ü¶àµØÌÖÂÛ

15.2. InnoDB´æ´¢ÒýÇæ

15.2.1. InnoDB¸ÅÊö

15.2.2. InnoDBÁªÏµÐÅÏ¢

15.2.3. InnoDBÅäÖÃ

15.2.4. InnoDBÆô¶¯Ñ¡Ïî

15.2.5. ´´½¨InnoDB±í¿Õ¼ä

15.2.6. ´´½¨InnoDB±í

15.2.7. Ìí¼ÓºÍɾ³ýInnoDBÊý¾ÝºÍÈÕÖ¾Îļþ

15.2.8. InnoDBÊý¾Ý¿âµÄ±¸·ÝºÍ»Ö¸´atabase

15.2.9. °ÑInnoDBÊý¾Ý¿âÒÆµ½Áíһ̨»úÆ÷ÉÏ

15.2.10. InnoDBÊÂÎñÄ£ÐͺÍËø¶¨

15.2.11. InnoDBÐÔÄܵ÷½ÚÌáʾ

15.2.12. ¶à°æ±¾µÄʵʩ

15.2.13. ±íºÍË÷Òý½á¹¹

15.2.14.Îļþ¿Õ¼ä¹ÜÀíºÍ´ÅÅÌI/O

15.2.15. InnoDB´íÎó´¦Àí

15.2.16. ¶ÔInnoDB±íµÄÏÞÖÆ

15.2.17. InnoDB¹ÊÕÏÕï¶ÏºÍÅųý

15.2.1InnoDB¸ÅÊö

InnoDB¸øMySQLÌṩ Á˾ßÓÐÌá½»£¬»Ø¹öºÍ±ÀÀ£»Ö¸´ÄÜÁ¦µÄÊÂÎñ°²È«£¨ACID¼æÈÝ£©´æ´¢ÒýÇæ¡£InnoDBËø¶¨ÔÚÐм¶²¢ÇÒÒ²ÔÚSELECTÓï¾äÌṩһ¸öOracle·ç¸ñÒ»ÖµķÇËø¶¨¶Á¡£ÕâÐ©ÌØÉ«Ôö¼Ó Á˶àÓû§²¿ÊðºÍÐÔÄÜ¡£Ã»ÓÐÔÚInnoDBÖÐÀ©´óËø¶¨µÄÐèÒª£¬ÒòΪÔÚInnoDBÖÐÐм¶Ëø¶¨ÊʺϷdz£Ð¡µÄ¿Õ¼ä¡£InnoDBÒ²Ö§³ÖFOREIGN KEYÇ¿ÖÆ¡£ÔÚSQL²éѯÖУ¬Äã¿ÉÒÔ×ÔÓɵؽ«InnoDBÀàÐ͵ıíÓëÆäËüMySQLµÄ±íµÄÀàÐÍ»ìºÏÆðÀ´£¬ÉõÖÁÔÚͬһ¸ö²éѯÖÐÒ²¿ÉÒÔ»ìºÏ¡£

InnoDBÊÇΪ´¦Àí¾Þ´óÊý¾ÝÁ¿Ê±µÄ×î´óÐÔÄÜÉè¼Æ¡£ËüµÄCPUЧÂÊ¿ÉÄÜÊÇÈÎºÎÆäËü»ùÓÚ´ÅÅ̵ĹØÏµÊý¾Ý¿âÒýÇæËù²»ÄÜÆ¥µÐµÄ¡£

InnoDB´æ´¢ÒýÇæ±»ÍêÈ«ÓëMySQL·þÎñÆ÷ÕûºÏ£¬InnoDB´æ´¢ÒýÇæÎªÔÚÖ÷ÄÚ´æÖлº´æÊý¾ÝºÍË÷Òý¶øÎ¬³ÖËü×Ô¼ºµÄ»º³å³Ø¡£InnoDB´æ´¢ËüµÄ±í£¦Ë÷ÒýÔÚÒ»¸ö±í¿Õ¼äÖУ¬±í¿Õ¼ä¿ÉÒÔ°üº¬Êý¸öÎļþ£¨»òԭʼ´ÅÅÌ·ÖÇø£©¡£ÕâÓëMyISAM±í²»Í¬£¬±ÈÈçÔÚMyISAM±íÖÐÿ¸ö±í±»´æÔÚ·ÖÀëµÄÎļþÖС£InnoDB ±í¿ÉÒÔÊÇÈκγߴ磬¼´Ê¹ÔÚÎļþ³ß´ç±»ÏÞÖÆÎª2GBµÄ²Ù×÷ϵͳÉÏ¡£

InnoDBĬÈϵر»°üº¬ÔÚMySQL¶þ½øÖÆ·Ö·¢ÖС£Windows Essentials installerʹInnoDB³ÉΪWindowsÉÏMySQLµÄ ĬÈÏ±í¡£

InnoDB±»ÓÃÀ´ÔÚÖÚ¶àÐèÒª¸ßÐÔÄܵĴóÐÍÊý¾Ý¿âÕ¾µãÉϲúÉú¡£ÖøÃûµÄInternetÐÂÎÅÕ¾µãSlashdot.orgÔËÐÐÔÚInnoDBÉÏ¡£Mytrix, Inc.ÔÚInnoDBÉÏ´æ´¢³¬¹ý1TBµÄÊý¾Ý£¬»¹ÓÐһЩÆäËüÕ¾µãÔÚInnoDBÉÏ´¦ÀíÆ½¾ùÿÃë800´Î²åÈë/¸üеĸººÉ¡£

InnoDBÔÚºÍMySQLÒ»ÑùÔÚͬһ¸öGNU GPLÖ¤Ê飬µÚ2°æ£¨1991Äê6Ô°棩Ï·¢ÐС£¸ü¶àÓйØMySQLÖ¤ÊéµÄÐÅÏ¢£¬Çë²ÎÔÄhttp://www.mysql.com/company/legal/licensing/¡£

¹ØÓÚInnoDB´æ´¢ÒýÇæ£¬ÔÚhttp://forums.mysql.com/list.php?22ÓÐÒ»¸öÏêϸµÄÂÛ̳¡£

15.2.2InnoDBÁªÏµÐÅÏ¢

InnoDBÒýÇæµÄ³§¼ÒµÄÁªÏµÐÅÏ¢£¬Innobase OyµÄÁªÏµ·½Ê½ÈçÏ£º

Web site: http://www.innodb.com/
Email: <sales@innodb.com>
Phone: +358-9-6969 3250 (office)
       +358-40-5617367 (mobile)
 
Innobase Oy Inc.
World Trade Center Helsinki
Aleksanterinkatu 17
P.O.Box 800
00101 Helsinki
Finland

15.2.3InnoDBÅäÖÃ

InnoDB´æ´¢ÒýÇæÊÇĬÈϵر»ÔÊÐíµÄ¡£Èç¹ûÄã²»ÏëÓÃInnoDB±í£¬Äã¿ÉÒÔÌí¼Óskip-innodbÑ¡Ïîµ½MySQLÑ¡ÏîÎļþ¡£

±»InnoDB´æ´¢ÒýÇæ¹ÜÀíµÄÁ½¸öÖØÒªµÄ»ùÓÚ´ÅÅ̵Ä×ÊÔ´ÊÇInnoDB±í¿Õ¼äÊý¾ÝÎļþºÍËüµÄÈÕÖ¾Îļþ¡£

Èç¹ûÄãÖ¸¶¨ÎÞInnoDBÅäÖÃÑ¡ÏMySQL½«ÔÚMySQLÊý¾ÝĿ¼Ï´´½¨Ò»¸öÃûΪibdata1µÄ10MB´óСµÄ×Ô¶¯À©Õ¹Êý¾ÝÎļþ£¬ÒÔ¼°Á½¸öÃûΪib_logfile0ºÍib_logfile1µÄ5MB´óСµÄÈÕÖ¾Îļþ¡£

×¢ÊÍ£ºInnoDB¸øMySQLÌṩ¾ßÓÐÌá½»£¬ »Ø¹öºÍ±ÀÀ£»Ö¸´ÄÜÁ¦µÄÊÂÎñ°²È«£¨ACID¼æÈÝ£©´æ´¢ÒýÇæ¡£Èç¹ûÄâÔËÐеIJÙ×÷ϵͳºÍÓ²¼þ²»ÄÜÈç¹ã¸æËµµÄÄÇÑùÔËÐУ¬InnoDB¾Í²»ÄÜʵÏÖÈçÉÏÄÜÁ¦¡£Ðí¶à²Ù×÷ϵͳ»ò´ÅÅÌ×Óϵͳ¿ÉÄÜΪ¸ÄÉÆÐÔÄܶøÑÓ³Ù»ò¼Ç¼д²Ù×÷¡£ÔÚһЩ²Ù×÷ϵͳÉÏ£¬¾ÍÊÇϵͳµ÷Óã¨fsync()£© Ò²ÒªµÈ×Å£¬Ö±µ½ËùÓÐδдÈëÒѱ»Ë¢ÐÂÎļþµÄÊý¾ÝÔÚ±»Ë¢Ðµ½Îȶ¨ÄÚ´æÖ®Ç°¿ÉÒÔȷʵ·µ»ØÁË¡£ÒòΪÕâ¸ö£¬²Ù×÷ϵͳ±ÀÀ£»òµôµç¿ÉÄÜË𻵵±Ç°Ìá½»µÄÊý¾Ý£¬»òÕßÔÚ×µÄ Çé¿ö£¬ÒòΪд²Ù×÷Òѱ»¼Ç¼ÁË£¬ÉõÖÁÆÆ»µÁËÊý¾Ý¿â¡£Èç¹ûÊý¾ÝÍêÕûÐÔ¶ÔÄãºÜÖØÒª£¬ÄãÓ¦¸ÃÔÚÓÃÈκγÌÐòÓÚÉú²úÖÐ֮ǰ×öһЩ“pull-the-plug”²âÊÔ¡£Mac OS X 10.3 ¼°ÒÔºó°æ±¾£¬InnoDBʹÓÃÒ»¸öÌØ±ðµÄfcntl()Îļþ ˢз½·¨¡£ÔÚLinuxÏ£¬½¨Òé½ûÖ¹»ØÐ´»º´æ¡£

ÔÚATAPIÓ²ÅÌÉÏ£¬Ò»¸öÀàËÆhdparm -W0 /dev/hdaÃüÁî¿ÉÄÜÆð×÷Óá£Ð¡ÐÄijЩÇý¶¯Æ÷»òÕß´ÅÅÌ¿ØÖÆÆ÷¿ÉÄܲ»ÄܽûÖ¹»ØÐ´»º´æ¡£

×¢ÊÍ£ºÒª»ñµÃºÃµÄÐÔÄÜ£¬ÄãÓ¦¸ÃÈçÏÂÃæÀý×ÓËùÌÖÂÛÄÇÑù£¬Ã÷È·ÌṩInnoDB²ÎÊý¡£×ÔÈ»µØ£¬ÄãÓ¦¸Ã±à¼­ÉèÖÃÀ´ÊʺÏÄãµÄÓ²¼þºÍÒªÇó¡£

Òª½¨Á¢InnoDB±í¿Õ¼äÎļþ£¬ÔÚmy.cnfÑ¡ÏîÎļþÀïµÄ[mysqld]½ÚÀïʹÓÃinnodb_data_file_pathÑ¡Ïî¡£ÔÚWindowsÉÏ£¬Äã¿ÉÒÔÌæ´úµØÊ¹ÓÃmy.iniÎļþ¡£innodb_data_file_pathµÄÖµÓ¦¸ÃΪһ¸ö»ò¶à¸ö Êý¾ÝÎļþ¹æ¸ñµÄÁÐ±í¡£Èç¹ûÄãÃüÃûÒ»¸öÒÔÉϵÄÊý¾ÝÎļþ£¬Óà ·ÖºÅ(‘;’)·Ö¸ôËüÃÇ£º

innodb_data_file_path=datafile_spec1[;datafile_spec2]...

ÀýÈ磺°ÑÃ÷È·´´½¨µÄ¾ßÓÐÏàÍ¬ÌØÕ÷µÄ±í¿Õ¼ä×÷ΪĬÈÏÉèÖõÄÉèÖòÙ×÷ÈçÏ£º

[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend

Õâ¸öÉèÖÃÅäÖÃÒ»¸ö¿ÉÀ©Õ¹´óСµÄ³ß´çΪ10MBµÄµ¥¶ÀÎļþ£¬ÃûΪibdata1¡£Ã»Óиø³öÎļþµÄλÖã¬ËùÒÔĬÈϵÄÊÇÔÚMySQLµÄÊý¾ÝĿ¼ÄÚ¡£

³ß´ç´óСÓÃM»òÕßGºó׺À´Ö¸¶¨ËµÃ÷µ¥Î»ÊÇMB»òÕßGB¡£

Ò»¸ö±í¿Õ¼ä£¬ËüÔÚÊý¾ÝĿ¼Àï°üº¬Ò»¸öÃûΪibdata1µÄ¹Ì¶¨³ß´ç50MBµÄÊý¾ÝÎļþºÍÒ»¸öÃûΪibdata2´óСΪ50MBµÄ×Ô¶¯À©Õ¹Îļþ£¬Æä¿ÉÒÔ ÏñÕâÑù±»ÅäÖãº

[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

Ò»¸öÖ¸¶¨Êý¾ÝÎļþµÄÍêÈ«ºó׺°üÀ¨ÎļþÃû£¬ËüµÄ³ß´çºÍÊý¸ö¿ÉÑ¡ÊôÐÔ£º

file_name:file_size[:autoextend[:max:max_file_size]]

autoextendÊôÐԺͺóÃæ¸ú×ŵÄÊôÐÔÖ»¿É±»ÓÃÀ´¶Ôinnodb_data_file_pathÐÐÀï×îºóÒ»¸öÊý¾ÝÎļþ¡£

Èç¹ûÄã¶Ô×îºóµÄÊý¾ÝÎļþÖ¸¶¨autoextendÑ¡Ïî¡£Èç¹ûÊý¾ÝÎļþºÄ¾¡Á˱í¿Õ¼äÖеÄ×ÔÓɿռ䣬InnoDB¾ÍÀ©Õ¹Êý¾ÝÎļþ¡£À©Õ¹µÄ·ù¶ÈÊÇÿ´Î8MB¡£

Èç¹û´ÅÅÌÒÑÂú£¬Äã¿ÉÄÜÏëÒª°ÑÆäËüÊý¾ÝÌí¼Óµ½ÁíÒ»¸öÓ²ÅÌÉÏ¡£ÖØÐÂÅäÖÃÒ»¸öÒÑ´æÔÚ±í¿Õ¼äµÄÖ¸Áî¼û15.2.7½Ú£¬¡°Ìí¼ÓºÍɾ³ýInnoDBÊý¾ÝºÍÈÕÖ¾Îļþ”¡£

InnoDB²¢²»¸ÐÖª×î´óÎļþ³ß´ç£¬ËùÒÔҪСÐÄÎļþϵͳ£¬ÔÚÄÇÉÏÃæ×î´óµÄÎļþ³ß´çÊÇ2GB¡£ÒªÎªÒ»¸ö×Ô¶¯À©Õ¹Êý¾ÝÎļþÖ¸¶¨×î´ó³ß´ç£¬ÇëʹÓÃmaxÊôÐÔ¡£ÏÂÁÐÅäÖÃÔÊÐíibdata1Õǵ½¼«ÏÞµÄ500MB£º

[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend:max:500M

InnoDBĬÈϵØÔÚMySQLÊý¾ÝĿ¼´´½¨±í¿Õ¼äÎļþ¡£ÒªÃ÷È·Ö¸¶¨Ò»¸öλÖã¬ÇëʹÓÃinnodb_data_home_dirÑ¡Ïî¡£±ÈÈ磬ҪʹÓÃÁ½¸öÃûΪibdata1ºÍibdata2µÄÎļþ£¬µ«ÊÇÒª°ÑËûÃÇ´´½¨µ½/ibdata£¬ ÏñÈçÏÂÒ»ÑùÅäÖÃInnoDB£º

[mysqld]
innodb_data_home_dir = /ibdata
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

×¢ÊÍ£ºInnoDB²»´´½¨Ä¿Â¼£¬ËùÒÔÔÚÆô¶¯·þÎñÆ÷֮ǰÇëÈ·ÈÏ/ibdataĿ¼µÄÈ·´æÔÚ¡£Õâ¶ÔÄãÅäÖõÄÈκÎÈÕÖ¾ÎļþĿ¼À´ËµÒ²ÊÇÕæÊµµÄ¡£Ê¹ÓÃUnix»òDOSµÄmkdirÃüÁîÀ´´´½¨ÈκαØÐèµÄĿ¼¡£

ͨ¹ý°Ñinnodb_data_home_dirµÄÖµÔ­Ô­±¾±¾µØ²¿Êðµ½Êý¾ÝÎļþÃû£¬²¢ÔÚÐèÒªµÄµØ·½Ìí¼Óб¸Ü»ò·´Ð±¸Ü£¬InnoDBΪÿ¸öÊý¾ÝÎļþÐγÉĿ¼·¾¶¡£Èç¹ûinnodb_data_home_dirÑ¡Ïî¸ù±¾Ã»ÓÐÔÚmy.cnfÖÐÌáµ½£¬ ĬÈÏÖµÊÇ“dot”Ŀ¼ ./£¬ÕâÒâ˼ÊÇMySQLÊý¾ÝĿ¼¡£

Èç¹ûÄãÖ¸¶¨innodb_data_home_dirΪһ¸ö¿Õ×Ö·û´®£¬Äã¿ÉÒÔΪÁÐÔÚinnodb_data_file_pathÖµÀïµÄÊý¾ÝÎļþÖ¸¶¨¾ø¶Ô·¾¶¡£ÏÂÃæµÄÀý×ӵȼÛÓÚÇ°ÃæÄǸöÀý×Ó£º

[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend

Ò»¸ö¼òµ¥µÄmy.cnfÀý×Ó¡£¼ÙÉèÄãÓÐһ̨Å䱸128MBÄÚ´æºÍÒ»¸öÓ²Å̵ļÆËã»ú¡£ÏÂÃæµÄÀý×ÓÏÔʾÔÚmy.cnf»òmy.iniÀï¶ÔInnoDB¿ÉÄܵÄÅäÖòÎÊý£¬°üÀ¨autoextendÊôÐÔ¡£

Õâ¸öÀý×ÓÊʺϴó¶àÊýÔÚUnixºÍWindowsÉÏ£¬²»Ïë·ÖÅäInnoDBÊý¾ÝÎļþºÍÈÕÖ¾Îļþµ½Êý¸ö´ÅÅÌÉϵÄÓû§¡£ËüÔÚMySQLÊý¾ÝĿ¼´´½¨Ò»¸ö×Ô¶¯À©Õ¹Êý¾ÝÎļþibdata1ºÍÁ½¸öÈÕÖ¾Îļþib_logfile0¼°ib_logfile1¡£Í¬Ñù£¬InnoDÔÚÊý¾ÝĿ¼Àï×Ô¶¯´´½¨µÄСÐ͵µ°¸InnoDBÈÕÖ¾Îļþib_arch_log_0000000000Ò²½áÊø¡£

[mysqld]
# You can write your other MySQL server options here
# ...
# Data files must be able to hold your data and indexes.
# Make sure that you have enough free disk space.
innodb_data_file_path = ibdata1:10M:autoextend
#
# Set buffer pool size to 50-80% of your computer's memory
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
#
# Set the log file size to about 25% of the buffer pool size
set-variable = innodb_log_file_size=20M
set-variable = innodb_log_buffer_size=8M
#
innodb_flush_log_at_trx_commit=1

ÇëÈ·ÈÏMySQL·þÎñÆ÷ÓÐÊʵ±µÄȨÏÞÔÚÊý¾ÝĿ¼Àï´´½¨Îļþ¡£¸üÒ»°ãµØ£¬·þÎñÆ÷±ØÐë¶ÔÈκÎËüÐèÒª´´½¨Êý¾ÝÎļþ»òÈÕÖ¾ÎļþµÄĿ¼ÓзÃÎÊȨÏÞ¡£

×¢Ò⣬ÔÚһЩÎļþϵͳÉÏ£¬Êý¾ÝÎļþ±ØÐèСÓÚ2GB¡£Êý¾ÝÎļþµÄºÏ²¢³ß´ç±ØÐëÖÁÉÙ10MB¡£

µ±ÄãµÚÒ»´Î´´½¨Ò»¸öInnoDB±í¿Õ¼ä£¬×îºÃ´ÓÃüÁîÐÐÀ´Æô¶¯MySQL·þÎñÆ÷¡£InnoDBÈ»ºó°ÑÊý¾Ý¿â´´½¨µÄÐÅÏ¢´òÓ¡µ½ÆÁÄ»£¬ËùÒÔÄã¿ÉÒÔ¿´¼ûÕýÔÚ·¢Éúʲô¡£±ÈÈ磬ÔÚWindowsÉÏ£¬Èç¹ûmysqld-maxλÓÚC:\mysql\bin£¬Äã¿ÉÒÔÈçÏÂÀ´Æô¶¯Ëü£º

C:\> C:\mysql\bin\mysqld-max --console

Èç¹ûÄã²»·¢ËÍ·þÎñÆ÷Êä³öµ½ÆÁÄ»ÉÏ£¬Çë¼ì²é·þÎñÆ÷µÄ´íÎóÈÕÖ¾À´¿´ÔÚÆô¶¯¹ý³ÌÖÐInnoDB´òÓ¡ÁËʲô¡£

Çë²ÎÔÄ15.2.5½Ú£¬¡°´´½¨InnoDB±í¿Õ¼ä”£¬ÒÔ»ñµÃInnoDBÏÔʾµÄÐÅÏ¢¿´ÆðÀ´Ó¦¸Ã ÏñʲôµÄÀý×Ó¡£

WindowsÉÏÈçºÎÖ¸¶¨Ñ¡Ïî? ÔÚWindowsÉÏÑ¡ÏîÎļþµÄ¹æÔòÈçÏ£º

·         Ö»Ó¦¸Ã´´½¨Ò»¸ömy.cnf»òÎļþ¡£

·         my.cnfÎļþÓ¦¸Ã±»·ÅÔÚCÅ̸ùĿ¼¡£

·         my.iniÎļþÓ¦¸Ã±»·ÅÖÃÔÚWINDIRĿ¼£»ÀýÈçC:\WINDOWS»òC:\WINNT¡£Äã¿ÉÒÔÔÚWindows¿ØÖÆÌ¨µÄÃüÁîÌáʾ·ûʹÓÃSETÃüÁîÀ´´òÓ¡WINDIRµÄÖµ£º

·                C:\> SET WINDIR
·                windir=C:\WINNT

·         Èç¹ûÄãµÄPCÔÚCÅ̲»ÊÇÆô¶¯Å̵ĵط½Ê¹ÓÃÆô¶¯×°ÔØ»ú£¬ÄãΨһµÄÑ¡ÔñÊÇʹÓÃmy.iniÎļþ¡£

·         Èç¹ûÄãʹÓð²×°ºÍÅäÖÃÏòµ¼°²×°µÄMySQL£¬my.iniÎļþ±»·ÅÔÚMySQLµÄ°²×°Ä¿Â¼¡£Çë²ÎÔÄ2.3.5.14½Ú£¬¡°my.iniÎļþµÄλÖÔ¡£

UnixÉÏÔÚÄÄÀïÖ¸¶¨Ñ¡Ï ÔÚUnixÉÏ£¬mysqld´ÓÏÂÁÐÎļþ£¬Èç¹ûËüÃÇ´æÔڵϰ¡£ÒÔÏÂÁеÄ˳Ðò¶ÁȡѡÏ

·         /etc/my.cnf

È«¾ÖÑ¡Ïî¡£

·         $MYSQL_HOME/my.cnf

·þÎñÆ÷רÓÃÑ¡Ïî¡£

·         defaults-extra-file

--defaults-extra-fileÑ¡ÏîÖ¸¶¨µÄÎļþ¡£

·         ~/.my.cnf

Óû§×¨ÓÃÑ¡Ïî¡£

MYSQL_HOME´ú±í»·¾³±äÁ¿£¬ËüÄÚº¬×ŵ½°üº¬·þÎñÆ÷רÓÃmy.cnfÎļþµÄĿ¼µÄ·¾¶¡£

Èç¹ûÄãÈ·ÐÅmysqldÖ»´ÓÖ¸¶¨Îļþ¶ÁȡѡÏÄã¿ÉÒÔÔÚÆô¶¯·þÎñÆ÷֮ʱÔÚÃüÁîÐÐʹÓÃ--defaults-option×÷ΪµÚÒ»¸öÑ¡Ï

mysqld --defaults-file=your_path_to_my_cnf

Ò»¸ö¸ß¼¶µÄmy.cnfÀý×Ó¡£¼ÙÉèÄãÓÐһ̨Linux¼ÆËã»ú£¬ÓÐ2GBÄÚ´æºÍÈý¸ö60GBÓ²ÅÌ£¨ÔÚĿ¼·¾¶/, /dr2ºÍ/dr3)¡£ÏÂÁÐÀý×ÓÏÔʾ ÁËÔÚmy.cnfÀï¶ÔInnoDB¿ÉÄܵÄÅäÖòÎÊý¡£

[mysqld]
# You can write your other MySQL server options here
# ...
innodb_data_home_dir =
#
# Data files must be able to hold your data and indexes
innodb_data_file_path = /ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend
#
# Set buffer pool size to 50-80% of your computer's memory,
# but make sure on Linux x86 total memory usage is < 2GB
innodb_buffer_pool_size=1G
innodb_additional_mem_pool_size=20M
innodb_log_group_home_dir = /dr3/iblogs
#
innodb_log_files_in_group = 2
#
# Set the log file size to about 25% of the buffer pool size
innodb_log_file_size=250M
innodb_log_buffer_size=8M
#
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=50
#
# Uncomment the next lines if you want to use them
#innodb_thread_concurrency=5

×¢Ò⣬¸ÃÀý×Ó°ÑÁ½¸öÊý¾ÝÎļþ·ÅÔÚ²»Í¬´ÅÅÌÉÏ¡£InnoDB¿ªÊ¼ÓõÚÒ»¸öÊý¾ÝÎļþÌî³ä±í¿Õ¼ä¡£ÔÚһЩÇé¿öÏ£¬Èç¹ûËùÓÐÊý¾Ý²»±»·ÅÖÃÔÚͬһÎïÀí´ÅÅÌÉÏ£¬ÕâÑù½«¸ÄÉÆÊý¾Ý¿âµÄÐÔÄÜ¡£°ÑÈÕÖ¾Îļþ·ÅÔÚÓëÊý¾ÝÎļþ²»Í¬µÄ´ÅÅÌÉ϶ÔÐÔÄÜÊǾ­³£ºÜÓкô¦µÄ¡£ÄãÒ²¿ÉÒÔʹÓÃԭʼ´ÅÅÌ·ÖÇø£¨Ô­Ê¼É豸£©×÷ΪInnoDBÊý¾ÝÎļþ£¬ÕâÑù¿ÉÒÔ¼ÓËÙI/O¡£Çë²ÎÔÄ15.2.14.2½Ú£¬¡°Îª±í¿Õ¼äʹÓÃԭʼÉ豸”¡£

¾¯¸æ£ºÔÚ32λGNU/Linux x86ÉÏ,Äã±ØÐëҪСÐIJ»ÒªÉèÖùý¸ßµÄÄÚ´æÓÃÁ¿¡£glibc¿ÉÄÜÔÊÐí½ø³Ì¶Ñ»ýÔÚÏ̶߳ÑÕ»ÉÏ·¢Õ¹£¬Ëü»áÔì³ÉÄãµÄ·þÎñÆ÷±ÀÀ£¡£Èç¹ûÏÂÁбí´ïʽµÄÖµ½Ó½ü»òÕß³¬¹ý2GB£¬ÏµÍ³»áÃæÁÙΣ»ú£º

innodb_buffer_pool_size
+ key_buffer_size
+ max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)
+ max_connections*2MB

ÿ¸öÏß³ÌʹÓÃÒ»¸ö¶ÑÕ»£¨Í¨³£ÊÇ2MB£¬µ«ÔÚMySQL AB¶þ½øÖÆ·Ö·¢°æÀïÖ»ÓÐ256KB£©²¢ÇÒÔÚ×µÄÇé¿öÏÂҲʹÓÃsort_buffer_size + read_buffer_size¸½¼ÓÄÚ´æ¡£

Äã¿ÉÒÔ×Ô¼º±àÒëMySQL£¬ÔÚ32λWindowsÉÏʹÓøߴï64GBÎïÀíÄÚ´æ¡£Çë²ÎÔÄ15.2.4½Ú£¬¡°InnoDBÆô¶¯Ñ¡Ïî”Àï¶Ôinnodb_buffer_pool_awe_mem_mbµÄÃèÊö¡£

ÈçºÎµ÷ÕûÆäËümysqld·þÎñÆ÷²ÎÊý£¿ÏÂÁÐÖµÊǵäÐ͵ģ¬ÇÒÊÊÓÃÓÚ¶àÊýÓû§£º

[mysqld]
skip-external-locking
max_connections=200
read_buffer_size=1M
sort_buffer_size=1M
#
# Set key_buffer to 5 - 50% of your RAM depending on how much
# you use MyISAM tables, but keep key_buffer_size + InnoDB
# buffer pool size < 80% of your RAM
key_buffer_size=value

15.2.4InnoDBÆô¶¯Ñ¡Ïî

ÕâÒ»½ÚÐðÊöInnoDBÏà¹ØµÄ·þÎñÆ÷Ñ¡ÏËùÓÐÕâЩѡÏî¿ÉÒÔÒÔ--opt_name=valueµÄÐÎʽÔÚÃüÁîÐлòÔÚÑ¡ÏîÎļþÀï±»Ö¸¶¨¡£

·         innodb_additional_mem_pool_size

InnoDBÓÃÀ´´æ´¢Êý¾ÝĿ¼ÐÅÏ¢£¦ÆäËüÄÚ²¿Êý¾Ý½á¹¹µÄÄÚ´æ³ØµÄ´óС¡£ÄãÓ¦ÓóÌÐòÀïµÄ±íÔ½¶à£¬ÄãÐèÒªÔÚÕâÀï·ÖÅäÔ½¶àµÄÄÚ´æ¡£Èç¹ûInnoDBÓùâÁËÕâ¸ö³ØÄÚµÄÄڴ棬InnoDB¿ªÊ¼´Ó²Ù×÷ϵͳ·ÖÅäÄڴ棬²¢ÇÒÍùMySQL´íÎóÈÕ־д¾¯¸æÐÅÏ¢¡£ ĬÈÏÖµÊÇ1MB¡£

·         innodb_autoextend_increment

µ±×Ô¶¯À©Õ¹±í¿Õ¼ä±»ÌîÂú֮ʱ£¬ÎªÀ©Õ¹¶øÔö¼ÓµÄ³ß´ç£¨MBΪµ¥Î»£©¡£ ĬÈÏÖµÊÇ8¡£Õâ¸öÑ¡Ïî¿ÉÒÔÔÚÔËÐÐʱ×÷Ϊȫ¾Öϵͳ±äÁ¿¶ø¸Ä±ä¡£

·         innodb_buffer_pool_awe_mem_mb

Èç¹û»º³å³Ø±»·ÅÔÚ32λWindowsµÄAWEÄÚ´æÀÕâ¸ö²ÎÊý¾ÍÊÇ»º³å³ØµÄ´óС£¨MBΪµ¥Î»£©¡£(½öÔÚ32λWindowsÉÏÏà¹Ø£©Èç¹ûÄãµÄ32λWindows²Ù×÷ϵͳʹÓÃËùνµÄ“µØÖ·´°¿ÚÀ©Õ¹£¨AWE)”Ö§³Ö³¬¹ý4GBÄڴ棬Äã¿ÉÒÔÓÃÕâ¸ö²ÎÊý°ÑInnoDB»º³å³Ø·ÖÅä½øAWEÎïÀíÄÚ´æ¡£Õâ¸ö²ÎÊý×î´óµÄ¿ÉÄÜÖµÊÇ64000¡£Èç¹ûÕâ¸ö²ÎÊý±»Ö¸¶¨ÁË£¬innodb_buffer_pool_sizeÊÇÔÚ32λµØÖ·¿Õ¼äµÄmysqldÄڵĴ°¿Ú£¬InnoDB°ÑÄǸöAWEÄÚ´æÓ³ÉäÉÏÈ¥¡£¶Ôinnodb_buffer_pool_size²ÎÊý£¬Ò»¸ö±È½ÏºÃµÄÖµÊÇ500MB¡£

·         innodb_buffer_pool_size

InnoDBÓÃÀ´»º´æËüµÄÊý¾ÝºÍË÷ÒýµÄÄڴ滺³åÇøµÄ´óС¡£Äã°ÑÕâ¸öÖµÉèµÃÔ½¸ß£¬·ÃÎʱíÖÐÊý¾ÝÐèÒªµÃ´ÅÅÌI/OÔ½ÉÙ¡£ÔÚÒ»¸öרÓõÄÊý¾Ý¿â·þÎñÆ÷ÉÏ£¬Äã¿ÉÒÔÉèÖÃÕâ¸ö²ÎÊý´ï»úÆ÷ÎïÀíÄÚ´æ´óСµÄ80%¡£¾¡¹ÜÈç´Ë£¬»¹ÊDz»Òª°ÑËüÉèÖõÃÌ«´ó£¬ÒòΪ¶ÔÎïÀíÄÚ´æµÄ¾ºÕù¿ÉÄÜÔÚ²Ù×÷ϵͳÉϵ¼ÖÂÄÚ´æµ÷¶È¡£

·         innodb_checksums

InnoDBÔÚËùÓжԴÅÅ̵ÄÒ³Ãæ¶ÁÈ¡ÉÏʹÓÃУÑéºÍÑéÖ¤ÒÔÈ·±£¶îÍâÈÝ´í·ÀÖ¹Ó²¼þË𻵻òÊý¾ÝÎļþ¡£¾¡¹ÜÈç´Ë£¬ÔÚһЩÉÙ¼ûµÄÇé¿öÏ£¨±ÈÈçÔËÐбê×¼¼ì²é֮ʱ£©Õâ¸ö¶îÍâµÄ°²È«ÌØÕ÷ÊDz»±ØÒªµÄ¡£ÔÚÕâЩÇé¿öÏ£¬Õâ¸öÑ¡Ï ĬÈÏÊÇÔÊÐíµÄ£©¿ÉÒÔÓÃ--skip-innodb-checksumsÀ´¹Ø±Õ¡£

·         innodb_data_file_path

µ½µ¥¶ÀÊý¾ÝÎļþºÍËüÃdzߴçµÄ·¾¶¡£Í¨¹ý°Ñinnodb_data_home_dirÁ¬½Óµ½ÕâÀïÖ¸¶¨µÄÿ¸ö·¾¶£¬µ½Ã¿¸öÊý¾ÝÎļþµÄÍêÕûĿ¼·¾¶¿É±»»ñµÃ¡£Îļþ´óСͨ¹ý¸ø³ß´çֵβ¼ÓM»òGÒÔMB»òÕßGB£¨1024MB£©Îªµ¥Î»±»Ö¸¶¨¡£Îļþ³ß´çµÄºÍÖÁÉÙÊÇ10MB¡£ÔÚһЩ²Ù×÷ϵͳÉÏ£¬Îļþ±ØÐëСÓÚ2GB¡£Èç¹ûÄãûÓÐÖ¸¶¨innodb_data_file_path£¬¿ªÊ¼µÄĬÈÏÐÐΪÊÇ´´½¨Ò»¸öµ¥¶ÀµÄ´óС10MBÃûΪibdata1µÄ×ÔÀ©Õ¹Êý¾ÝÎļþ¡£ÔÚÄÇЩ֧³Ö´óÎļþµÄ²Ù×÷ϵͳÉÏ£¬Äã¿ÉÒÔÉèÖÃÎļþ´óС³¬¹ý4GB¡£ÄãÒ²¿ÉÒÔʹÓÃԭʼ´ÅÅÌ·ÖÇø×÷ΪÊý¾ÝÎļþ£¬Çë²ÎÔÄ15.2.14.2½Ú£¬¡°Îª±í¿Õ¼äʹÓÃԭʼÉ豸”¡£

·         innodb_data_home_dir

Ŀ¼·¾¶¶ÔËùÓÐInnoDBÊý¾ÝÎļþµÄ¹²Í¬²¿·Ö¡£Èç¹ûÄã²»ÉèÖÃÕâ¸öÖµ£¬ ĬÈÏÊÇMySQLÊý¾ÝĿ¼¡£ÄãÒ²¿ÉÒÔÖ¸¶¨Õâ¸öֵΪһ¸ö¿Õ×Ö·û´®£¬ÔÚÕâÖÖÇé¿öÏ£¬Äã¿ÉÒÔÔÚinnodb_data_file_pathÖÐʹÓþø¶ÔÎļþ·¾¶¡£

·         innodb_doublewrite

ĬÈϵأ¬InnoDB´æ´¢ËùÓÐÊý¾ÝÁ½´Î£¬µÚÒ»´Î´æ´¢µ½doublewrite»º³å£¬È»ºó´æ´¢µ½È·ÊµµÄÊý¾ÝÎļþ¡£Õâ¸öÑ¡Ïî¿ÉÒÔ±»ÓÃÀ´½ûÖ¹Õâ¸ö¹¦ÄÜ¡£ÀàËÆÓÚinnodb_checksums£¬Õâ¸öÑ¡Ïî ĬÈÏÊÇÔÊÐíµÄ£»ÒòΪ±ê×¼¼ì²é»òÔÚ¶Ô¶¥¼¶ÐÔÄܵÄÐèÒª³¬¹ý¶ÔÊý¾ÝÍêÕûÐÔ»ò¿ÉÄܹÊÕϵĹØ×¢Ö®Ê±£¬Õâ¸öÑ¡ÏîÓÃ--skip-innodb-doublewriteÀ´¹Ø±Õ¡£

·         innodb_fast_shutdown

Èç¹ûÄã°ÑÕâ¸ö²ÎÊýÉèÖÃΪ0£¬InnoDBÔڹرÕ֮ǰ×öÒ»¸öÍêÈ«¾»»¯ºÍÒ»¸ö²åÈ뻺³åºÏ²¢¡£ÕâЩ²Ù×÷Òª»¨¼¸·ÖÖÓʱ¼ä£¬ÉèÖÃÔÚ¼«¶ËÇé¿öÏÂÒª¼¸¸öСʱ¡£Èç¹ûÄãÉèÖÃÕâ¸ö²ÎÊýΪ1£¬InnoDBÔڹرÕÖ®Ê±Ìø¹ýÕâЩ²Ù×÷¡£ ĬÈÏֵΪ1¡£Èç¹ûÄãÉèÖÃÕâ¸öֵΪ2 (ÔÚNetwareÎÞ´ËÖµ)£¬ InnoDB½«Ë¢ÐÂËüµÄÈÕ־ȻºóÀ乨»ú£¬·Â·ðMySQL±ÀÀ£Ò»Ñù¡£ÒÑÌá½»µÄÊÂÎñ²»»á±»¶ªÊ§£¬µ«ÔÚÏÂÒ»´ÎÆô¶¯Ö®Ê±»á×öÒ»¸ö±ÀÀ£»Ö¸´¡£

·         innodb_file_io_threads

InnoDBÖÐÎļþI/OÏ̵߳ÄÊýÁ¿¡£Õý³£µØ£¬Õâ¸ö²ÎÊýÊÇÓà ĬÈϵģ¬Ä¬ÈÏÖµÊÇ4£¬µ«ÊÇ´óÊýÖµ¶ÔWindows´ÅÅÌI/OÓÐÒæ¡£ÔÚUnixÉÏ£¬Ôö¼ÓÕâ¸öÊýûÓÐЧ¹û£¬InnoDB×ÜÊÇʹÓÃĬÈÏÖµ¡£

·         innodb_file_per_table

Õâ¸öÑ¡ÏîÖÂʹInnoDBÓÃ×Ô¼ºµÄ.ibdÎļþΪ´æ´¢Êý¾ÝºÍË÷Òý´´½¨Ã¿Ò»¸öÐÂ±í£¬¶ø²»ÊÇÔÚ¹²Ïí±í¿Õ¼äÖд´½¨¡£Çë²ÎÔÄ15.2.6.6½Ú£¬¡°Ê¹ÓÃPer-Table±í¿Õ¼ä”¡£

·         innodb_flush_log_at_trx_commit

µ±innodb_flush_log_at_trx_commit±» ÉèÖÃΪ0£¬ÈÕÖ¾»º³åÿÃëÒ»´ÎµØ±»Ð´µ½ÈÕÖ¾Îļþ£¬²¢ÇÒ¶ÔÈÕÖ¾Îļþ×öµ½´ÅÅ̲Ù×÷µÄˢУ¬µ«ÊÇÔÚÒ»¸öÊÂÎñÌá½»²»×öÈκβÙ×÷¡£µ±Õâ¸öֵΪ1£¨Ä¬ÈÏÖµ£©Ö®Ê±£¬ÔÚÿ¸öÊÂÎñÌύʱ£¬ÈÕÖ¾»º³å±»Ð´µ½ÈÕÖ¾Îļþ£¬¶ÔÈÕÖ¾Îļþ×öµ½´ÅÅ̲Ù×÷µÄ ˢС£µ±ÉèÖÃΪ2֮ʱ£¬ÔÚÿ¸öÌá½»£¬ÈÕÖ¾»º³å±»Ð´µ½Îļþ£¬µ«²»¶ÔÈÕÖ¾Îļþ×öµ½´ÅÅ̲Ù×÷µÄˢС£¾¡¹ÜÈç´Ë£¬ÔÚ¶ÔÈÕÖ¾ÎļþµÄË¢ÐÂÔÚֵΪ2µÄÇé¿öҲÿÃë·¢ÉúÒ»´Î¡£ÎÒÃDZØÐë×¢Òâµ½£¬ÒòΪ½ø³Ì°²ÅÅÎÊÌ⣬ÿÃëÒ»´ÎµÄ ˢв»ÊÇ100%±£Ö¤Ã¿Ãë¶¼·¢Éú¡£Äã¿ÉÒÔͨ¹ýÉèÖÃÕâ¸öÖµ²»Îª1À´»ñµÃ½ÏºÃµÄÐÔÄÜ£¬µ«ËæÖ®Äã»áÔÚÒ»´Î±ÀÀ£ÖÐËðʧ¶þ·ÖÖ®Ò»¼ÛÖµµÄÊÂÎñ¡£Èç¹ûÄãÉèÖÃÕâ¸öֵΪ0£¬ÄÇôÈκÎmysqld½ø³ÌµÄ±ÀÀ£»áɾ³ý±ÀÀ£Ç°×îºóÒ»ÃëµÄÊÂÎñ£¬Èç¹ûÄãÉèÖÃÕâ¸öֵΪ2£¬ÄÇôֻÓвÙ×÷ϵͳ±ÀÀ£»òµôµç²Å»áɾ³ý×îºóÒ»ÃëµÄÊÂÎñ¡£¾¡¹ÜÈç´Ë£¬InnoDBµÄ±ÀÀ£»Ö¸´²»ÊÜÓ°Ï죬¶øÇÒÒòΪÕâÑù±ÀÀ£»Ö¸´¿ªÊ¼×÷Óöø²»¿¼ÂÇÕâ¸öÖµ¡£×¢Ò⣬Ðí¶à²Ù×÷ϵͳºÍһЩ´ÅÅÌÓ²¼þ»áÆÛÆ­ ˢе½´ÅÅ̲Ù×÷¡£¾¡¹ÜË¢ÐÂûÓнøÐУ¬Äã¿ÉÒÔ¸æËßmysqldË¢ÐÂÒѾ­½øÐС£¼´Ê¹ÉèÖÃÕâ¸öֵΪ1£¬ÊÂÎñµÄ³Ö¾Ã³Ì¶È²»±»±£Ö¤£¬ÇÒÔÚ×Çé¿öϵôµçÉõÖÁ»áÆÆ»µInnoDBÊý¾Ý¿â¡£ÔÚSCSI´ÅÅÌ¿ØÖÆÆ÷ÖУ¬»òÔÚ´ÅÅÌ×ÔÉíÖУ¬Ê¹ÓÃÓÐºó±¸µç³ØµÄ´ÅÅÌ»º´æ»á¼ÓËÙÎļþ ˢв¢ÇÒʹµÃ²Ù×÷¸ü°²È«¡£ÄãÒ²¿ÉÒÔÊÔ×ÅʹÓÃUnixÃüÁîhdparmÀ´ÔÚÓ²¼þ»º´æÖнûÖ¹´ÅÅÌд»º´æ£¬»òʹÓÃÆäËüһЩ¶ÔÓ²¼þÌṩÉÌרÓõÄÃüÁî¡£Õâ¸öÑ¡ÏîµÄ ĬÈÏÖµÊÇ1¡£

·         innodb_flush_method

Õâ¸öÑ¡ÏîÖ»ÔÚUnixϵͳÉÏÓÐЧ¡£Èç¹ûÕâ¸öÑ¡Ïî±»ÉèÖÃΪfdatasync £¨Ä¬ÈÏÖµ£©£¬InnoDBʹÓÃfsync()À´Ë¢ÐÂÊý¾ÝºÍÈÕÖ¾Îļþ¡£Èç¹û±»ÉèÖÃΪO_DSYNC£¬InnoDBʹÓÃO_SYNCÀ´´ò¿ª²¢Ë¢ÐÂÈÕÖ¾Îļþ£¬µ«Ê¹ÓÃfsync()À´ Ë¢ÐÂÊý¾ÝÎļþ¡£Èç¹ûO_DIRECT±»Ö¸¶¨ÁË£¨ÔÚһЩGNU/Linux°æ±¾ÉÌ¿ÉÓã©£¬InnoDBʹÓÃO_DIRECTÀ´´ò¿ªÊý¾ÝÎļþ£¬²¢Ê¹ÓÃfsync()À´Ë¢ÐÂÊý¾ÝºÍÈÕÖ¾Îļþ¡£×¢Ò⣬InnoDBʹÓÃfsync()À´Ìæ´úfdatasync()£¬²¢ÇÒËü ĬÈϲ»Ê¹ÓÃO_DSYNC£¬ÒòΪÕâ¸öÖµÔÚÐí¶àUnix±äÖÖÉÏÒѾ­·¢ÉúÎÊÌâ¡£

·         innodb_force_recovery

¾¯¸æ£ºÕâ¸öÑ¡Ïî½öÔÚÒ»¸ö½ô¼±Çé¿öϱ»¶¨Ò壬µ±Ê±ÄãÏëÒª´ÓË𻵵ÄÊý¾Ý¿âת´¢±í¡£¿ÉÄܵÄֵΪ´Ó1µ½6¡£ÕâЩֵµÄÒâ˼ÔÚ15.2.8.1½Ú£¬¡°Ç¿Öƻָ´”ÖÐÐðÊö¡£×÷Ϊһ¸ö°²È«´ëÊ©£¬µ±Õâ¸öÑ¡ÏîÖµ´óÓÚÁã֮ʱ£¬InnoDB×èÖ¹Óû§ÐÞ¸ÄÊý¾Ý¡£

·         innodb_lock_wait_timeout

InnoDBÊÂÎñÔÚ±»»Ø¹ö֮ǰ¿ÉÒԵȴýÒ»¸öËø¶¨µÄ³¬Ê±ÃëÊý¡£InnoDBÔÚËü×Ô¼ºµÄ Ëø¶¨±íÖÐ×Ô¶¯¼ì²âÊÂÎñËÀËø²¢ÇһعöÊÂÎñ¡£InnoDBÓÃLOCK TABLESÓï¾ä×¢Òâµ½Ëø¶¨ÉèÖá£Ä¬ÈÏÖµÊÇ50Ãë¡£

ΪÔÚÒ»¸ö¸´Öƽ¨Á¢ÖÐ×î´ó¿ÉÄܵij־ó̶ȺÍÁ¬¹áÐÔ£¬ÄãÓ¦¸ÃÔÚÖ÷·þÎñÆ÷ÉϵÄmy.cnfÎļþÀïʹÓÃinnodb_flush_log_at_trx_commit=1ºÍsync-binlog=1¡£

·         innodb_locks_unsafe_for_binlog

Õâ¸öÑ¡ÏîÔÚInnoDBËÑË÷ºÍË÷ÒýɨÃèÖйرÕÏÂÒ»¼üËø¶¨¡£Õâ¸öÑ¡ÏîµÄ ĬÈÏÖµÊǼ٣¨false£©¡£

Õý³£µØ£¬InnoDBʹÓÃÒ»¸ö±»³ÆÎªnext-key lockingµÄËã·¨¡£µ±ËÑË÷»òɨÃèÒ»¸ö±íË÷Òý֮ʱ£¬InnoDBÒÔÕâÑùÒ»ÖÖ·½Ê½ÊµÐÐÐм¶Ëø¶¨£¬Ëü¶ÔÈκÎÓöµ½µÄË÷Òý¼Ç¼ÉèÖù²ÏíµÄ»ò¶ÀÕ¼µÄËø¶¨¡£Òò´Ë£¬Ðм¶Ëø¶¨Êµ¼ÊÊÇË÷Òý¼ÇÂ¼Ëø¶¨¡£InnoDB¶ÔË÷Òý¼Ç¼ÉèÖõÄËø¶¨Ò²Ó°Ïì±»Ëø¶¨Ë÷Òý¼Ç¼֮ǰµÄ“gap”¡£Èç¹ûÒ»¸öÓû§¶ÔijһË÷ÒýÄڵļǼRÓÖ¹²ÏíµÄ»ò¶ÀÕ¼µÄËø¶¨£¬ÁíÒ»¸öÓû§²»ÄÜÁ¢¼´ÔÚR֮ǰÒÔË÷ÒýµÄ˳Ðò²åÈëÒ»¸öеÄË÷Òý¼Ç¼¡£Õâ¸öÑ¡Ïîµ¼ÖÂInnoDB²»ÔÚËÑË÷»òË÷ÒýɨÃèÖÐʹÓÃÏÂÒ» ¼üËø¶¨¡£ÏÂÒ»¼üËø¶¨ÈÔÈ»±»ÓÃÀ´È·±£Íâ¼üÇ¿ÖÆ¼°Öظ´¼üºË²é¡£×¢Ò⣬ʹÓÃÕâ¸öÑ¡Ïî¿ÉÄܻᵼÖÂһЩ¹îÒìµÄÎÊÌ⣺¼ÙÉèÄãÏëÒªÓÃÖµ´óÓÚ100µÄ±êʶ·û´Ó×Ó±íÀï¶ÁÈ¡²¢Ëø¶¨ËùÓеÄ×ӼǼ£¬Í¬Ê± ÏòËæºóÔÚÑ¡¶¨µÄÐиüÐÂһЩÁУº

SELECT * FROM child WHERE id > 100 FOR UPDATE;

¼ÙÉèÔÚidÁÐÓÐÒ»¸öË÷Òý¡£²éѯ´Óid´óÓÚ100µÄµÚÒ»¸ö¼Ç¼¿ªÊ¼É¨ÃèË÷Òý¡£Èç¹ûÔÚË÷Òý¼Ç¼ÉϵÄËø¶¨²»°ÑÔÚ¼ä϶´¦Éú³ÉµÄ²åÈëÅųýËø¶¨£¬Í¬Ê±Ò»¸öÐÂÐб»²å½ø±íÖС£Èç¹ûÄãÔÚͬһ¸öÊÂÎñÖ®ÄÚÖ´ÐÐͬÑùµÄSELECT£¬Äã»áÔÚ²éѯ·µ»ØµÄ½á¹û°üÀï¿´µ½Ò»¸öÐÂÐС£ÕâÒ²Òâζ×Å£¬Èç¹ûÐÂÌõÄ¿±»¼Ó½øÊý¾Ý¿â£¬InnoDB²»±£Ö¤Á¬ÐøÐÔ£»¾¡¹ÜÈç´Ë£¬ ¶ÔÓ¦Á¬ÐøÐÔÈÔ±»±£Ö¤¡£Òò´Ë£¬Èç¹ûÕâ¸öÑ¡ÏʹÓã¬InnoDBÔÚ´ó¶àÊý¹ÂÁ¢¼¶±ð±£Ö¤READ COMMITTED¡£

Õâ¸öÑ¡ÏîÉõÖÁ¸ü²»°²È«¡£InnoDBÔÚÒ»¸öUPDATE»òDELETEÖÐÖ»Ëø¶¨Ëü¸üлòɾ³ýµÄÐС£Õâ´ó´ó¼õÉÙÁËËÀËøµÄ¿ÉÄÜÐÔ£¬µ«ÊÇ¿ÉÒÔ·¢ÉúËÀËø¡£×¢Ò⣬¼´Ê¹ÔÚµ±ÀàËÆµÄ²Ù×÷Ó°Ï첻ͬÐÐʱµÄÇé¿öÏ£¬Õâ¸öÑ¡ÏîÈÔÈ»²»ÔÊÐíÖîÈçUPDATEÕâÑùµÄ²Ù×÷ѹµ¹ÏàËÆÑ¡Ï±ÈÈçÁíÒ»¸öUPDATE£©¡£¿¼ÂÇÏÂÁÐÀý×Ó£º

CREATE TABLE A(A INT NOT NULL, B INT);
INSERT INTO A VALUES (1,2),(2,3),(3,2),(4,3),(5,2);
COMMIT;

Èç¹ûÒ»¸öÁ¬½ÓÖ´ÐÐÒ»¸ö²éѯ£º

SET AUTOCOMMIT = 0;
UPDATE A SET B = 5 WHERE B = 3;

²¢ÇÒÆäËüÁ¬½Ó¸ú×ŵÚÒ»¸öÁ¬½ÓÖ´ÐÐÆäËü²éѯ£º

SET AUTOCOMMIT = 0;
UPDATE A SET B = 4 WHERE B = 2;

½Ó×Ųéѯ2ÒªµÈ²éѯ1µÄÌá½»»ò»Ø¹ö£¬ÒòΪ²éѯ1¶ÔÐУ¨2£¬3£©ÓÐÒ»¸ö¶ÀÕ¼µÄËø¶¨£¬²¢ÇÒ²éѯ2ÔÚɨÃèÐеÄͬʱҲÊÔ×ŶÔËü²»ÄÜËø¶¨µÄͬһ¸öÐУ¨2£¬3£©²Éȡһ¸ö¶ÀÕ¼µÄËø¶¨¡£ÕâÊÇÒòΪµ±innodb_locks_unsafe_for_binlogÑ¡ÏʹÓÃ֮ʱ£¬²éѯ2Ê×ÏȶÔÒ»¸öÐвÉȡһ¸ö¶ÀÕ¼µÄËø¶¨£¬È»ºóÈ·¶¨ÊÇ·ñÕâ¸öÐÐÊôÓÚ½á¹û°ü£¬²¢ÇÒÈç¹û²»ÊôÓÚ£¬¾ÍÊͷŲ»±ØÒªµÄËø¶¨¡£

Òò´Ë£¬²éѯ1°´ÈçÏÂÖ´ÐУº

x-lock(1,2)
unlock(1,2)
x-lock(2,3)
update(2,3) to (2,5)
x-lock(3,2)
unlock(3,2)
x-lock(4,3)
update(4,3) to (4,5)
x-lock(5,2)
unlock(5,2)

²¢ÇÒ²éѯ2°´ÈçÏÂÖ´ÐУº

x-lock(1,2)
update(1,2) to (1,4)
x-lock(2,3) - µÈ´ý²éѯ1Ìá½»»ò»Ø¹ö

·         innodb_log_arch_dir

Èç¹ûÎÒÃÇʹÓÃÈÕÖ¾µµ°¸£¬±»ÍêÕûдÈëµÄÈÕÖ¾ÎļþËùÔÚµÄĿ¼Ҳ±»¹éµµ¡£Õâ¸ö²ÎÊýÖµÈç¹û±»Ê¹ÓÃÁË£¬Ó¦¸Ã±»ÉèÖõÃÓëinnodb_log_group_home_dirÒ»Ñù¡£¾¡¹ÜÈç´Ë£¬Ëü²»ÊDZØÐèµÄ¡£

·         innodb_log_archive

Õâ¸öÖµµ±Ç°±»ÉèΪ0¡£ÒòΪMySQLʹÓÃËü×Ô¼ºµÄÈÕÖ¾Îļþ´Ó±¸·ÝÀ´»Ö¸´£¬ËùÒÔµ±Ç°Ã»ÓбØÒªÀ´¹éµµInnoDBÈÕÖ¾Îļþ¡£Õâ¸öÑ¡ÏîµÄ ĬÈÏÖµÊÇ0¡£

·         innodb_log_buffer_size

InnoDBÓÃÀ´Íù´ÅÅÌÉϵÄÈÕÖ¾Îļþд²Ù×÷µÄ»º³åÇøµÄ´óС¡£Ã÷ÖǵÄÖµÊÇ´Ó1MBµ½8MB¡£ ĬÈϵÄÊÇ1MB¡£Ò»¸ö´óµÄÈÕÖ¾»º³åÔÊÐí´óÐÍÊÂÎñÔËÐжø²»ÐèÒªÔÚÊÂÎñÌύ֮ǰÍù´ÅÅÌдÈÕÖ¾¡£Òò´Ë£¬Èç¹ûÄãÓдóÐÍÊÂÎñ£¬Ê¹ÈÕÖ¾»º³åÇø¸ü´óÒÔ½ÚÔ¼´ÅÅÌI/O¡£

·         innodb_log_file_size

ÔÚÈÕÖ¾×éÀïÿ¸öÈÕÖ¾ÎļþµÄ´óС¡£ÔÚ32λ¼ÆËã»úÉÏÈÕÖ¾ÎļþµÄºÏ²¢´óС±ØÐëÉÙÓÚ4GB¡£ ĬÈÏÊÇ5MB¡£Ã÷ÖǵÄÖµ´Ó1MBµ½N·ÖÖ®Ò»»º³å³Ø´óС£¬ÆäÖÐNÊÇ×éÀïÈÕÖ¾ÎļþµÄÊýÄ¿¡£ÖµÔ½´ó£¬ÔÚ»º³å³ØÔ½ÉÙÐèÒª¼ì²éµãË¢ÐÂÐÐΪ£¬ÒÔ½ÚÔ¼´ÅÅÌI/O¡£µ«¸ü´óµÄÈÕÖ¾ÎļþÒ²ÒâζÕâÔÚ±ÀÀ£Ê±»Ö¸´µÃ¸üÂý¡£

·         innodb_log_files_in_group

ÔÚÈÕÖ¾×éÀïÈÕÖ¾ÎļþµÄÊýÄ¿¡£InnoDBÒÔÑ­»··½Ê½Ð´½øÎļþ¡£Ä¬ÈÏÊÇ2£¨ÍƼö£©¡£

·         innodb_log_group_home_dir

µ½InnoDBÈÕÖ¾ÎļþµÄĿ¼·¾¶¡£Ëü±ØÐëÓкÍinnodb_log_arch_dirÒ»ÑùµÄÖµ¡£Èç¹ûÄã²»Ö¸¶¨ÈκÎInnoDBÈÕÖ¾²ÎÊý£¬ ĬÈϵÄÊÇÔÚMySQLÊý¾ÝĿ¼Àï´´½¨Á½¸ö5MB´óСÃûΪib_logfile0ºÍib_logfile1µÄÎļþ¡£

·         innodb_max_dirty_pages_pct

ÕâÊÇÒ»¸ö·¶Î§´Ó0µ½100µÄÕûÊý¡£Ä¬ÈÏÊÇ90¡£InnoDBÖеÄÖ÷Ïß³ÌÊÔ×Å´Ó»º³å³ØÐ´Ò³Ã棬ʹµÃÔàÒ³£¨Ã»Óб»Ð´µÄÒ³Ãæ£©µÄ°Ù·Ö±È²»³¬¹ýÕâ¸öÖµ¡£Èç¹ûÄãÓÐSUPERȨÏÞ£¬Õâ¸ö°Ù·Ö±È¿ÉÒÔÔÚ·þÎñÆ÷ÔËÐÐʱ°´ÏÂÃæÀ´¸Ä±ä£º

SET GLOBAL innodb_max_dirty_pages_pct = value;

·         innodb_max_purge_lag

Õâ¸öÑ¡Ïî¿ØÖÆÔÚ¾»»¯²Ù×÷±»Öͺó֮ʱ£¬ÈçºÎÑÓ³ÙINSERT, UPDATEºÍDELETE²Ù×÷¡££¨Çë²ÎÔÄ15.2.12½Ú£¬¡°¶à°æ±¾µÄʵʩ”£©¡£Õâ¸ö²ÎÊýµÄ ĬÈÏÖµÊÇÁ㣬ÒâΪÎÞÑÓ³Ù¡£Õâ¸öÑ¡Ïî¿ÉÒÔÔÚÔËÐÐʱ×÷Ϊȫ¾Öϵͳ±äÁ¿¶ø±»¸Ä±ä¡£

InnoDBÊÂÎñϵͳά³ÖÒ»¸öÊÂÎñÁÐ±í£¬¸ÃÁбíÓб»UPDATE»òDELETE²Ù×÷±ê־Ϊɾ³ýµÄË÷Òý¼Ç¼¡£ÈÃÕâ¸öÁбíµÄ³¤¶ÈΪpurge_lag¡£µ±purge_lag³¬¹ýinnodb_max_purge_lag֮ʱ£¬Ã¿¸öINSERT, UPDATEºÍDELETE²Ù×÷ÑÓ³Ù ((purge_lag/innodb_max_purge_lag)*10)-5ºÁÃë¡£ÔÚ¾»»¯Åú´¦ÀíµÄ¿ªÊ¼£¬ÑÓ³Ùÿ¸ô10Ãë¼ÆËã¡£Èç¹ûÒòΪһ¸ö¾ÉµÄ¿ÉÒÔ¿´µ½Ðб»¾»»¯µÄÒ»ÖµĶÁ²é¿´£¬ ɾ³ý²Ù×÷²»±»ÑÓ³Ù¡£

¶ÔÓÐÎÊÌâµÄ¹¤×÷Á¿£¬µäÐÍÉèÖÿÉÄÜÊÇ1°ÙÍò£¬¼ÙÉèÎÒÃǵÄÊÂÎñºÜС£¬Ö»ÓÐ100×Ö½Ú´óС£¬ÎÒÃǾͿÉÒÔÔÊÐíÔÚÎÒÃǵıíÖ®ÖÐÓÐ100MBδ¾»»¯µÄÐС£

·         innodb_mirrored_log_groups

ÎÒÃÇΪÊý¾Ý¿â±£³ÖµÄÈÕÖ¾×éÄÚͬÑù¿½±´µÄÊýÁ¿¡£µ±Ç°Õâ¸öÖµÓ¦¸Ã±»ÉèΪ1¡£

·         innodb_open_files

ÔÚInnoDBÖУ¬Õâ¸öÑ¡Ïî½öÓëÄãʹÓöà±í¿Õ¼äʱÓйء£ËüÖ¸¶¨InnoDBÒ»´Î¿ÉÒÔ±£³Ö´ò¿ªµÄ.ibdÎļþµÄ×î´óÊýÄ¿¡£×îСֵÊÇ10¡£ ĬÈÏÖµ300¡£

¶Ô.ibdÎļþµÄÎļþÃèÊö·ûÊǽö¶ÔInnoDBµÄ¡£ËüÃǶÀÁ¢ÓÚÄÇЩÓÉ--open-files-limit·þÎñÆ÷Ñ¡ÏîÖ¸¶¨µÄÃèÊö·û£¬ÇÒ²»Ó°Ïì±í»º´æµÄ²Ù×÷¡£

·         innodb_status_file

Õâ¸öÑ¡ÏîÈÃInnoDBΪÖÜÆÚµÄSHOW INNODB STATUSÊä³ö´´½¨Ò»¸öÎļþ<datadir>/innodb_status.<pid>¡£

·         innodb_support_xa

µ±±»ÉèÖÃΪON»òÕß1£¨Ä¬Èϵأ©£¬Õâ¸ö±äÁ¿ÔÊÐíInnoDBÖ§³ÖÔÚXAÊÂÎñÖÐµÄ Ë«ÏòÌá½»¡£ÔÊÐíinnodb_support_xaµ¼ÖÂÒ»¸ö¶îÍâµÄ¶ÔÊÂÎñ×¼±¸µÄ´ÅÅÌˢС£Èç¹ûÄã¶ÔʹÓÃXA²¢²»¹ØÐÄ£¬Äã¿ÉÒÔͨ¹ýÉèÖÃÕâ¸öÑ¡ÏîΪOFF»ò0À´½ûÖ¹Õâ¸ö±äÁ¿£¬ÒÔ¼õÉÙ´ÅÅÌ Ë¢ÐµĴÎÊý²¢»ñµÃ¸üºÃµÄInnoDBÐÔÄÜ¡£

·         innodb_table_locks

InnoDBÖØÊÓLOCK TABLES£¬Ö±µ½ËùÓÐÆäËüÏß³ÌÒѾ­ÊÍ·ÅËûÃÇËùÓжԱíµÄËø¶¨£¬MySQL²Å´ÓLOCK TABLE .. WRITE·µ»Ø¡£Ä¬ÈÏÖµÊÇ1£¬ÕâÒâΪLOCK TABLESÈÃInnoDBÄÚ²¿Ëø¶¨Ò»¸ö±í¡£ÔÚʹÓÃAUTOCOMMIT=1µÄÓ¦ÓÃÀInnoDBµÄÄÚ²¿±íËø¶¨»áµ¼ÖÂËÀËø¡£Äã¿ÉÒÔÔÚmy.cnfÎļþ£¨WindowsÉÏÊÇmy.iniÎļþ£©ÀïÉèÖÃinnodb_table_locks=0 À´ Ïû³ýÕâ¸öÎÊÌâ¡£

·         innodb_thread_concurrency

InnoDBÊÔ×ÅÔÚInnoDBÄÚ±£³Ö²Ù×÷ϵͳÏ̵߳ÄÊýÁ¿ÉÙÓÚ»òµÈÓÚÕâ¸ö²ÎÊý¸ø³öµÄÏÞÖÆ¡£Èç¹ûÓÐÐÔÄÜÎÊÌ⣬²¢ÇÒSHOW INNODB STATUSÏÔʾÐí¶àÏß³ÌÔڵȴýÐźţ¬¿ÉÒÔÈÃÏ߳̓thrashing” £¬²¢ÇÒÉèÖÃÕâ¸ö²ÎÊý¸üС»ò¸ü´ó¡£Èç¹ûÄãµÄ¼ÆËã»úÓжà¸ö´¦ÀíÆ÷ºÍ´ÅÅÌ£¬Äã¿ÉÒÔÊÔ×ÅÕâ¸öÖµ¸ü´óÒÔ¸üºÃµØÀûÓüÆËã»úµÄ×ÊÔ´¡£Ò»¸öÍÆ¼öµÄÖµÊÇϵͳÉÏ´¦ÀíÆ÷ºÍ´ÅÅ̵ĸöÊýÖ®ºÍ¡£ÖµÎª500»ò±È500´ó»á½ûÖ¹ µ÷Óò¢·¢¼ì²é¡£Ä¬ÈÏÖµÊÇ20£¬²¢ÇÒÈç¹ûÉèÖôóÓÚ»òµÈÓÚ20£¬²¢·¢¼ì²é½«±»½ûÖ¹¡£

·         innodb_status_file

Õâ¸öÑ¡ÏîÈÃInnoDBΪÖÜÆÚµÄSHOW INNODB STATUSÊä³ö´´½¨Ò»¸öÎļþ<datadir>/innodb_status.<pid>¡£

15.2.5. ´´½¨InnoDB±í¿Õ¼ä

15.2.5.1. ´¦ÀíInnoDB³õʼ»¯ÎÊÌâ

¼ÙÉèÄãÒѾ­°²×°ÁËMySQL£¬²¢ÇÒÒѾ­±à¼­ÁËÑ¡ÏîÎļþ£¬Ê¹µÃËü°üº¬±ØÒªµÄInnoDBÅäÖòÎÊý¡£ÔÚÆô¶¯MySQL֮ǰ£¬ÄãÓ¦¸ÃÑéÖ¤ÄãΪInnoDBÊý¾ÝÎļþºÍÈÕÖ¾ÎļþÖ¸¶¨µÄĿ¼ÊÇ·ñ´æÔÚ£¬²¢ÇÒMySQLÓзÃÎÊÕâЩĿ¼µÄȨÏÞ¡£InnoDB²»ÄÜ´´½¨Ä¿Â¼£¬Ö»ÄÜ´´½¨Îļþ¡£Ò²¼ì²éÄãÓÐ×ã¹»µÄ¿Õ¼äÀ´·ÅÊý¾ÝºÍÈÕÖ¾Îļþ¡£

µ±´´½¨InnoDBÊý¾Ý¿âʱ£¬×îºÃ´ÓÃüÁîÌáʾ·ûÔËÐÐMySQL·þÎñÆ÷mysqld£¬ ¶ø²»Òª´Ómysqld_safe°ü×°»ò×÷ΪWindowsµÄ·þÎñÀ´ÔËÐС£µ±Äã´ÓÃüÁîÌáʾ·ûÔËÐУ¬Äã¿É¿´¼ûmysqld´òӡʲôÒÔ¼°·¢ÉúÁËʲô¡£ÔÚUnixÉÏ£¬Ö»ÐèÒªµ÷ÓÃmysqld¡£ÔÚWindowsÉÏ£¬Ê¹ÓÃ--consoleÑ¡Ïî¡£

µ±ÔÚÑ¡ÏîÎļþÀï³õʼµØÅäÖÃInnoDBºó£¬¿ªÊ¼Æô¶¯MySQL·þÎñÆ÷֮ʱ£¬InnoDB´´½¨Ò»¸öÊý¾ÝÎļþºÍÈÕÖ¾Îļþ¡£InnoDB´òÓ¡ÈçÏÂһЩ¶«Î÷£º

InnoDB: The first specified datafile /home/heikki/data/ibdata1
did not exist:
InnoDB: a new database to be created!
InnoDB: Setting file /home/heikki/data/ibdata1 size to 134217728
InnoDB: Database physically writes the file full: wait...
InnoDB: datafile /home/heikki/data/ibdata2 did not exist:
new to be created
InnoDB: Setting file /home/heikki/data/ibdata2 size to 262144000
InnoDB: Database physically writes the file full: wait...
InnoDB: Log file /home/heikki/data/logs/ib_logfile0 did not exist:
new to be created
InnoDB: Setting log file /home/heikki/data/logs/ib_logfile0 size
to 5242880
InnoDB: Log file /home/heikki/data/logs/ib_logfile1 did not exist:
new to be created
InnoDB: Setting log file /home/heikki/data/logs/ib_logfile1 size
to 5242880
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
InnoDB: Started
mysqld: ready for connections

Ò»¸öеÄInnoDBÊý¾Ý¿â±»´´½¨ÁË¡£Äã¿ÉÒÔÓÃmysqlÕâÑùͨ³£µÄMySQL¿Í»§¶Ë³ÌÐòÁ¬½Óµ½MySQL·þÎñÆ÷¡£µ±ÄãÓÃmysqladmin shutdown¹Ø±ÕMySQL·þÎñÆ÷֮ʱ£¬Êä³öÀàËÆÈçÏ£º

010321 18:33:34  mysqld: Normal shutdown
010321 18:33:34  mysqld: Shutdown Complete
InnoDB: Starting shutdown...
InnoDB: Shutdown completed

Äã¿ÉÒÔ¿´Êý¾ÝÎļþºÍÈÕÖ¾Îļþ£¬²¢ÇÒÄã¿ÉÒÔ¿´¼ûÎļþ±»´´½¨¡£ÈÕ־Ŀ¼Ҳ°üº¬Ò»¸öÃûΪib_arch_log_0000000000µÄСÎļþ¡£Õâ¸öÎļþÊÇÊý¾Ý¿â±»´´½¨µÄ½á¹û£¬Êý¾Ý¿â±»´´½¨Ö®ºóInnoDBÇжÏÈÕÖ¾¹éµµ¡£µ±MySQLÔÙ´ÎÆô¶¯Ö®Ê±£¬Êý¾ÝÎļþ£¦ÈÕÖ¾ÎļþÒѾ­±»´´½¨£¬ËùÒÔÊä³ö¸ü¼ò½à£º

InnoDB: Started
mysqld: ready for connections

Äã¿ÉÒÔÌí¼Óinnodb_file_per_tableÑ¡Ïîµ½my.cnfÎļþ£¬²¢ÇÒÈÃInnoDB´æ´¢Ã¿Ò»¸ö±íµ½MySQLÊý¾Ý¿âĿ¼Àï×Ô¼ºµÄ.ibdÎļþ¡£Çë²ÎÔÄ15.2.6.6½Ú£¬¡°Ê¹ÓÃPer-Table±í¿Õ¼ä”¡£

15.2.5.1. ´¦ÀíInnoDB³õʼ»¯ÎÊÌâ

Èç¹ûInnoDBÔÚÒ»¸öÎļþ²Ù×÷ÖдòÓ¡Ò»¸ö²Ù×÷ϵͳ´íÎó£¬Í¨³£ÎÊÌâÊÇÈçÏÂÖеÄÒ»¸ö£º

·         ÄãûÓд´½¨Ò»¸öInnoDBÊý¾ÝÎļþĿ¼»òInnoDBÈÕ־Ŀ¼¡£

·         mysqldûÓзÃÎÊÕâЩĿ¼µÄȨÏÞ ÒÔ´´½¨Îļþ¡£

·         mysqld²»ÄÜÇ¡µ±µØ¶ÁÈ¡my.cnf»òmy.iniÑ¡ÏîÎļþ£¬Òò´Ë²»ÄÜ¿´µ½ÄãÖ¸¶¨µÄÑ¡Ïî¡£

·         ´ÅÅÌÒÑÂú£¬»òÕß³¬³ö´ÅÅÌÅä¶î¡£

·         ÄãÒѾ­´´½¨Ò»¸ö×ÓĿ¼£¬ËüµÄÃû×ÖÓëÄãÖ¸¶¨µÄÊý¾ÝÎļþÏàͬ¡£

·         ÔÚinnodb_data_home_dir»òinnodb_data_file_pathÓÐÒ»¸öÓï·¨´íÎó¡£

µ±InnoDBÊÔ×ųõʼ»¯ËüµÄ±í¿Õ¼ä»òÈÕÖ¾Îļþ֮ʱ£¬Èç¹û³ö´íÁË£¬ÄãÓ¦¸Ãɾ³ýInnoDB´´½¨µÄËùÓÐÎļþ¡£ÕâÒâζ×ÅÊÇËùÓÐibdataÎļþºÍËùÓÐib_logfilesÎļþ¡£ÍòÒ»Äã´´½¨ÁËһЩInnoDB±í£¬ÎªÕâЩ±íÒ²´ÓMySQLÊý¾Ý¿âĿ¼ɾ³ýÏàÓ¦µÄ.frmÎļþ(Èç¹ûÄãʹÓöàÖØ±í¿Õ¼äµÄ»°£¬Ò²É¾³ýÈκÎ.ibdÎļþ£©¡£È»ºóÄã¿ÉÒÔÊÔ×ÅÔٴδ´½¨InnoDBÊý¾Ý¿â¡£×îºÃÊÇ´ÓÃüÁîÌáʾ·ûÆô¶¯MySQL·þÎñÆ÷ £¬ÒÔ±ãÄã¿ÉÒԲ鿴·¢ÉúÁËʲô¡£

15.2.6. ´´½¨InnoDB±í

15.2.6.1. ÈçºÎÔÚInnoDBÓò»Í¬APIÀ´Ê¹ÓÃÊÂÎñ

15.2.6.2. ת»»MyISAM±íµ½InnoDB

15.2.6.3. AUTO_INCREMENTÁÐÈçºÎÔÚInnoDBÖй¤×÷

15.2.6.4.Íâ¼üÔ¼Êø

15.2.6.5. InnoDBºÍMySQL¸´ÖÆ

15.2.6.6. ʹÓÃPer-Table±í¿Õ¼ä

¼ÙÈçÄãÓÃmysql testÃüÁîÆô¶¯MySQL¿Í»§¶Ë¡£Òª´´½¨Ò»¸öInnoDB±í£¬Äã±ØÐëÔÚ±í´´½¨SQLÓï¾äÖÐÖ¸¶¨ENGINE = InnoDB»òÕßTYPE = InnoDBÑ¡Ï

CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB;
CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) TYPE=InnoDB;

SQLÓï¾äÔÚ±í¿Õ¼äµÄÁÐÉÏ´´½¨Ò»¸ö±íºÍË÷Òý£¬±í¿Õ¼ä°üº¬ÄãÔÚmy.cnfÖ¸¶¨µÄÊý¾ÝÎļþ¡£´ËÍ⣬MySQLÔÚMySQLÊý¾Ý¿âĿ¼ÏµÄtestĿ¼Àï´´½¨Ò»¸öÃûΪcustomers.frmµÄÎļþ¡£ÄÚ²¿µØ£¬InnoDBΪ'test/customers'±íÍù×Ô¼ºµÄÊý¾ÝĿ¼Ìí¼ÓÒ»¸öÌõÄ¿¡£ÕâÒâζÕâÄã¿ÉÒÔÔÚÆäËüÊý¾Ý¿â´´½¨Ò»¸ö¾ßÓÐÏàͬÃû×ÖcustomersµÄ±í£¬±íµÄÃû×Ö²»»áÓëInnoDBÄڵijåÍ»¡£

Äã¿ÉÒÔ¶ÔÈκÎInnoDB±í£¬Í¨¹ýʹÓÃSHOW TABLE STATUSÓï¾ä£¬²éѯÔÚInnoDB±í¿Õ¼äÄÚ¿ÕÏпռäµÄÊýÁ¿¡£±í¿Õ¼äÄÚ¿ÕÏпռäµÄÊýÁ¿³öÏÖÔÚSHOW TABLE STATUSµÄÊä³ö½á¹ûÄÚµÄComment½ÚÀï¡£ÀýÈ磺

SHOW TABLE STATUS FROM test LIKE 'customers'

×¢Ò⣬ͳ¼ÆµÄSHOWÖ»¸ø³ö¹ØÓÚInnoDB±íµÄ´ó¸ÅÇé¿ö¡£ËüÃDZ»ÓÃÓÚSQLÓÅ»¯¡£¿ÉÊÇ£¬±íºÍË÷Òý±£ÁôµÄ´óС£¬ÒÔ×Ö½ÚΪµ¥Î»ÊÇ׼ȷµÄ¡£

15.2.6.1. ÈçºÎÔÚInnoDBÖÐÓò»Í¬µÄAPIÀ´Ê¹ÓÃÊÂÎñ

ĬÈϵأ¬Ã¿¸öÁ¬½Óµ½MySQL·þÎñÆ÷µÄ¿Í»§¶Ë¿ªÊ¼Ö®Ê±ÊÇÔÊÐí×Ô¶¯ÌύģʽµÄ£¬Õâ¸öģʽ×Ô¶¯Ìá½»ÄãÔËÐеÄÿ¸öSQLÓï¾ä¡£ÒªÊ¹ÓöàÓï¾äÊÂÎñ£¬Äã¿ÉÒÔÓÃSQLÓï¾äSET AUTOCOMMIT = 0½ûÖ¹×Ô¶¯Ìá½»£¬²¢ÇÒÓÃCOMMITºÍROLLBACKÀ´Ìá½»»ò»Ø¹öÄãµÄÊÂÎñ¡£ Èç¹ûÄãÏëÒªautocommit±£³Ö´ò¿ª×´Ì¬£¬¿ÉÒÔÔÚSTART TRANSACTIONÓëCOMMIT»òROLLBACKÖ®¼ä·â×°ÄãµÄÊÂÎñ¡£ÏÂÁеÄÀý×ÓÑÝʾÁ½¸öÊÂÎñ¡£µÚÒ»¸öÊDZ»Ìá½»µÄ£¬µÚ¶þ¸öÊDZ» »Ø¹öµÄ£º

shell> mysql test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.50-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A))
    -> ENGINE=InnoDB;
Query OK, 0 rows affected (0.00 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO CUSTOMER VALUES (10, 'Heikki');
Query OK, 1 row affected (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO CUSTOMER VALUES (15, 'John');
Query OK, 1 row affected (0.00 sec)
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM CUSTOMER;
+------+--------+
| A    | B      |
+------+--------+
|   10 | Heikki |
+------+--------+
1 row in set (0.00 sec)
mysql>

ÔÚÀàËÆPHP, Perl DBI/DBD, JDBC, ODBC, »òÕßMySQLµÄ±ê×¼Cµ÷ÓýӿÚÕâÑùµÄAPIÉÏ£¬ÄãÄܹ»ÒÔ×Ö·û´®ÐÎʽ·¢ËÍÊÂÎñ¿ØÖÆÓï¾ä£¬ÈçCOMMIT£¬µ½MySQL·þÎñÆ÷£¬¾ÍÏñÆäËüÈκεÄSQLÓï¾ä ÄÇÑù£¬ÖîÈçSELECT»òINSERT¡£Ò»Ð©APIÒ²Ìṩµ¥¶ÀµÄרÃŵÄÊÂÎñÌá½»ºÍ»Ø¹öº¯Êý»òÕß·½·¨¡£

15.2.6.2. ×ª»»MyISAM±íµ½InnoDB

Òªµã£ºÄã²»Ó¦¸ÃÔÚmysqlÊý¾Ý¿â£¨±ÈÈ磬user»òÕßhost£©Àï°ÑMySQLϵͳ±íת»»ÎªInnoDBÀàÐÍ¡£ÏµÍ³±í×ÜÊÇMyISAMÐÍ¡£

Èç¹ûÄãÏëÒªËùÓУ¨·Çϵͳ£©±í¶¼±»´´½¨³ÉInnoDB±í£¬Äã¿ÉÒÔ¼òµ¥µØ°Ñdefault-table-type=innodbÐÐÌí¼Óµ½my.cnf»òmy.iniÎļþµÄ[mysqld]½ÚÀï¡£

InnoDB¶ÔMyISAM´æ´¢ÒýÇæ²ÉÓõĵ¥¶ÀË÷Òý´´½¨·½·¨Ã»ÓÐ×öרÃŵÄÓÅ»¯¡£Òò´Ë£¬Ëü²»ÖµµÃµ¼³ö»òµ¼Èë±íÒÔ¼°Ëæºó´´½¨Ë÷Òý¡£¸Ä±äÒ»¸ö±íΪInnoDBÐÍ×î¿ìµÄ°ì·¨¾ÍÊÇÖ±½Ó²åÈë½øÒ»¸öInnoDB±í¡£¼´£¬Ê¹ÓÃALTER TABLE ... ENGINE=INNODB£¬»òÓÃÏàͬµÄ¶¨Òå´´½¨Ò»¸ö¿ÕInnoDB±í£¬²¢ÇÒÓÃINSERT INTO ... SELECT * FROM ...²åÈëÐС£

Èç¹ûÄã¶ÔµÚ¶þ¸ö¼üÓÐUNIQUEÔ¼Êø£¬Äã¿ÉÒÔÔÚµ¼Èë½×¶ÎÉèÖãºSET UNIQUE_CHECKS=0£¬ÒÔÁÙʱ¹ØµôΨһÐÔ¼ì²éºÃ¼ÓËÙ±íµÄµ¼Èë¡£¶ÔÓÚ´ó±í£¬Õâ½ÚÊ¡ÁË´óÁ¿µÄ´ÅÅÌI/O£¬ÒòΪInnoDBËæºó¿ÉÒÔʹÓÃËüµÄ²åÈ뻺³åÇøÀ´µÚ¶þ¸öË÷Òý¼Ç¼×÷ΪһÅúÀ´Ð´Èë¡£

Ϊ»ñµÃ¶Ô²åÈë½ø³ÌµÄ¸üºÃ¿ØÖÆ£¬·Ö¶Î²åÈë´ó±í¿ÉÄܱȽϺãº

INSERT INTO newtable SELECT * FROM oldtable
   WHERE yourkey > something AND yourkey <= somethingelse;

ËùÓмǼÒѾ­±¾²åÈëÖ®ºó£¬Äã¿ÉÒÔÖØÃüÃû±í¡£

ÔÚ´ó±íµÄת»»ÖУ¬ÄãÓ¦¸ÃÔö¼ÓInnoDB»º³å³ØµÄ´óСÀ´¼õÉÙ´ÅÅÌI/O¡£¾¡¹ÜÈç´Ë£¬²»ÒªÊ¹Óó¬¹ý80%µÄÄÚ²¿ÄÚ´æ¡£ÄãÒ²¿ÉÒÔÔö¼ÓInnoDBÈÕÖ¾ÎļþºÍÈÕÖ¾ÎļþµÄ´óС¡£

È·ÐÅÄãûÓÐÌîÂú±í¿Õ¼ä£ºInnoDB±í±ÈMyISAM±íÐèÒª´óµÃ¶àµÄ´ÅÅ̿ռ䡣Èç¹ûÒ»¸öALTER TABLEºÄ¾¡Á˿ռ䣬Ëü¾Í¿ªÊ¼Ò»¸ö »Ø¹ö£¬²¢ÇÒÈç¹ûËüÊÇ´ÅÅ̰󶨵ģ¬»Ø¹ö¿ÉÄÜÒª¼¸¸öСʱ¡£¶ÔÓÚ²åÈ룬InnoDBʹÓòåÈ뻺³åÇøÀ´ÒÔ³ÉÅúµØºÏ²¢µÚ¶þ¸öË÷Òý¼Ç¼µ½Ë÷ÒýÖС£ÄÇÑù½ÚÊ¡ÁË´óÁ¿´ÅÅÌI/O¡£ÔڻعöÖУ¬Ã»ÓÐʹÓÃÕâÑùµÄ»úÖÆ£¬¶ø»Ø¹öÒª»¨±È²åÈ볤30±¶µÄʱ¼äÀ´Íê³É¡£

ÔÚʧ¿ØµÄ»Ø¹öÇé¿öÏ£¬Èç¹ûÄãÔÚÊý¾Ý¿âÖÐûÓÐÓмÛÖµµÄÊý¾Ý£¬±È½ÏÃ÷ÖǵÄÊÇɱµôÊý¾Ý¿â½ø³Ì¶ø²»Êǵȼ¸°ÙÍò¸ö´ÅÅÌI/O±»Íê³É¡£ ÍêÕûµÄ¹ý³Ì£¬Çë²ÎÔÄ15.2.8.1½Ú£¬¡°Ç¿Öƻָ´”¡£

15.2.6.3. AUTO_INCREMENTÁÐÔÚInnoDBÀïÈçºÎ¹¤×÷

Èç¹ûÄãΪһ¸ö±íÖ¸¶¨AUTO_INCREMENTÁУ¬ÔÚÊý¾Ý´ÊµäÀïµÄInnoDB±í¾ä±ú°üº¬Ò»¸öÃûΪ×Ô¶¯Ôö³¤¼ÆÊýÆ÷µÄ¼ÆÊýÆ÷£¬Ëü±»ÓÃÔÚΪ¸Ã Áи³ÐÂÖµ¡£×Ô¶¯Ôö³¤¼ÆÊýÆ÷½ö±»´æ´¢ÔÚÖ÷ÄÚ´æÖУ¬¶ø²»ÊÇ´æÔÚ´ÅÅÌÉÏ¡£

InnoDBʹÓÃÏÂÁÐËã·¨À´Îª°üº¬Ò»¸öÃûΪai_colµÄAUTO_INCREMENTÁеıíT³õʼ»¯×Ô¶¯Ôö³¤¼ÆÊýÆ÷£º·þÎñÆ÷Æô¶¯Ö®ºó£¬µ±Ò»¸öÓû§¶Ô±íT×ö²åÈë֮ʱ£¬InnoDBÖ´ÐеȼÛÈçÏÂÓï¾äµÄ¶¯×÷£º

SELECT MAX(ai_col) FROM T FOR UPDATE;

Óï¾äÈ¡»ØµÄÖµÖð´Î¼ÓÒ»£¬²¢±»¸³¸øÁкÍ×Ô¶¯Ôö³¤¼ÆÊýÆ÷¡£Èç¹û±íÊǿյģ¬Öµ1±»¸³Óè¸ÃÁС£Èç¹û×Ô¶¯Ôö³¤¼ÆÊýÆ÷ûÓб»³õʼ»¯£¬¶øÇÒÓû§µ÷ÓÃΪ±íTÏÔʾÊä³öµÄSHOW TABLE STATUSÓï¾ä£¬Ôò¼ÆÊýÆ÷±»³õʼ»¯£¨µ«²»ÊÇÔö¼Ó¼ÆÊý£©²¢±»´æ´¢ÒÔ¹©ËæºóµÄ²åÈëʹÓá£×¢Ò⣬ÔÚÕâ¸ö³õʼ»¯ÖУ¬ÎÒÃǶԱí×öÒ»¸öÕý³£µÄ¶ÀÕ¼¶ÁËø¶¨£¬Õâ¸öËø³ÖÐøµ½ÊÂÎñµÄ½áÊø¡£

InnoDB¶ÔΪд´½¨±íµÄ³õʼ»¯×Ô¶¯Ôö³¤¼ÆÊýÆ÷ÔÊÐíͬÑùµÄ¹ý³Ì¡£

×¢Ò⣬Èç¹ûÓû§ÔÚINSERTÖÐΪAUTO_INCREMENTÁÐÖ¸¶¨NULL»òÕß0£¬InnoDB´¦ÀíÐУ¬¾Í·Â·ðÖµ»¹Ã»Óб»Ö¸¶¨£¬ÇÒΪËüÉú³ÉÒ»¸öÐÂÖµ¡£

×Ô¶¯Ôö³¤¼ÆÊýÆ÷±»³õʼ»¯Ö®ºó£¬Èç¹ûÓû§²åÈëÒ»¸öÃ÷È·Ö¸¶¨¸ÃÁÐÖµµÄÐУ¬¶øÇÒ¸ÃÖµ´óÓÚµ±Ç°¼ÆÊýÆ÷Öµ£¬Ôò¼ÆÊýÆ÷±»ÉèÖÃΪָ¶¨ ÁÐÖµ¡£Èç¹ûûÓÐÃ÷È·Ö¸¶¨Ò»¸öÖµ£¬InnoDB¸ø¼ÆÊýÆ÷Ôö¼ÓÒ»£¬²¢ÇÒ¸³ÐÂÖµ¸ø¸ÃÁС£

µ±·ÃÎÊ×Ô¶¯Ôö³¤¼ÆÊýÆ÷֮ʱ£¬InnoDBʹÓÃרÓÃµÄ±í¼¶µÄAUTO-INCËø¶¨£¬¸ÃËø³ÖÐøµ½µ±Ç°SQLÓï¾äµÄ½áÊø¶ø²»Êǵ½ÒµÎñµÄ½áÊø¡£ ÒýÈëÁËרÓÃËøÊͷŲßÂÔ£¬À´Îª¶ÔÒ»¸öº¬AUTO_INCREMENTÁеıíµÄ²åÈë¸ÄÉÆ²¿Êð¡£Á½¸öÊÂÎñ²»ÄÜͬʱ¶Ôͬһ±íÓÐAUTO-INCËø¶¨¡£

×¢Ò⣬Èç¹ûÄã»Ø¹ö´Ó¼ÆÊýÆ÷»ñµÃÊýµÄÊÂÎñ£¬Äã¿ÉÄÜ»áÔÚ¸³¸øAUTO_INCREMENTÁеÄÖµµÄÐòÁÐÖз¢ÏÖ¼ä϶¡£

Èç¹ûÓû§¸øÁи³Ò»¸ö¸³Öµ£¬»òÕߣ¬Èç¹ûÖµ´ó¹ý¿É±»ÒÔÖ¸¶¨ÕûÊý¸ñʽ´æ´¢µÄ×î´óÕûÊý£¬×Ô¶¯Ôö³¤»úÖÆµÄÐÐΪ²»±»¶¨Òå¡£

ÔÚCREATE TABLEºÍALTER TABLEÓï¾äÖУ¬InnoDBÖ§³ÖAUTO_INCREMENT = n ±íÑ¡ÏîÀ´ÉèÖüÆÊýÆ÷³õʼֵ»ò±ä¸üµ±Ç°¼ÆÊýÆ÷Öµ¡£ÒòÔÚ±¾½ÚÔçÏÈÌÖÂÛµÄÔ­Òò£¬Õâ¸öÑ¡ÏîµÄÓ°ÏìÔÚ·þÎñÆ÷ÖØÆôºó¾ÍÎÞЧÁË¡£

15.2.6.4.Íâ¼üÔ¼Êø

InnoDBÒ²Ö§³ÖÍâ¼üÔ¼Êø¡£InnoDBÖжÔÍâ¼üÔ¼Êø¶¨ÒåµÄÓï·¨¿´ÆðÀ´ÈçÏ£º

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name, ...)
    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

Íâ¼ü¶¨Òå·þ´ÓÏÂÁÐÇé¿ö£º

·         ËùÓÐtables±ØÐëÊÇInnoDBÐÍ£¬ËüÃDz»ÄÜÊÇÁÙʱ±í¡£

·         ÔÚÒýÓñíÖУ¬±ØÐëÓÐÒ»¸öË÷Òý£¬Íâ¼üÁÐÒÔͬÑùµÄ˳Ðò±»ÁÐÔÚÆäÖÐ×÷ΪµÚÒ»ÁС£ÕâÑùÒ»¸öË÷ÒýÈç¹û²»´æÔÚ£¬Ëü±ØÐëÔÚ ÒýÓñíÀï±»×Ô¶¯´´½¨¡£

·         ÔÚÒýÓñíÖУ¬±ØÐëÓÐÒ»¸öË÷Òý£¬±»ÒýÓõÄÁÐÒÔͬÑùµÄ˳Ðò±»ÁÐÔÚÆäÖÐ×÷ΪµÚÒ»ÁС£

·         ²»Ö§³Ö¶ÔÍâ¼üÁеÄË÷Òýǰ׺¡£ÕâÑùµÄºó¹ûÖ®Ò»ÊÇBLOBºÍTEXTÁв»±»°üÀ¨ÔÚÒ»¸öÍâ¼üÖУ¬ÕâÊÇÒòΪ¶ÔÕâЩÁеÄË÷Òý±ØÐë×ÜÊǰüº¬Ò»¸öǰ׺³¤¶È¡£

·         Èç¹ûCONSTRAINTsymbol±»¸ø³ö£¬ËüÔÚÊý¾Ý¿âÀï±ØÐëÊÇΨһµÄ¡£Èç¹ûËüûÓб»¸ø³ö£¬InnoDB×Ô¶¯´´½¨Õâ¸öÃû×Ö¡£

InnoDB¾Ü¾øÈκÎÊÔ×ÅÔÚ×Ó±í´´½¨Ò»¸öÍâ¼üÖµ¶ø²»Æ¥ÅäÔÚ¸¸±íÖеĺòÑ¡¼üÖµµÄINSERT»òUPDATE²Ù×÷¡£Ò»¸ö¸¸±íÓÐһЩƥÅäµÄÐÐ µÄ×Ó±í£¬InnoDB¶ÔÈκÎÊÔͼ¸üлòɾ³ý¸Ã¸¸±íÖкòÑ¡¼üÖµµÄUPDATE»òDELETE²Ù×÷ÓÐËù¶¯×÷£¬Õâ¸ö¶¯×÷È¡¾öÓÚÓÃFOREIGN KEY×Ó¾äµÄON UPDATEºÍON DETETE×Ó¾äÖ¸¶¨µÄreferential action¡£µ±Óû§ÊÔͼ´ÓÒ»¸ö¸¸±íɾ³ý»ò¸üÐÂÒ»ÐÐ֮ʱ£¬ÇÒÔÚ×Ó±íÖÐÓÐÒ»¸ö»ò¶à¸öÆ¥ÅäµÄÐУ¬InnoDB¸ù¾ÝÒª²ÉÈ¡µÄ¶¯×÷ÓÐÎå¸öÑ¡Ôñ£º

·         CASCADE: ´Ó¸¸±íɾ³ý»ò¸üÐÂÇÒ×Ô¶¯É¾³ý»ò¸üÐÂ×Ó±íÖÐÆ¥ÅäµÄÐС£ON DELETE CASCADEºÍON UPDATE CASCADE¶¼¿ÉÓá£ÔÚÁ½¸ö±íÖ®¼ä£¬Äã²»Ó¦¶¨ÒåÈô¸ÉÔÚ¸¸±í»ò×Ó±íÖеÄͬһÁвÉÈ¡¶¯×÷µÄON UPDATE CASCADE×Ӿ䡣

·         SET NULL: ´Ó¸¸±íɾ³ý»ò¸üÐÂÐУ¬²¢ÉèÖÃ×Ó±íÖеÄÍâ¼üÁÐΪNULL¡£Èç¹ûÍâ¼üÁÐûÓÐÖ¸¶¨NOT NULLÏÞ¶¨´Ê£¬Õâ¾ÍÊÇΨһºÏ·¨µÄ¡£ON DELETE SET NULLºÍON UPDATE SET NULL×Ӿ䱻֧³Ö¡£

·         NO ACTION: ÔÚANSI SQL-92±ê×¼ÖУ¬NO ACTIONÒâζÕâ²»²ÉÈ¡¶¯×÷£¬¾ÍÊÇÈç¹ûÓÐÒ»¸öÏà¹ØµÄÍâ¼üÖµÔÚ±»²Î¿¼µÄ±íÀɾ³ý»ò¸üÐÂÖ÷Òª¼üÖµµÄÆóͼ²»±»ÔÊÐí½øÐУ¨Gruber, ÕÆÎÕSQL, 2000:181£©¡£ InnoDB¾Ü¾ø¶Ô¸¸±íµÄɾ³ý»ò¸üвÙ×÷¡£

·         RESTRICT: ¾Ü¾ø¶Ô¸¸±íµÄɾ³ý»ò¸üвÙ×÷¡£NO ACTIONºÍRESTRICT¶¼Ò»Ñù£¬É¾³ýON DELETE»òON UPDATE×Ӿ䡣£¨Ò»Ð©Êý¾Ý¿âϵͳÓÐÑÓÆÚ¼ì²é£¬²¢ÇÒNO ACTIONÊÇÒ»¸öÑÓÆÚ¼ì²é¡£ÔÚMySQLÖУ¬Íâ¼üÔ¼ÊøÊDZ»Á¢¼´¼ì²éµÄ£¬ËùÒÔNO ACTIONºÍRESTRICTÊÇͬÑùµÄ£©¡£

·         SET DEFAULT: Õâ¸ö¶¯×÷±»½âÎö³ÌÐòʶ±ð£¬µ«InnoDB¾Ü¾ø°üº¬ON DELETE SET DEFAULT»òON UPDATE SET DEFAULT×Ó¾äµÄ±í¶¨Òå¡£

µ±¸¸±íÖеĺòÑ¡¼ü±»¸üеÄʱºò£¬InnoDBÖ§³ÖͬÑùÑ¡Ôñ¡£Ñ¡ÔñCASCADE£¬ÔÚ×Ó±íÖеÄÍâ¼ü Áб»ÉèÖÃΪ¸¸±íÖкòÑ¡¼üµÄÐÂÖµ¡£ÒÔͬÑùµÄ·½Ê½£¬Èç¹ûÔÚ×Ó±í¸üеÄÁвο¼ÔÚÁíÒ»¸ö±íÖеÄÍâ¼ü£¬¸üм¶Áª¡£

×¢Ò⣬InnoDBÖ§³ÖÍâ¼üÔÚÒ»¸ö±íÄÚÒýÓã¬ÔÚÕâЩÇé¿öÏ£¬×Ó±íʵ¼ÊÉÏÒâζÕâÔÚ±íÄÚ¸½ÊôµÄ¼Ç¼¡£

InnoDBÐèÒª¶ÔÍâ¼üºÍ±»ÒýÓüüµÄË÷ÒýÒÔ±ãÍâ¼ü¼ì²é¿ÉÒÔ¿ìËÙ½øÐÐÇÒ²»ÐèÒªÒ»¸ö±íɨÃè¡£¶ÔÍâ¼üµÄË÷Òý±»×Ô¶¯´´½¨¡£ÕâÊÇÏà¶ÔÓÚһЩÀϰ汾£¬ÔÚÀϰ汾ÖÐË÷Òý±ØÐëÃ÷È·´´½¨£¬·ñÔòÍâ¼üÔ¼ÊøµÄ´´½¨»áʧ°Ü¡£

ÔÚInnoDBÄÚ£¬Íâ¼üÀïºÍ±»ÒýÓÃÁÐÀïÏàÓ¦µÄÁбØÐëÓÐÀàËÆµÄÄÚ²¿Êý¾ÝÀàÐÍ£¬ÒÔ±ãËüÃDz»ÐèÀàÐÍת»»¾Í¿É±»±È½Ï¡£ÕûÊýÀàÐ͵ĴóСºÍ·ûºÅ±ØÐëÏàͬ¡£×Ö·û´®ÀàÐ͵ij¤¶È²»ÐèÒªÏàͬ¡£Èç¹ûÄãÖ¸¶¨Ò»¸öSET NULL¶¯×÷£¬ÇëÈ·ÈÏÄãûÓÐÔÚ×Ó±íÖÐÐû¸æ¸Ã ÁÐΪΪNOT NULL¡£

Èç¹ûMySQL´ÓCREATE TABLEÓï¾ä±¨¸æÒ»¸ö´íÎóºÅ1005£¬²¢ÇÒ´íÎóÐÅÏ¢×Ö·û´®Ö¸Ïòerrno 150£¬ÕâÒâ˼ÊÇÒòΪһ¸öÍâ¼üÔ¼Êø±»²»ÕýÈ·Ðγɣ¬±í´´½¨Ê§°Ü¡£ÀàËÆµØ£¬Èç¹ûALTER TABLEʧ°Ü£¬ÇÒËüÖ¸Ïòerrno 150£¬ ÄÇÒâζ×ŶÔÒѱä¸üµÄ±í£¬Íâ¼ü¶¨Òå»á±»²»ÕýÈ·µÄÐγɡ£Äã¿ÉÒÔʹÓÃSHOW INNODB STATUSÀ´ÏÔʾһ¸ö¶Ô·þÎñÆ÷ÉÏ×î½üµÄInnoDBÍâ¼ü´íÎóµÄÏêϸ½âÊÍ¡£

×¢ÊÍ£ºInnoDB²»¶ÔÄÇЩ Íâ¼ü»ò°üº¬NULLÁеı»ÒýÓüüÖµ¼ì²éÍâ¼üÔ¼Êø¡£

¶ÔSQL±ê×¼µÄ±³À룺Èç¹ûÔÚ¸¸±íÄÚÓÐÊý¸öÐУ¬ÆäÖÐÓÐÏàͬµÄ ±»ÒýÓüüÖµ£¬È»ºóInnoDBÔÚÍâ¼ü¼ì²éÖвÉÈ¡¶¯×÷£¬¾Í·Â·ðÆäËüÓÐÏàͬ¼üÖµµÄ¸¸Ðв»´æÔÚÒ»Ñù¡£ÀýÈ磬Èç¹ûÄãÒѶ¨ÒåÒ»¸öRESTRICTÀàÐ͵ÄÔ¼Êø£¬²¢ÇÒÓÐÒ»¸ö´øÊý¸ö¸¸ÐеÄ×ÓÐУ¬InnoDB²»ÔÊÐíÈκζÔÕâЩ¸¸ÐеÄɾ³ý¡£

¾ÓÓÚ¶ÔÓ¦Íâ¼üÔ¼ÊøµÄË÷ÒýÄڵļǼ£¬InnoDBͨ¹ýÉî¶ÈÓÅÏÈÑ¡·¨Ê©Ðм¶Áª²Ù×÷¡£

¶ÔSQL±ê×¼µÄ±³À룺 Èç¹ûON UPDATE CASCADE»òON UPDATE SET NULLµÝ¹é¸üÐÂÏàͬµÄ±í£¬Ö®Ç°ÔÚ¼¶Áª¹ý³ÌÖиñíÒ»±»¸üйý£¬Ëü¾ÍÏóRESTRICTÒ»Ñù¶¯×÷¡£ÕâÒâζ×ÅÄã²»ÄÜʹÓÃ×ÔÒýÓÃON UPDATE CASCADE»òÕßON UPDATE SET NULL²Ù×÷¡£Õ⽫×èÖ¹¼¶Áª¸üе¼ÖµÄÎÞÏÞÑ­»·¡£ÁíÒ»·½Ã棬һ¸ö×ÔÒýÓõÄON DELETE SET NULLÊÇÓпÉÄܵ쬾ÍÏñÒ»¸ö×ÔÒýÓÃON DELETE CASCADEÒ»Ñù¡£ ¼¶Áª²Ù×÷²»¿ÉÒÔ±»Ç¶Ì׳¬¹ý15²ãÉî¡£

¶ÔSQL±ê×¼µÄ±³À룺 ÀàËÆÒ»°ãµÄMySQL£¬ÔÚÒ»¸ö²åÈ룬ɾ³ý»ò¸üÐÂÐí¶àÐеÄSQLÓï¾äÄÚ£¬InnoDBÖðÐмì²éUNIQUEºÍFOREIGN KEYÔ¼Êø¡£°´ÕÕSQLµÄ±ê×¼£¬ ĬÈϵÄÐÐΪӦ±»ÑÓ³Ù¼ì²é£¬¼´Ô¼Êø½öÔÚÕû¸öSQLÓï¾ä±»´¦ÀíÖ®ºó²Å±»¼ì²é¡£Ö±µ½InnoDBʵÏÖÑÓ³ÙµÄÔ¼Êø¼ì²é֮ǰ£¬Ò»Ð©ÊÂÇéÊDz»¿ÉÄܵ쬱ÈÈçɾ³ýÒ»¸öͨ¹ýÍâ¼ü²Î¿¼µ½×ÔÉíµÄ¼Ç¼¡£

×¢ÊÍ£ºµ±Ç°£¬´¥·¢Æ÷²»±»¼¶ÁªÍâ¼üµÄ¶¯×÷¼¤»î¡£

Ò»¸öͨ¹ýµ¥ÁÐÍâ¼üÁªÏµÆð¸¸±íºÍ×Ó±íµÄ¼òµ¥Àý×ÓÈçÏ£º

CREATE TABLE parent(id INT NOT NULL,
                    PRIMARY KEY (id)
) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT,
                   INDEX par_ind (parent_id),
                   FOREIGN KEY (parent_id) REFERENCES parent(id)
                     ON DELETE CASCADE
) TYPE=INNODB;

ÈçÏÂÊÇÒ»¸ö¸ü¸´ÔÓµÄÀý×Ó£¬ÆäÖÐÒ»¸öproduct_order±í¶ÔÆäËüÁ½¸ö±íÓÐÍâ¼ü¡£Ò»¸öÍâ¼üÒýÓÃÒ»¸öproduct±íÖеÄË«ÁÐË÷Òý¡£ÁíÒ»¸ö ÒýÓÃÔÚcustomer±íÖеĵ¥ÐÐË÷Òý£º

CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,
                      price DECIMAL,
                      PRIMARY KEY(category, id)) TYPE=INNODB;
CREATE TABLE customer (id INT NOT NULL,
                      PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
                      product_category INT NOT NULL,
                      product_id INT NOT NULL,
                      customer_id INT NOT NULL,
                      PRIMARY KEY(no),
                      INDEX (product_category, product_id),
                      FOREIGN KEY (product_category, product_id)
                        REFERENCES product(category, id)
                        ON UPDATE CASCADE ON DELETE RESTRICT,
                      INDEX (customer_id),
                      FOREIGN KEY (customer_id)
                        REFERENCES customer(id)) TYPE=INNODB;

InnoDBÔÊÐíÄãÓÃALTER TABLEÍùÒ»¸ö±íÖÐÌí¼ÓÒ»¸öÐ嵀 Íâ¼üÔ¼Êø£º

ALTER TABLE yourtablename
    ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name, ...)
    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

¼ÇסÏÈ´´½¨ÐèÒªµÄË÷Òý¡£ÄãÒ²¿ÉÒÔÓÃALTER TABLEÍùÒ»¸ö±íÌí¼ÓÒ»¸ö×ÔÒýÓÃÍâ¼üÔ¼Êø¡£

InnoDBÒ²Ö§³ÖʹÓÃALTER TABLEÀ´ÒƳý Íâ¼ü£º

ALTER TABLE yourtablename DROP FOREIGN KEY fk_symbol;

µ±Äê´´½¨Ò»¸öÍâ¼ü֮ʱ£¬Èç¹ûFOREIGN KEY×Ó¾ä°üÀ¨Ò»¸öCONSTRAINTÃû×Ö£¬Äã¿ÉÒÔÒýÓÃÄǸöÃû×ÖÀ´ÒƳý Íâ¼ü¡£ÁíÍ⣬µ±Íâ¼ü±»´´½¨Ö®Ê±£¬fk_symbolÖµ±»InnoDBÄÚ²¿±£Ö¤¡£µ±ÄãÏëÒªÒÆ³ýÒ»¸öÍâ¼ü֮ʱ£¬ÒªÕÒ³ö±ê¼Ç£¬ÇëʹÓÃSHOW CREATE TABLEÓï¾ä¡£Àý×ÓÈçÏ£º

mysql> SHOW CREATE TABLE ibtest11c\G
*************************** 1. row ***************************
       Table: ibtest11c
Create Table: CREATE TABLE `ibtest11c` (
  `A` int(11) NOT NULL auto_increment,
  `D` int(11) NOT NULL default '0',
  `B` varchar(200) NOT NULL default '',
  `C` varchar(175) default NULL,
  PRIMARY KEY  (`A`,`D`,`B`),
  KEY `B` (`B`,`C`),
  KEY `C` (`C`),
  CONSTRAINT `0_38775` FOREIGN KEY (`A`, `D`)
REFERENCES `ibtest11a` (`A`, `D`)
ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `0_38776` FOREIGN KEY (`B`, `C`)
REFERENCES `ibtest11a` (`B`, `C`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB CHARSET=latin1
1 row in set (0.01 sec)
 
mysql> ALTER TABLE ibtest11c DROP FOREIGN KEY 0_38775;

InnoDB½âÎö³ÌÐòÔÊÐíÄãÔÚFOREIGN KEY ... REFERENCES ...×Ó¾äÖÐÓÃ`£¨backticks)°Ñ±íºÍÁÐÃûÃû×ÖΧÆðÀ´¡£InnoDB½âÎö³ÌÐòÒ²¿¼Âǵ½lower_case_table_namesϵͳ±äÁ¿µÄÉèÖá£

InnoDB·µ»ØÒ»¸ö±íµÄÍâ¼ü¶¨Òå×÷ΪSHOW CREATE TABLEÓï¾äÊä³öµÄÒ»²¿·Ö£º

SHOW CREATE TABLE tbl_name;

´ÓÕâ¸ö°æ±¾Æð£¬mysqldumpÒ²½«±íµÄÕýÈ·¶¨ÒåÉú³Éµ½×ª´¢ÎļþÖУ¬ÇÒ²¢²»Íü¼Ç Íâ¼ü¡£

Äã¿ÉÒÔÈç϶ÔÒ»¸ö±íÏÔʾÍâ¼üÔ¼Êø£º

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

Íâ¼üÔ¼Êø±»ÁÐÔÚÊä³öµÄCommentÁС£

µ±Ö´ÐÐÍâ¼ü¼ì²é֮ʱ£¬InnoDB¶ÔËüÕÕ¿´×ŵÄ×Ó»ò¸¸¼Ç¼ÉèÖù²ÏíµÄÐм¶Ëø¡£InnoDBÁ¢¼´¼ì²éÍâ¼üÔ¼Êø£¬¼ì²é²»¶ÔÊÂÎñÌá½»ÑÓ³Ù¡£

ҪʹµÃ¶ÔÓÐÍâ¼ü¹ØÏµµÄ±íÖØÐÂÔØÈëת´¢Îļþ±äµÃ¸üÈÝÒ×£¬mysqldump×Ô¶¯ÔÚת´¢Êä³öÖаüÀ¨Ò»¸öÓï¾äÉèÖÃFOREIGN_KEY_CHECKSΪ0¡£Õâ±ÜÃâÔÚת´¢±»ÖØÐÂ×°ÔØÖ®Ê±£¬Óë²»µÃ²»±»ÒÔÌØ±ð˳ÐòÖØÐÂ×°ÔØµÄ±íÏà¹ØµÄÎÊÌâ¡£Ò²¿ÉÒÔÊÖ¶¯ÉèÖÃÕâ¸ö±äÁ¿£º

mysql> SET FOREIGN_KEY_CHECKS = 0;
mysql> SOURCE dump_file_name;
mysql> SET FOREIGN_KEY_CHECKS = 1;

Èç¹ûת´¢Îļþ°üº¬¶ÔÍâ¼üÊDz»Õýȷ˳ÐòµÄ±í£¬Õâ¾ÍÒÔÈκÎ˳Ðòµ¼Èë¸Ã±í¡£ÕâÑùÒ²¼Ó¿ìµ¼Èë²Ù×÷¡£ÉèÖÃFOREIGN_KEY_CHECKSΪ0£¬¶ÔÓÚÔÚLOAD DATAºÍALTER TABLE²Ù×÷ÖкöÂÔÍâ¼üÏÞÖÆÒ²ÊǷdz£ÓÐÓõġ£

InnoDB²»ÔÊÐíÄãɾ³ýÒ»¸ö±»FOREIGN KEY±íÔ¼Êø ÒýÓÃµÄ±í£¬³ý·ÇÄã×öÉèÖÃSET FOREIGN_KEY_CHECKS=0¡£µ±ÄãÒÆ³ýÒ»¸ö±íµÄʱºò£¬ÔÚËüµÄ´´½¨Óï¾äÀﶨÒåµÄÔ¼ÊøÒ²±»ÒƳý¡£

Èç¹ûÄãÖØÐ´´½¨Ò»¸ö±»ÒƳýµÄ±í£¬Ëü±ØÐëÓÐÒ»¸ö×ñ´ÓÓÚÒ²ÒýÓÃËüµÄÍâ¼üÔ¼ÊøµÄ¶¨Òå¡£Ëü±ØÐëÓÐÕýÈ·µÄÁÐÃûºÍÀàÐÍ£¬²¢ÇÒÈçǰËùÊö£¬Ëü±ØÐë¶Ô±» ÒýÓõļüÓÐË÷Òý¡£Èç¹ûÕâЩ²»±»Âú×㣬MySQL·µ»Ø´íÎóºÅ1005 ²¢ÔÚ´íÎóÐÅÏ¢×Ö·û´®ÖÐÖ¸Ïòerrno 150¡£

15.2.6.5. InnoDBºÍMySQL¸´ÖÆ

MySQL¸´ÖƾÍÏñ¶ÔMyISAM±íÒ»Ñù£¬Ò²¶ÔInnoDB±íÆð×÷Óá£ÒÔijÖÖ·½Ê½Ê¹Óø´ÖÆÒ²ÊÇ¿ÉÄܵģ¬ÔÚÕâÖÖ·½Ê½ÖдӷþÎñÆ÷ÉϱíµÄÀàÐͲ»Í¬ÓÚÖ÷·þÎñÆ÷ÉÏ Ô­Ê¼±íµÄÀàÐÍ¡£ÀýÈ磬Äã¿ÉÒÔ¸´ÖÆÐ޸ĵ½Ö÷·þÎñÆ÷ÉÏÒ»¸öInnoDB±í£¬µ½´Ó·þÎñÆ÷ÉÏÒ»¸öMyISAM±íÀï¡£

ҪΪһ¸öÖ÷·þÎñÆ÷½¨Á¢Ò»¸öзþÎñÆ÷£¬Äã²»µÃ²»¸´ÖÆInnoDB±í¿Õ¼äºÍÈÕÖ¾Îļþ£¬ÒÔ¼°InnoDB±íµÄ.frmÎļþ£¬²¢ÇÒÒÆ¶¯¸´¼þµ½´Ó·þÎñÆ÷¡£ ¹ØÓÚÆäÇ¡µ±²½ÖèÇë²ÎÔÄ15.2.9½Ú£¬¡°Òƶ¯InnoDBÊý¾Ý¿âµ½Áíһ̨»úÆ÷”¡£

Èç¹ûÄã¿ÉÒԹرÕÖ÷·þÎñÆ÷»òÕßÒ»¸ö´æÔڵĴӷþÎñÆ÷¡£Äã¿ÉÒÔ²ÉÈ¡InnoDB±í¿Õ¼äºÍÈÕÖ¾ÎļþµÄÀ䱸·Ý£¬²¢ÓÃËüÀ´½¨Á¢Ò»¸ö´Ó·þÎñÆ÷¡£Òª²»¹Ø±ÕÈκηþÎñÆ÷À´½¨Á¢Ò»¸öеĴӷþÎñÆ÷£¬ÄãÒ²¿ÉÒÔʹÓ÷ÇÃâ·Ñ£¨ÉÌÒµµÄ£©InnoDBÈȱ¸·Ý¹¤¾ß¡£

InnoDB¸´ÖÆÀïÒ»¸öСµÄÏÞÖÆÊÇLOAD TABLE FROM MASTER²»¶ÔInnoDBÀàÐͱíÆð×÷Óá£ÓÐÁ½ÖÖ¿ÉÄܵŤ×÷Çø£º

·         ת´¢Ö÷·þÎñÆ÷ÉÏµÄ±í²¢µ¼Èëת´¢Îļþµ½´Ó·þÎñÆ÷¡£

·         ÔÚÓÃLOAD TABLE tbl_name FROM MASTER½¨Á¢¸´ÖÆÖ®Ç°£¬ÔÚÖ÷·þÎñÆ÷ÉÏʹÓÃALTER TABLE tbl_name TYPE=MyISAM£¬²¢ÇÒËæºóʹÓÃALTER TABLE°ÑÖ÷±íת»»»ØInnoDB¡£

ÔÚÖ÷·þÎñÆ÷ʧ°ÜµÄÊÂÎñ¸ù±¾²»Ó°Ïì¸´ÖÆ¡£MySQL¸´ÖÆ»ùÓÚ¶þ½øÖÆÈÕÖ¾£¬MySQÔÚÄÇÀïдÐÞ¸ÄÊý¾ÝµÄSQLÓï¾ä¡£´Ó·þÎñÆ÷¶ÁÖ÷·þÎñÆ÷µÄ¶þ½øÖÆÈÕÖ¾£¬²¢Ö´ÐÐͬÑùµÄSQLÓï¾ä¡£¾¡¹ÜÈç´Ë£¬ÔÚÊÂÎñÀï·¢ÉúµÄÓï¾ä²»±»Ð´½ø¶þ½øÖÆÈÕÖ¾Ö±µ½ÊÂÎñÌá½»£¬ÔÚÄÇÒ»¿Ì£¬ÊÂÎñÀïËùÓÐÓï¾ä±»Ò»´ÎÐÔд½øÈÕÖ¾¡£Èç¹ûÓï¾äʧ°ÜÁË£¬±ÈÈ磬ÒòΪÍâ¼üÎ¥Àý£¬»òÕߣ¬Èç¹ûÊÂÎñ±»»Ø¹ö£¬Ã»ÓÐSQLÓï¾ä±»Ð´½ø¶þ½øÖÆÈÕÖ¾£¬²¢ÇÒÊÂÎñ¸ù±¾²»ÔÚ´Ó·þÎñÆ÷ÉÏÖ´ÐС£

15.2.6.6. Ê¹ÓÃPer-Table±í¿Õ¼ä

Äã¿ÉÒԴ洢ÿ¸öInnoDB±íºÍËüµÄË÷ÒýÔÚËü×Ô¼ºµÄÎļþÔÚÖУ¬Õâ¸öÌØÕ÷±»³ÆÎª“¶à±í¿Õ¼ä” £¬ÒòΪʵ¼ÊÉÏÿ¸ö±íÓÐËü×Ô¼ºµÄ±í¿Õ¼ä¡£

¶ÔÄÇЩÏë°ÑÌØ¶¨±í¸ñÒÆµ½·ÖÀëÎïÀí´ÅÅ̵ÄÓû§£¬»òÕßÄÇЩϣÍû¿ìËÙ»Ö¸´µ¥¸ö±íµÄ±¸·Ý¶øÎÞÐë´ò¶ÏÆäÓàInnoDB±íµÄʹÓõÄÓû§£¬Ê¹Óöà±í¿Õ¼ä»áÊÇÓÐÒæµÄ¡£

Äã¿ÉÒÔÍùmy.cnfµÄ[mysqld]½ÚÌí¼ÓÏÂÃæÐÐÀ´ÔÊÐí¶à±í¿Õ¼ä£º

[mysqld]
innodb_file_per_table

ÖØÆô·þÎñÆ÷Ö®ºó£¬InnoDB´æ´¢Ã¿¸öд´½¨µÄ±íµ½±í¸ñËùÊôÓÚµ