您当前的位置:站长书库>HTML教程

µؼ/span>15ւ£º´洢ӽȦºͱэ

Ŀ¼

15.1. MyISAM´洢ӽȦ

15.1.1. MyISAMǴ¶¯ѡЮ

15.1.2.¼�n>̹ѨµĿռ⺯span>

15.1.3. MyISAM±´洢¸򊻼/span>

15.1.4. MyISAM±ϊ͢

15.2. InnoDB´洢ӽȦ

15.2.1. InnoDB¸Ɗ�pan>

15.2.2. InnoDBjϵхϢ

15.2.3. InnoDBƤ׃

15.2.4. InnoDBǴ¶¯ѡЮ

15.2.5. ´´½¨InnoDB±¼⺯span>

15.2.6. ´´½¨InnoDB±뺯span>

15.2.7. ͭ¼ӺΉ¾³�n>InnoDB˽¾ݺΈ֖¾τ¼�n>

15.2.8. InnoDB˽¾ݿⶄ±¸·ݺͻָ´

15.2.9. ½«InnoDB˽¾ݿ㓆µ½­һ̨»�span>

15.2.10. InnoDB˂ϱģэº΋�span>

15.2.11. InnoDBєŜµ�⊾

15.2.12. ¶౦±¾µŊµʩ

15.2.13. ±̷ӽ½ṹ

15.2.14.τ¼�݀´ƅʼspan class="section">I/O

15.2.15. InnoDB´´¦m

15.2.16. ¶Ҽ/span>InnoDB±О׆

15.2.17. InnoDB¹˕Е﷏º΅ų�n>

15.3. MERGE´洢ӽȦ

15.3.1. MERGE±닊·½ĦµŎˌຯspan>

15.4. MEMORY(HEAP)´洢ӽȦ

15.5. BDB(BerkeleyDB)´洢ӽȦ

15.5.1. BDB֧³ֵIJڗ�³

15.5.2. °²װBDB

15.5.3. BDBǴ¶¯ѡЮ

15.5.4. BDB±͘є

15.5.5. ў¸¼/span>BDB̹ѨµŊÒɼ/span>

15.5.6. ¶Ҽ/span>BDB±О׆

15.5.7. ʹԃBDB±¿ʄڍ ³�Ĵ

15.6. EXAMPLE´洢ӽȦ

15.7. FEDERATED´洢ӽȦ

15.7.1. °²װFEDERATED´洢ӽȦ

15.7.2. FEDERATED´洢ӽȦµĽꊜ

15.7.3. ɧºϊ¹ԃFEDERATED±뺯span>

15.7.4. FEDERATED´洢ӽȦµľ׏ܼ/span>

15.8. ARCHIVE´洢ӽȦ

15.9. CSV´洢ӽȦ

15.10.BLACKHOLE´洢ӽȦ

MySQL֧³׊�¢ӽȦطΪ¶Բ»ͬ±`эµĴ¦mǷ¡£MySQL´洢ӽȦ°�ϱ°²ȫ±ӽȦºʹ¦m·ȊÎ񰳈«±ӽȦ£º

·         MyISAM¹݀˂ϱ±̼͡¹©¸ࠋٴ洢ºͼ팷£¬Ӕ¼°ȫτ̷̑Ŝf¡£MyISAM՚̹ԐMySQLƤ׃o±»֧³֣¬̼ˇĬɏµĴ洢ӽȦ£¬³�嗃MySQLĬɏʹԃ­΢һ¸�档

·         MEMORY´洢ӽȦ͡¹©¡°Ś´痐¡±±MERGE´洢ӽȦՊѭ¼¯ºϽ«±»´¦mͬҹµÍyISAM±Ϊһ¸�5ı¾Ώ츉SAMһҹ£¬MEMORYº̍ERGE´洢ӽȦ´¦m·ȊÎ񲭣¬֢}¸�璲¶¼±» Ĭɏ°�ySQLא¡£

עˍ£ºMEMORY´洢ӽȦֽʽµر»ȷ¶¨ΪHEAPӽȦ¡£

·         InnoDBº̂DB´洢ӽȦ͡¹©˂ϱ°²ȫ±BDB±»°�ª֧³׋��³·¢²¼µÍySQL-Max¶�ַ¢°灯¡£InnoDBҲ Ĭɏ±»°��SQL 5.1¶�ַ¢°灯£¬ţ¿ʒ԰´֕ϲºč¨¹�ySQL4Պѭ»򾼖¹ɎһӽȦ¡£

·         EXAMPLE´洢ӽȦˇһ¸�quo;´湹”ӽȦ£¬̼²»ضʲô¡£ţ¿ʒՓĕ⹶ӽȦ´´½¨±µ«ûԐ˽¾ݱ»´洢ԚǤא»򵔆嗐¼팷¡£֢¸�涄ĿµŊǷ�¬՚MySQLԴ´�µŒ»¸�ӣ¬̼ҝʾ˵ķɧºοªʼ±ᐴт´洢ӽȦ¡£ͬҹ£¬̼µŖ�̈¤ˇ¶Կª·¢֟¡£

·         NDB Clusterˇ±»MySQL Clusterԃ4ʵЖ·ָ¶ጨ¼Nj㼺ʏµı´洢ӽȦ¡£̼՚MySQL-Max 5.1¶�ַ¢°灯͡¹©¡£֢¸�¢ӽȦµ±ǰֻ±»Linux, Solaris, º̍ac OS X ֧³֡£՚δ4µÍySQL·ַ¢°痐£¬ϒćЫҪͭ¼Ԇ匼ƽ̨¶Օ⹶ӽȦµŖ§³֣¬°�dows¡£

·         ARCHIVE´洢ӽȦ±»ԃ4Ϟ̷ӽµأ¬·dz£Сµּ/span>¸²¸Ǵ洢µĴ􂀊�

·         CSV´洢ӽȦ°Ҋ�ººŷָ�򊽴洢՚τ±¾τ¼�

·         BLACKHOLE´洢ӽȦ½Ԋܵ«²»´洢˽¾ݣ¬²¢Ȓ¼팷؜ˇ·µ»ْ»¸�¯¡£

·         FEDERATED´洢ӽȦ°Ҋ�۔¶³͊�С£՚MySQL 5.1א£¬ֻ̼º̍ySQLһǰ¹¤ط£¬ʹԃMySQL C Client API¡£՚δ4µķַ¢°痐£¬ϒćЫҪɃ̼ʹԃǤ̼Ƚ¶¯Ƿ»󀍻§¶́¬½ӷ½·¨l½ӵ½­΢µŊ�£

Ѱȳѡձһ¸�¢ӽȦµİ𐗺£¬ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/pluggable-storage.html#pluggable-storage-choosing" title="14.4. Choosing a Storage Engine">14.4½ڣ¬¡°ѡձһ¸�¢ӽȦ”¡£

֢һւ½²˶³�luster΢µŃ¿һ¸�QL´洢ӽȦ£¬NDB Cluster՚µر7ւ£ºMySQL Clusterא½ꊜ¡£

µ±Ū´´½¨һ¸�ʱº򣭄䀉Ӕͨ¹�»¸�INE »񓘐E ѡЮµ½CREATE TABLEԯ¾倴¸猟MySQLţҪ´´½¨ʲô`эµı

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

̤ȻTYPEɔȻ՚MySQL 5.1א±»֧³֣¬Ж՚ENGINEˇ˗ѡµŊ�£

ɧ¹�Ôµ󄍇INE»񓘐EѡЮ£¬ĬɏµĴ洢ӽȦ±»ʹԃ¡£һ°㶄ĬɏˇMyISAM£¬µ«ţ¿ʒՓm-default-storage-engine»𫬤efault-table-type·��¡Ю4¸ı匼£¬»󖠍¨¹�torage_engine»񳠢le_typeϵͳ±偿4¸ı䡣

µ±MySQL±»ԃMySQLƤ׃вµ¼°²װ՚Windowsƽ̨ʏ£¬InnoDB´洢ӽȦͦ´�AM´洢ӽȦطΪͦ´�²ϔ¼a href="http://book.chinaz.com/mysql5/installing.html#mysql-config-wizard-introduction" title="2.3.5.1. Introduction">2.3.5.1½ڣ¬¡°½ꊜ”¡£

Ҫ°Ғ»¸�Ԓ»¸�Ηªµ½­һ¸�ͣ¬¿ʊ¹ԃALTER TABLEԯ¾䣬֢¸�喸ķтµŀᑍ£º

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

ȫ²ϔ¼/span>13.1.5½ڣ¬¡°CREATE TABLEԯ·¨”º˼a href="http://book.chinaz.com/mysql5/sql-syntax.html#alter-table" title="13.1.2. ALTER TABLE Syntax">13.1.2½ڣ¬¡°ALTER TABLEԯ·¨”¡£

ɧ¹�؅ʹԃһ¸�»±ᓫ½�LµĴ洢ӽȦ£¬»󖠊՗ƓĒ»¸�ᓫ½�Lµ«ûԐ±»¼¤»´洢ӽȦ£¬MySQLȡ¶�µش´½¨һ¸�SAM`эµıµ±ţ՚֧³ֲ»ͬ´洢ӽȦµÍySQL·�®¼俽±´±ʱº򣭉Њ�юªˇºܷ½±㶄¡££¨}ɧ£¬՚һ¸�ƽ¨bא£¬¿ʄ݄㶄׷·�ªն¼Ӱ²ȫ¶� ˂ϱ´洢ӽȦ£¬µ«´ӷ�ª¸�ٶȶ�ԃ·ȊÎ񵦴¢ӽȦ¡£)

՚²»¿ʓõŀᑍ±»ָ¶¨ʱ£¬ؔ¶¯ԃMyISAM±ͦ´�»ᷔMySQLµŐÓû§լ³ɻ퐽¡£ϞÛºϊ±һ¸�»ؔ¶¯¸ı單ʱ£¬²�¸�档

MySQL؜ˇ´´½¨һ¸�mτ¼�ֱµĶ¨ӥ¡£±̷ӽºΊ�ܱ»´洢՚һ¸�๶τ¼�㈡¾�`э¡£·�ڴ洢ӽȦ¼¶±񖯉ϴ´½¨.frmτ¼�5Ĵ洢ӽȦ´´½¨Ɏºϐ钪ԃ4¹݀µĶτ¼�pan>

һ¸�ݿ〉Ӕ°�¬`эµı

˂ϱ°²ȫ±맔ST) ±Ɇ𸈊Î񰳈«±램NTST)Ԑ¼¸´�ƣº

·         ¸�£¼´ʹMySQL±@£»󔶵½Ӳ¼�¬Ҫôؔ¶¯»ָ´£¬Ҫô´ӱ¸·ݼԊÎ򉖖¾»ָ´£¬ţ¿ʒՈ¡»ي�

·         ţ¿ʒԺϲ¢ѭ¶ᔯ¾䣬²¢ԃCOMMITԯ¾卬ʱ½Ԋ݋�¿£¨ɧ¹�commit±»½�£©¡£

·         ţ¿ʒՖ´ѐROLLBACK4º�㶄¸ı䣨ɧ¹�commit±»½�£©¡£

·         ɧ¹�ʧ°ܣ¬ţµŋ�±䶼±优ԭ4¡££¨ԃ·ȊÎ񰳈«±̹Ԑ·¢ʺµĸı䶼ˇԀ¾õģ©¡£

·         ˂ϱ°²ȫ´洢ӽȦ¿ʒԸ�µ±ǰԃ¶uõ½ѭ¶๼тµı¹©¸�¿˰¡£

̤ȻMySQL֧³׊�񰳈«´洢ӽȦ£¬Ϊ»񶄗½ẻ£¬ţ²»Ӧ¸Ĕے»¸�򅇻컏²»ͬ±э¡£ɧ¹�ºϱэ»ᷢʺϊ͢£¬¸�¢ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#commit" title="13.4.1. START TRANSACTION, COMMIT, and ROLLBACK Syntax">13.4.1½ڣ¬¡°START TRANSACTION, COMMITº̒OLLBACK Syntax”¡£

ɧ¹�Ԑָ¶¨Ƥ׃ֵµĻ°£¬InnoDBʹԃĬɏµŅ嗃ֵ¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-configuration" title="15.2.3. InnoDB Configuration">15.2.3½ڣ¬¡°InnoDBƤ׃”¡£

·ȊÎ񰳈«±ʭԐ¼¸¸�㣬ӲΪûԐ˂ϱ¿ª֧£¬̹Ԑԅµ㶼Ŝ³�º

·         ¸�pan>

·         ѨҪ¸�ƅ̿ռ⺯span>

·         ִѐ¸�ª¸�ڴ亯span>

ţ¿ʒՔۍ¬һ¸�嗐ºϲ¢˂ϱ°²ȫºͷȊÎ񰳈«±»񶄁½֟خºõŇꀶ¡£¾¡¹݈絋£¬՚autocommit±»½�µŊÎ򁯣¬±任µ½·ȊÎ񰳈«±¾ɼ´ʱ͡½»£¬²¢Ȓ²»»ᱻ»ع�/span>

15.1. MyISAM´洢ӽȦ

MyISAMˇ Ĭɏ´洢ӽȦ¡£̼»�OµÉSAM´�µ«Ԑºܶᔐԃµŀ©չ¡££¨עӢMySQL 5.1²»֧³ՉSAM£©¡£

ÿ¸�SAM՚´ƅ͉ϴ洢³ʈ��»¸��גԱĻؖ¿ªʼ£¬)չĻָ³��£.frmτ¼�ӥ¡£˽¾ގļ�¹ĻΪ.MYD (MYData)¡£̷ӽτ¼�¹Ļˇ.MYI (MYIndex)¡£

Ҫķȷ±ţЫҪԃһ¸�SAM±£¬ȫԃENGINE±Юָ³�º

CREATE TABLE t (i INT) ENGINE = MYISAM;

עˍ£ºO°汾µÍySQLʹԃTYPE¶�ENGINE£¨}ɧ£¬TYPE = MYISAM£©¡£MySQL 5.1ΪвЂ¼牝¶�֢¸�¨£¬µ«TYPEЖ՚±»ȡ˓£¬¶�NEˇ˗Јµœ÷¨¡£

һ°㶘£¬ENGINEѡЮˇ²»±ْªµģ»³�ВѾ­±»¸ı傋£¬MyISAMˇĬɏ´洢ӽȦ¡£

ţ¿ʒՓ|strong>myisamchk¹¤¾ࠀ´¼쳩»󑞸´MyISAM±ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#crash-recovery" title="5.9.5.6. Using myisamchk for Crash Recovery">5.9.5.6½ڣ¬¡°ʹԃmyisamchkض±@£»ָ´”¡£ţҲ¿ʒՓ|span>myisampack4ѹ̵MyISAM±Ƀ̼ćռ¸�ռ䡣ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/client-side-scripts.html#myisampack" title="8.2. myisampack — Generate Compressed, Read-Only MyISAM Tables">8.2½ڣ¬¡°myisampack£¬²�̵¡¢ֻ¶uÍyISAM±륲dquo;¡£

ɧЂˇMyISAM´洢ӽȦµŒ»Щַ͘£º

·         ̹Ԑ˽¾ޖµЈ´洢µΗֽڡ£֢ʹµĊ�Ͳڗ�³·׀롣¶�ᲣєµŎ¨һҪȳˇ»�ԃ²¹ë£¨ɧخ½�Ļ�µŒ»ҹ£©º̉EEE¸¡µ㹱ʽ£¨՚׷·»�ҲΪȫˇ׷µ¼µģ©¡£Ψһ²»֧³ֶ�牝єµĻ�Ƕɫʽϵͳ¡£֢ЩϵͳԐʱʹԃ͘ˢµĴ¦mǷ¡£

Ј´洢˽¾ݵΗֽڲ¢²»ҏטµٓ°Ь̙¶ȣ»˽¾ސіеŗֽے»°䋇δjºϵ쬴Ԓ»¸�򷂎´jºϵŗֽڲ¢²»±ȴӷ´в¶x��˔´¡£·�ϵĻ򈢁іµµĴ�Ǥ̼´�±Ȳ¢²»ДµĊ±¼侴¡£

·        ´􏄼�3λτ¼�©՚֧³ִ􏄼��Ͳڗ�³ʏ±»֧³֡£

·         µ±°҉¾³�¼°²扫»컏µŊ±º򣬶¯̬³ߴ綄ѐ¸�¬¡£֢Ҫͨ¹�ႚ±»ɾ³�¬Ӕ¼°ɴЂһ¸�»ɾ³�©չµ½Ђһ¿ꀴؔ¶¯Ϊ³ɡ£

·         ÿ¸�SAM±´􌸒�4¡£ ֢¿ʒՍ¨¹�ᓫ4¸ı䡣ÿ¸��Łъ��

·         خ´󶄼�ű000ؖ½ڡ£֢Ҳ¿ʒՍ¨¹�´¸ı䡣¶Փڼ�¬¹�½ڵŇꀶ£¬һ¸��ֽڵĵļ�ĉϡ£

·         BLOBº̔EXT¿ʒԱ»̷ӽ¡£

·         NULLֵ±»Պѭ՚̷ӽµŁіС£֢¸�¿¸�°-1¸�ڡ£

·         ̹Ԑ˽ؖ¼�ֽࠗێªЈ±»´洢ӔՊѭһ¸�ߵً�¹̵¡£

·        µ±¼Ȃ¼ӔƅºĐ򶅋³Ѳ²扫£¨¾Ώ򅤊¹ԃһ¸�O_INCREMENT֮ʱ£©£¬̷ӽ˷±»Ƽ¿ªӔ±㹟½ڵ㾶°��£֢¸ʼnǁ̋��ռ偻ԃÊ¡£

·         ÿ±¸�O_INCREMENµńڲ¿´¦m¡£MyISAMΪINSERTº̕PDATE²ڗ�¯¸�»¡£֢ʹµUTO_INCREMENT¸�‰ױ0%£©¡£՚Ѳ¶¥µŖµ±»ɾ³�Ͳ»Ŝՙ{ԃ¡££¨µ±AUTO_INCREMENT±»¶¨ӥΪ¶႐̷ӽµŗһ£¬¿ʒԳ�ي¹ԃ´Ԑ󂐶¥²¿ɾ³�Ňꀶ £©¡£AUTO_INCREMENTֵ¿ʓLTER TABLE»𻲰an>myisamch4ט׃¡£

·         ɧ¹�τ¼�ıԐؔԉ¿ꂋ£¬՚Ǥ̼П³̴ӱµō¬ʱ£¬ţ¿ʒӉNSERTтѐµ½±¡££¨֢±»ɏʶΪ²¢·¢²ڗ�©¡£ؔԉ¿鶄³�ȗ�¾³�ẻ£¬»󖠊ȓñȵ±ǰŚɝ¶඄˽¾ݶԶ¯̬³¤¶ɐи�ẻ¡£µ±̹Ԑؔԉ¿鱻ԃΪ£¨ͮú£©£¬δ4µIJ扫Ԗ±䴉²¢·¢¡£

·         ţ¿ʒ԰Ҋ���Ɣڲ»ͬĿ¼£¬ԃDATA DIRECTORYº̉NDEX DIRECTORYѡЮCREATE TABLEӔ»񶃸�ٶȣ¬ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#create-table" title="13.1.5. CREATE TABLE Syntax">13.1.5½ڣ¬¡°CREATE TABLEԯ·¨”¡£

·         ÿ¸��ӔԖ²»ͬµŗַ�ȫ²ϔ¼a href="charset.html" title="Chapter 10. Character Set Support">µر0ւ £º¡°ؖ·�³֡±¡£

·         ՚MyISAM̷ӽτ¼�»¸�¾£¬̼±±·񱼕�ա£ɧ¹�myisam-recoverѡЮǴ¶¯mysqld£¬MyISAM±´򿪵Ċ±º򱼗Զ¯¼쳩£¬ɧ¹�±»²»ǡµ±µعرգ¬¾ΐ޸´±

·         ɧ¹�--update-stateѡЮՋѐmyisamchk£¬̼±뗢±ӑ¼쳩¡£myisamchk --fastֻ¼쳩ŇЩûԐ֢¸�¾µı

·         myisamchk --analyzeΪ²¿·ּ�³¼ǐƏ¢£¬ҲΪֻ¸�洢ͳ¼ǐƏ¢¡£

·         myisampack¿ʒԴ򱻂LOBº̖ARCHAR¡£

MyISAMҲ֧³׏Áьٕ�/span>

·         ֧³մrue VARCHAR`э£»VARCHARӔ´洢՚2¸�ۖеij¤¶ɀ´¿ªʼ¡£

·         ԐVARCHARµıӔԐ¹̶¨»򶰌¬¼Ȃ¼³¤¶ȡ£

·         VARCHARº̃HAR¿ʒԶ൯64KB¡£

·         һ¸�䃒µŒѼNj䌷ӽ¶ԿɶӕNIQUE4ʹԃ¡£֢Պѭţ՚±Ɏºρеĺϲ¢ʏԐUNIQUE¡££¨¾¡¹݈絋£¬ţ²»Ŝ՚һ¸�QUEӑ¼Nj䌷ӽʏ̷̑£©¡£

¶ӍyISAM´洢ӽȦ£¬Ԑһ¸�돸µł܌³՚http://forums.mysql.com/list.php?21¡£

15.1.1MyISAMǴ¶¯ѡЮ

Ђ¶Ҽstrong>mysqld µő¡Ю¿ʓĀ´¸ı㌹ISAM±ѐΪ£º

·         --myisam-recover=mode

ʨ׃Ϊ±@£MyISAM±¶¯»ָ´µń£ʽ¡£

·         --delay-key-write=ALL

¶Ոκ͍yISAM±д²ڗ�䲻Ҫˢт¼��span>

עˍ£ºɧ¹�֢ôض¡£µ±±ʹԃא֮ʱ£¬ţӦ¸ò»ʹԃ4ؔ­һ¸�򶃍yISAM±±Ɉ絓­һ¸�QL·�󔁼strong>myisamchk£©¡£֢ôض»ᵼ̷ׂӽ±»dž»µ¡£

¶Պ¹ԃ--delay-key-writeµıʹԃ--external-lockingûԐ°𐗺¡£

ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#server-options" title="5.3.1. mysqld Command-Line Options">5.3.1½ڣ¬¡°mysqldļ®ѐѡЮ”¡£

Ђϵͳ±偿ӰЬMyISAM±ѐΪ£º

·         bulk_insert_buffer_size

ԃ՚¿鳥ɫԅ»¯אµŊ�戸µĴ�£עˍ£º֢ˇһ¸�>per threadµŏߖơ£

·         (OBSOLETE) myisam_max_extra_sort_file_size

֢¸��»՚MySQLאʹԃ¡£

·         myisam_max_sort_file_size

ɧ¹�τ¼�ó¬¹�¬²»Ҫʹԃ¿팙ƅѲ̷ӽ·½·¨4´´½¨һ¸��rong>עˍ£º֢¸��ڵŐϊ½¸�

·         myisam_sort_buffer_size

ʨ׃»ָ´±ʱʹԃµĻº³戸µijߴ硣

ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#server-system-variables" title="5.3.3. Server System Variables">5.3.3½ڣ¬¡°·�µͳ±偿”¡£

ɧ¹�myisam-recoverѡЮǴ¶¯mysqld£¬ؔ¶¯»ָ´±»¼¤»՚֢זȩ¿�¬µ±·�򿫒»¸�SAM±ʱ£¬·�Ὤ²ꋇ·񲭱»±뗢Ϊ±@££¬»󖟱´򿪼NJ�Ƿ񲼎ª0Ȓţֽԃ--skip-external-lockingՋѐ·�£ɧ¹�͵¼�ϒ»¸�棬Ђȩ¿��o:p>

·         ±²鵭¡£

·         ɧ¹�Ƿ·¢Жһ¸�󣭋��ٱ¸´£¨ƅѲȒ²»טт´´½¨˽¾ގļ�

·         ɧ¹�ӲΪ˽¾ގļ�»¸�󷹊§°ܣ¨}ɧ£¬һ¸�´¼�©£¬·�╙´γ¢˔ў¸´£¬֢һ´ϖؽ¨˽¾ގļ�:p>

·         ɧ¹�ɔȻʧ°ܣ¬·�þʐ޸´ѡЮ·½·¨ՙט˔һ´ϐ޸´£¨һѐ½Ԓ»ѐµِ´£¬²»ƅѲ£©¡£֢¸�¨Ӧ¸Ąݐ޸´ɎºπᑍµĴ£¬²¢ȒѨҪºܵ͵Ĵƅ̿ռ䡣

ɧ¹�²»Ŝ¹»´ԏɇ°Ϊ³ɵœ¦o»ָ´̹Ԑѐ£¬¶�²»Ŝ՚--myisam-recoverѡЮֵָ¶¨FORCE£¬ؔ¶¯ў¸´»◕ֹ£¬²¢՚´ɕ־oдһ͵´хϢ£º

Error: Couldn't repair table: test.g00pages

ɧ¹�¶¨FORCE£¬ȡ¶�µأ¬`֢̆ҹµŒ»¸�汻¸�

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

עˍ£ºɧ¹�»ָ´ֵ°�KUP£¬»ָ´½�½¨τ¼�i>tbl_name-datetime.BAKюʽȡĻ¡£ţӦ¸ēђ»¸�an>cron½ű¾£¬̼ؔ¶¯°ҕ㐩τ¼�ݿㄿ¼ӆµ½±¸·ރ½׊ʏ¡£

15.1.2.¼�Ŀռ⺯span>

MyISAM±ԃBэ˷̷ӽ¡£ţ¿ʒԴׂԵؼNj䌷ӽτ¼�¡Ϊ(key_length+4)/0.67, ¼ԉЋ�¼�£µ±̹Ԑ¼�򶅋³Ѳ²扫²¢Ȓ±ԐɎºϑ¹̵µļ�¬Ӕʏ¹<NJǶ՗µŇꀶµġ£

ؖ·�ӽˇ±»¿ռ呹̵µġ£ɧ¹�¸��ӽ²¿·׊ȗַ�̼Ҳ±»¼ԇ°׺ѹ̵¡£ɧ¹�´®Ԑѭ¶ᎏҷ¿ռ䣬»󘖷�ˇһ¸�Dz»ԃΪȫ³¤¶ȵÖARCHAR£¬¿ռ呹̵ʹµċ�ļ�µȩ¿�Ŋ�¡¡£ǰ׺ѹ̵±»ԃ՚Ӕؖ·�ʼµļ�纻Ԑѭ¶࿟Ԑͬһǰ׺µŗַ�ǰ׺ѹ̵ˇԐ°𐗺µġ£

՚MyISAM±ţҲ¿ʒՔڴ´½¨±ʱº󍨹�ACK_KEYS=14ǰ׺ѹ̵˽ؖ¡£µ±˽ؖ±»Ӕ¸ֽࠗۓƏȴ洢֮ʱ£¬ɴţԐѭ¶࿟Ԑͬһǰ׺µŕ�¼��¨ˇԐ°𐗺µġ£

15.1.3MyISAM±´洢¸򊻼/span>

MyISAM֧³׈�¬´洢¸򊽡£Ǥא}¸�̶¨¸򊽺Ͷ¯̬¸򊻩¸�ʹԃµŁеŀᑍ4ؔ¶¯ѡձ¡£µۈ�´ӑѹ̵¸򊽣¬ֻŜʹԃmyisampack¹¤¾ࠀ´´´½¨¡£

µ±ţCREATE»񀋔ERһ¸�ςLOB»񓄘Tµıţ¿ʒՓ’OW_FORMAT±Юǿ׆±¸򊾎ªFIXED»񃘎AMIC¡£֢ »ᵼׂCHARº̖ARCHARӲFIXED¸򊽱䴉CHAR£¬»󓱄YNAMIC¸򊽱䴉VARCHAR¡£

ͨ¹�ER TABLEָ¶¨ROW_FORMAT={COMPRESSED | DEFAULT}£¬ţ¿ʒՑ¹̵»򾣑¹̵±ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#create-table" title="13.1.5. CREATE TABLE Syntax">13.1.5½ڣ¬¡°CREATE TABLEԯ·¨”¡£

15.1.3.1. ¾²̬£¨¹̶¨³¤¶ȣ©±ַ

¾²̬¸򊾊ƍyISAM±Ĭɏ´洢¸򊽡£µ±±°�¿³¤¶ɁУ¨VARCHAR, BLOB, »񓄘T£©ʱ£¬ʹԃ֢¸�½¡£ÿһѐԃ¹̶¨ؖ½ۊ�£

MyISAMµň�¢¸򊾖У¬¾²̬¸򊽾Ηµ¥Ҳˇخ°²ȫµģ¨ׁʙ¶Փؼ/span>±@£¶�¡£¾²̬¸򊾒²ˇخ¿춄on-disk¸򊽡£¿팙4ؔԚ˽¾ގļ�єڴƅ͉ϱ»֒µ½µňޒ׷½ʽ£ºµ±°´̷֕ӽאµŐкŲꖒһ¸�±£¬ԃѐ³¤¶ȳ̒Րкš£ͬҹ£¬µ±ɨĨһ¸� ʱº򣬺݈ޒؓă¿¸�̶rڗ�»¶¨˽µļȂ¼¡£

µ±MySQL·���¨¸򊼍yISAMτ¼�±º򣭈纻¼Nj㼺±@£‹£¬°²ȫˇДȻµġ£՚֢זȩ¿�¬myisamchk¿ʒՈޒ׵ؾ�¿ѐ´Ԅŀ↑ʼµ½ńo½⋸£¬̹Ӕ̼ͨ³£¿ʒՊջً�¼£¬³�̒»²¿·ֵļȂ¼¡£עӢ£¬»�¾ސУ¬MyISAM±ӽ¿ʒՒ»ֱ±»טт¹¹½¨¡£

¾²̬¸򊽱һ°䍘ַ£º

·         CHAR¶Ձпˇ¿ռ卮²¹µġ£

·         ·dz£¿졣

·         ɝӗ»º´档

·         ±@£º􉞒ؖؽ¨£¬ӲΪ¼Ȃ¼λԚ¹̶¨λ׃¡£

·         טтة֯ˇ²»±ْªµģ¬³�¾³�ļȂ¼²¢ȒϣλΪ²ڗ�³͚³�̿ռ䡣Ϊ´ˣ¬¿ʊ¹ԃOPTIMIZE TABLE»󖝼strong>myisamchk -r¡£

·         ͨ³£±ȶ¯̬¸򊽱Ҫ¸�ƅ̿ռ䡣

15.1.3.2. ¶¯̬±ַ

ɧ¹�MyISAM±º¬Ɏºοɱ䳤¶ƍ £¨VARCHAR, BLOB»񓄘TDynamic£©£¬»󖠈纻һ¸�»ԃROW_FORMAT=DYNAMICѡЮ4´´½¨£¬¶¯̬´洢¸򊽱»ʹԃ¡£

֢¸�½¸�Ԓ»µ㣬ӲΪÿѐԐһ¸��ж೤µō·¡£µ±һ¸�¼ӲΪ¸�ẻ±»±䶃¸�üȂ¼Ҳ¿ʒՔڳ¬¹�»׃´¦½⋸¡£

ţ¿ʒՊ¹ԃOPTIMIZE TABLE»𻲴rong>myisamchk4¶Ւ»¸��Ƭ¡£ɧ¹�¸�ѓф䆵·±·Ďʻ򹄱䶄¹̶¨³¤¶ƍ £¬±ҲԐһЩ¿ɱ䳤¶ɁУ¬½�݃㌩Ƭ¶�Щ¿ɱ䳤¶ɁђƵ½Ǥ̼±Ŝˇһ¸��£

¶¯̬¸򊽱һ°䍘ַ£º

·         ³�ɉړشµŁэ⣬̹Ԑµŗַ�ˇ¶¯̬µġ£

·         ՚ÿ¸�¼ǰĦˇһ¸�¼£¬¸Ď»ͼ±ńһ°�ַ�¶Փַۗ�£©»󖝰£¨¶Փۊ�©¡£עӢ£¬֢²¢²»°�¬NULLֵµŁС£ɧ¹�ؖ·�Ώҷ¿ռ哆³�Ɏª££¬»󖠒»¸�ԍ Ϊ£ֵ£¬֢¶¼՚λͼא±뗢‹Ȓ²»±»±£´浽´ƅ̡£ ·ǿַ֗�´玪һ¸�ɗֽڼԗַ�Śɝ¡£

·         ͨ³£±ȹ̶¨³¤¶ȱҪ¸�ƅ̿ռ䡣

·         ÿ¸�¼½�ñِ赳СµĿռ䡣¾¡¹݈絋£¬ɧ¹�¼Ȃ¼±䵳£¬̼¾Ͱ´ѨҪ±»·ֿª³ɶᆬ£¬լ³ɼȂ¼̩Ƭµĺ󺻡£±Ɉ磬ţԃ)չѐ³¤¶ȵŐƏ¢¸�У¬¸Đоͱ䶃Ԑ̩Ƭ¡£՚֢זȩ¿�¬ţ¿ʒՊ±²»ʱՋѐOPTIMIZE TABLE»𻲰an>myisamchk -r4¸ʼnǐՄܡ£¿ʊ¹ԃmyisamchk -ei4»򈡱ͳ¼NJ�/span>

·         ¶¯̬¸򊽱±@£º�Ⱦ²̬¸򊽱őט½¨£¬ӲΪһ¸�¼¿ʄܱ»·׎ª¶๶̩ƬȒt½ӣ¨̩Ƭ£©¿ʄܱ»¶ªʧ¡£

·         ¶¯̬³ߴ罇¼ǚλµŐ㤶ɓďÁбʽ4¼Nj㣺

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

¶Ճ¿¸�Ԑ钪¶µ¶ؖ½ڡ£՚һ¸�µ¼ׂһ¸�¼µŀ©´�±£¬һ¸�¬¼Ȃ¼±»t½ԁˡ£ÿ¸�´½Ԗ‰ڊŲ0ؖ½ڣ¬̹ӔЂһ¸�􀊄ݔۍ¬ҹµŁ´½Ԁᄌѐ¡£ɧ¹�£¬ղ­һ¸�ӽ«±»½¨b¡£ţ¿ʒՊ¹ԃmyisamchk -ed4֒³�ӵŊ��t½ӿʒՓ|strong>myisamchk -r4ӆ³�:p>

15.1.3.3. ӑѹ̵±ַ

ӑѹ̵´洢¸򊾊ȓǼstrong>myisampack¹¤¾ߴ´½¨µŖ»¶x򊽡£

̹ԐMySQL·ַ¢°灯¶¼Ĭɏ°�rong>myisampack¡£ӑѹ̵±Ӕԃmyisamchk4½㑹̵¡£

ӑѹ̵±Ђַ͘£º

·         ӑѹ̵±¾ݷdz£СµĴƅ̿ռ䡣֢خС»¯‹´ƅ͓ā¿£¬µ±ʹԃ»ºýµĴƅ̣¨ɧCD-ROM)֮ʱ£¬֢ˇºݓѓõġ£

·         ÿ¸�¼ˇ±»µ¥¶Q¹̵µģ¬̹ӔֻԐ·dz£СµķĎʿª֧¡£Ӏ¾ݱخ´󶄼Ȃ¼£¬һ¸�¼µō·՚ÿ¸�ѕ¼¾۱µ½3¸�ڡ£ÿ¸􋋁б»²»ͬµّ¹̵¡£ͨ³£ÿ¸�ђ»¸�¬µÈuffman˷¡£һЩѹ̵`эɧЂ£º

o        º�ռ呹̵¡£

-        ǰ׺¿ռ呹̵¡£

-        £ֵµŊ��´´洢¡£

-        ɧ¹�¸�΁іеŖµԐһ¸�ķ¶Χ£¬±»ԃخС¿ʄܵŀᑍ4´洢¡£±Ɉ磬һ¸�INT£¨8ؖ½ڣ©£¬ɧ¹�̼µŖµ՚-128µ½127·¶ΧŚ£¬̼¿ʒԱ»´洢ΪTINYINT£¨1ؖ½ڣ©

-        ɧ¹� ½�»Сة¿ʄܵŖµ£¬µŀᑍ±»ת»¯³ȅNUM¡£

-        һ¸􋋁пʒՊ¹ԃЈǰѹ̵`эµňϒ⻏²¢¡£

·         ¿ʒԴ¦m¹̶¨³¤¶Ȼ򶰌¬³¤¶ȼȂ¼¡£

15.1.4MyISAM±닊·½ĦµŎˌຯspan>

MySQLԃ4´洢˽¾ݵŎļ�Ѿ­±»¹㷺²㋔¹�݊ȓе¼ׂ˽¾ݱµċ𻵵Ļ·¾³¡£

15.1.4.1. ̰»µµÍyISAM±뺯span>

¼´ʹMyISAM±ʽ·dz£¿ɿ¿£¨SQLԯ¾䷔±µŋ�±啚ԯ¾䷵»ٖ®ǰ±»дЂ£©£¬ɧ¹�Ɏºϊ¼�¬ţӀȻ¿ʒԻ񶄋𻵵ı

·         mysqld½�дא¼䱻ɱµ�/span>

·         ·¢ʺδԤǚµļNj㼺¹رգ¨}ɧ£¬¼Nj㼺±»¹رգ©¡£

·         Ӳ¼�£

·         ţ¿ʒՍ¬ʱ՚ֽ±»·�޸ĵıʹԃ΢²¿³͐򣩈廳trong>myisamchk£©¡£

·         MySQL»񌸉SAM´�ɭ¼�£

һ¸�µµıµ呍֢״ɧЂ£º

·         µ±՚´ӱѡձ˽¾ޖ®ʱ£¬ţµõ½ɧЂ´£º

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

·         ²ꑯ²»Ŝ՚±֒µ½ѐ»򷵻ز»ΪȫµŊ�/span>

ţ¿ʒՓƒHECK TABLE statementԯ¾倴¼쳩MyISAM±뺯span>µĽ¡¿µ£¬²¢ԃREPAIR TABLEў¸´һ¸􋋋𻵵ÍyISAM±µ±mysqld²»Ջѐ֮ʱ£¬ţҲ¿ʒՓ|strong>myisamchk﮼쳩»󑟀¸�£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#check-table" title="13.5.2.3. CHECK TABLE Syntax">13.5.2.3½ڣ¬¡°CHECK TABLEԯ·¨”£¬ 13.5.2.6½ڣ¬¡°REPAIR TABLEԯ·¨”£¬º˼a href="http://book.chinaz.com/mysql5/database-administration.html#myisamchk" title="5.9.5. myisamchk — MyISAM Table-Maintenance Utility">5.9.5½ڣ¬¡°myisamchk — MyISAM±»¤¹¤¾ݦrdquo;¡£

ɧ¹�±µĆµ·±̰»µ£¬ţӦ¸Ċ՗ƈ·¶¨Ϊʲô»▢ҹµŔ­Ӳ¡£Ҫķ°׵ŗҪµŊÊDZµċ𻶊Dz»ˇӲΪ·�@£µĽẻ¡£ţ¿ʒՔڴɕ־א²ꖒخ½�tarted mysqldлϢ4էǚҩ֤֢¸�纻´畚֢ҹһ¸�¢£¬ղ±»µˇ·�5�»¸��Ԑ¿ʄܵġ£·򕲣¬̰»µ¿ʄݔە��¢ʺ¡£֢ˇһ¸�ݡ£ţӦ¸Ċ՗Ŵ´½¨һ¸�¾֢¸�ⶄ¿ʖظ´ʺ³ɵIJ㋔°¸}¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/problems.html#crashing" title="A.4.2. What to Do If MySQL Keeps Crashing">A.4.2½ڣ¬¡°ɧ¹�L±£³ֱ@££¬¸Ĕ��quo; ¼°E.1.6½ڣ¬¡°ɧ¹�±#£¬ȫʺ³ɲ㋔°¸}”¡£

15.1.4.2. δ±»ˊµ±¹رյıϊ͢

ÿ¸�SAM̷ӽτ¼�)՚ͷԐһ¸���»ԃ4¼쳩һ¸�Ƿ񱼇¡µ±µعرա£ɧ¹�CHECK TABLE»𻲴rong>myisamchkµõ½Ђ¾¯¸棬Ӣζ؅֢¸��­²»ͬ²½‹£º

clients are using or haven't closed the table properly

֢¸�沢²»ˇΪȫӢζ؅±±»dž»µ£¬µ«ţׁʙӦ¸ü쳩±

¼NJ�¤ط·½ʽɧЂ£º

·         ±MySQLאµے»´α»¸��ļ�NJ�»¡£

·         ՚δ4µĸ�¬¼NJ�»¸ı䡣

·         µ±±خº􊶀�գ¨ӲΪһ¸��SH TABLE»󓳎ª՚±³戸אûԐ¿ռ䣩֮ʱ£¬ɴ±¾­՚Ɏºε㱻¸�򽇊�»¡£

·         µ±ţўm»򽬲鲭²¢Ȓ·¢Ж±ºĖ®ʱ£¬¼NJ�ٖĎª£¡£

·         Ҫ±݃㔫Ǥ̼¿ʄܼ쳩±½�ѐ˂ϱµŎˌ⣬ɴ¼NJ�㣬՚¹ر֊±¼NJ��£

»»¾仰4˵£¬¼NJ�єۏÁчꀶ»᲻ͬ²½£º

·         MyISAM±̦µے»´η¢³�OCK TABLESº̆LUSH TABLES±»¸´׆¡£

·         MySQL՚һ´θ�¹ر֖®¼䲀#£¨עӢ£¬±ŜӀȻΪºã¬ӲΪMySQL؜ˇ՚ÿ¸�單¼厪ÿ¼��ڗ�£

·         һ¸�»myisamchk --recover»𻲰an>myisamchk --update-stateў¸ģ¬ͬʱ±»mysqldʹԃ¡£

·         ¶๶mysqld·��²¢Ȓһ¸�򇸔ے»¸�Ж´ѐREPAIR TABLE»񂇅CK TABLE£¬ͬʱ¸ñ±»­һ¸�򇸊¹ԃ¡£՚֢¸�¹א£¬ʹԃCHECK TABLEˇ°²ȫµģ¬̤Ȼţ¿ʄܴԆ匼·�ϵõ½¾¯¸档¾¡¹݈絋£¬REPAIR TABLEӦ¸ñ»±݃⣬ӲΪµ±һ¸�򇸓Ē»¸�Ŋ��ɵŖ®ʱ£¬֢²¢ûԐ·¢̍хºŵ½Ǥ̼·�ϡ£

؜µŀ´˵£¬՚¶฾ϱǷ֮¼世Эһ¸�ބ¿¼ˇһ¸��£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#multiple-servers" title="5.12. Running Multiple MySQL Servers on the Same Machine">5.12½ڣ¬¡°՚ͬһ¸��̐ж๶MySQL·�rdquo; »񶃸�ׂټ/span>

15.2. InnoDB´洢ӽȦ

15.2.1InnoDB¸Ɗ�p>

InnoDB¸�L͡¹© ‹¾ࠓьύ£¬»ع�@£»ָ´ŜfµŊÎ񰳈«£¨ACID¼牝£©´洢ӽȦ¡£InnoDB̸¶¨՚ѐ¼¶²¢ȒҲ՚SELECTԯ¾卡¹©һ¸�cle·繱һׂµķȋ�¡£֢Щ͘ɫն¼э ‹¶ᔃ»§²¿˰ºΐՄܡ£ûԐ՚InnoDBא)´􌸶¨µŐ钪£¬ӲΪ՚InnoDBאѐ¼¶̸¶¨ˊºϷdz£СµĿռ䡣InnoDBҲ֧³ՆOREIGN KEYǿ׆¡£՚SQL²ꑯא£¬ţ¿ʒ՗Փɵؽ«InnoDB`эµıǤ̼MySQLµı`э»컏ǰ4£¬ʵׁ՚ͬһ¸�¯אҲ¿ʒԻ컏¡£

InnoDBˇΪ´¦m¾޴􋽾ށ¿ʱµŗєŜʨ¼ơ£̼µÃPUЧÊ¿ʄ݊Ȉκφ匼»�ƌµĹُµ˽¾ݿ㓽Ȧ̹²»Ŝƥµеġ£

InnoDB´洢ӽȦ±»ΪȫԫMySQL·��InnoDB´洢ӽȦΪ՚׷Ś´痐»º´狽¾ݺ΋��̼ؔ¼ºµĻº³崘¡£InnoDB´洢̼µı̷ӽ՚һ¸�ռ嗐£¬±¼倉Ӕ°���­ʼ´ƅ̷ׇ�֢ԫMyISAM±ͬ£¬±Ɉ蕚MyISAM±ÿ¸�»´畚·׀분τ¼�nnoDB ±ӔˇɎºγߴ磬¼´ʹ՚τ¼�»О׆Ϊ2GBµIJڗ�³ʏ¡£

InnoDBĬɏµر»°�ySQL¶�/span>·ַ¢א¡£Windows Essentials installerʹInnoDB³ʎªWindowsʏMySQLµ Ĭɏ±

InnoDB±»ԃ4՚ך¶ᑨҪ¸ࠐՄܵĴ��¾µ䊏²�׸ϵÉnternetтυվµ⒬ashdot.orgՋѐ՚InnoDBʏ¡£Mytrix, Inc.՚InnoDBʏ´洢³¬¹�˽¾ݣ¬»¹ԐһЩǤ̼վµ䕚InnoDBʏ´¦mƽ¾�800´β扫/¸�ººɡ£

InnoDB՚º̍ySQLһҹ՚ͬһ¸� GPL֤˩£¬µز°棨1991Ū6Ղ°棩Ђ·¢ѐ¡£¸�׍ySQL֤˩µŐƏ¢£¬ȫ²ϔ¼a href="http://www.mysql.com/company/legal/licensing/" target="_top">http://www.mysql.com/company/legal/licensing/¡£

¹ٓىnnoDB´洢ӽȦ£¬՚http://forums.mysql.com/list.php?22Ԑһ¸�¸µł܌³¡£

15.2.2InnoDBjϵхϢ

InnoDBӽȦµij§¼ҵŁªϵхϢ£¬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ѡЮτ¼�pan>

±»InnoDB´洢ӽȦ¹݀}¸�ªµĻ�ƌµŗ˔´ˇInnoDB±¼勽¾ގļ�ň֖¾τ¼�pan>

ɧ¹�¶¨ϞInnoDBƤ׃ѡЮ£¬MySQL½«՚MySQL˽¾ބ¿¼Ђ´´½¨һ¸�ªibdata1µ±0MB´�ŗԶ¯)չ˽¾ގļ�°}¸�ªib_logfile0º̩b_logfile1µµMB´�ň֖¾τ¼�t1:chmetcnv>

עˍ£ºInnoDB¸�L͡¹©¾ࠓьύ£¬ »ع�@£»ָ´ŜfµŊÎ񰳈«£¨ACID¼牝£©´洢ӽȦ¡£ɧ¹�ѐµIJڗ�³ºΓ²¼�纣¸狵µńȑ�£¬InnoDB¾Ͳ»ŜʵЖɧʏŜf¡£ѭ¶೙طϵͳ»򵆅͗ԏµͳ¿ʄݎª¸ʼnǐՄܶ�»򽈂¼д²ڗ�ے»Щ²ڗ�³ʏ£¬¾Ίȏµͳµ�¨fsync()£© ҲҪµɗţ¬ֱµ½̹Ԑδдɫӑ±»ˢтτ¼�ޔڱ»ˢтµ½ψ¶¨Ś´疮ǰ¿ʒՈ·ʵ·µ»فˡ£ӲΪ֢¸�ڗ�³±@£»򶴵耉Ŝ̰»µµ±ǰ͡½»µŊ�󖠔ۗµ ȩ¿�󎫐´²ڗ�»¼Ȃ¼‹£¬ʵׁdž»µ‹˽¾ݿ⡣ɧ¹�Ϊֻє¶Մ㻜טҪ£¬ţӦ¸ĔۓĈκγ͐󔛉�֮ǰضһЩ“pull-the-plug”²㋔¡£Mac OS X 10.3 ¼°Ӕº󱦱¾£¬InnoDBʹԃһ¸�𶃦cntl()τ¼�·½·¨¡£՚LinuxЂ£¬½¨ө½�д»º´档

՚ATAPIӲƌʏ£¬һ¸�Ũdparm -W0 /dev/hdaļ®¿ʄ݆񘸓á£СфijЩȽ¶¯Ƿ»󖟴ƅٖ̿dž�ܲ»Ŝ½�д»º´档

עˍ£ºҪ»񶃺õŐՄܣ¬ţӦ¸Ĉ萂Ħ}̹͖ؓÛŇҹ£¬ķȷ͡¹©InnoDB²ϊ�»µأ¬ţӦ¸ñ༭ʨ׃4ˊºЄ㶄Ӳ¼�󡡠

Ҫ½¨bInnoDB±¼叄¼�y.cnfѡЮτ¼�mysqld]½ۀ𐊹ԃinnodb_data_file_pathѡЮ¡£՚Windowsʏ£¬ţ¿ʒՌ浺µي¹ԃmy.iniτ¼�odb_data_file_pathµŖµӦ¸Ďªһ¸�๶ ˽¾ގļ�Łбɧ¹�Ļһ¸�ϵŊ�� ·ֺè‘;’)·ָ�ǣº

innodb_data_file_path=datafile_spec1[;datafile_spec2]...

}ɧ£º°҃�´½¨µľࠓя፬ַ͘µı¼嘷ΪĬɏʨ׃µʼn闃²ڗ�£º

[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend

֢¸�ą嗃һ¸�©չ´�ijߴ莪10MBµĵ¥¶Nļ�ªibdata1¡£ûԐ¸�¼�ã¬̹ӔĬɏµŊȔٍySQLµŊ�¼Ś¡£

³ߴ絳СԃM»󖞇º�´ָ¶¨˵ķµ¥λˇMB»󖞇B¡£

һ¸�ռ䣬̼՚˽¾ބ¿¼o°��ªibdata1µĹ̶¨³ߴ峰MBµŊ���ªibdata2´�ª50MBµŗԶ¯)չτ¼�ʒҍ б֢ҹ±»Ƥ׃£º

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

һ¸�¨˽¾ގļ�«º����绍˽¸�¡˴є£º

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

autoextend˴єºͺ􄦸�˴єֻ¿ɱ»ԃ4¶өnnodb_data_file_pathѐoخº��ގļ�:p>

ɧ¹�خº󶅊��utoextendѡЮ¡£ɧ¹�τ¼�˱¼嗐µŗՓɿռ䣬InnoDB¾΀©չ˽¾ގļ�¹µķ�ÿ´̸MB¡£

ɧ¹�ӑú£¬ţ¿ʄݏ쒪°҆匼˽¾ތµ½­һ¸�͉ϡ£טтƤ׃һ¸�畚±¼䶄ָ®¼�ref="http://book.chinaz.com/mysql5/storage-engines.html#adding-and-removing" title="15.2.7. Adding and Removing InnoDB Data and Log Files">15.2.7½ڣ¬¡°ͭ¼ӺΉ¾³�B˽¾ݺΈ֖¾τ¼�o;¡£

InnoDB²¢²»¸іªخ´􏄼�¬̹ӔҪСфτ¼�¬՚ŇʏĦخ´󶅎ļ�ŲGB¡£ҪΪһ¸�¯)չ˽¾ގļ�³ߴ磬ȫʹԃmax˴є¡£ЂƤ׃Պѭibdata1ևµ½¼«Оµµ00MB£º

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

InnoDBĬɏµٍٔySQL˽¾ބ¿¼´´½¨±¼叄¼��¸¶¨һ¸�ã¬ȫʹԃinnodb_data_home_dirѡЮ¡£±Ɉ磬Ҫʹԃ}¸�ªibdata1º̩bdata2µŎļ�Ȓª°ҋ�½¨µ½/ibdata£¬ бɧЂһҹƤ׃InnoDB£º

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

עˍ£ºInnoDB²»´´½¨Ŀ¼£¬̹Ӕ՚Ǵ¶¯·�®ǰȫȷɏ/ibdataĿ¼µň·´畚¡£֢¶Մ䆤׃µňκψ֖¾τ¼�´˵Ҳˇ֦ʵµġ£ʹԃUnix»񃎓µíkdirļ®4´´½¨Ɏºαِ趄Ŀ¼¡£

ͨ¹�odb_data_home_dirµŖµԭԭ±¾±¾µز¿˰µ½˽¾ގļ�¢՚ѨҪµĵط½ͭ¼Ԑ±¸ܻ򷵐±¸ܣ¬InnoDBΪÿ¸�ގļ�¿¼·¾¶¡£ɧ¹�db_data_home_dirѡЮ¸�Ԑ՚my.cnfא͡µ½£¬ Ĭɏֵˇ“dot”Ŀ¼ ./£¬֢Ӣ˼ˇMySQL˽¾ބ¿¼¡£

ɧ¹�¶¨innodb_data_home_dirΪһ¸�ַ�ţ¿ʒՎª՚innodb_data_file_pathֵoµŊ���¾¶¡£ЂĦµŀ�ܓۇ°ĦҸ�ӣº

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

һ¸�¥µ¼/span>my.cnf}ؓ¡£¼ډ酣Ԑһ̨Ƥ±¸128MBŚ´滍һ¸�̵ļNj㼺¡£ЂĦµŀ�¾՚my.cnf»񬷮inio¶ӉnnoDB¿ʄܵŅ嗃²ϊ�¨autoextend˴є¡£

֢¸�Ԋʺϴ󷡊�xº̗indowsʏ£¬²»Ы·ׅ㈮noDB˽¾ގļ�¾τ¼��͉ϵœû§¡£̼՚MySQL˽¾ބ¿¼´´½¨һ¸�¯)չ˽¾ގļ�a1º΁½¸�¾τ¼�gfile0¼°ib_logfile1¡£ͬҹ£¬InnoD՚˽¾ބ¿¼oؔ¶¯´´½¨µŐ¡эµµ°¸InnoDBɕ־τ¼�ch_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·�ъʵ±µň¨О՚˽¾ބ¿¼o´´½¨τ¼�»°㶘£¬·�ِ뷔Ɏºϋ�´½¨˽¾ގļ�¾τ¼�¼Ԑ·Ďˈ¨О¡£

עӢ£¬՚һЩτ¼�ϣ¬˽¾ގļ�¡Ԛ2GB¡£˽¾ގļ�¢³ߴ粘ѫׁʙ10MB¡£

µ±ţµے»´δ´½¨һ¸�oDB±¼䣬خºôԃ�´Ǵ¶¯MySQL·�£InnoDBȻº󱒊�´½¨µŐƏ¢´󓡵½ǁĻ£¬̹Ӕţ¿ʒԿ´¼�·¢ʺʲô¡£±Ɉ磬՚Windowsʏ£¬ɧ¹�ong>mysqld-maxλԚC:\mysql\bin£¬ţ¿ʒՈ萂4Ǵ¶¯̼£º

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

ɧ¹�·¢̍·�䴶µ½ǁĻʏ£¬ȫ¼쳩·�Ĵɕ־4¿´՚Ǵ¶¯¹�nnoDB´󓢁̊²ô¡£

ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-init" title="15.2.5. Creating the InnoDB Tablespace">15.2.5½ڣ¬¡°´´½¨InnoDB±¼⥲dquo;£¬Ӕ»񶂉nnoDBДʾµŐƏ¢¿´ǰ4Ӧ¸M бʲôµŀ�

Windowsʏɧºϖ¸¶¨ѡЮ? ՚WindowsʏѡЮτ¼�󉨏£º

·         ֻӦ¸ô´½¨һ¸�cnf»󏄼�pan>

·         my.cnfτ¼�»·Ɣكƌ¸�¡£

·         my.iniτ¼�»·ƖĔٗINDIRĿ¼£»}ɧC:\WINDOWS»񁹜WINNT¡£ţ¿ʒՔٗindows¿ٖnj¨µŃ�¾·�SETļ®4´󓠗INDIRµŖµ£º

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

·         ɧ¹�PC՚Cƌ²»ˇǴ¶¯ƌµĵط½ʹԃǴ¶¯װ՘»�Ψһµő¡ձˇʹԃmy.iniτ¼�:p>

·         ɧ¹�ԃ°²װº΅嗃вµ¼°²װµÍySQL£¬my.iniτ¼�ٍySQLµİ²װĿ¼¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/installing.html#mysql-config-wizard-file-location" title="2.3.5.14. The Location of the my.ini File">2.3.5.14½ڣ¬¡°my.iniτ¼�frdquo;¡£

Unixʏ՚ńoָ¶¨ѡЮ£¿ ՚Unixʏ£¬mysqld´ԏÁюļ��´畚µĻ°¡£ӔЂµŋ³Ѳ¶ˆ¡ѡЮ£º

·         /etc/my.cnf

ȫ¾ב¡Ю¡£

·         $MYSQL_HOME/my.cnf

·�¨ԃѡЮ¡£

·         defaults-extra-file

--defaults-extra-fileѡЮָ¶¨µŎļ�pan>

·         ~/.my.cnf

ԃ»§רԃѡЮ¡£

MYSQL_HOME´�¾³±偿£¬̼Śº¬؅µ½°�򇸗¨ԃmy.cnfτ¼�¼µł·¾¶¡£

ɧ¹�хmysqldֻ´Ԗ¸¶¨τ¼�¡Ю£¬ţ¿ʒՔۆ��®ʱ՚ļ®ѐʹԃ--defaults-optionطΪµے»¸�

mysqld --defaults-file=your_path_to_my_cnf

һ¸�¶µ¼/span>my.cnf}ؓ¡£¼ډ酣Ԑһ̨Linux¼Nj㼺£¬Ԑ2GBŚ´滍ɽ¸�BӲƌ£¨՚Ŀ¼·¾¶/, /dr2º˯dr3)¡£Ђ}ؓДʾ ‹՚my.cnfo¶ӉnnoDB¿ʄܵŅ嗃²ϊ�pan>

[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¿ªʼԃµے»¸�ގļ�¼䡣՚һЩȩ¿�¬ɧ¹�˽¾ݲ»±»·ƖĔۍ¬һϯm´ƅ͉ϣ¬֢ҹ½«¸ʼnNJ�ŐՄܡ£°҈֖¾τ¼�싽¾ގļ�Ĵƅ͉϶ՐՄ݊Ǿ­³£ºݓкô¦µġ£ţҲ¿ʒՊ¹ԃԭʼ´ƅ̷ׇ�ʼʨ±¸£©طΪInnoDB˽¾ގļ��¼ԋ؉/O¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-raw-devices" title="15.2.14.2. Using Raw Devices for the Tablespace">15.2.14.2½ڣ¬¡°Ϊ±¼効ԃԭʼʨ±¸”¡£

¾¯¸亯span>£º՚32λGNU/Linux x86ʏ,ţ±ِ쒪Сф²»Ҫʨ׃¹�ڴ甃¡£glibc¿ʄݔː³̶ѻ�̶ҕ»ʏ·¢չ£¬̼»╬³ʄ㶄·�@£¡£ɧ¹�±ʽµŖµ½ӽ�¬¹�ϵͳ»Ω™Σ»�span>

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

ÿ¸�͊¹ԃһ¸�»£¨ͨ³£ˇ2MB£¬µ«՚MySQL AB¶�/st1:state>·ַ¢°仳pan>oֻԐ256KB£©²¢Ȓ՚خ»µµŇꀶЂҲʹԃsort_buffer_size + read_buffer_size¸½¼Ԅڴ档

ţ¿ʒ՗Լº±ᓫMySQL£¬՚32λWindowsʏʹԃ¸ߴGBϯmŚ´档ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-start" title="15.2.4. InnoDB Startup Options">15.2.4½ڣ¬¡°InnoDBǴ¶¯ѡЮ”o¶өnnodb_buffer_pool_awe_mem_mbµŃ鋶¡£

ɧºε�匼mysqld·�ϊ�pan>Ђֵˇµ呍µģ¬ȒˊԃԚ¶ዽԃ»§£º

[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Ǵ¶¯ѡЮ

֢һ½ې񋵉nnoDBР¹صķ�¡Ю£¬̹Ԑ֢ЩѡЮ¿ʒՒҭ-opt_name=valueµŐϊ½՚ļ®ѐ»󕛑¡Юτ¼�¸¶¨¡£

·         innodb_additional_mem_pool_size

InnoDBԃ4´洢˽¾ބ¿¼хϢ£¦Ǥ̼ڲ¿˽¾ݽṹµńڴ洘µĴ�£ţӦԃ³͐󁯵ı¶࣬ţѨҪ՚֢o·ׅ唽¶඄Ś´档ɧ¹�DBԃ¹る֢¸�ڵńڴ棬InnoDB¿ªʼ´Ӳڗ�³·ׅ党´棬²¢ȒιMySQL´ɕ־д¾¯¸瑅Ϣ¡£ Ĭɏֵˇ1MB¡£

·         innodb_autoextend_increment

µ±ؔ¶¯)չ±¼䱻ͮú֮ʱ£¬Ϊ)չ¶�µijߴ磨MBΪµ¥λ£©¡£ Ĭɏֵˇ8¡£֢¸�Ӕ՚ՋѐʱطΪȫ¾׏µͳ±偿¶�¡£

·         innodb_buffer_pool_awe_mem_mb

ɧ¹�³ر»·Ɣس2λWindowsµÁWEŚ´灯£¬֢¸��º³崘µĴ�¨MBΪµ¥λ£©¡£(½�2λWindowsʏР¹أ©ɧ¹�32λWindows²ڗ�³ʹԃ̹νµ¦ldquo;µٖ·´°¿ۀ©չ£¨AWE)”֧³ֳ¬¹�´棬ţ¿ʒՓĕ⹶²ϊ�oDB»º³崘·ׅ侸AWEϯmŚ´档֢¸��Ŀʄݖµˇ64000¡£ɧ¹�²ϊ�¨‹£¬innodb_buffer_pool_sizeˇ՚32λµٖ·¿ռ䶄mysqldڵĴ°¿ڣ¬InnoDB°҄Ǹ�Ś´瓳ʤʏȥ¡£¶өnnodb_buffer_pool_size²ϊ��ϺõŖµˇ500MB¡£

·         innodb_buffer_pool_size

InnoDBԃ4»º´猼µŊ��ńڴ滺³戸µĴ�£ţ°ҕ⹶ֵʨµĔ½¸ߣ¬·Ďʱ˽¾ސ钪µôƅˉ/OԽʙ¡£՚һ¸�õŊ��ϣ¬ţ¿ʒՉ闃֢¸���´浳Сµ¸0%¡£¾¡¹݈絋£¬»¹ˇ²»Ҫ°ҋ�Č«´󣭒󎪶Վ𐁭Ś´涄¾ºֹ¿ʄݔڲڗ�³ʏµ¼ׂŚ´涷¶ȡ£

·         innodb_checksums

InnoDB՚̹Ԑ¶Դƅ̵Œ³Ħ¶ˆ¡ʏʹԃУҩºΑꖤӔȷ±£¶ɝ´ֹӲ¼�󋽾ގļ�݈絋£¬՚һЩʙ¼�¿�¨±Ɉ蕋ѐ±뗼¼쳩֮ʱ£©֢¸�ⶄ°²ȫַ͘ˇ²»±ْªµġ£՚֢Щȩ¿�¬֢¸� ĬɏˇՊѭµģ©¿ʒՓm-skip-innodb-checksums4¹رա£

·         innodb_data_file_path

µ½µ¥¶J��dzߴ綄·¾¶¡£ͨ¹�odb_data_home_dirl½ӵ½֢oָ¶¨µŃ¿¸�¶£¬µ½ÿ¸�ގļ��·¾¶¿ɱ»»񶃡£τ¼�¨¹�薵β¼ҍ»񈓔MB»󖞇B£¨1024MB£©Ϊµ¥λ±»ָ¶¨¡£τ¼�ĺΖ‰ڊű0MB¡£՚һЩ²ڗ�³ʏ£¬τ¼�¡Ԛ2GB¡£ɧ¹�Ԑָ¶¨innodb_data_file_path£¬¿ªʼµń¬ɏѐΪˇ´´½¨һ¸�5Ĵ�0MBĻΪibdata1µŗՀ©չ˽¾ގļ�Ȑ©֧³ִ􏄼��³ʏ£¬ţ¿ʒՉ闃τ¼�¬¹�ţҲ¿ʒՊ¹ԃԭʼ´ƅ̷ׇ�˽¾ގļ�ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-raw-devices" title="15.2.14.2. Using Raw Devices for the Tablespace">15.2.14.2½ڣ¬¡°Ϊ±¼効ԃԭʼʨ±¸”¡£

·         innodb_data_home_dir

Ŀ¼·¾¶¶Ջ�noDB˽¾ގļ�¬²¿·֡£ɧ¹�ʨ׃֢¸�¬ ĬɏˇMySQL˽¾ބ¿¼¡£ţҲ¿ʒՖ¸¶¨֢¸�ªһ¸�ַ�՚֢זȩ¿�¬ţ¿ʒՔ٩nnodb_data_file_pathאʹԃ¾�¼�£

·         innodb_doublewrite

Ĭɏµأ¬InnoDB´洢̹Ԑ˽¾ށ½´Σ¬µے»´δ洢µ½doublewrite»º³壬Ȼº󵦴¢µ½ȷʵµŊ���Ӕ±»ԃ4½�¸�ܡ£`̆Ԛinnodb_checksums£¬֢¸�싊ĬɏˇՊѭµģ»ӲΪ±뗼¼쳩»󕚶Զ¥¼¶єŜµŐ钪³¬¹�ލ떻є»󀊄ܹ˕ϵĹٗ¢֮ʱ£¬֢¸�--skip-innodb-doublewrite4¹رա£

·         innodb_fast_shutdown

ɧ¹�֢¸��ª0£¬InnoDB՚¹ر֖®ǰضһ¸�«¾»»¯ºΒ»¸�뻺³廏²¢¡£֢Щ²ڗ�¨¼¸·זԊ±¼䣬ʨ׃՚¼«¶̇ꀶЂҪ¼¸¸�±¡£ɧ¹�׃֢¸��InnoDB՚¹ر֖®ʱ͸¹�ڗ� ĬɏֵΪ1¡£ɧ¹�׃֢¸�ª2 (՚NetwareϞ´̖µ)£¬ InnoDB½«ˢт̼µň֖¾Ȼº􁤹ػ�·�QL±@£һҹ¡£ӑ͡½»µŊÎ񲻻ᱻ¶ªʧ£¬µ«՚Ђһ´φ�®ʱ»☶һ¸�£»ָ´¡£

·         innodb_file_io_threads

InnoDBאτ¼�³̵Ŋ��¬֢¸�� Ĭɏµģ¬Ĭɏֵˇ4£¬µ«ˇ´􋾖µ¶ӗindows´ƅˉ/OԐӦ¡£՚Unixʏ£¬ն¼ԕ⹶˽ûԐЧ¹�noDB؜ˇʹԃĬɏֵ¡£

·         innodb_file_per_table

֢¸�ʹInnoDBԃؔ¼ºµ®ibdτ¼�¢˽¾ݺ΋�´½¨ÿһ¸�¶�՚¹²Э±¼嗐´´½¨¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#multiple-tablespaces" title="15.2.6.6. Using Per-Table Tablespaces">15.2.6.6½ڣ¬¡°ʹԃPer-Table±¼⥲dquo;¡£

·         innodb_flush_log_at_trx_commit

µ±innodb_flush_log_at_trx_commit±» ʨ׃Ϊ0£¬ɕ־»º³惿īһ´εر»дµ½ɕ־τ¼�ҶՈ֖¾τ¼�ƅ̲ڗ�¢т£¬µ«ˇ՚һ¸�򍡽»²»ضɎºβڗ�±֢¸�ª1£¨Ĭɏֵ£©֮ʱ£¬՚ÿ¸�򍡽»ʱ£¬ɕ־»º³屻дµ½ɕ־τ¼�֖¾τ¼�ƅ̲ڗ� ˢт¡£µ±ʨ׃Ϊ2֮ʱ£¬՚ÿ¸�»£¬ɕ־»º³屻дµ½τ¼�»¶Ո֖¾τ¼�ƅ̲ڗ�¢т¡£¾¡¹݈絋£¬՚¶Ո֖¾τ¼�ÔۖµΪ2µŇꀶҲÿī·¢ʺһ´Ρ£ϒć±ِ엢Ӣµ½£¬ӲΪ½�ƅϊ͢£¬ÿīһ´ε ˢт²»ˇ100%±£֤ÿī¶¼·¢ʺ¡£ţ¿ʒՍ¨¹�⹶ֵ²»Ϊ14»񶃽ϺõŐՄܣ¬µ«̦֮ţ»╚һ´α@£א̰ʧ¶�»¼ܖµµŊÎ񡤈纻ţʨ׃֢¸�ª0£¬ŇôɎº̼span>mysqld½�±@£»≾³�°خº�분˂ϱ£¬ɧ¹�׃֢¸�ª2£¬ŇôֻԐ²ڗ�³±@£»򶴵糅»≾³�»īµŊÎ񡣾¡¹݈絋£¬InnoDBµı@£»ָ´²»˜ӰЬ£¬¶�Ϊ֢ҹ±@£»ָ´¿ªʼطԃ¶�Ç֢¸�£עӢ£¬ѭ¶೙طϵͳºΒ»Щ´ƅ͓²¼�­ ˢтµ½´ƅ̲ڗ�¡¹݋¢тûԐ½�ţ¿ʒԸ猟mysqldˢтӑ¾­½�¼´ʹʨ׃֢¸�ª1£¬˂ϱµij־ó̶Ȳ»±»±£֤£¬Ȓ՚خ»µȩ¿���⇆»µInnoDB˽¾ݿ⡣՚SCSI´ƅٖ̿dž�¬»󕚴ƅ͗Չ£¬ʹԃԐº󱸵紘µĴƅ̻º´漡¼ԋڎļ�²¢Ȓʹµòڗ�²ȫ¡£ţҲ¿ʒՊ՗Ɗ¹ԃUnixļ®hdparm4՚Ӳ¼�н�ƌд»º´棬»󊺓Ć匼һЩ¶Փ²¼�͗¨ԃµŃ�⹶ѡЮµ Ĭɏֵˇ1¡£

·         innodb_flush_method

֢¸�՚UnixϵͳʏԐЧ¡£ɧ¹�ѡЮ±»ʨ׃Ϊfdatasync £¨Ĭɏֵ£©£¬InnoDBʹԃfsync()4ˢт˽¾ݺΈ֖¾τ¼��׃ΪO_DSYNC£¬InnoDBʹԃO_SYNC4´򿪲¢ˢтɕ־τ¼�¹ԃfsync()4 ˢт˽¾ގļ��RECT±»ָ¶¨‹£¨՚һЩGNU/Linux°汾ʌ¿ʓã©£¬InnoDBʹԃO_DIRECT4´򿫊��¹ԃfsync()4ˢт˽¾ݺΈ֖¾τ¼�⣬InnoDBʹԃfsync()4ͦ´�async()£¬²¢Ȓ̼ Ĭɏ²»ʹԃO_DSYNC£¬ӲΪ֢¸�ېUnix±嗖ʏӑ¾­·¢ʺϊ͢¡£

·         innodb_force_recovery

¾¯¸棺֢¸�՚һ¸�±ȩ¿�»¶¨ӥ£¬µ±ʱţЫҪ´ԋ𻵵Ŋ�ª´¢±¿ʄܵŖµΪ´ѱµ½6¡£֢ЩֵµŒ㋼՚15.2.8.1½ڣ¬¡°ǿ׆»ָ´”אѰ˶¡£طΪһ¸�«´슩£¬µ±֢¸�´�䖮ʱ£¬InnoDBبֹԃ»§ў¸Ŋ�

·         innodb_lock_wait_timeout

InnoDB˂ϱ՚±»»ع�°¿ʒԵȴ��³¬ʱī˽¡£InnoDB՚̼ؔ¼ºµ ̸¶¨±ؔ¶¯¼쳢˂ϱ̸̀²¢Ȓ»ع�񡢉nnoDBԃLOCK TABLESԯ¾嗢Ӣµ½̸¶¨ʨ׃¡£Ĭɏֵˇ50ī¡£

Ϊ՚һ¸�ƽ¨bאخ´􀊄ܵij־ó̶Ⱥ΁¬¹⑔£¬ţӦ¸Ĕۖ�򇸉ϵíy.cnfτ¼�©nnodb_flush_log_at_trx_commit=1º̳ync-binlog=1¡£

·         innodb_locks_unsafe_for_binlog

֢¸�InnoDB̷̑º΋�¨Ĩא¹ر֏Ò»¼�£֢¸� Ĭɏֵˇ¼٣¨false£©¡£

ֽ³£µأ¬InnoDBʹԃһ¸�ǎªnext-key lockingµŋ㷨¡£µ±̷̑»󉩃钻¸��®ʱ£¬InnoDBӔ֢ҹһז·½ʽʵѐѐ¼¶̸¶¨£¬̼¶Ոκϓ�ŋ�Ȃ¼ʨ׃¹²ЭµĻ򷁕¼µŋ�Ӳ´ˣ¬ѐ¼¶̸¶¨ʵ¼ˊȋ�Ȃ¼̸¶¨¡£InnoDB¶Ջ�Ȃ¼ʨ׃µŋ�ӰЬ±»̸¶¨̷ӽ¼Ȃ¼֮ǰµ¦ldquo;gap”¡£ɧ¹�ԃ»§¶Մ³һ̷ӽڵļȂ¼RԖ¹²ЭµĻ򷁕¼µŋ�­һ¸�§²»Ŝb¼´՚R֮ǰӔ̷ӽµŋ³Ѳ²扫һ¸�ŋ�Ȃ¼¡£֢¸�ׂInnoDB²»՚̷̑»󌸒�ъ¹ԃЂһ ¼�£Ђһ¼�Ո»±»ԃ4ȷ±£΢¼�°ט¸´¼�£עӢ£¬ʹԃ֢¸�Ŝ»ᵼׂһЩ¹µŎˌ⣺¼ډ酣ЫҪԃֵ´�00µı늶·�±¶ˆ¡²¢̸¶¨̹ԐµŗӼȂ¼£¬ͬʱ в̦º�¡¶¨µŐи�©£º

SELECT * FROM child WHERE id > 100 FOR UPDATE;

¼ډ镚idԐһ¸��¯´ҩd´�00µĵے»¸�¼¿ªʼɨĨ̷ӽ¡£ɧ¹�ӽ¼Ȃ¼ʏµŋ�°Ҕڼ叶´¦ʺ³ɵIJ扫ƅ³�¬ͬʱһ¸�б»²徸±¡£ɧ¹�ͬһ¸�򖯄ۖ´ѐͬҹµÓELECT£¬ţ»╚²ꑯ·µ»صĽẻ°�½һ¸�С£֢ҲӢζ؅£¬ɧ¹�Ŀ±»¼ӽ�¿⣬InnoDB²»±£֤lѸє£»¾¡¹݈絋£¬ ¶Փ¦lѸєɔ±»±£֤¡£Ӳ´ˣ¬ɧ¹�ѡЮ±»ʹԃ£¬InnoDB՚´󷡊�¶±𱤖¤READ COMMITTED¡£

֢¸�ׁ¸�«¡£InnoDB՚һ¸�ATE»񃄌ETEא̸ֻ¶¨̼¸�¾³�£֢´󵳼�̋K�Ŝє£¬µ«ˇ¿ʒԷ¢ʺ̸̀¡£עӢ£¬¼´ʹ՚µ±`̆µIJڗ�첻ͬѐʱµŇꀶЂ£¬֢¸�Ȼ²»Պѭ׮ɧUPDATE֢ҹµIJڗ�¹Р̆ѡЮ£¨±Ɉ肭һ¸�ATE£©¡£¿¼ÇЂ}ؓ£º

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

ɧ¹�l½Ԗ´ѐһ¸�¯£º

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

²¢ȒǤ̼l½Ӹ�һ¸�Ԗ´ѐǤ̼²ꑯ£º

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) - µȴ�͡½»»򼘹�pan>

·         innodb_log_arch_dir

ɧ¹�ʹԃɕ־µµ°¸£¬±»Ϊֻдɫµň֖¾τ¼�ń¿¼Ҳ±»¹鵵¡£֢¸���ԃ‹£¬Ӧ¸ñ»ʨ׃µē麯span>innodb_log_group_home_dirһҹ¡£¾¡¹݈絋£¬̼²»ˇ±ِ趄¡£

·         innodb_log_archive

֢¸�±ǰ±»ʨΪ0¡£ӲΪMySQLʹԃ̼ؔ¼ºµň֖¾τ¼�ހ´»ָ´£¬̹Ӕµ±ǰûԐ±ْª4¹鵵InnoDBɕ־τ¼�� Ĭɏֵˇ0¡£

·         innodb_log_buffer_size

InnoDBԃ4ι´ƅ͉ϵň֖¾τ¼��º³戸µĴ�£ķׇµŖµˇ´ѱMBµ½8MB¡£ ĬɏµŊűMB¡£һ¸�ň֖¾»º³敊ѭ´�Î򕌐ж�Ҫ՚˂ϱ͡½»֮ǰι´ƅ͐´ɕ־¡£Ӳ´ˣ¬ɧ¹�´�Î񣭊¹ɕ־»º³戸¸�۔¼´ƅˉ/O¡£

·         innodb_log_file_size

՚ɕ־ةoÿ¸�¾τ¼�¡¡£՚32λ¼Nj㼺ʏɕ־τ¼�¢´�ِ슙Ԛ4GB¡£ Ĭɏˇ5MB¡£ķׇµŖµ´ѱMBµ½N·ז®һ»º³崘´�¬ǤאNˇةoɕ־τ¼�¿¡£ֵԽ´󣭔ڻº³崘ԽʙѨҪ¼쳩µ䋢тѐΪ£¬Ӕ½۔¼´ƅˉ/O¡£µ«¸�֖¾τ¼�¶֢՚±@£ʱ»ָ´µø�/span>

·         innodb_log_files_in_group

՚ɕ־ةoɕ־τ¼�¿¡£InnoDBӔѭ»··½ʽд½�¡£Ĭɏˇ2£¨Ά¼�£

·         innodb_log_group_home_dir

µ½InnoDBɕ־τ¼�¼·¾¶¡£̼±ِ씐º̩nnodb_log_arch_dirһҹµŖµ¡£ɧ¹�ָ¶¨Ɏº͉nnoDBɕ־²ϊ�¬ɏµŊȔٍySQL˽¾ބ¿¼o´´½¨}¸�´��_logfile0º̩b_logfile1µŎļ�t1:chmetcnv>

·         innodb_max_dirty_pages_pct

֢ˇһ¸�§´Ѱµ½100µŕ�Ĭɏˇ90¡£InnoDBאµŖ�͊՗Ŵӻº³崘дҳĦ£¬ʹµĔᒳ£¨ûԐ±»дµŒ³Ħ£©µİٷֱȲ»³¬¹�µ¡£ɧ¹�SUPERȨО£¬֢¸�ֱȿʒՔڷ�̐ъ±°´ЂĦ4¸ı䣺

SET GLOBAL innodb_max_dirty_pages_pct = value;

·         innodb_max_purge_lag

֢¸�׆՚¾»»¯²ڗ�ͺ�±£¬ɧºϑӳ؉NSERT, UPDATEº̄ELETE²ڗ�¨ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-multi-versioning" title="15.2.12. Implementation of Multi-Versioning">15.2.12½ڣ¬¡°¶౦±¾µŊµʩ”£©¡£֢¸��¬ɏֵˇ££¬ӢΪϞғ³١£֢¸�Ӕ՚ՋѐʱطΪȫ¾׏µͳ±偿¶�±䡣

InnoDB˂ϱϵͳά³ג»¸�򂐱¸āб±»UPDATE»񃄌ETE²ڗ�¾Ϊɾ³��£Ƀ֢¸�³¤¶Ɏªpurge_lag¡£µ±purge_lag³¬¹�b_max_purge_lag֮ʱ£¬ÿ¸�ERT, UPDATEº̄ELETE²ڗ�נ((purge_lag/innodb_max_purge_lag)*10)-5ºƒ롣՚¾»»¯ƺ´¦mµĿªʼ£¬ғ³ڃ¿¸򯱃뽆̣¡£ɧ¹�һ¸�ĿʒԿ´µ½ѐ±»¾»»¯µŒ»ׂµĶr鿴£¬ ɾ³�»±»ғ³١£

¶Փюˌⶄ¹¤ط£¬µ呍ʨ׃¿ʄ݊ű°ڍ򣬼ډ鏒ćµŊÎ񻝐¡£¬ֻԐ100ؖ½ڴ�¬ϒć¾ͿʒՔːϒćµıאԐ100MBδ¾»»¯µŐС£

·         innodb_mirrored_log_groups

ϒćΪ˽¾ݿⱣ³ֵň֖¾ةŚͬҹ¿½±´µŊ�±ǰ֢¸�¦¸ñ»ʨΪ1¡£

·         innodb_open_files

՚InnoDBא£¬֢¸�ԫţʹԃ¶ಭ¿ռ励Ԑ¹ء£ָ̼¶¨InnoDBһ´οʒԱ£³ִ򿪵®ibdτ¼�􋾄¿¡£خСֵˇ10¡£ Ĭɏֵ300¡£

¶Үibdτ¼���¶ӉnnoDBµġ£̼ć¶A¢ԚŇЩԉ--open-files-limit·�¡Юָ¶¨µŃ鋶·�²»ӰЬ±´涄²ڗ�/span>

·         innodb_status_file

֢¸�InnoDBΪלǚµÓHOW INNODB STATUSˤ³�¨һ¸��t;datadir>/innodb_status.<pid>¡£

·         innodb_support_xa

µ±±»ʨ׃ΪON»󖝱£¨Ĭɏµأ©£¬֢¸�¿ՊѭInnoDB֧³ה٘A˂ϱאµ ˫в͡½»¡£Պѭinnodb_support_xaµ¼ׂһ¸�ⶄ¶ՊÎ򗼱¸µĴƅ͋¢т¡£ɧ¹�ʹԃXA²¢²»¹ِģ¬ţ¿ʒՍ¨¹�⹶ѡЮΪOFF»𱀴½�¸�¿£¬Ӕ¼�ƅʍ ˢтµĴϊ�ø�nnoDBєŜ¡£

·         innodb_table_locks

InnoDBט˓LOCK TABLES£¬ֱµ½̹ԐǤ̼П³͒Ѿ­ˍ·Ƌ�Ԑ¶Ա̸¶¨£¬MySQL²ŴҌOCK TABLE .. WRITE·µ»ء£Ĭɏֵˇ1£¬֢ӢΪLOCK TABLESɃInnoDBڲ¿̸¶¨һ¸�£՚ʹԃAUTOCOMMIT=1µœ¦ԃo£¬InnoDBµńڲ¿±¶¨»ᵼ̸ׂ̀¡£ţ¿ʒՔ٭y.cnfτ¼�dowsʏˇmy.iniτ¼�闃innodb_table_locks=0 4 л³�ˌ⡣

·         innodb_thread_concurrency

InnoDB˔؅՚InnoDBڱ£³ֲڗ�³П³̵Ŋ�ڻ򶉓ە⹶²ϊ�ŏߖơ£ɧ¹�Ŝϊ͢£¬²¢ȒSHOW INNODB STATUSДʾѭ¶ᐟ³͔ڵȴ�¬¿ʒՈď߳ʦldquo;thrashing” £¬²¢Ȓʨ׃֢¸��򹼴󡤈纻ţµļNj㼺Ԑ¶๶´¦mǷºʹƅ̣¬ţ¿ʒՊ՗ƕ⹶ֵ¸���̣»�Դ¡£һ¸��µˇϵͳʏ´¦mǷºʹƅ̵ĸ�®º͡£ֵΪ500»򲆵00´󼡽�µ�¢·¢¼쳩¡£Ĭɏֵˇ20£¬²¢Ȓɧ¹�´�򶉓ز0£¬²¢·¢¼쳩½«±»½�

·         innodb_status_file

֢¸�InnoDBΪלǚµÓHOW INNODB STATUSˤ³�¨һ¸��t;datadir>/innodb_status.<pid>¡£

15.2.5. ´´½¨InnoDB±¼⺯span>

¼ډ酣ӑ¾­°²װ‹MySQL£¬²¢Ȓӑ¾­±༭‹ѡЮτ¼�ċ�ْªµÉnnoDBƤ׃²ϊ��ySQL֮ǰ£¬ţӦ¸đꖤţΪInnoDB˽¾ގļ�¾τ¼�ń¿¼ˇ·񵧔ڣ¬²¢ȒMySQLԐ·Ď˕㐩Ŀ¼µň¨О¡£InnoDB²»Ŝ´´½¨Ŀ¼£¬ֻŜ´´½¨τ¼�쳩ţԐأ¹»µĿռ倴·Ɗ�֖¾τ¼�:p>

µ±´´½¨InnoDB˽¾ݿ㊱£¬خºôԃ�¾·�MySQL·�strong>mysqld£¬ ¶�´Ѽspan>mysqld_safe°��indowsµķ�̐С£µ±ţ´ԃ�¾·�£¬ţ¿ɿ´¼�ong>mysqld´󓢊²ôӔ¼°·¢ʺ‹ʲô¡£՚Unixʏ£¬ֻѨҪµ�strong>mysqld¡£՚Windowsʏ£¬ʹԃ--consoleѡЮ¡£

µ±՚ѡЮτ¼�¼µم嗃InnoDBº󣬿ªʼǴ¶¯MySQL·�®ʱ£¬InnoDB´´½¨һ¸�ގļ�¾τ¼�oDB´󓢈萂һЩ¶«Ϸ£º

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

һ¸�ÉnnoDB˽¾ݿⱻ´´½¨‹¡£ţ¿ʒՓ|strong>mysql֢ҹͨ³£µÍySQL¿ͻ§¶˳͐󁬽ӵ½MySQL·�£µ±ţԃmysqladmin shutdown¹رԍySQL·�®ʱ£¬ˤ³�Lj萂£º

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

ţ¿ʒԿ´˽¾ގļ�¾τ¼�ӄ䀉Ӕ¿´¼�±»´´½¨¡£ɕ־Ŀ¼Ҳ°��ªib_arch_log_0000000000µŐ¡τ¼���ݿⱻ´´½¨µĽẻ£¬˽¾ݿⱻ´´½¨֮º򈭮oDBȐ¶Ј֖¾¹鵵¡£µ±MySQLՙ´φ�®ʱ£¬˽¾ގļ�¾τ¼�»´´½¨£¬̹Ӕˤ³�򾠣º

InnoDB: Started
mysqld: ready for connections

ţ¿ʒՌinnodb_file_per_tableѡЮµ½my.cnfτ¼�ӈ‰nnoDB´洢ÿһ¸�½MySQL˽¾ݿㄿ¼oؔ¼ºµ®ibdτ¼�ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#multiple-tablespaces" title="15.2.6.6. Using Per-Table Tablespaces">15.2.6.6½ڣ¬¡°ʹԃPer-Table±¼⥲dquo;¡£

15.2.5.1. ´¦mInnoDB³�¯ϊ͢

ɧ¹�DB՚һ¸��д󓢒»¸��³´£¬ͨ³£ϊ͢ˇɧЂאµŒ»¸�

·         ţûԐ´´½¨һ¸�oDB˽¾ގļ�񈭮oDBɕ־Ŀ¼¡£

·         mysqldûԐ·Ď˕㐩Ŀ¼µň¨О Ӕ´´½¨τ¼�pan>

·         mysqld²»Ŝǡµ±µضˆ¡my.cnf»񬷮iniѡЮτ¼�˲»Ŝ¿´µ½ţָ¶¨µő¡Ю¡£

·         ´ƅ͒҂�֟³¬³�ͅ䷮¡£

·         ţӑ¾­´´½¨һ¸�¿¼£¬̼µŃ�ţָ¶¨µŊ��£

·         ՚innodb_data_home_dir»񨭮odb_data_file_pathԐһ¸�¨´¡£

µ±InnoDB˔؅³�¯̼µı¼伲ɕ־τ¼�¬ɧ¹�‹£¬ţӦ¸ĉ¾³�B´´½¨µŋ�¼�㎶؅ˇ̹Ԑibdataτ¼�ϩb_logfilesτ¼�»ţ´´½¨‹һЩInnoDB±Ϊ֢Щ±´ҍySQL˽¾ݿㄿ¼ɾ³�®frmτ¼�ţʹԃ¶ᗘ±¼䶄»°£¬Ҳɾ³�ibdτ¼�»º􅣿ʒՊ՗Ɣٴδ´½¨InnoDB˽¾ݿ⡣خºĊǴԃ�¾·�MySQL·� £¬Ӕ±䅣¿ʒԲ鿴·¢ʺ‹ʲô¡£

15.2.6. ´´½¨InnoDB±뻯:p>

¼ڈ腣ԃmysql testļ®Ǵ¶¯MySQL¿ͻ§¶ˡ£Ҫ´´½¨һ¸�oDB±ţ±ِ앚±½¨SQLԯ¾嗐ָ¶¨ENGINE = InnoDB»󖞔YPE = 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˽¾ݿㄿ¼ЂµôestĿ¼o´´½¨һ¸�ªcustomers.frmµŎļ�¿µأ¬InnoDBΪ'test/customers'±ؔ¼ºµŊ�¼ͭ¼Ԓ»¸�¿¡£֢Ӣζ֢ţ¿ʒՔۆ匼˽¾ݿⴴ½¨һ¸�я፬Ļؖcustomersµı±Ļؖ²»»┫InnoDBڵij捻¡£

ţ¿ʒԶՈκ͉nnoDB±뺯span>£¬ͨ¹�span>SHOW TABLE STATUSԯ¾䣬²ꑯ՚InnoDB±¼党¿֏пռ䶄˽¡£±¼党¿֏пռ䶄˽³�ؼspan>SHOW TABLE STATUSµŊ䴶½ẻڵ¼span>Comment½ۀ}ɧ£º

SHOW TABLE STATUS FROM test LIKE 'customers'

עӢ£¬ͳ¼ƵÓHOWֻ¸�ԚInnoDB±´󹆇ꀶ¡£̼ć±»ԃԚSQLԅ»¯¡£¿ʊǣ¬±̷ӽ±£´µĴ�¬Ӕؖ½ێªµ¥λˇ׼ȷµġ£

15.2.6.1. ɧºϔىnnoDBאԃ²»ͬµÁPI4ʹԃ˂ϱ

Ĭɏµأ¬ÿ¸�ӵ½MySQL·�Ŀͻ§¶˿ªʼ֮ʱˇՊѭؔ¶¯͡½»ģʽµģ¬֢¸�½ؔ¶¯͡½»ţՋѐµŃ¿¸�ԯ¾䡣Ҫʹԃ¶ᔯ¾勂ϱ£¬ţ¿ʒՓ“QLԯ¾㒅T AUTOCOMMIT = 0½�¶¯͡½»£¬²¢ȒԃCOMMITº̒OLLBACK4͡½»»򼘹�ŊÎ񡡍 ɧ¹�Ҫautocommit±£³ִ򿫗´̬£¬¿ʒՔٓTART TRANSACTIONԫCOMMIT»񑎌LBACK֮¼丢װţµŊÎ񡤏Áеŀ�¾}¸�񡣵ے»¸�»͡½»µģ¬µڶ�» »ع�º

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, »󖞍ySQLµı뗼Cµ�ӿە㒹µÁPIʏ£¬ţŜ¹»Ӕؖ·�ʽ·¢̍˂ϱ¿ٖǓ¦£¬ɧCOMMIT£¬µ½MySQL·�¬¾Ώ򇥋�ÓQLԯ¾⋊Ňҹ£¬׮ɧSELECT»񈍓ERT¡£һЩAPIҲ͡¹©µ¥¶5ŗ¨ąµŊÎ򍡽»ºͻع��½·¨¡£

15.2.6.2. ת»»MyISAM±InnoDB

Ҫµắspan>£ºţ²»Ӧ¸Ĕ٭ysql˽¾ݿ⣨±Ɉ磬user»󖞨ost£©o°ЍySQLϵͳ±»»ΪInnoDB`э¡£ϵͳ±ˇMyISAMэ¡£

ɧ¹�Ҫ̹Ԑ£¨·ȏµͳ£©±±»´´½¨³ȉnnoDB±ţ¿ʒԼ򵥵ذФefault-table-type=innodbѐͭ¼ӵ½my.cnf»񬷮iniτ¼�sqld]½ۀ

InnoDB¶ӍyISAM´洢ӽȦ²ʓõĵ¥¶K�´½¨·½·¨ûԐضרąµœŻ¯¡£Ӳ´ˣ¬̼²»ֵµõ¼³�¼ɫ±¼°̦º󴴽¨̷ӽ¡£¸ı咻¸�ªInnoDBэخ¿춄°취¾ΊȖ±½Ӳ扫½�InnoDB±¼´£¬ʹԃALTER TABLE ... ENGINE=INNODB£¬»󔄏፬µĶ¨ӥ´´½¨һ¸�nnoDB±²¢ȒԃINSERT INTO ... SELECT * FROM ...²扫ѐ¡£

ɧ¹�µڶ�ϕNIQUEԼ˸£¬ţ¿ʒՔڵ¼ɫ½׶ω闃£ºSET UNIQUE_CHECKS=0£¬Ӕ™ʱ¹ص�»є¼쳩ºüԋٱµ¼ɫ¡£¶Փڴ󲭣¬֢½ۊ¡‹´􁿵Ĵƅˉ/O£¬ӲΪInnoDB̦º􀊒Պ¹ԃ̼µIJ扫»º³戸4µڶ���»ƺ4дɫ¡£

Ϊ»񶃶Բ扫½�¸�ƣ¬·ֶβ扫´󲭿ʄܱȽϺãº

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

̹Ԑ¼Ȃ¼ӑ¾­±¾²扫֮º󣭄䀉Ӕטļϱ

՚´󲭵ŗª»»א£¬ţӦ¸Ĕ�nnoDB»º³崘µĴ�´¼�ƅˉ/O¡£¾¡¹݈絋£¬²»Ҫʹԃ³¬¹�ڲ¿Ś´档ţҲ¿ʒՔ�nnoDBɕ־τ¼�¾τ¼�¡¡£

ȷхţûԐͮú±¼䣺InnoDB±MyISAM±Ҫ´󶃶඄´ƅ̿ռ䡣ɧ¹�ALTER TABLEºľ¡‹¿ռ䣬̼¾Ϳªʼһ¸􋊻ع�¢Ȓɧ¹�´ƅ̰󶨵쬻ع�ݒª¼¸¸�±¡£¶Փڲ扫£¬InnoDBʹԃ²扫»º³戸4Ӕ³ʅ�²¢µڶ��½̷ӽא¡£Ňҹ½ۊ¡‹´􁿴ƅˉ/O¡£՚»ع�¬ûԐʹԃ֢ҹµĻ�¶�Ҫ»¨±Ȳ扫³¤30±¶µŊ±¼倴Ϊ³ɡ£

՚ʧ¿صĻع��¬ɧ¹�˽¾ݿ㗐ûԐԐ¼ܖµµŊ�ȽЃ�Ŋȉ±µ�ݿ⾸³̶�µȼ¸°ڍ򹶴ƅˉ/O±»Ϊ³ɡ£ ΪֻµĹ�볎Մ15.2.8.1½ڣ¬¡°ǿ׆»ָ´”¡£

15.2.6.3. AUTO_INCREMENT՚InnoDBoɧºι¤ط

ɧ¹�һ¸�¸¶¨AUTO_INCREMENT£¬՚˽¾ݴʵ偯µÉnnoDB±±�һ¸�ªؔ¶¯ն³¤¼NJ�NJ��ێª¸M ¸³тֵ¡£ؔ¶¯ն³¤¼NJ�»´洢՚׷Ś´痐£¬¶�´畚´ƅ͉ϡ£

InnoDBʹԃЂ̣·¨4Ϊ°��ªai_colµÁUTO_INCREMENTµı씳�¯ؔ¶¯ն³¤¼NJ���®º󣬵±һ¸�§¶Ա앗�얮ʱ£¬InnoDBִѐµȼ܈萂ԯ¾䶄¶¯ط£º

SELECT MAX(ai_col) FROM T FOR UPDATE;

ԯ¾刡»صŖµװ´μԒ»£¬²¢±»¸³¸�ؔ¶¯ն³¤¼NJ�纻±¿յģ¬ֵ1±»¸³Ԩ¸āС£ɧ¹�ն³¤¼NJ�б»³�¯£¬¶�»§µ�ª±앏Պ¾ˤ³�HOW TABLE STATUSԯ¾䣬ղ¼NJ��¯£¨µ«²»ˇն¼ӼNJ�»´洢Ӕ¹©̦º󶄲扫ʹԃ¡£עӢ£¬՚֢¸�¼»¯א£¬ϒć¶Աһ¸�£µĶU¼¶�/span≯¶¨£¬֢¸�א�ϱµĽ⋸¡£

InnoDB¶Վªт´´½¨±³�¯ؔ¶¯ն³¤¼NJ�ҹµĹ�

עӢ£¬ɧ¹�՚INSERTאΪAUTO_INCREMENTָ¶¨NULL»󖝰£¬InnoDB´¦mѐ£¬¾ͷ·񖵻¹ûԐ±»ָ¶¨£¬ȒΪ̼ʺ³ʒ»¸�µ¡£

ؔ¶¯ն³¤¼NJ��¯֮º󣭈纻ԃ»§²扫һ¸�·ָ¶¨¸āіµµŐУ¬¶�ֵ´�±ǰ¼NJ�¬ղ¼NJ�闃Ϊָ¶¨ ֵ¡£ɧ¹�ķȷָ¶¨һ¸�¬InnoDB¸�Ƿն¼Ԓ»£¬²¢Ȓ¸³тֵ¸�¡£

µ±·Ď˗Զ¯ն³¤¼NJ�±£¬InnoDBʹԃרԃµıµÁUTO-INC̸¶¨£¬¸ċ�µ½µ±ǰSQLԯ¾䶄½⋸¶�µ½ҵϱµĽ⋸¡£ ӽɫ‹רԃ̸ˍ·Ųࠂԣ¬4Ϊ¶Ւ»¸�UTO_INCREMENTµı²扫¸ʼnƲ¿˰¡£}¸�񲼄ݍ¬ʱ¶Ս¬һ±AUTO-INC̸¶¨¡£

עӢ£¬ɧ¹�¹�NJ�Ċ�񣭄䀉Ŝ»╚¸³¸�_INCREMENTµŖµµŐ󂑖з¢Ж¼叶¡£

ɧ¹�¸�һ¸�µ£¬»󖟣¬ɧ¹�¹�Ֆ¸¶¨ֻ˽¸򊽴洢µŗֻ˽£¬ؔ¶¯ն³¤»�ѐΪ²»±»¶¨ӥ¡£

՚CREATE TABLEº́LTER TABLEԯ¾嗐£¬InnoDB֧³ՁUTO_INCREMENT = n ±Ю4ʨ׃¼NJ�¼ֵ»򲤸�NJ�£Ӳ՚±¾½۔萈͖ÛµŔ­Ӳ£¬֢¸�ӰЬ՚·�ن�Ύߐ§‹¡£

15.2.6.4.΢¼�/span>

InnoDBҲ֧³׍⽼Լ˸¡£InnoDBא¶Ս⽼Լ˸¶¨ӥµœ﷨¿´ǰ4ɧЂ£º

[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э£¬̼ć²»Ŝˇ™ʱ±

·         ՚ӽԃ±£¬±ِ씐һ¸���¬ҹµŋ³Ѳ±»՚ǤאطΪµے»¡£֢ҹһ¸��»´畚£¬̼±ِ앚 ӽԃ±±»ؔ¶¯´´½¨¡£

·         ՚ӽԃ±£¬±ِ씐һ¸���ђՍ¬ҹµŋ³Ѳ±»՚ǤאطΪµے»¡£

·         ²»֧³ֶՍ⽼µŋ�°׺¡£֢ҹµĺ󺼖®һˇBLOBº̔EXT²»±»°�»¸��/span>֢ˇӲΪ¶Օ㐩µŋ�ِ옜ˇ°��º³¤¶ȡ£

·         ɧ¹�TRAINTsymbol±»¸�̼՚˽¾ݿは±ِ싇Ψһµġ£ɧ¹�Ԑ±»¸�InnoDBؔ¶¯´´½¨֢¸�֡£

InnoDB¾ܾ�˔؅՚ؓ±½¨һ¸��»ƥƤ՚¸¸±µĺ󑡼�NSERT»񔏄ATE²ڗ�»¸�һЩƥƤµŐ΍ µŗӱInnoDB¶ՈκϊՍ¼¸�¾³�º󑡼�PDATE»񃄌ETE²ڗ��£¬֢¸���†OREIGN KEYؓ¾䶄ON UPDATEº̏N DETETEؓ¾喸¶¨µ¼em>referential action¡£µ±ԃ»§˔ͼ´Ԓ»¸�³�Ò»ѐ֮ʱ£¬Ȓ՚ؓ±Ԑһ¸�๶ƥƤµŐУ¬InnoDB¸�²ʈ¡µĶ¯طԐϥ¸�񣸼/span>

·         CASCADE: ´Ӹ¸±³�ÇӗԶ¯ɾ³�×ӱƥƤµŐС£ON DELETE CASCADEº̏N UPDATE CASCADE¶¼¿ʓá£՚}¸�®¼䣬ţ²»Ӧ¶¨ӥɴ¸ʔڸ¸±ؓ±µō¬һ²ʈ¡¶¯طµÏN UPDATE CASCADEؓ¾䡣

·         SET NULL: ´Ӹ¸±³�ÐУ¬²¢ʨ׃ؓ±µō⽼ΪNULL¡£ɧ¹�ûԐָ¶¨NOT NULLО¶¨´ʣ¬֢¾ΊȎ¨һºϷ¨µġ£ON DELETE SET NULLº̏N UPDATE SET NULLؓ¾䱻֧³֡£

·         NO ACTION: ՚ANSI SQL-92±뗼א£¬NO ACTIONӢζ֢²»²ʈ¡¶¯ط£¬¾ΊȈ纻Ԑһ¸�صō⽼ֵ՚±»²ο¼µı£¬ɾ³�Ö��􍼲»±»Պѭ½�Gruber, ֆϕSQL, 2000:181£©¡£ InnoDB¾ܾ�±ɾ³�²ڗ�

·         RESTRICT: ¾ܾ�±ɾ³�²ڗ�O ACTIONº̒ESTRICT¶¼һҹ£¬ɾ³�ELETE»񎌠UPDATEؓ¾䡣£¨һЩ˽¾ݿ㏵ͳԐғǚ¼쳩£¬²¢ȒNO ACTIONˇһ¸�ڼ쳩¡£՚MySQLא£¬΢¼�DZ»b¼´¼쳩µģ¬̹ӔNO ACTIONº̒ESTRICTˇͬҹµģ©¡£

·         SET DEFAULT: ֢¸��㏶³͐󊶱𣬵«InnoDB¾ܾ�ON DELETE SET DEFAULT»񎌠UPDATE SET DEFAULTؓ¾䶄±ӥ¡£

µ±¸¸±µĺ󑡼�µŊ±º򣫉nnoDB֧³׍¬ҹѡձ¡£ѡձCASCADE£¬՚ؓ±µō⽼ ±»ʨ׃Ϊ¸¸±º󑡼�µ¡£Ӕͬҹµķ½ʽ£¬ɧ¹�±тµŁвο¼՚­һ¸�еō⽼£¬¸�ª¡£

עӢ£¬InnoDB֧³׍⽼՚һ¸�ے�ە㐩ȩ¿�¬ؓ±¼ˉВ㎶֢՚±¸½˴µļȂ¼¡£

InnoDBѨҪ¶Ս⽼ºͱ»ӽԃ¼��⽼¼쳩¿ʒԿ팙½�²»ѨҪһ¸�¨Ĩ¡£¶Ս⽼µŋ�»ؔ¶¯´´½¨¡£֢ˇР¶Փے»ЩO°汾£¬՚O°汾א̷ӽ±ِ섷ȷ´´½¨£¬·򕳍⽼Լ˸µĴ´½¨»⊧°ܡ£

՚InnoDBŚ£¬΢¼�»ӽԃoРӦµŁбِ씐`̆µńڲ¿˽¾ހᑍ£¬Ӕ±䌼ć²»Ѩ`эת»»¾Ϳɱ»±Ƚϡ£ֻ˽`эµĴ�ͷ�ѫРͬ¡£ؖ·�эµij¤¶Ȳ»ѨҪРͬ¡£ɧ¹�¶¨һ¸� NULL¶¯ط£¬ȫȷɏţûԐ՚ؓ±ѻ¸湃 ΪΪNOT NULL¡£

ɧ¹�L´҃REATE TABLEԯ¾䱨¸璻¸�󻃱005£¬²¢Ȓ´хϢؖ·�вerrno 150£¬֢Ӣ˼ˇӲΪһ¸��»²»ֽȷю³ɣ¬±½¨ʧ°ܡ£`̆µأ¬ɧ¹�R TABLEʧ°ܣ¬Ȓָ̼вerrno 150£¬ ŇӢζ؅¶Ւѱ乼µı΢¼�ᱻ²»ֽȷµŐγɡ£ţ¿ʒՊ¹ԃSHOW INNODB STATUS4Дʾһ¸��ЗµÉnnoDB΢¼�ŏ돸½㋍¡£

עˍ£ºInnoDB²»¶ՄȐ© ΢¼�¬NULLµı»ӽԃ¼�ꎢ¼�£

¶ӓQL±뗼µı³k£ºɧ¹�±Ԑ˽¸�¬ǤאԐРͬµ ±»ӽԃ¼�»º򈭮oDB՚΢¼�вʈ¡¶¯ط£¬¾ͷ·񇥋�¬¼�¸ѐ²»´畚һҹ¡£}ɧ£¬ɧ¹�¶¨ӥһ¸�TRICT`эµŔ¼˸£¬²¢ȒԐһ¸��еŗԐУ¬InnoDB²»ՊѭɎºζՕ㐩¸¸ѐµʼn¾³�:p>

¾ԓڶՓ¦΢¼�ŋ�ڵļȂ¼£¬InnoDBͨ¹�Əɑ¡·¨ʩѐ¼¶j²ڗ�/span>

¶ӓQL±뗼µı³k£º ɧ¹�PDATE CASCADE»񎌍 UPDATE SET NULLµݹ鹼тРͬµı֮ǰ՚¼¶j¹�ñ±»¸�¬̼¾Ώ򑄓TRICTһҹ¶¯ط¡£֢Ӣζ؅ţ²»ŜʹԃؔӽԃON UPDATE CASCADE»󖞏N UPDATE SET NULL²ڗ�⽫بֹ¼¶j¸�µŎߏߑ­»·¡£­һ·½Ħ£¬һ¸��N DELETE SET NULLˇԐ¿ʄܵ쬾Ώ򒻸��DELETE CASCADEһҹ¡£ ¼¶j²ڗ�ʒԱ»Ƕ͗³¬¹�

¶ӓQL±뗼µı³k£º `̆һ°㶄MySQL£¬՚һ¸�룬ɾ³�ÐѐµÓQLԯ¾党£¬InnoDBװѐ¼쳩UNIQUEº̆OREIGN KEYԼ˸¡£°´֕SQLµı뗼£¬ ĬɏµŐюªӦ±»ғ³ټ쳩£¬¼´Լ˸½��Lԯ¾䱻´¦m֮º󳅱»¼쳩¡£ֱµ½InnoDBʵЖғ³ٵŔ¼˸¼쳩֮ǰ£¬һЩ˂ȩˇ²»¿ʄܵ쬱Ɉ艾³�¨¹�ο¼µ½ؔʭµļȂ¼¡£

עˍ£ºµ±ǰ£¬´¥·¢Ƿ²»±»¼¶j΢¼��

һ¸��⽼jϵǰ¸¸±ؓ±¼򵦀�£º

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;

ɧЂˇһ¸�´Փµŀ�嗐һ¸�duct_order±Ǥ̼}¸�э⽼¡£һ¸��»¸�duct±µŋ«̷ӽ¡£­һ¸􋋒�ustomer±µĵ¥ѐ̷ӽ£º

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}]

¼ȗ¡Ј´´½¨ѨҪµŋ�/span>¡£ţҲ¿ʒՓLTER TABLEιһ¸�һ¸���£

InnoDBҲ֧³׊¹ԃALTER TABLE4ӆ³��:p>

ALTER TABLE yourtablename DROP FOREIGN KEY fk_symbol;

µ±Ū´´½¨һ¸��¬ɧ¹�IGN KEYؓ¾䱼(һ¸�STRAINTĻؖ£¬ţ¿ʒՒ��׀´ӆ³��⣬µ±΢¼�¨֮ʱ£¬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½㏶³͐𺮳pan>Պѭţ՚FOREIGN KEY ... REFERENCES ...ؓ¾嗐ԃ`£¨backticks)°ѱĻĻؖΧǰ4¡£InnoDB½㏶³͐󒲿¼Çµ½lower_case_table_namesϵͳ±偿µʼn闃¡£

InnoDB·µ»ْ»¸�ō⽼¶¨ӥطΪSHOW CREATE TABLEԯ¾勤³�»²¿·֣º

SHOW CREATE TABLE tbl_name;

´ԕ⹶°汾ǰ£¬mysqldumpҲ½«±ֽȷ¶¨ӥʺ³ɵ½ת´¢τ¼�Ҳ¢²»μ¼ō ΢¼�:p>

ţ¿ʒՈ萂¶Ւ»¸�Պ¾΢¼�º

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

΢¼�»՚ˤ³�omment¡£

µ±ִѐ΢¼�®ʱ£¬InnoDB¶Ջ�ŵŗӻ򸸼Ȃ¼ʨ׃¹²ЭµŐм¶̸¡£InnoDBb¼´¼쳩΢¼�¬¼쳩²»¶ՊÎ򍡽»ғ³١£

ҪʹµöՓэ⽼¹ُµµıт՘ɫת´¢τ¼��¬mysqldumpؔ¶¯՚ת´¢ˤ³���动׃FOREIGN_KEY_CHECKSΪ0¡£֢±݃㕚ת´¢±»טтװ՘֮ʱ£¬ԫ²»µò»±»Ӕ͘±񋴐󗙐×°՘µı¹صŎˌ⡣Ҳ¿ʒՊֶ¯ʨ׃֢¸�¿£º

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

ɧ¹�τ¼�Ս⽼ˇ²»ֽȷ˳Ѳµı֢¾ΒՈκϋ³Ѳµ¼ɫ¸ñ֢ҹҲ¼ӿ쵼ɫ²ڗ�闃FOREIGN_KEY_CHECKSΪ0£¬¶Փ۔ٌOAD DATAº́LTER TABLE²ڗ��⽼О׆Ҳˇ·dz£Ԑԃµġ£

InnoDB²»Պѭţɾ³�»FOREIGN KEY±˸ ӽԃµı³��“ET FOREIGN_KEY_CHECKS=0¡£µ±ţӆ³�ʱº򣭔ۋ�¨ԯ¾偯¶¨ӥµŔ¼˸Ҳ±»ӆ³�:p>

ɧ¹�т´´½¨һ¸�Ƴ�¬̼±ِ씐һ¸�ԓے²ӽԃ̼µō⽼Լ˸µĶ¨ӥ¡£̼±ِ씐ֽȷµŁу�э£¬²¢Ȓɧǰ̹˶£¬̼±ِ뷔±» ӽԃµļ���²»±»úأ£¬MySQL·µ»شºñ005 ²¢՚´хϢؖ·�ָвerrno 150¡£

15.2.6.5. InnoDBº̍ySQL¸´׆

MySQL¸´׆¾Ώ񷓍yISAM±ҹ£¬Ҳ¶ӉnnoDB±طԃ¡£Ӕijז·½ʽʹԃ¸´׆Ҳˇ¿ʄܵģ¬՚֢ז·½ʽא´ӷ�ϱ`э²»ͬԚ׷·�͍ ԭʼ±`э¡£}ɧ£¬ţ¿ʒԸ´׆ў¸ĵ½׷·�В»¸�oDB±µ½´ӷ�В»¸�SAM±¡£

ҪΪһ¸��¨bһ¸��¬ţ²»µò»¸´׆InnoDB±¼仍ɕ־τ¼�°InnoDB±.frmτ¼�Ӓƶ¯¸´¼��£ ¹ٓۆ凡µ±²½רȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#moving" title="15.2.9. Moving an InnoDB Database to Another Machine">15.2.9½ڣ¬¡°ӆ¶¯InnoDB˽¾ݿ⵽­һ̨»�dquo;¡£

ɧ¹�Ӕ¹ر֖�򇷻󖠒»¸�ڵĴӷ�£ţ¿ʒԲʈ¡InnoDB±¼仍ɕ־τ¼�¸·ݣ¬²¢ԃ̼4½¨bһ¸��£Ҫ²»¹رֈκη�´½¨bһ¸�Ĵӷ�¬ţҲ¿ʒՊ¹ԃ·ȃ⸑£¨ʌҵµģ©InnoDBɈ±¸·ݹ¤¾ݼ/a>¡£

InnoDB¸´׆oһ¸�ŏߖNJƌOAD TABLE FROM MASTER²»¶ӉnnoDB`э±طԃ¡£Ԑ}ז¿ʄܵŤطȸ£º

·         ת´¢׷·�ϵıµ¼ɫת´¢τ¼��£

·         ՚ԃLOAD TABLE tbl_name FROM MASTER½¨b¸´׆֮ǰ£¬՚׷·�Њ¹ԃALTER TABLE tbl_name TYPE=MyISAM£¬²¢Ȓ̦º􊺓LTER TABLE°Җ�ª»»»׉nnoDB¡£

՚׷·�§°ܵŊÎ񹹱¾²»ӰЬ¸´׆¡£MySQL¸´׆»�½�־£¬MySQ՚Ňoдў¸Ŋ�QLԯ¾䡣´ӷ�–�򇷵Ķ�֖¾£¬²¢ִѐͬҹµÓQLԯ¾䡣¾¡¹݈絋£¬՚˂ϱo·¢ʺµœ¦²»±»д½�׆ɕ־ֱµ½˂ϱ͡½»£¬՚Ňһ¿̣¬˂ϱo̹Ԑԯ¾䱻һ´ϐՐ´½�¡£ɧ¹�ʧ°݁ˣ¬±Ɉ磬ӲΪ΢¼�¬»󖟣¬ɧ¹�±»»ع�»ԐSQLԯ¾䱻д½�׆ɕ־£¬²¢Ȓ˂ϱ¸�՚´ӷ�Ж´ѐ¡£

15.2.6.6. ʹԃPer-Table±¼⺯span>

ţ¿ʒԴ洢ÿ¸�oDB±̼µŋ�ۋ�Ŏļ�¬֢¸��ǎª“¶ಭ¿ռ⥲dquo; £¬ӲΪʵ¼ˉЃ¿¸�ы�ı¼䡣

¶ՄȐ©Ы°Ҍض¨±ӆµ½·׀쏯m´ƅ̵œû§£¬»󖠄Ȑ©ϣλ¿팙»ָ´µ¥¸�ı¸·ݶ�´򷐆唠InnoDB±ʹԃµœû§£¬ʹԃ¶ಭ¿ռ伡ˇԐӦµġ£

ţ¿ʒՍ�nfµÛmysqld]½یЂĦѐ4Պѭ¶ಭ¿ռ䣺

[mysqld]
innodb_file_per_table

טǴ·�®º󣫉nnoDB´洢ÿ¸�´½¨µı±̹˴ԚµŊ�¿¼Ђ̼ؔ¼ºµŎļ�l_name.ibdo¡£֢`̆ԚMyISAM´洢ӽȦ̹ضµģ¬µ«MyISAM °ѱ³ʊ��l_name.MYDº΋�ļ�l_name.MYI¡£¶ՓىnnoDB£¬˽¾ݺ΋�һǰ´浽.ibdτ¼�tbl_name.frmτ¼�H»±»´´½¨¡£

ɧ¹�my.cnfτ¼�nnodb_file_per_tableѐ£¬²¢טǴ·�¬InnoDB՚¹²Эµı¼叄¼�δ´½¨±

innodb_file_per_tableֻӰЬ±´´½¨¡£ɧ¹�֢¸�¶¯·�¬т±ԃ.ibdτ¼�¨£¬µ«ˇţɔ¾ʄܷĎ˔ڹ²Э±¼偯µıɧ¹�µ��т±¹²Э±¼党´´½¨£¬µ«ţɔ¾ɿʒԷĎˈκϓöಭ¿ռ䴴½¨µı

InnoDB؜ˇѨҪ¹²Э±뀕¼䡣.ibdτ¼�oDB²»أӔȥՋѐ£¬¹²Э±¼䱼º¬ˬϤµébdataτ¼�oDB°҄ڲ¿˽¾ݴʵ仍δطɕ־·Ɣە⹶τ¼�

עˍ£ºţ²»Ŝ б¶ӍyISAMһҹ£¬՚˽¾ބ¿¼֮¼匦Ӣµْƶ¯.ibdτ¼�Ȓ󎪱ӥ±»´畚InnoDB¹²Э±¼党£¬¶�noDB±ِ뱣³׊Î脺Έ֖¾˳ѲºŵŒ»ׂє¡£

՚һ¸�¨µÍySQL°²װo£¬ţ¿ʒՓ’ENAME TABLEԯ¾䱑.ibdτ¼�ªµıһ¸�ݿ㓆µ½­һ¸�ݿ⣺

RENAME TABLE old_db_name.tbl_name TO new_db_name.tbl_name;

ɧ¹�.ibdτ¼��»µı¸·ݣ¬ţ¿ʒ԰´ɧЂ²ڗ�»ǰԴµĵط½»ָ´̼µ½MySQL°²װא£º

1.    ·¢³��ER TABLEԯ¾䣺

2.      ALTER TABLE tbl_name DISCARD TABLESPACE;

¾¯¸亯span>£º֢¸�剾³�ibdτ¼�:p>

3.    °ѱ¸·ݵ¼/span>.ibdτ¼�½ǡµ±µŊ�¿¼¡£

4.   ·¢³��ER TABLEԯ¾⸠

5.      ALTER TABLE tbl_name IMPORT TABLESPACE;

՚ʏЂτא£¬һ¸�dτ¼�ı¸·ޒ㎪£º

·         .ibdτ¼�щю´͡½»µŊÎ򘶵Ő޸ġ£

·         .ibdτ¼�´ºϲ¢µIJ扫»촤͵Ŀ¡£

·         ¾»»¯ӑ¾­´Ѯibdτ¼��±뗢ɾ³��£

·         mysqldӑ¾­°Ϯibdτ¼�ђҐ޸Œ³Ħ´ӻº³崘 ˢтµ½τ¼�:p>

ţ¿ʒՓďÁз½·¨ʺ³ʒ»¸�dτ¼�»±¸·ݣº

1.    ֹ̹ͣԐ4ؔmysqld·�Ļ£¬²¢͡½»̹Ԑ˂ϱ¡£

2.    µȴ�HOW INNODB STATUSДʾ՚˽¾ݿⱻӑ¾­ûԐ¼¤»˂ϱ£¬²¢ȒInnoDB׷П³̵ŗ´̬ˇWaiting for server activity¡£Ȼº􅣾ͿʒԸ´׆.ibdτ¼�

ʺ³ʒ»¸�dτ¼�»¸´׆µŁ¸�¨ˇʹԃʌҵµ¼strong>InnoDBɈ±¸·ݹ¤¾ݼ/span>£º

1.    ʹԃInnoDBɈ±¸·ݹ¤¾ݼ/span>±¸·܉nnoDB°²װ¡£

2.    ՚±¸·މІ�ڶ�rong>mysqld·�/span>£¬Ƀ̼ȥ½౸·ހﶄ.ibdτ¼�:p>

15.2.7. ͭ¼ӺΉ¾³�n>InnoDB˽¾ݺΈ֖¾τ¼�n>

֢һ½ۃ鋶՚InnoDB±¼仄¾¡¿ռ單ʱ£¬»󖠄䐫Ҫ¸ı剕־τ¼�®ʱ£¬ţ¿ʒ՗�»Щ˂ȩ¡£

خ¼򵥵ģ¬ն¼҉nnoDB±¼䵳Сµķ½·¨ˇ´ӿªʼƤ׃̼Ϊؔ¶¯)չµġ£Ϊ±¼䶨ӥoµŗһ¸�ގļ�utoextend˴є¡£Ȼº�ļ�ռ單ʱ£¬InnoDBӔ8MBΪ նؔ¶¯ն¼ӸĎļ�¡¡£ն¼ӵĴ�ʒՍ¨¹�nnodb_autoextend_incrementֵ4Ƥ׃,֢¸�ӍBΪµ¥λ£¬ĬɏµŊŸ¡£

طΪͦ´�¿ʒՍ¨¹�¸�ގļ�ӱ¼䶄³ߴ硣Ҫ֢ôضµĻ°£¬ţ±ِ썣ֹMySQL·�¬±༭my.cnfτ¼�һ¸���odb_data_file_pathµń©β£¬Ȼº�φ��£

ɧ¹�һ¸�ގļ�ؼ�oextend¶¨ӥµģ¬±༭my.cnfτ¼�貘ѫ¿¼Çخº��ގļ��½¶൳¡£»򈢊��磬°ҋ�扫µ½خ½ӽ�024 × 1024bytes (= 1MB)£¬Ȼº�nnodb_data_file_pathאķȷָ¶¨´�ijߴ硣Ȼº􅣿ʒՌ­һ¸�ގļ�Ė»Ԑinnodb_data_file_pathoخº��ݿʒԱ»ָ¶¨Ϊؔ¶¯)չ¡£

طΪһ¸�ӡ£¼ډ貭¿ռ喽ºēђ»¸�¯)չτ¼�a1£º

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

¼ډ関¸�ގļ�ϊ±¼哑¾­³¤µ½988MB¡£ЂĦˇͭ¼ԁ¸�©չ˽¾ގļ�Ņ嗃ѐ£º

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

µ±ţͭ¼Ԓ»¸�ļ�ռ䶄֮º󣭇숷х̼²¢²»´畚¡£µ±ţטǴ·�®ʱ£¬InnoDB´´½¨²¢³�¯֢¸��:p>

µ±ǰ£¬ţ²»Ŝ´ӱ¼剾³����¼䶄´�¬ʹԃɧЂ²½ר£º

1.    ʹԃmysqldumpת´¢̹ԐInnoDB±

2.    ֹͣ·�£

3.    ɾ³�Ѵ畚µı¼叄¼�:p>

4.    Ƥ׃т±¼䡣

5.    טǴ·�£

6.    µ¼ɫת´¢τ¼�:p>

ɧ¹�Ҫ¸ı兣µÉnnoDBɕ־τ¼�¿ºʹ�¬ţ±ِ쒪ֹͣMySQL·�¬²¢ȷх̼±»Ϟ´µعرա£̦º󸵖ƾʈ֖¾τ¼��«µĵط½Ӕ·M󒼄³ҹ¶«Ϸ՚¹ر֊±³��Ҫԃ̼ć4»ָ´±¼䡣´Ԉ֖¾τ¼�¾³�ʈ֖¾τ¼�­my.cnf4¸ı剕־τ¼�¬²¢ՙ´φ�ySQL·�£mysqld՚Ǵ¶¯֮ʱ·¢ЖûԐɕ־τ¼�󹧋ࠄ䌼ֽ՚´´½¨һ¸�ň֖¾τ¼�:p>

15.2.8±¸·ݺͻָ´InnoDB˽¾ݿຯspan>

°²ȫ˽¾ݿ⺜mµĹؼ�ۗ�ݡ£

InnoDBɈ±¸·ݹ¤¾ݼ/span>ˇһ¸�߱¸·ݹ¤¾ߣ¬ţ¿ʒՓċ�nnoDB˽¾ݿ㕋ѐ֮ʱ±¸·ބ㶄InnoDB˽¾ݿ⡣InnoDBɈ±¸·ݹ¤¾ݼ/span>²»Ҫȳţ¹ر֊�¬²¢Ȓ̼²»ʨ׃Ɏºϋ�¸ʈƄዊֽ³£µŊ�¦m¡£InnoDBɈ±¸·ݹ¤¾ݼ/strong>ˇ·ȃ⸑£¨ʌҵµģ©¸½¼Ԉ£¬̼ÿŪµŖ¤˩·ғĊȃ¿̨MySQL·�̐еļNj㼺€390¡£ȫ²ϔ¼a href="http://www.innodb.com/order.html" target="_top">InnoDBɈ±¸·ۼ/a>׷ҳӔ»񶃸�ŐƏ¢Ӕ¼°ǁϽٍ¼¡£

ɧ¹�Ӕ¹رք㶄MySQL·�¬ţ¿ʒՉ�¸�¬InnoDBԃ4¹݀µı̹Ԑτ¼��·ݡ£ʹԃɧЂ²½ר£º

1.    ¹رԍySQL·�¬ȷх̼ˇϞ´¹رա£

2.  ¸´׆ţ̹Ԑ˽¾ގļ�ataτ¼�dτ¼�»¸�«µĵط½¡£ 

3.   ¸´׆ţ̹Ԑib_logfileτ¼��«µĵط½¡£

4.    ¸´׆my.cnfƤ׃τ¼���«µĵط½¡£

5.    ΪţInnoDB±׆.frmτ¼��«µĵط½¡£

¸´׆¶ӉnnoDB±طԃ£¬̹Ӕţ¿ʒՊ¹ԃMySQL¸´׆Ŝf4՚ѨҪ¸߿ʓĐԵŊ�¾µ㱣Ԑһ·ފ�ĸ´׆¡£

³�ƃ鋶µĶ�¸·ݣ¬ţҲӦ¸Ė݆ېԵٓ|strong>mysqldumpת´¢ţµŊ�£֢ôضµŔ­Ӳˇ£¬¶�ļ�»dž»µ¶�ԐעӢµ½¡£ת´¢µŎļ�¢³ʎªɋ¿ɶuŎı¾τ¼�Զ¨µ㲭µŋ𻳍 ў¸´±䶃¸�£ՙ֟£¬ӲΪюʽ¸�¬ҏט˽¾ދĻ�¸�strong>mysqldump ҲԐһ¸�ingle-transactionѡЮ£¬ţ¿ʒՓċ�»¸�µĿ햕¶�°҆匼¿ͻ§¶̅ų�档

ҪŜ¹»´ԉЊ��¸·ݻָ´InnoDB˽¾ݿ⵽Ж՚£¬ţ±ِ쉃¶�֖¾¹¦Ŝ´򿫕�еÍySQL·�£ Ȼº􅣿ʒՓ¦ԃ¶�֖¾µ½±¸·ފ�ՊµЖpoint-in-time»Լ/span>¸´£º

mysqlbinlog yourhostname-bin.123 | mysql

Ҫ´ҍySQL·�ı@£»ָ´£¬ΨһѨҪµŊȖِÆ��oDBؔ¶¯¼쳩ɕ־²¢ִѐµ½Ж՚µŊ�°¹�nnoDBؔ¶¯»ع�@£ʱ ³ˏֵŎ´͡½»µŊÎ񡤔ڻָ´¹�¬mysqldДʾɧЂһЩˤ³�

InnoDB: Database was not shut down normally.
InnoDB: Starting recovery from log files...
InnoDB: Starting log scan based on checkpoint at
InnoDB: log sequence number 0 13674004
InnoDB: Doing recovery: scanned up to log sequence number 0 13739520
InnoDB: Doing recovery: scanned up to log sequence number 0 13805056
InnoDB: Doing recovery: scanned up to log sequence number 0 13870592
InnoDB: Doing recovery: scanned up to log sequence number 0 13936128
...
InnoDB: Doing recovery: scanned up to log sequence number 0 20555264
InnoDB: Doing recovery: scanned up to log sequence number 0 20620800
InnoDB: Doing recovery: scanned up to log sequence number 0 20664692
InnoDB: 1 uncommitted transaction(s) which must be rolled back
InnoDB: Starting rollback of uncommitted transactions
InnoDB: Rolling back trx no 16745
InnoDB: Rolling back of trx no 16745 completed
InnoDB: Rollback of uncommitted transactions completed
InnoDB: Starting an apply batch of log records to the database...
InnoDB: Apply batch completed
InnoDB: Started
mysqld: ready for connections

ɧ¹�¿ⱻ̰»µ»򵆅̳�¬ţ±ِ뵓±¸·ޗ�´¡£՚̰»µµŇꀶЂ£¬ţ˗ЈӦ¸ĕҳ��б»̰»µµı¸·ݡ£»ָ´˽¾ݿⱸ·ޖ®º󣬴Ӷ�֖¾τ¼�£

՚һЩ˽¾ݿ㌰»µµŇꀶЂ£¬½�ª´¢£¬ӆ³�¨һ¸��ƻµµıأ¹»µġ£ţ¿ʒՓƒHECK TABLE SQLԯ¾倴¼쳩±·򌰻µ£¬̤ȻCHECK TABLEֽ³£µز»¼쳩ÿז¿ʄܵŋ𻵣¬ţ¿ʒՊ¹ԃinnodb_tablespace_monitor4¼쳩±¼叄¼��݀Ϊֻє¡£

՚һЩȩ¿�¬ķДµي�𻶊Ȓ󎪲ڗ�³̰»µ̼ؔ¼ºµŎļ�¬´ƅ͉ϵŊ�ݍ껃£¬خºĊȊ؏ɖن�㼺¡£̼¿ʒՏ�ЩДµĊȊ�³̰»µµĴ¡£

15.2.8.1. ǿ׆»ָ´

ɧ¹�¿㒳±»dž»µ£¬ţ¿ʄݏ쒪ԃSELECT INTO OUTFILE´ӴԊ�ª´¢ţµıͨ³£Ӕ֢ז·½·¨»򈡵Ĵ󷡊�ȍ껃µġ£¼´ʹ֢ҹ£¬̰»µ¿ʄܵ¼ׂSELECT * FROM tbl_name»󖞉nnoDBº􌨲ڗ�£»򷐑ԣ¬»󖠉�¹µ‰nnoDBǰ¹�´±@£¡£ ¾¡¹݈絋£¬ţ¿ʒՓċ�ʼnnnoDB´洢ӽȦǴ¶¯ͬʱبֹº􌨲ڗ�У¬Ӕ±䅣Ŝת´¢ţµı}ɧ£ºţ¿ʒՔۖن�򇸖®ǰ£¬՚ѡЮτ¼�sqld]½یɧЂµŐУº

[mysqld]
innodb_force_recovery = 4

innodb_force_recovery±»Պѭµķȁ䖵ɧЂ¡£һ¸�󶅊�¬̹Ԑ¸�ֵŔ¤·4슩¡£ɧ¹�¹»ԃһ¸��ѡЮֵ4ת´¢ţµıŇôţˇ±Ƚϰ²ȫµģ¬ֻԐһЩ՚̰»µµĵ¥¶R³ĦʏµŊ�ªʧ¡£һ¸�µŖµ¸�¬ӲΪ˽¾ݿ㒳±»´՚һ¸�ɵŗ´̬£¬֢¸�¬·´¹�Ւ�˷ºΆ匼˽¾ݿ⾡¹¹µĸ�µ¡£

·         1 (SRV_FORCE_IGNORE_CORRUPT)

¼´ʹ·�쳢µ½һ¸�µµŒ³£¬ҲɃ·�̐їţ»˔؅ɃSELECT * FROM tbl_name ͸¹�ŋ�Ȃ¼ºΒ³£¬֢ҹԐ׺Ԛת´¢±

·         2 (SRV_FORCE_NO_BACKGROUND)

بֹ׷П³͔̐У¬ɧ¹�¿ʄݔھ»»¯²ڗ�͖з¢ʺ£¬֢½«بֹ̼¡£

·         3 (SRV_FORCE_NO_TRX_UNDO)

»ָ´º󲼔̐ъÎ񼘹�

·         4 (SRV_FORCE_NO_IBUF_MERGE)

Ҳبֹ²扫»º³廏²¢²ڗ�纻ţ¿ʄܻᵼׂһ¸�£¡£خºò»Ҫض֢Щ²ڗ�»Ҫ¼Nj㲭ͳ¼Ʊ

·         5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

Ǵ¶¯˽¾ݿ㖮ʱ²»²鿴δΪ³ʈ֖¾£ºInnoDB°Ҏ´Ϊ³ɵŊÎ򋔎ªӑ͡½»µġ£

·         6 (SRV_FORCE_NO_LOG_REDO)

²»Ҫ՚»ָ´l½Ԗї�¾ǰ¹�

˽¾ݿⲻŜ­΢µش�ЩѡЮא±»Պѭµő¡Ю4ʹԃ¡£طΪһ¸�«´슩£¬µ±innodb_force_recovery±»ʨ׃ Ϊ´�µŖµʱ£¬InnoDBبֹԃ»§ִѐINSERT, UPDATE»񃄌ETE²ڗ�o:p>

¼´ʹǿ׆»ָ´±»ʹԃ£¬ţҲ¿ʒӄROP»񂑅ATE±ɧ¹�µR»¸�¨µı՚µ¼ׂ»ع�££¬ţ¿ʒՒƳ�䒲¿ʒՓĕ⹶4ֹͣԉʧ°ܵĴ�¼ɫ»󊧰ܵÁLTER TABLEµ¼ׂµŊ§¿֍ »ع�䀉Ӕɱµ򻲴rong>mysqld½�Ȼº􊩖©nnodb_force_recoveryΪ3£¬ʹµĊ�» ¹ӆ𷸲»ѨҪ»ع�»º􊢆�ʧ¿ػع�

15.2.8.2. ¼쳩µắspan>

InnoDBʵЖһז±»ɏʶΪ“ģº�o;¼꺯span>²鶣ʨ׃µļ쳩µ㼺׆¡£InnoDBӔСƺ´ӻº³崘 ˢтӑў¸ĵŊ�³¡£û±ْªӔµ¥¸�ϋ¢т»º³崘£¬µ¥ƺ´ϋ¢тʵ¼ʲڗ�ʄܻ╚¼쳩µ䊨׃½�ֹͣԃ»§SQLԯ¾䶄´¦m¡£

՚±@£»ָ´א£¬InnoDB֒Ѱ±»д½�µļ쳩µ㲪ǩ¡£̼֪µK�¸ñ뇩֮ǰ¶Պ�Ő޸ı»³ˏהۊ�Ĵƅ͓³бא¡£Ȼº򈭮oDB´Ӽ쳩µ䎹ǰɨĨɕ־τ¼��¦ԃӑдɫɕ־µŐ޸ġ£

InnoDBӔѭ»··½ʽдɕ־τ¼�ъ¹µûº³崘oµŊ�³ԫ´ƅ͉ϵœ³б²»ͬµŒҌύў¸ıِ봶Ж՚ɕ־τ¼�¬Ӕ±¸βһInnoDBѨҪضһ¸�´¡£֢Ӣζ؅£¬µ±InnoDB¿ªʼטтʹԃһ¸�¾τ¼�钪ȷɏ՚´ƅ͉ϵŊ�³ӳб°�´½�DB׼±¸טтʹԃµň֖¾τ¼�޸ġ£»»¾仰 ˵£¬InnoDB±ِ봴½¨һ¸�鶣£¬֢¾­³£ʦ¼°ӑў¸ ˽¾ݿ㒳µ½´ƅ̵ŋ¢т¡£

ǰĦµŐ񋶽㋍‹Ϊʲôʹţµň֖¾τ¼�󼢔ۉ闃¼쳩µ䗐½۔¼´ƅˉ/O¡£ʨ׃ɕ־τ¼��ͻº³崘һҹ´󼳕ࠉ�Ȼº³崘´􍨳£ˇԐӢӥµġ£´􉖖¾τ¼�䋇±@£»ָ´Ҫ»¨¸�±¼䣬ӲΪԐ¸�쉕־µŐƏ¢ҪӦԃµ½˽¾ݿ㊏¡£

15.2.9. °Ғ»¸�pan>InnoDB˽¾ݿ㓆µ½­һ̨»�span>

՚Windowsʏ£¬ InnoDB ؜ˇ՚ڲ¿ӔСдĻؖµķ½ʽ´洢˽¾ݿ⻍±Ҫ´ҕnix°Ѷ�򊽵Ŋ�Ƶ½Windows£¬»󖟴җindowsӆµ½Unix£¬ţӦ¸Ĉċ�ºΊ�Ń�д¡£ҪʵЖ֢¸�»¸�㶄·½ʽˇ՚´´½¨Ɏºϊ� ºͱǰ£¬՚ţµíy.cnf»񬷮iniτ¼�sqld]½ۄیɧЂѐ£º

[mysqld]
lower_case_table_names=1

`̆ԚMyISAM˽¾ގļ�oDB˽¾ݺΈ֖¾τ¼�ѓя፬¸¡µ䋽¸򊽵ņ½̨ʏˇ¶�牝µġ£ţ¿ʒԿ½±´̹Ԑ՚15.2.8½ڣ¬¡°InnoDB˽¾ݿⶄ±¸·ݺͻָ´¡±oµŏຘτ¼�¥µْƶ¯һ¸�oDB˽¾ݿ⡣ɧ¹�¸򊽲»ͬ£¬µ«ţûԐ՚±ʹԃFLOAT»񃎕BLE˽¾ހᑍ£¬ղ¹�»ҹ£º¼򵥵ؿ½±´Р¹َļ��²»ɝ£¬Ȓţµıº¬¸¡µ䋽¾ݣ¬ţ±ِ승ԃmysqldump՚һ̨»�´¢ţµıȻº�̨»�ɫת´¢τ¼�:p>

¼ډ貭¿ռ唐أ¹»µĿռ乩µ¼ɫ˂ϱ²�´�ع�Њ¹ԃ£¬ղ͡¸ࠐՄܵŒ»¸�¨ˇ՚µ¼ɫ˽¾ފ±¹ص󠴴ocommitģʽ¡£½�¼ɫֻ¸�򲭵Œ»¸�Ж®º􍡽»¡£

15.2.10InnoDB˂ϱģэº΋�span>

՚InnoDB˂ϱģʽא£¬ĿµŊǰѶ౦±¾˽¾ݿⶄخºČِՓ봫ͳµĶ�¨ºϲ¢ǰ4¡£InnoDBӔOracleµķ繱£¬¶Րм¶½�¶¨£¬²¢Ȓ ĬɏՋѐ²ꑯطΪ·ȋ�Ѹ¶a£՚InnoDBא̸¶¨µı´洢µĈ絋½ۊ¡¿ռ䣬ӔׁԚ²»ѨҪ̸¶¨ն´󣺵呍µأ¬˽¸�§±»Պѭ՚˽¾ݿ㗐̸¶¨ÿһѐ£¬»󖠐еňκϋ漺ؓ¼¯£¬¶�DB²»»Ễ¾¡Ś´档

15.2.10.1. InnoDB̸¶¨ģʽ

InnoDBʵЖ±뗼ѐ¼¶̸¶¨£¬՚֢oԐ}ז`эµŋ�ocks:

·         ¹²Эµ¨S)̸Պѭһ¸�򈥶’»ѐ£¨tuple£©¡£

·         ¶U¼µŋ�X)Պѭһ¸�񹽐»󉾳�£

ɧ¹�A ՚tuple tʏ³דжU¼̸¶¨£¬4ؔ²»ͬ˂ϱBµĶҼi>tʏɎһ`эµŋ�ȳ²»±»íʏѭ¿ɣ¬ȡ¶�µأ¬˂ϱB ²»µò»µȴ�ˍ·Ɣٴuple tʏµŋ�o:p>

ɧ¹� A ՚tuple tʏ³דђ»¸�̸(S)£¬Ňô

·         4ؔ²»ͬµŊÎ�B¶Քؼi>t ʏXµŋ�ȳ²»Ŝ±»íʏѭ¿ɡ£

·         4ؔ²»ͬµŊÎ�B¶Քؼi>t ʏSµŋ�ȳ¿ʒԱ»íʏ»򗼡£Ӳ´ɼi>Aº˼i>B³דμi>tʏµ¼i>S̸¶¨¡£

²»½�ˣ¬InnoDB֧³Լem>¶ཤ¸�茸¶¨£¬̼Պѭ¼Ȃ¼̸ºͶՕ�µŋ�¡£Ҫʹµöཤ¸�缶±𶅋�¼ʻ¯£¬¶`эµŋ�³ǎªintention locks±»ʹԃ¡£՚InnoDBא£¬Ӣͼ̸¶¨ˇ±¶¨¡£ ¶Փے»¸�񣭒㍼̸¶¨֮º􁮏분ˇָķ՚¸ñ¶Ւ»¸�滳ѨҪńһ`эµŋ�¹²Э»¹ˇ¶U¼£©¡£Ԑ}זӢͼ̸±»ԃ՚InnoDBא£¨¼ډ鋂ϱT ՚±뻩>RאҪȳһ¸�¸³�ᑍµŋ�

·         Ӣͼ¹²Э(IS)£º˂ϱT Ӣͼ¸�>Tʏµ¥¶5ôupleʨ׃S ̸¶¨¡£

·         Ӣͼ¶U¼(IX)£º˂ϱT Ӣͼ¸�tupleʨ׃X ̸¶¨¡£

Ӣͼ̸ЭөɧЂ£º

·         ՚¼ډ趄˂ϱ¿ʒԻ񶃶Մ³¼ٶ¨ѐµ¼i>S ̸¶¨֮ǰ£¬̼±ِ싗Ј»񶃶԰�еıһ¸�IS »󖟸��

·         ՚¼ډ趄˂ϱ¿ʒԻ񶃶Մ³¼ٶ¨ѐµ¼i>X ̸¶¨֮ǰ£¬̼±ِ싗Ј»񶃶԰�еıһ¸�IX ̸¶¨¡£

֢Щ½ẻ¿ʒԷ½±㶘ԃһ¸�ᑍ¼牝¾ٕ􀵗ܽ᣺

 

X

IX

S

IS

X

³捻

³捻

³捻

³捻

IX

³捻

¼牝

³捻

¼牝

S

³捻

³捻

¼牝

¼牝

IS

³捻

¼牝

¼牝

¼牝

ɧ¹�̸¶¨ԫЖ՚̸¶¨¼牝µĻ°£¬̼±»˚¸�ίΐ˂ϱ¡£ɧ¹�̸¶¨ԫЖ´猸¶¨³捻£¬̼¾Ͳ»±»˚Ԩһ¸�ъÎ񡤊Î񶈴�½³捻µŏִ猸¶¨±»ˍ·ŵ�纻һ¸�¨ȫȳԫЖ´猸¶¨Р³捻£¬Ȓ²»Ŝ±»˚Ԩ£¬ӲΪ̼¿ʄܻᵼ̸ׂ̀£¬һ¸�󳻉�o:p>

Ӳ´ˣ¬Ӣͼ̸¶¨²»ب°­Ɏºζ«Ϸ£¬³�«±ȳ£¨±Ɉ拏CK TABLES ... WRITE£©¡£IX º˼i>IS̸¶¨µŖ�¿µŊȏՊ¾ijɋ̸ֽ¶¨һѐ£¬»򽬒ª՚±̸¶¨һѐ¡£

Ђµŀ�¾µ±̸¶¨ȫȳ¿ʄܻᵼ̸ׂ֮̀ʱһ¸�󼢈绎·¢ʺ¡£}ؓא°��§¶ʁº̂¡£

˗Ј¿ͻ§¶ʁ´´½¨һ¸�¬һ¸�ıȻº󿫊¼һ¸�񡤔ە⹶˂ϱŚ£¬Aͨ¹�ʽѡձѐ»񶃶Րе¼i>S ̸¶¨£º

mysql> CREATE TABLE t (i INT) ENGINE = InnoDB;
Query OK, 0 rows affected (1.07 sec)
 
mysql> INSERT INTO t (i) VALUES(1);
Query OK, 1 row affected (0.09 sec)
 
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT * FROM t WHERE i = 1 LOCK IN SHARE MODE;
+------+
| i    |
+------+
|    1 |
+------+
1 row in set (0.10 sec)

½ԗţ¬¿ͻ§¶ʂ¿ªʼһ¸�񲢳¢˔´Ӹñ³�

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
 
mysql> DELETE FROM t WHERE i = 1;

ɾ³�ªȳһ¸�X ̸¶¨¡£ӲΪ֢¸�¨²»¼牝¿ͻ§¶ʁ³דе¼i>S̸¶¨£¬̹ӔX ̸¶¨²»±» Պѭ£¬̹Ӕȫȳ½�ѐ¼°¿ͻ§¶̗赲µŋ�ȳ¶ԁС£

خº󣬿ͻ§¶ʁҲ˔ͼ´ӱɾ³�º

mysql> DELETE FROM t WHERE i = 1;
ERROR 1213 (40001): Deadlock found when trying to get lock;
try restarting transaction

ӲΪ¿ͻ§¶ʁѨҪһ¸�X ̸¶¨4ɾ³�¬̹Ӕ՚֢o·¢ʺ̸̀¡£¾¡¹݈絋£¬̸¶¨ȫȳ²»±»Պѭ£¬ӲΪ¿ͻ§¶ʂӑ¾­Ԑһ¸�i>X̸¶¨µŇ숳²¢Ȓֽ̼µȴ�ʁˍ·üi>S̸¶¨¡£ӲΪ¿ͻ§¶ʂ֮ǰ¶Ҽi>X ̸¶¨µŇ숳£¬±»¿ͻ§¶ʁ³דе¼i>S̸¶¨Ҳ²»Ŝʽ¼¶µ½X̸¶¨¡£Ӳ´ˣ¬InnoDB¶Կͻ§¶ʁ²�¸�󣬲¢Ȓˍ·Ƌ�¨¡£՚Ňһµ䊏£¬¿ͻ§¶ʂµŋ�ȳ¿ʒԱ»ѭ¿ɣ¬²¢Ȓ¿ͻ§¶ʂ´ӱɾ³�

15.2.10.2. InnoDBºˠAUTOCOMMIT

՚InnoDBא£¬̹Ԑԃ»§ѐΪ¶¼՚˂ϱŚ·¢ʺ¡£ɧ¹�͡½»ģʽ±»Պѭ£¬ÿ¸�ԯ¾啚̼ؔ¼ºʏю³ʒ»¸�5ŊÎ񡢍ySQL؜ˇ´�ѭؔ¶¯͡½»4¿ªʼһ¸�¬½ӡ£

ɧ¹�͡½»ģʽ±»ԃSET AUTOCOMMIT = 0¹رգ¬Ňôϒć¿ʒՈЎªһ¸�§؜ˇԐһ¸�񵲿ª؅¡£һ¸� COMMIT»񑎌LBACKԯ¾価˸µ±ǰ˂ϱ²¢Ȓһ¸�Î񿫊¼¡£}¸�䶼ˍ·Ƌ�µ±ǰ˂ϱא±»ʨ׃µÉnnoDB̸¶¨¡£һ¸�MITԯ¾哢ζ؅՚µ±ǰ˂ϱאضµĸı䱻ʺ³ʎªԀ¾õ쬲¢Ȓ±䴉Ǥ̼ԃ»§¿ɼ�һ¸�LBACKԯ¾䣬՚­һ·½Ħ£¬³·к̹Ԑµ±ǰ˂ϱضµŐ޸ġ£

ɧ¹�Ԑ±»ՊѭµŗԶ¯͡½»£¬ͨ¹�·µÓTART TRANSACTION»񁄇INԯ¾倴¿ªʼһ¸�񣬲¢ԃCOMMIT»󖞒OLLBACKԯ¾倴½⋸̼£¬֢ҹԃ»§ɔ¾ɿʒՖ´ѐһ¸�ٓ¦˂ϱ¡£

15.2.10.3. InnoDBº̔RANSACTION ISOLATION LEVEL

°´֕SQL:1992 ˂ϱ¸�¶±𣫉nnoDBĬɏˇ¿ʖظ´¶uģ¨REPEATABLE READ£©¡£MySQL/InnoDB ͡¹©SQL±뗼̹Ĩ˶µŋ�¸�񹵀뼶±𡤄䀉Ӕ՚ļ®ѐԃ--transaction-isolationѡЮ£¬»󕛑¡Юτ¼�ª̹Ԑl½ԉ闃 Ĭɏ¸�¶±𡤀�䀉Ӕ՚my.infτ¼�sqld]½ۀ𐁠̆ɧЂʨ׃¸đ¡Ю£ºglobally

[mysqld]
transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED
                         | REPEATABLE-READ | SERIALIZABLE}

ԃ»§¿ʒՓ“ET TRANSACTIONԯ¾乄±䵥¸�°»󖠋�½�µĸ�¶±𡤋�¨ɧЂ£º

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL
                       {READ UNCOMMITTED | READ COMMITTED
                        | REPEATABLE READ | SERIALIZABLE}

עӢ£¬¶ҭ-transaction-isolationѡЮµļ¶±񄼖ѓс¬ؖ·�՚¶ӓET TRANSACTIONԯ¾䶄¼¶±񄼖у»Ԑ¡£

ĬɏµŐюªˇΪЂһ¸�´¿ªʼ£©˂ϱʨ׃¸�¶±𡤈纻ţʹԃGLOBAL¹ؼ�¦՚ȫ¾ֶԴԄǵ㿪ʼ´´½¨µŋ�l½ӣ¨³�畚µŁ¬½ӣ©ʨ׃ Ĭɏ˂ϱ¼¶±𡤄䑨ҪSUPERȫИ4ض֢¸�¹ԃSESSION ¹ؼ�ª½«4՚µ±ǰl½ԉЖ´ѐµŊÎ򊩖Ą¬ɏ˂ϱ¼¶±�£

Ɏºοͻ§¶˶¼Ŝؔԉ¸ı伡»°¸�¶±𣩉�ۊÎ񶅖м䣩£¬»󖠎ªЂһ¸�򊩖ø�¶±𡡠

ţ¿ʒՓďÁѓ¦²ꑯȫ¾ֺͻỰ˂ϱ¸�¶±𣸠

SELECT @@global.tx_isolation;
SELECT @@tx_isolation;

՚ѐ¼¶̸¶¨א£¬InnoDBʹԃnext-key̸¶¨¡£֢Ӣζ؅³��¬InnoDBҲ¿ʒ԰ҋ�Ȃ¼ǰµļ叶̸¶¨µ½Ǥ̼ԃ»§̹ضµĽ�ċ�Ȃ¼֮ǰµĿ鳥ɫʏ¡£һ¸�t-key̸¶¨ָвһ¸�¨סһ¸��΋�ļ叶µŋ�һ¸�¶̸¶¨ָ½�¡һЩ̷ӽ¼Ȃ¼֮ǰµļ叶µŋ�

InnoDBאÿ¸�뼶±𶅏돸Ĩ˶ɧЂ£º

·         READ UNCOMMITTED

SELECTԯ¾哔·ȋ�ʽ±»ִѐ£¬µ«ˇһ¸�ܸ�汾µļȂ¼»ᱻԃµ½¡£Ӳ´ˣ¬ʹԃ֢¸�뼶±𣬱Ɉ磬¶ŠDz»l¹ᶄ¡£؅Ҳ±»³ǎª“ՠ¶�rdquo;£¨dirty read£©¡£­΢£¬֢¸�뼶±񐱼/span>READ COMMITTEDһҹطԃ¡£

·         READ COMMITTED

һ¸�©гOracleµĸ�¶±𡤋�LECT ... FOR UPDATEº̓ELECT ... LOCK IN SHARE MODԯ¾侶̸¶¨̷ӽ¼Ȃ¼£¬¶�¶¨¼Ȃ¼ǰµļ叶£¬Ӳ¶�̦Ӣ½�ƒҋ�¼Ȃ¼²扫т¼Ȃ¼¡£UPDATEº̄ELETEԯ¾効ԃһ¸�¨һ̷̑͵¼�»µŋ��¨֒µ½µŋ�Ȃ¼£¬¶�(¼Ȃ¼ǰµļ叶¡£՚·¶Χ`эUPDATEº̄ELETEԯ¾䣬InnoDB±ِ뷔·¶Χ¸²¸ǵļ叶ʨ׃next-key̸¶¨»򽥏¶̸¶¨Ӕ¼°Ǥ̼ԃ»§ضµĿ鳥ɫ¡£֢ˇºْܱªµģ¬ӲΪҪɃMySQL¸´׆ºͻָ´ǰطԃ£¬“Ԅ©ѐ”±ِ뱻بֹµ�

³א�Ϊɧͬ՚Oracleא£º¼´ʹ՚ͬһ˂ϱŚ£¬ ÿ¸��׃²¢¶ˆ¡̼ؔ¼ºµŐ¿햕¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-consistent-read" title="15.2.10.4. Consistent Non-Locking Read">15.2.10.4½ڣ¬¡°³א�¶¨¶�rdquo;¡£

·         REPEATABLE READ

֢ˇInnoDBµń¬ɏ¸�¶±𡣴�̷̑͵¼�¨һ̷ӽµÓELECT ... FOR UPDATE, SELECT ... LOCK IN SHARE MODE, UPDATE º̄ELETEԯ¾喻̸¶¨֒µ½µŋ�Ȃ¼£¬¶�¶¨¼Ȃ¼ǰµļ叶¡£ԃǤ̷̼̑͵¼�©²ڗ�®ext-key̸¶¨£¬ԃnext-key̸¶¨»󖟼叶̸¶¨̸ס̷̑µŋ�¶Χ£¬²¢ȒبֹǤ̼ԃ»§µŐ²扫¡£

՚³א�£¬Ԑһ¸�®ǰ¸�¶±񗙒ªµIJ£º՚֢¸�𣭔ۍ¬һ˂ϱŚ̹Ԑ³א�ȡԉµے»´ζ‹�µō¬һ¿햕¡£֢¸��ƈ纻ţ՚ͬһ˂ϱŚ·¢³��򊼓ELECTԯ¾䣬֢ЩSELECTԯ¾䷔Р»¥֮¼咲ˇ³א�ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-consistent-read" title="15.2.10.4. Consistent Non-Locking Read">15.2.10.4½ڣ¬¡°³א�¶¨¶�rdquo;¡£

·         SERIALIZABLE

֢¸�񁡋ŒEPEATABLE READ£¬µ«ˇ̹ԐϞ¸򊼓ELECTԯ¾䱻 Ӿʽת»»³ȓELECT ... LOCK IN SHARE MODE¡£

15.2.10.4. ³א�¶¨¶�o:p>

³א�ζ؅InnoDBʹԃ̼µĶ౦±¾»¯4¸�²ꑯչʾij¸�䶣´¦˽¾ݿⶄ¿햕¡£²ꑯ¿´µ½՚Ҹ�䶣֮ǰ±»͡½»µńȐ©ȷȐ˂ϱضµĸ�¢ȒûԐǤº󶅊Î񼳎´͡½»˂ϱضµĸı䡣֢¸�򶅀�¬²ꑯ¿´µ½·¢²¼¸òꑯµŊÎ񱿉ضµĸı䡣

ɧ¹�ѐ՚ĬɏµÒEPEATABLE READ¸�¶±𣭔󕛍¬һ˂ϱڵŋ�Ѹ¶vˆ¡ԉ¸ĊÎ򗐵ے»¸��̹ȷbµĿ햕¡£ţ¿ʒՍ¨¹�±ǰ˂ϱ²¢՚·¢²¼т²ꑯµŊÎ򖮺󣭎ªţµIJꑯ»񶄒»¸�ÏʵĿ햕¡£

³א�Ĭɏģʽ£¬՚ǤאInnoDBzai՚READ COMMITTEDº̒EPEATABLE READ¸�¶±𴧀쒅LECTԯ¾䡣³א�՚Ɏºϋ�ıʨ׃̸¶¨£¬Ӳ´ˣ¬Ǥ̼ԃ»§¿ʗՓɵٔڳא�һ¸�Ж´ѐµō¬һʱ¼呞¸ŕ㐩±

עӢ£¬³א�՚DROP TABLEº́LTER TABLEʏطԃ¡£³א�՚DROP TABLEʏطԃ£¬ӲΪMySQL²»Ŝʹԃӑ¾­±»ӆ³�¬²¢ȒInnoDB dž»µ‹¸ñ³א�՚ALTER TABLEʏطԃ£¬ӲΪ̼՚ij˂ϱŚִѐ£¬¸ĊÎ񴴽¨һ¸�²¢Ȓ´Ӿɱт±²扫ѐ¡£Ж՚£¬µ±ţטт·¢³��ʱ£¬̼²»Ŝ՚т±¿´¼�ѐ£¬ӲΪ̼ć±»²扫µ½һ¸�א�ȡµĿ햕א²»¿ɼ�ϱ o¡£

15.2.10.5. ̸¶¨¶ELECT ... FOR UPDATEº̓ELECT ... LOCK IN SHARE MODE

՚һЩ»·¾³א£¬һ¸��²»·½±㶄¡£±Ɉ磬ţ¿ʄݏ쒪ι±ؓ±ͭ¼Ԓ»¸�У¬²¢ȷх¸ėӱ¸¸±Ԑһ¸�£Ђ}ؓДʾɧºϔۄ䓦ԃ³͐򵻂에ʵЖ²ο¼µō떻є¡£

¼ډ酣ʹԃһ¸��¶ˆ¡¸¸±Ȓ¿´µ½±ؓ±¸�Ŝ°²ȫµٍ�ͭ¼ԗԐт𣿲»£¬ӲΪ¿ʄݍ¬ʱ·¢ʺһЩǤ̼ԃ»§´Ӹ¸±³�¬¶�ԐעӢµ½̼µŇꀶ¡£

½⿶°취ˇ՚ʹԃLOCK IN SHARE MODEµŋ�ʽִѐSELECT£º

SELECT * FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;

՚¹²Эģʽִѐһ¸�㎶؅ϒć¶—µĿʓĊ�¢՚ϒć¶uŐщ闃һ¸�¶¨¡£¹²Эģʽ̸·V¹Ǥ̼ɋ¸�¾³�ѶuŐС£ͬʱ£¬ɧ¹�µŊ�ۆ匼¿ͻ§¶̉ю´͡½»µŊÎ񣭎ӃǵɗƖªµDǸ�񱼌ύ¡£ϒć¿´µ½ǰ˶µIJꑯ·µ»ظ¸'Jones'£¬ϒć¿ʒ԰²ȫµ֠ιؓ±¼ԗӼȂ¼²¢͡½»ϒćµŊÎ񡡠

Ƀϒć¿´­΢һ¸�ӣºϒć՚±좨ild_codes אԐһ¸���¬ϒćԃ¸ñÿ¸�ӵ½ؓ±µŗԏƉһ¸�»µŊ¶±𸻡£ДȻ£¬ʹԃ³א�֟¹²Эģʽ¶ˆ¥¶ˆ¡µ±ǰ¼NJ�µ²¢ˇһ¸��¬ ӲΪ˽¾ݿⶄ}¸�§¿ʄܿ´µ½¼NJ�¬һ¸�¬ɧ¹�ԃ»§˔؅ԃͬһʶ±𸼍�ͭ¼ԗԏ¾ͻᷢʺһ¸�´¼�licate-key£©´¡£

՚֢o£¬ɧ¹�ԃ»§ͬʱ¶|NJ�±˔ͼ¸��±£¬ׁʙ̼ćאԐһ¸�¢ʺ̸̀´²¢וֹ£¬Ӳ´ʌOCK IN SHARE MODE²¢²»ˇһ¸�Ľ⿶·½·¨¡£

՚֢זȩ¿�¬Ԑ}¸�½·¨ȥʵЖ¶|NJ��NJ�º(1) Ј¸��üNJ��֮º󷁼NJ�󖝨2)ԃ̸¶¨ģʽFOR UPDATEЈ¶|NJ�®º󽇊��£º��¶¿ɱ»ɧЂʵЖ£º

SELECT counter_field FROM child_codes FOR UPDATE;
UPDATE child_codes SET counter_field = counter_field + 1;

SELECT ... FOR UPDATE¶—µĿɼ�£¬՚ÿ¸�ˆ¡µŐщ闃¶U¼̸¶¨¡£Ӳ´ˣ¬̼ʨ׃ԫ̷̑µÓQL UPDATE¿ʄܻ╚ѐʏʨ׃µŋ�ҹµŋ�

ȫעӢ£¬Ӕʏ½�»¸�ECT ... FOR UPDATEɧºφ񘸓õŀ�ٍySQLא£¬˂ʵʏʺ³ʒ»¸�»ʶ±𸻵Ōي㉎ϱ¿ɱ»ԃ¶Ըñµ¥¶7Ďˀ´Ϊ³ɣº

UPDATE child_codes SET counter_field = LAST_INSERT_ID(counter_field + 1);
SELECT LAST_INSERT_ID();

SELECTԯ¾侶½�ي¶±𸼐Ə¢£¨רą¶Ե±ǰl½ӣ©¡£̼²»·Ďˈκα

15.2.10.6. Next-Key̸¶¨£º±݃㔄©ϊ͢

՚ѐ¼¶̸¶¨א£¬InnoDB ʹԃһ¸�ªnext-key lockingµŋ㷨¡£InnoDBӔ֢ҹһז·½ʽִѐѐ¼¶̸¶¨£ºµ±̷̼̑»󉩃貭µŋ�®ʱ£¬̼¶Փ�ŋ�Ȃ¼ʨ׃¹²Э»򷁕¼̸¶¨¡£Ӳ´ˣ¬ѐ¼¶̸¶¨˂ʵʏˇ̷ӽ¼Ȃ¼̸¶¨¡£

InnoDB¶Ջ�Ȃ¼ʨ׃µŋ�ӳб̷ӽ¼Ȃ¼֮ǰµ¦ldquo;¼叶”¡£ɧ¹�ԃ»§¶Ւ»¸��Ȃ¼RԐ¹²Э»򷁕¼µŋ�­һ¸�§ ²»Ŝ½�ْ֮ǰӔ̷ӽµŋ³Ѳ²扫һ¸��Ȃ¼¡£֢¸�¶µŋ�ִѐ4·V¹̹νµ¦ldquo;Ԅ©ϊ͢”¡£¼ډ酣ЫҪ´ԓђ»¸�¶·�Ԛ100µŗӱ²¢̸¶¨̹Ԑؓ¼Ȃ¼£¬²¢Ы؅̦º�¡¶¨ѐא¸�© £º

SELECT * FROM child WHERE id > 100 FOR UPDATE;

¼ډ镚idԐһ¸��¯´ҩd´�00µĵے»¸�¼¿ªʼɨĨ¡£ɧ¹�՚̷ӽ¼Ȃ¼ʏµŋ�°Ҕڼ叶ʺ³ɵIJ扫ƅ³�¬һ¸�пʄݓ뵋ͬʱ±»²徸±¡£ɧ¹�ͬһ˂ϱŚִѐͬҹµÓELECT£¬ţ¿ʄܻ╚¸òꑯ·µ»صĽẻ°�½һ¸�С£֢ԫ˂ϱµĸ�­ղˇР·´µģºһ¸�򓦸Ąܹ»Ջѐ£¬Ӕ±䌼ӑ¾­¶uŊ�Î񺽳͖в»¸ı䡣ɧ¹�°Ғ»͗ѐ˓Ϊ˽¾ޏтµ¦ldquo;Ԅ©”ؓ¼Ȃ¼¿ʄܻ⎥·´֢һ¸�­ղ¡£

µ±InnoDBɨĨһ¸��¬̼Ҳ̸¶¨̹Ӕ¼Ȃ¼אخº��¼֮º󶄼叶¡£¸֔ۇ°һ¸�Ԗз¢ʺ£ºInnoDBʨ׃µŋ�ֹɎºβ扫µ½id¿ʄܴ󺻱00µı

ţ¿ʒՓ®ext-key̸¶¨՚ţµœ¦ԃ³͐󊐊µЖһ¸�»є¼쳩£ºɧ¹�¹²Эģʽ¶Š� ²¢ȒûԐ¿´µ½ţ½«Ҫ²扫µŐеŖظ´£¬ղţ¿ʒ԰²ȫµز扫ţµŐУ¬²¢Ȓ֪µTڶy�Մ㶄ѐµļ̳ѕࠉ闃µîext-key̸¶¨ԫ´̍¬ʱبֹɎºψ˶Մ㶄 ѐ²扫һ¸�´¡£Ӳ´ˣ¬the next-key̸¶¨Պѭţ̸ס՚ţµı²¢²»´畚µŒ»Щ¶«Ϸ¡£

15.2.10.7. ³א�ºϔىnnoDBא¹¤طµŀ�p>

¼ډ酣ֽՋѐ՚ĬɏµÒEPEATABLE READ¸�¶±𡣵±ţ·¢³���ʱ£¬¼´һ¸�¨µÓELECTԯ¾䣬InnoDB°´֕ţµIJꑯ¿´µ½µŊ�¬¸�˂ϱһ¸�䶣¡£ɧ¹�¸�򕛄㶄ʱ¼䶣±»ָ¶¨֮º􉾳�¢͡½»£¬ţ²»»ῴ¼�ɾ³�£²扫º͸�ጆµش¦m¡£

ţ¿ʒՍ¨¹�㶄˂ϱ4͡ǰţµŊ±¼䶣£¬Ȼº�¸�ECT¡£

֢±»³ǎª¶౦±¾²¢·¢¿ٖƣ¨multi-versioned concurrency control£©¡£

               User A                 User B
 
           SET AUTOCOMMIT=0;      SET AUTOCOMMIT=0;
time
|          SELECT * FROM t;
|          empty set
|                                 INSERT INTO t VALUES (1, 2);
|
v          SELECT * FROM t;
           empty set
                                  COMMIT;
 
           SELECT * FROM t;
           empty set
 
           COMMIT;
 
           SELECT * FROM t;
           ---------------------
           |    1    |    2    |
           ---------------------
           1 row in set

՚֢¸�ԖУ¬ֻԐµ±ԃ»§Bӑ¾­͡½»²扫£¬²¢Ȓԃ»§AҲӑ¾­͡½»֮ʱ£¬ԃ»§A¿ɿ´¼�»§B²扫µŐУ¬Ӳ´̊±¼䶣 ˇ՚ԃ»§B͡½»֮ǰ¡£

ɧ¹�¿´˽¾ݿⶄخт״̬£¬ţӦ¸ē’EAD COMMITTED¸�¶±𼳓Ē»¸�¨¶cº

SELECT * FROM t LOCK IN SHARE MODE;

15.2.10.8. ՚InnoDBא²»ͬSQLԯ¾动׃µŋ�:p>

՚SQL²ꑯ´¦mא£¬һ¸�¨¶c¬һ¸�ATE»󒻸�ETEһ°㶘¶Ա»ɨĨµŃ¿¸��闃¼Ȃ¼̸¶¨¡£ɧ¹�²ꑯאԐһ¸�RE͵¼�²ô¹ُµµģ¬¶�²ꑯ¿ʄܴӲꑯµĽẻ°��nnoDB²»¼ǵĈ·Ȑµ×HERE͵¼�ǽ�Dĸ��»ɨĨ¡£¼Ȃ¼̸¶¨ˇֽ³£µîext-key̸¶¨£¬̼Ҳبֹ¶Խ�żȂ¼֮ǰµļ叶µIJ扫¡£

ɧ¹�±»ʨ׃Ϊ¶U¼£¬ղInnoDB؜ˇȡ»ؼ¯˸µŋ�¿¼²¢¶Ն动׃̸¶¨¡£

ɧ¹�Ԑˊºϲꑯµŋ�¬MySQL²»µò»ɨĨֻ¸�´´¦m²ꑯ£¬±ÿѐ±䴉±»̸¶¨µģ¬֢ҹ·´¹�¹Ǥ̼ԃ»§µŋ�±²扫¡£´´½¨һ¸�ŋ�Ą㶄²ꑯ²»±ْªɨĨºܶᑐˇºݖْªµġ£

·         SELECT ... FROMˇһ¸��¶ˆ¡˽¾ݿⶄ¿햕²¢Ȓʨ׃²»̸¶¨£¬³�񹵀뼶±𱼉鎪SERIALIZABLE¡£¶Փ؍ SERIALIZABLE¼¶±𣭕⹶ʨ׃¶Ջ�ŋ�Ȃ¼ʨ׃¹²Эµîext-key̸¶¨¡£

·         SELECT ... FROM ... LOCK IN SHARE MODE¶Զ“�ŋ�ӽ¼Ȃ¼ʨ׃¹²Эµîext-key̸¶¨¡£

·         SELECT ... FROM ... FOR UPDATE¶Զ“�ŋ�ӽ¼Ȃ¼ʨ׃¶U¼µîext-key̸¶¨¡£

·         INSERT INTO ... VALUES (...)¶Ա»²扫µŐщ闃¶U¼̸¶¨¡£עӢ£¬֢²»ˇһ¸�t-key̸¶¨£¬²¢Ȓ²»بֹǤ̼ԃ»§՚ӑ²扫ѐ֮ǰµļ叶²扫¡£ɧ¹�ט¸´¼�¬¶Ֆظ´µŋ�Ȃ¼ʨ׃¹²Э̸¶¨¡£

·         ՚һ¸�ϳ�¯֮ǰָ¶¨µÁUTO_INCREMENT֮ʱ£¬InnoDB՚ԫAUTO_INCREMENTР¹فªµŋ�ń©βʨ׃¶U¼̸¶¨¡£՚·Ď˗Զ¯ն³¤¼NJ�¬InnoDBʹԃרԃµı¶¨ģʽAUTO-INC£¬Ǥא̸¶¨½��ǰSQLԯ¾䶄½⋸£¬¶�µ½ֻ¸�񶄽⋸¡£ ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-and-autocommit" title="15.2.10.2. InnoDB and AUTOCOMMIT">15.2.10.2½ڣ¬¡°InnoDBº́UTOCOMMIT”¡£

InnoDBȡ»ُɇ°³�¯µÁUTO_INCREMENTµŖµ¶�¶¨Ɏºϋ�

·         INSERT INTO T SELECT ... FROM S WHERE ... ¶Ճ¿¸�뵽TµŐщ闃¶U¼£¨·Ʈext-key£©̸¶¨¡£̼՚Sʏ°ҋҋ����µ«ˇɧ¹�L¶�֖¾¹¦Ŝ±»´򿪣¬̼¾Ͷӓʨ׃һ¸�next-key̸¶¨¡£InnoDB՚º�ׇꀶ²»µò»ʨ׃̸¶¨£º՚´Ԓ»¸�ݵҰ¹�´א£¬ÿ¸�ԯ¾䲻µò»Ӕԫ̼خ³�´ѐµķ½ʽΪȫͬҹµķ½ʽִѐ¡£

·         CREATE TABLE ... SELECT ... °ГELECTµ±طһ¸��ִѐ£¬»󖟴�Э̸¶¨4ִѐ£¬ɧǰĦµŌ��

·         ɧ¹�¼�捻£¬REPLACEгһ¸�쒻ҹ±»ض¡£­΢£¬¶Աِ빼тµŐщ闃һ¸�¼µ¼/span>next-key̸¶¨¡£

·         UPDATE ... WHERE ... ¶Ջҋ�½µŃ¿¸�¼ʨ׃һ¸�¼µîext-key̸¶¨¡£

·         DELETE FROM ... WHERE ... ¶Ջҋ�½µŃ¿¸�¼ʨ׃һ¸�¼µîext-key̸¶¨¡£

·         ɧ¹�¸�¨ӥFOREIGN KEYԼ˸£¬Ɏºϐ钪¼쳩Լ˸͵¼�룬¸�¾³�´؅¼쳩Լ˸µļȂ¼ʨ׃¹²Эѐ¼¶̸¶¨¡£InnoDB՚Լ˸ʧ°ܵŇꀶЂҲʨ׃֢Щ̸¶¨¡£

·         LOCK TABLESʨ׃±¶¨£¬µ«ˇˇInnoDB²䖮ʏ¸�ySQL²䊨׃֢Щ̸¶¨¡£ɧ¹�db_table_locks=1²¢Ȓ and AUTOCOMMIT=0£¬InnoDBӢ ʶµ½±¶¨£¬²¢ȒInnoDB֮ʏµÍySQL²䖪µPм¶̸¶¨¡£­΢£¬InooDBµŗԶ¯̸̀¼쳢²»Ŝ¼쳢՚֢¸��ʦ¼°֮´¦µŋK�ͬҹ£¬¼Ɉ»¸�ySQL²㲻֪µPм¶̸¶¨£¬ºܿʄܶՁ¸�§µ±ǰ¶Ն唐ѐ̸¶¨µıµĒ»¸��¾¡¹݈絋£¬֢²¢²»dž»µ˂ϱµō떻є£¬ɧ15.2.10.10½ڣ¬¡°̸̀¼쳢ºͻع�/a>א͖ÛµŒ»ҹ¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-restrictions" title="15.2.16. Restrictions on InnoDB Tables">15.2.16½ڣ¬¡°¶ӉnnoDB±О׆”¡£

15.2.10.9.  MySQLºϊ± Ӿʽ͡½»»򼘹��񣽼o:p>

MySQLӔĬɏՊѭautocommitģʽ4¿ªʼÿһ¸�§¶́¬½ӡ£µ±autocommit±»Պѭ֮ʱ£¬ɧ¹�¦²»·µ»شµĻ°£¬MySQL՚ÿ¸�ԯ¾單º󣭗��»¡£

ɧ¹�±ԡutocommitģʽ²¢Ȓ¹ر֒»¸�Ӷ�ԃţµŊÎ񶅃�ύ£¬ղMySQL»ع�ŊÎ񡡠

ɧ¹�¦·µ»ْ»¸�󣭌ύ/»ع�ªȡ¾�⹶´¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-error-handling" title="15.2.15. InnoDB Error Handling">15.2.15½ڣ¬¡°InnoDB´´¦m”¡£

Ђÿһ¸�䣨Ӕ¼°̼ćµňκύ¬ӥ´ʣ©Ӿʽ½⋸һ¸�񣬾ͺď򕛖´ѐ֢¸�單ǰţض‹һ¸�MIT£º

·         ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP TABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1, START TRANSACTION, TRUNCATE, UNLOCK TABLES.

·         UNLOCK TABLES ½�纻Ɏºαǰ±»̸¶¨֮ʱ£¬͡½»һ¸�񡡠

·         ՚InnoDBאµÃREATE TABLEԯ¾䱻طΪһ¸�5ŊÎ򀴴¦m¡£֢Ӣζ؅4ؔԃ»§µÒOLLBACK²»³·кԃ»§՚˂ϱ¹��CREATE TABLEԯ¾䡣

˂ϱ²»Ŝ±»Ƕ͗¡£µ±ţ·¢³�RT TRANSACTIONԯ¾伲ԫ֮ͬӥµœ¦֮ʱ£¬֢ˇ¶Ոκε±ǰ˂ϱ Ӿʽ͡½»µŒ»¸��o:p>

15.2.10.10. ̸̀¼쳢ºͻع�p>

InnoDBؔ¶¯¼쳢˂ϱµŋK�»ع��¸¸�򀴷V¹̸̀¡£InnoDB˔؅ʹѡС˂ϱ4»ع�Î񶄴�¨¹�롢¸�¾³�Ŋ�·¶¨¡£

ɧ¹�db_table_locks=1 £¨1ˇĬɏֵ£©£¬InnoDBӢʶµ½±¶¨£¬ǤʏµÍySQL²䖪µ�ow-level̸¶¨¡£­΢InnoDB²»Ŝ՚MySQL LOCK TABLESʨ¶¨±¶¨µĵط½»󖠉漰InnoDB֮΢µĴ洢ӽȦʨ׃̸¶¨µĵط½¼쳢̸̀¡£ţ±ِ써¹�nnodb_lock_wait_timeoutϵͳ±偿µŖµ4½⿶֢Щȩ¿�

µ±InnoDִѐΪȫµŊÎ񼘹�±£¬¸ĊÎ񶅋�¶¨±»ˍ·š£¾¡¹݈絋£¬ɧ¹�SQLԯ¾䱻ӲΪ´µŔ­Ӳ±» »ع�“QLԯ¾动¶¨µIJ¿·׋�Ŝ±»±£´¡£֢ˇӲΪInnoDBӔһז·½ʽ´洢ѐ̸¶¨£¬՚֢ז·½ʽא̼²»Ŝ֪µK滳µńĸ�¨ˇ±»ń¸�ԯ¾动¶¨µġ£

15.2.10.11. ɧºδ¦m̸̀

̸̀ˇ˂ϱэ˽¾ݿⶤэµŎˌ⣬µ«ˇ³�Ȇµ·±³�Ֆ“ۄ㹼±¾²»ŜՋѐij¸�񣭋�䋇²»ΣЕµġ£ֽ³£µأ¬ţ±ِ베дţµœ¦ԃ³͐󊹵ċ�ȗ¼±¸ɧ¹�̸̀¶�¹��񿎖ِ·¢³��񡡠

InnoDBʹԃؔ¶¯ѐ¼¶̸¶¨¡£¼´ʹ՚ֻ²扫»󉾳�еŊÎ񶅇ꀶЂ£¬ţ¿ʒՓ�K�ˇӲΪ֢Щ²ڗ�ȕ疽µ¦ldquo;¼«Сµ¦rdquo;£¬̼ćؔ¶¯¶Բ扫»󉾳�ģ¨¿ʄ݊Ȋ��Ȃ¼ʨ׃̸¶¨¡£

ţ¿ʒՓďÁм¼˵¶Ը¶̸̀¼���Ŝє£º

·         ԃUse SHOW INNODB STATUS4ȷ¶¨خº���Ӳ¡£֢ҹ¿ʒ԰𐗺ţµ�¦ԃ³͐󀴱݃㌀̸¡£

·         ؜ˇ׼±¸؅טт·¢³�񣭈纻̼ӲΪ̸̀¶�‹¡£̸̀²»ΣЕ£¬ՙ˔һ´Ρ£

·         ¾­³£͡½»ţµŊÎ񡤐¡˂ϱ¸�䐲Ԛ³捻¡£

·         ɧ¹�ʹԃ̸¶¨¶c¬£¨SELECT ... FOR UPDATE»𞬮. LOCK IN SHARE MODE£©£¬˔؅ԃ¸��¶±𣬱Ɉ摅AD COMMITTED¡£

·         Ӕ¹̶¨µŋ³Ѳ·Ď˄㶄±ѐ¡£ղ˂ϱю³ʁ¼ºö¨ӥµIJꑯ²¢ȒûԐ̸̀¡£

·         ͭ¼Ӿ«фѡ¶¨µŋ�½ţµıղţµIJꑯѨҪɨĨ¸��Ȃ¼²¢ȒӲ´̉闃¸��ʹԃEXPLAIN SELECT4ȷ¶¨¶Փۄ㶄²ꑯ,MySQLɏΪń¸��ʵ±µġ£

·         ʹԃ¸��ɧ¹�Ӕ½Ԋݔː¸�ECT´Ԓ»¸�Ŀ햕·µ»ي�»Ҫ¸�¼҆OR UPDATE»񋎃K IN SHARE MODEؓ¾䡣֢oʹԃREAD COMMITTED¸�¶±񋇱ȽϺõģ¬ӲΪÿ¸�¬һ˂ϱoµijא�̼ؔ¼ºтЊµĿ햕o¶ˆ¡¡£

·         ɧ¹�±𶅓а𐗺µŁˣ¬ԃ±̸¶¨ϵ»¯ţµŊÎ񡤓ŒOCK TABLES¶ՊÎ򑍱ɧInnoDB)µŕ�¨ˇʨ׃AUTOCOMMIT = 0 ²¢Ȓ²»µ�NLOCK TABLESֱµ½ţķȷµٌύ‹˂ϱ¡£}ɧ£¬ɧ¹�Ҫд±첱²¢´ӱ촶c¬ţ¿ʒ԰´ɧЂض£º

·                SET AUTOCOMMIT=0;
·                LOCK TABLES t1 WRITE, t2 READ, ...;
·                [do something with tables t1 and t2 here];
·                COMMIT;
·                UNLOCK TABLES;

±̸¶¨ʹµĄ㶄˂ϱºܺõمŶӣ¬²¢Ȓ̸̀±»±݃る¡£

·         ¬һ¸�л¯˂ϱµķ½·¨ˇ´´½¨һ¸��dquo;semaphore” ±ֻ̼°��С£Ƀÿ¸�򕚷Ďˆ匼±ǰ¸��£Ӕ֢ז·½ʽ£¬̹Ԑ˂ϱӔѲµķ½ʽ·¢ʺ¡£עӢ£¬InnoDB¼´ʱ̸̀¼쳢̣·¨ҲŜ՚֢זȩ¿�񘣓ã¬ӲΪϵ»¯̸¶¨ˇѐ¼¶̸¶¨¡£³¬ʱ·½·¨£¬ԃMySQL±̸¶¨£¬±ِ뱻ԃ4½⿶̸̀¡£

·         ՚Ӧԃ³͐󗑊¹ԃLOCK TABLESﮣ¬ɧ¹�COMMIT=1,MySQL²»ʨ¶¨InnoDB±¶¨¡£

15.2.11InnoDBєŜµ�⊾

·         ɧ¹�¶¥²㹤¾߻󖞗indowsɎϱ¹݀Дʾ£¬ţµŊ�Ťط¸ººɵÃPUʹԃÊСԚ70%£¬ղţµĹ¤ط¸ººɿʄ݊Ǵƅ̰󶨵ģ¬¿ʄ݄䖽ʺ³ʌ«¶඄˂ϱºΌύ£¬»󖟻º³崘̫С¡£ʹµûº³崘¸�»Щ»┐°𐗺µģ¬µ«²»Ҫʨ׃»º³崘µɓڻ򳬹�ڴ涄80%.

·         °Ҋ�Ĺ��򁯡£ɧ¹�¶Պ�޸ģ¬InnoDB՚¸ĊÎ򍡽»ʱ±ِ싢тɕ־µ½´ƅ̡£ӲΪ´ƅ͐�ٶɖv�7ת/ɧ¹�ûԐƭ²ڗ�³µĻ°£¬֢¾ΏߖnjύµŊ�¬ҹµŃ¿ī167´Ρ£

·         ɧ¹�Ӕ½Ԋ݋񊨒»Щخ½�ύ˂ϱ£¬ţ¿ʒՉ闃my.cnfτ¼�ϊ�b_flush_log_at_trx_commitΪ0¡£ ϞÛɧº͉nnoDB˔؅ÿī ˢтһ´ψ֖¾£¬¾¡¹݋¢т²»±»ѭ¿ɡ£

·         ʹԃ´󶅈֖¾τ¼��뻺³崘һҹ´󡣵±InnoDBдúɕ־τ¼��»՚һ¸�鶣°ѻº³崘ӑў¸ĵńۈސ´½�¡£Сɕ־τ¼�²»±ْªµŎ�ڗ�􉖖¾τ¼�䊱»ָ´ʱ¼乼³¤¡£

·         ҲɃɕ־»º³搠µ±´󣩓鷍BР̆µŊ�

·         ɧ¹�´¢±䳤¶ɗַ�»󖠁пʄܰ��LLֵ£¬ղʹԃVARCHAR`э¶�CHAR`э¡£һ¸�R(N)؜ˇռ¾ۼi>N ؖ½ۀ´´洢£¬¼´ʹؖ·�¶̻󘖷�ֵˇNULL¡£ԽСµıºõيʺϻº³崘²¢Ȓ¼�ƅˉ/O¡£

µ±ʹԃrow_format=compact £¨MySQL 5.1א ĬɏµÉnnoDB¼Ȃ¼¸򊽣©ºͿɱ䳤¶ɗַ�±Ɉ攔F-8»񲩩s£¬CHAR(N)½«ռ¾ݿɱ勽µĿռ䣬ׁʙΪN ؖ½ڡ£

·         ՚һЩ°汾µÇNU/Linuxº̕nixʏ£¬ԃUnixµæsync()£¨InnoDBĬɏʹԃµģ©°Ҏļ�½´ƅ̣¬²¢ȒǤ̻Р̆µķ½·¨ˇ¾ªɋµł��úӢ˽¾ݿⶄдєŜ£¬ţ¿ʒՊ՗Ɖ闃my.cnfoµénnodb_flush_methodΪO_DSYNC£¬̤ȻO_DSYNC՚¶ዽϵͳʏ¿´ǰ4¸�

·         µ±՚Solaris 10ʏ£¬Ϊx86_64¼ܹ¹£¨AMD Opteron)ʹԃInnoDB´洢ӽȦ£¬טҪµŊȊ¹ԃforcedirectioѡЮ4°²װɎºώª´洢ԫInnoDBР¹صŎļ�õŊ�³¡££¨Ĭɏ՚Solaris 10/x86_64ʏ²»ʹԃ֢¸��²װѡЮ £©¡£ʹԃforcedirectio ʧ°ܻᵼׂInnoDB՚֢¸�¨ʏµŋٶȺΐՄݑЖٍ˻¯¡£

·         µ±µ¼ɫ˽¾ݵ½InnoDBא֮ʱ£¬ȫȷхMySQLûԐՊѭautocommitģʽ£¬ӲΪՊѭautocommitģʽ»⑨Ҫÿ´β扫¶¼Ҫ ˢтɕ־µ½´ƅ̡£Ҫ՚µ¼ɫ²ڗ�͖н�tocommitģʽ£¬ԃSET AUTOCOMMITº̃OMMITԯ¾倴°�씯¾䣺

·                SET AUTOCOMMIT=0;
·                /* SQL import statements ... */
·                COMMIT;

ɧ¹�ԃmysqldump ѡЮ--opt£¬¼´ʹ²»ԃSET AUTOCOMMITº̃OMMITԯ¾倴°�䒲ʹµÿ팙µŗª´¢τ¼�뵽InnoDB±¡£

·         Сф´�扫µĴ󼘹�nnoDB՚²扫אʹԃ²扫»º³怴½۔¼´ƅˉ/O£¬ µ«ˇ՚РӦµĻع�»Ԑʹԃ֢ҹµĻ�һ¸�̰󶨵Ļع�Փďᓦ²扫»¨·Ҋ±¼䶄30±¶4ִѐ¡£ɱµ�ݿ⾸³̓»Ԑˇ°𐗺µģ¬ӲΪ»ع���± »╙´φ�£³��صĻع�¨һ·½·¨ˇն´󻺳崘ʹµûع�ȃPU°󶩇Ӆܵÿ죬»󖠊¹ԃרԃ²½ר£¬ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#forcing-recovery" title="15.2.8.1. Forcing Recovery">15.2.8.1½ڣ¬¡°ǿ׆»ָ´”¡£

·         ҲҪСфǤ̼´󶄴ƅ̰󶨲ڗ�„ROP TABLE»񂑅ATE TABLE4ȥ¿֒»¸�¬¶�ԃDELETE FROM tbl_name¡£

·         ɧ¹�Ҫ²扫ѭ¶ᑐ£¬ղʹԃ¶ᑐ²扫ԯ·¨4¼�ͻ§¶˺ͷ�®¼䶄ͨѶ¿ª֧£º

·                INSERT INTO yourtable VALUES (1,2), (5,5), ...;

֢¸�¾¶Ե½ɎºαэµIJ扫¶¼ˇºϷ¨µģ¬²»½�ǶӉnnoDB`э¡£

·         ɧ¹�µڶ�ГϕNIQUEԼ˸£¬ţ¿ʒՔڵ¼ɫ»Ựא՝ʱ¹ر֎¨һє¼쳩Ӕ¼ԋٱµ¼ɫ£º

·                SET UNIQUE_CHECKS=0;

¶Փڴ󲭣¬֢½۔¼‹´􁿴ƅˉ/O£¬ӲΪInnoDB¿ʒՊ¹ԃ̼µIJ扫»º³怴՚һƺŚдµڶ��£

·         ɧ¹�ţµıFOREIGN KEYԼ˸£¬ţ¿ʒՔڵ¼ɫ»Ự¹�¨¹�⽼¼쳩4̙͡±µ¼ɫ£º

·                SET FOREIGN_KEY_CHECKS=0;

¶Փڴ󲭣¬֢¿ʒԽ۔¼´􁿵Ĵƅˉ/O¡£

·         ɧ¹�³£Ԑ¶Բ»¾­³£¸�ט·¢²ꑯ£¬ȫʹԃ²ꑯ»º´棺

·                [mysqld]
·                query_cache_type = ON
·                query_cache_size = 10M

15.2.11.1. SHOW INNODB STATUSºˠInnoDB Monitors

InnoDB°�oDB Monitors£¬̼´󓢓й׉nnoDBڲ¿״̬µŐƏ¢¡£ţ¿ʒՊ¹ԃSQLԯ¾㒈OW INNODB STATUS4ȡ±뗼InnoDB MonitorµŊ䴶̍µ½ţµÓQL¿ͻ§¶ˡ£֢¸�¢՚єŜµ�±Ԑԃ¡££¨ɧ¹�ʹԃmysql˂ϱSQL¿ͻ§¶ˣ¬ɧ¹�\Gͦ´�µœ¦וֹ·�£¬ˤ³��¿ɶ� £©¡£¹ٓىnnoDB̸¶¨ģʽµŌׂۣ¬ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-lock-modes" title="15.2.10.1. InnoDB Lock Modes">15.2.10.1½ڣ¬¡°InnoDB̸¶¨ģʽ”¡£

mysql> SHOW INNODB STATUS\G

­һ¸�‰nnoDB Monitorsµķ½·¨ʱɃ̼ć²»¶А´˽¾ݵ½mysqld·�ı뗼ˤ³�ە㗖ȩ¿�¬ûԐˤ³�͵½¿ͻ§¶ˡ£µ±±»´򿪵Ŋ±º򣫉nnoDB Monitorsÿ15ī´󓢒»´ϊ��䴶ͨ³£±»¶¨вµ½MySQL˽¾ބ¿¼oµ®errɕ־¡£֢¸�ޔېՄܵ�±Ԑԃ¡£՚Windowsʏ£¬ɧ¹�¶¨вˤ³�°¿؍ ¶�µ½ɕ־τ¼�ِ뵓¿ٖnj¨´°¿ڵŃ�¹ԃ--consoleѡЮ4Ǵ¶¯·�£

¼ዓǷˤ³�¨Ђ`эµŐƏ¢£º

·         ±»ÿ¸�ϱ³דеı¼Ȃ¼̸¶¨

·         ˂ϱµŋ�´�>

·         П³̵Őźŵȴ�>

·         δ½⿶µŎļ�ȳ

·         »º³崘ͳ¼NJ�:p>

·         ׷InnoDBП³̵ľ»»¯ºͲ扫»º³廏²¢»

ҪɃ±뗼InnoDB Monitorдµ½mysqldµı뗼ˤ³�승ԃЂSQLԯ¾䣺

CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;

¼ዓǷ¿ʒՍ¨¹�Áѓ¦4±»ֹͣ£º

DROP TABLE innodb_monitor;

CREATE TABLEԯ·¨ֽˇͨ¹�µÓQL½㏶³͐󎸉nnoDBӽȦ´«µރ�½·¨£ºΨһԐϊ͢µŊÇꋇ±ؖinnodb_monitor¼°̼ˇһ¸�oDB±¶Փؼb>InnoDB Monitor, ±½ṹ¸�Р¹ء£ɧ¹�¼ዓǷֽՋѐʱ¹رշ�¬²¢ȒţЫҪՙ´φ�ዓǷ£¬ţ±ِ앚¿ʒԷ¢³�REATE TABLEԯ¾凴¶¯¼ዓǷ֮ǰӆ³�⹶ԯ·¨՚½«4µķ¢ѐ°汾א¿ʄܻṄ±䡣

ţ¿ʒՒՏጆµķ½ʽʹԃinnodb_lock_monitor¡£³�²͡¹©´􂀋�Ϣ֮΢£¬̼ԫinnodb_monitorРͬ¡£һ¸�분 innodb_tablespace_monitor´󓡴畚Ԛ±¼嗐ӑ´´½¨τ¼�Œ»¸�²¢Ȓȷɏ±¼世Ƥ˽¾ݽṹ¡£´̍⣬Ԑinnodb_table_monitor£¬ԃ̼ţ¿ʒԴ󓠉nnoDBڲ¿˽¾ݴʵ䶄Śɝ¡£

InnoDB Monitorˤ³�»¸�ӣº

mysql> SHOW INNODB STATUS\G
*************************** 1. row ***************************
Status:
=====================================
030709 13:00:59 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 18 seconds
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 413452, signal count 378357
--Thread 32782 has waited at btr0sea.c line 1477 for 0.00 seconds the semaphore:
X-lock on RW-latch at 41a28668 created in file btr0sea.c line 135
a writer (thread id 32782) has reserved it in mode wait exclusive
number of readers 1, waiters flag 1
Last time read locked in file btr0sea.c line 731
Last time write locked in file btr0sea.c line 1347
Mutex spin waits 0, rounds 0, OS waits 0
RW-shared spins 108462, OS waits 37964; RW-excl spins 681824, OS waits 375485
------------------------
LATEST FOREIGN KEY ERROR
------------------------
030709 13:00:59 Transaction:
TRANSACTION 0 290328284, ACTIVE 0 sec, process no 3195, OS thread id 34831 inser
ting
15 lock struct(s), heap size 2496, undo log entries 9
MySQL thread id 25, query id 4668733 localhost heikki update
insert into ibtest11a (D, B, C) values (5, 'khDk' ,'khDk')
Foreign key constraint fails for table test/ibtest11a:
,
  CONSTRAINT `0_219242` FOREIGN KEY (`A`, `D`) REFERENCES `ibtest11b` (`A`, `D`)
 ON DELETE CASCADE ON UPDATE CASCADE
Trying to add in child table, in index PRIMARY tuple:
 0: len 4; hex 80000101; asc ....;; 1: len 4; hex 80000005; asc ....;; 2: len 4;
 hex 6b68446b; asc khDk;; 3: len 6; hex 0000114e0edc; asc ...N..;; 4: len 7; hex
 00000000c3e0a7; asc .......;; 5: len 4; hex 6b68446b; asc khDk;;
But in parent table test/ibtest11b, in index PRIMARY,
the closest match we can find is record:
RECORD: info bits 0 0: len 4; hex 8000015b; asc ...[;; 1: len 4; hex 80000005; a
sc ....;; 2: len 3; hex 6b6864; asc khd;; 3: len 6; hex 0000111ef3eb; asc ......
;; 4: len 7; hex 800001001e0084; asc .......;; 5: len 3; hex 6b6864; asc khd;;
------------------------
LATEST DETECTED DEADLOCK
------------------------
030709 12:59:58
*** (1) TRANSACTION:
TRANSACTION 0 290252780, ACTIVE 1 sec, process no 3185, OS thread id 30733 inser
ting
LOCK WAIT 3 lock struct(s), heap size 320, undo log entries 146
MySQL thread id 21, query id 4553379 localhost heikki update
INSERT INTO alex1 VALUES(86, 86, 794,'aA35818','bb','c79166','d4766t','e187358f'
,'g84586','h794',date_format('2001-04-03 12:54:22','%Y-%m-%d %H:%i'),7
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 48310 n bits 568 table test/alex1 index symbole
trx id 0 290252780 lock mode S waiting
Record lock, heap no 324 RECORD: info bits 0 0: len 7; hex 61613335383138; asc a
a35818;; 1:
*** (2) TRANSACTION:
TRANSACTION 0 290251546, ACTIVE 2 sec, process no 3190, OS thread id 32782 inser
ting
130 lock struct(s), heap size 11584, undo log entries 437
MySQL thread id 23, query id 4554396 localhost heikki update
REPLACE INTO alex1 VALUES(NULL, 32, NULL,'aa3572','','c3572','d6012t','', NULL,'
h396', NULL, NULL, 7.31,7.31,7.31,200)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 0 page no 48310 n bits 568 table test/alex1 index symbole
trx id 0 290251546 lock_mode X locks rec but not gap
Record lock, heap no 324 RECORD: info bits 0 0: len 7; hex 61613335383138; asc a
a35818;; 1:
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 48310 n bits 568 table test/alex1 index symbole
trx id 0 290251546 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 82 RECORD: info bits 0 0: len 7; hex 61613335373230; asc aa
35720;; 1:
*** WE ROLL BACK TRANSACTION (1)
------------
TRANSACTIONS
------------
Trx id counter 0 290328385
Purge done for trx's n:o < 0 290315608 undo n:o < 0 17
Total number of lock structs in row lock hash table 70
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, process no 3491, OS thread id 42002
MySQL thread id 32, query id 4668737 localhost heikki
show innodb status
---TRANSACTION 0 290328384, ACTIVE 0 sec, process no 3205, OS thread id 38929 in
serting
1 lock struct(s), heap size 320
MySQL thread id 29, query id 4668736 localhost heikki update
insert into speedc values (1519229,1, 'hgjhjgghggjgjgjgjgjggjgjgjgjgjgggjgjgjlhh
gghggggghhjhghgggggghjhghghghghghhhhghghghjhhjghjghjkghjghjghjghjfhjfh
---TRANSACTION 0 290328383, ACTIVE 0 sec, process no 3180, OS thread id 28684 co
mmitting
1 lock struct(s), heap size 320, undo log entries 1
MySQL thread id 19, query id 4668734 localhost heikki update
insert into speedcm values (1603393,1, 'hgjhjgghggjgjgjgjgjggjgjgjgjgjgggjgjgjlh
hgghggggghhjhghgggggghjhghghghghghhhhghghghjhhjghjghjkghjghjghjghjfhjf
---TRANSACTION 0 290328327, ACTIVE 0 sec, process no 3200, OS thread id 36880 st
arting index read
LOCK WAIT 2 lock struct(s), heap size 320
MySQL thread id 27, query id 4668644 localhost heikki Searching rows for update
update ibtest11a set B = 'kHdkkkk' where A = 89572
------- TRX HAS BEEN WAITING 0 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 65556 n bits 232 table test/ibtest11a index PRIM
ARY trx id 0 290328327 lock_mode X waiting
Record lock, heap no 1 RECORD: info bits 0 0: len 9; hex 73757072656d756d00; asc
 supremum.;;
------------------
---TRANSACTION 0 290328284, ACTIVE 0 sec, process no 3195, OS thread id 34831 ro
llback of SQL statement
ROLLING BACK 14 lock struct(s), heap size 2496, undo log entries 9
MySQL thread id 25, query id 4668733 localhost heikki update
insert into ibtest11a (D, B, C) values (5, 'khDk' ,'khDk')
---TRANSACTION 0 290327208, ACTIVE 1 sec, process no 3190, OS thread id 32782
58 lock struct(s), heap size 5504, undo log entries 159
MySQL thread id 23, query id 4668732 localhost heikki update
REPLACE INTO alex1 VALUES(86, 46, 538,'aa95666','bb','c95666','d9486t','e200498f
','g86814','h538',date_format('2001-04-03 12:54:22','%Y-%m-%d %H:%i'),
---TRANSACTION 0 290323325, ACTIVE 3 sec, process no 3185, OS thread id 30733 in
serting
4 lock struct(s), heap size 1024, undo log entries 165
MySQL thread id 21, query id 4668735 localhost heikki update
INSERT INTO alex1 VALUES(NULL, 49, NULL,'aa42837','','c56319','d1719t','', NULL,
'h321', NULL, NULL, 7.31,7.31,7.31,200)
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (write thread)
Pending normal aio reads: 0, aio writes: 0,
 ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0
151671 OS file reads, 94747 OS file writes, 8750 OS fsyncs
25.44 reads/s, 18494 avg bytes/read, 17.55 writes/s, 2.33 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf for space 0: size 1, free list len 19, seg size 21,
85004 inserts, 85004 merged recs, 26669 merges
Hash table size 207619, used cells 14461, node heap has 16 buffer(s)
1877.67 hash searches/s, 5121.10 non-hash searches/s
---
LOG
---
Log sequence number 18 1212842764
Log flushed up to   18 1212665295
Last checkpoint at  18 1135877290
0 pending log writes, 0 pending chkp writes
4341 log i/o's done, 1.22 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 84966343; in additional pool allocated 1402624
Buffer pool size   3200
Free buffers       110
Database pages     3074
Modified db pages  2674
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages read 171380, created 51968, written 194688
28.72 reads/s, 20.72 creates/s, 47.55 writes/s
Buffer pool hit rate 999 / 1000
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
Main thread process no. 3004, id 7176, state: purging
Number of rows inserted 3738558, updated 127415, deleted 33707, read 755779
1586.13 inserts/s, 50.89 updates/s, 28.44 deletes/s, 107.88 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================
1 row in set (0.05 sec)

¹ٓە⹶ˤ³�©ҪעӢµģº

·         ɧ¹�SACTIONS½ڱ¨¸猸¶¨µȴ�œ¦ԃ³͐󀊄ݓы�ֹ¡£ˤ³�𐗺¸�ϱ̸̀µŔ­Ӳ¡£

·         SEMAPHORES½ڱ¨¸消´�źŵŏ̺߳͹ٓۏ̶߳Ւ»¸�㍥»񱵭lockхºƐ钪¶ኙ´λع�ȴ�NJ�􁿵ȴ�ŏ߳̿ʄ݊Ǵƅˉ/OµĽẻ»󖞉nnoDBھºֹϊ͢µĽẻ¡£¾ºֹ¿ʄ݊Ȓ󎪲ꑯµőЖز¢ѐ£¬»󖟲ڗ�³П³̼ƻ®µŎˌ⡣ʨ׃innodb_thread_concurrencyСԚĬɏֵ՚֢זȩ¿�ȓа𐗺µġ£

·         BUFFER POOL AND MEMORY½ڸ�ԚҳĦ¶´µō³¼NJ�䀉Ӕ´ԕ㐩˽¼Nj䅣µ±ǰµIJꑯֽض¶ኙτ¼�/O²ڗ�

·         ROW OPERATIONS½ۏՊ¾׷П³͕�²ô¡£

InnoDB·¢̍֯¶Њ䴶µ½stderr»󏄼�»ˇµ½stdout»󖟹̶¨³ߴ腚´滺³壬Ӕ±݃ˊµײ㻺³擧³��»¸�§¹�OW INNODB STATUSµŊ䴶ÿ15īדдµ½һ¸�¬τ¼���׊Ʃnnodb_status.pid£¬Ǥאpid ˇ·��¡£֢¸��QL˽¾ބ¿¼o´´½¨¡£ֽ³£¹ػ�£¬InnoDBɾ³�ļ��²»ֽ³£µĹػ�㐩״̬τ¼��»չʾ£¬¶�ѫ±»˖¶¯ɾ³�Ƴ�®ǰ£¬ţ¿ʄݏ쒪¼쳩̼ć4¿´̼桷񱼺¬Ԑ¹ز»ֽ³£¹ػ�ӲµœѓĐƏ¢¡£½�嗃ѡЮinnodb_status_file=1±»ʨ׃֮ʱ£¬innodb_status.pidτ¼�¨¡£

15.2.12. ¶౦±¾µŊµʩ

ӲΪInnoDBˇ¶౦±¾»¯µŊ� ̼±ِ뱣³ֹٓڱ¼嗐¾ɰ汾ѐµŐƏ¢¡£֢¸�¢±»´畚ĻΪrollback segment£¨՚OracleאģŢ˽¾ݽṹ֮º󣩵Ŋ�¹א¡£

ڲ¿µأ¬InnoDBι´畚˽¾ݿ㗐µŃ¿һѐאͭ¼ԁ½¸�£һ¸�½ڵœ󋶃�뼲¸�еŗһ¸�񶅊Î򊶱𸻡£ͬʱ£¬һ¸��ڲ¿´¦mΪһ¸�£¬Ǥאѐאһ¸�ⶄλ±»ʨ׃4±뗢¸Đюªӑɾ³�»ѐҲ°��ª¹�¸֫µ·ؖ½ۓ򡣹�¸ָ֫вһ¸�´µ½»ع�ϵij·кɕ־¼Ȃ¼¡£ɧ¹�±»¸�·кɕ־¼Ȃ¼°�Đб»¸�°ט½¨¸Đеńۈݱِ趄µŐƏ¢¡£

InnoDBʹԃ՚»ع�ЖеŐƏ¢4ִѐ՚˂ϱ»ع�钪µij·к²ڗ��ĕ⹶хϢ4Ϊһ¸��½¨¸�¾µŐС£

՚»ع�Жеij·кɕ־±»·׎ª²扫º͸��¡£²扫³·кɕ־½�Î񼘹�钪£¬ȒֻҪ˂ϱһ͡½»¾ͿʒԱ»¶ªǺ¡£¸��Ҳ±»ԃ՚³א�£¬¶�ć½� µ±ǰûԐ±»InnoDB·ׅ乸һ¸�յŊÎ򖮺󱻶ªǺ£¬֢¸�֔ڳא�¿ʄܻ⑨Ҫ¸��µŐƏ¢4½¨bһ¸�ݿ㑐µŔ臚°汾¡£

ţ±ِ뽇µù烉µٌύţµŊÎ񣬰�©ֻ·¢²¼³א�˂ϱ¡£·򕰬 InnoDB²»Ŝ´Ӹ��¶ªǺ˽¾ݣ¬²¢Ȓ»ع�Ͽʄܱ䶃̫´󣭌ţµı¼䡣

՚һ¸��Ѐһ¸��¼Ȃ¼µŎ𐁭³ߴ綤эµِ¡ԚРӦµŒѲ扫ѐ»󓑸�£ţ¿ʒՓĕ⹶хϢ4¼Nj㼘¹�А钪µĿռ䡣

՚InnoDB¶౦±¾»¯·½°¸א£¬µ±ţԃSQLԯ¾剾³�®ʱ£¬¸Đу»Ԑ±»´Ԋ�¢¼´ϯmɾ³� ֻԐµ±InnoDB¿ʒԶªǺΪɾ³�´µĸ��¼Ȃ¼ʱ£¬InnoDBҲϯmµشԊ�¾³�к΋��£֢¸��»³ʎª¾«»ª£¬̼Ջѐµúܿ죬ͨ³£ԫضɾ³�ԯ¾仨µŊ±¼啚һ¸�¿¼¶¡£

՚ijһȩ¾°Ђ£¬՚Ňo£¬ԃ»§Ӕ¼¸º�¬µıɂʣ¬Сƺ´εٔڱ²扫ºΉ¾³�»»¯П³̿ªʼ׍º񋋊ǿʄܵ쬲¢Ȓ±µĔ½4Խ´󣭊¹µă¿ҹ˂¶¼ˇ´ƅ̰󶨵Ķ�³£ý¡£¼´ʹ±՘Ԑ10MBԐԃµŊ��䶃ԃ̹ԐµŋPѕ¼¾۱0GB¿ռ䡣՚֢זȩ¿�¬½ہ�ڗ�¢·ׅ乼¶඄؊Դ4¾»»¯П³̿ʄ݊DZȽϺõġ£Ǵ¶¯ѡЮºͿʉ闃ȫȲ±偿innodb_max_purge_lag¾ΊȎª֢¸�Ķ�µġ£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-start" title="15.2.4. InnoDB Startup Options">15.2.4½ڣ¬¡°InnoDB Ǵ¶¯ѡЮ” Ӕ»񶃸�¢¡£

15.2.13. ±̷ӽ½ṹ

MySQLΪ±̼µŊ�呅ϢӔ.frmτ¼�½´畚˽¾ݿㄿ¼o£¬֢¶Ջ�SQL´洢ӽȦ¶¼ˇ֦µġ£µ«ˇÿ¸�oDB±±¼党µÉnnoDBڲ¿˽¾ݴʵ偯Ԑ̼ؔ¼ºµŌ�£µ±MySQLӆ³��¬̼²»µò»ɾ³�ļ�oDB˽¾ݴʵ党µŏᓦ͵Ŀ¡£֢¾ΊȎªʲôţ²»Ŝ՚˽¾ݿ㖮¼佲µ¥µْƶ¯.frmτ¼�¯InnoDB±

ÿ¸�oDB±רą̷ӽ£¬±»³ǎªclustered index£¬¶ՐеŊ�甚Ǥא¡£ɧ¹�ţµıӥһ¸�MARY KEY£¬ ׷¼���¡£

ɧ¹�ԐΪ±ӥPRIMARY KEY£¬MySQLʰȡµے»¸�ώOT NULLµÕNIQUE̷ӽطΪ׷¼�щnnoDB°ҋ�¯˸̷ӽ4ԃ¡£ɧ¹�ûԐ֢ҹһ¸��oDBڲ¿²�¸��£¬ǤאԃInnoDB՚֢ҹһ¸�ۖ¸¶¨¸�ѐID4ƅѲѐ¡£ѐIDˇһ¸�½ڵœ򣭋�б»²扫µŊ±º򵦒»µٔ�£Ӳ´˱»ѐIDƅѲµŐъȎ𐁭µذ´֕²扫˳Ѳƅµġ£

ͨ¹��Ď˒»¸�ǽϿ춄£¬ӲΪѐ˽¾ފȔۋ�ҋ�¼µō¬һҳĦ¡£ɧ¹�¾޴󶄣¬µ±¶Աɓڴ«ͳ½⿶·½°¸£¬¼¯˸̷ӽ¹¹¼ܾ­³£½۔¼´ƅˉ/O¡££¨՚ѭ¶ዽ¾ݿ⣬˽¾ݴ«ͳµر»´畚ԫ̷ӽ¼Ȃ¼²»ͬµŒ³£©¡£

՚InnoDBא£¬·Ǽ¯˸̷ӽoµļȂ¼£¨Ҳ³ǎªµڶ�©°�еŖ�µ¡£InnoDBԃ֢¸􋋖�µ4´Ӽ¯˸̷ӽא̷̑ѐ¡£עӢ£¬ɧ¹�ˇ³¤µģ¬µڶ�¹ԃ¸�䡣

InnoDB±Ƚ΃HARº̖ARCHARؖ·�ͬ³¤¶ȣ¬Ӕ±䕚½϶ַ͗�ʣЂµij¤¶ȱ»´¦m˓Ϊԃ¿ո񲺉ϵġ£

15.2.13.1. ̷ӽµŎ𐁭½ṹ

̹ԐInnoDBµŋ�Ƃ˽£¬Ǥא̷ӽ¼Ȃ¼±»´洢՚˷µŊ�³¡£һ¸��¬ɏ´�ű6KB¡£µ±т¼Ȃ¼±»²扫£¬InnoDB˔؅Ϊ½«4̷ӽ¼Ȃ¼µIJ扫º͸�Ê®¹·ז®һµĿհؒ³¡£

ɧ¹�¼Ȃ¼ӔlѸµŋ³Ѳ±»²扫£¨ʽѲ»󖟽µѲ£©£¬½ẻ̷ӽҳ´�ű5/16ú¡£ɧ¹�±»Ӕ̦»�Ѳ±»²扫£¬ҳĦˇ´ѱ/2µ½ 15/16ú¡£ɧ¹�ҳµŌӲؓ½µµ½µΓر/2£¬InnoDB˔؅̷̷̑ӽ˷4ˍ·ƒ³¡£

15.2.13.2. »º³峥ɫ

՚˽¾ݿ㓦ԃא£¬׷¼��»µŊ¶±𸻣¬²¢Ȓтѐ±»Ӕ׷¼�󀴲扫£¬֢ˇ¸��¿�򵋣¬µ½¼¯˸̷ӽµIJ扫²»ѨҪ´Ԓ»¸�͋漺¶a£

­һ·½Ħ£¬µڶ�¨³£ˇ·Ȏ¨һµģ¬µ½µڶ�IJ扫ӔР¶Ջ漺´ϐ򷣉�¿ʄܻᵼׂ´􁿵ŋ漺´ƅˉ/O²ڗ��һ¸�ĔىnnoDBאµŗ¨ԃ»�

ɧ¹�̷ӽ¼Ȃ¼Ӧ¸ñ»²扫µ½һ¸�¨һµڶ�¬InnoDB¼쳩µڶ�³ˇ·򕚻º³崘א¡£ɧ¹�InnoDBֱ½Ӳ扫µ½̷ӽҳ¡£ɧ¹�ҳûԐ՚»º³崘א±»·¢Ж£¬InnoDB²扫¼Ȃ¼µ½һ¸�ŵIJ扫»º³御¹¹¡£²扫»º³屻±£³ֵĈ絋СӔׁԚ̼ΪȫˊºДڻº³崘£¬²¢Ȓ¿ʒԷdz£¿춘ض²扫¡£

²扫»º³旜ǚµر»ºϲ¢µ½˽¾ݿ㗐µڶ��£°Ҋ�뻏²¢µ½̷ӽ˷µō¬һҳ£¬½ۊ¡´ƅˉ/O²ڗ�­³£µٕ㋇Ԑ¿ʄܵġ£¾ݲみ£¬²扫»º³怉Ӕ͡¸ߵ½±²扫̙¶ȴ±¶¡£

՚²扫˂ϱ±»͡½»֮º󣬲扫»º³廏²¢¿ʄ݁¬Ѹ·¢ʺ¡£ʵ¼ˉϣ¬·�رպΖن�󣭕⼡lѸ·¢ʺ¡££¨ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#forcing-recovery" title="15.2.8.1. Forcing Recovery">15.2.8.1½ڣ¬¡°ǿ׆»ָ´”£©¡£

µ±ѭ¶ක¶�ِ뱻¸�±£¬²¢Ȓѭ¶ᑐӑ±»²扫֮ʱ£¬²扫»º³廏²¢¿ʄݐ钪˽¸�±¡£՚֢¸�党£¬´ƅˉ/O½«»╶¼ӣ¬֢ҹ»ᵼׂ´ƅ̰󶨲ꑯķД»ºý¡£­һ¸�Եĺ􌧉/O²ڗ�»»¯П³̣¨ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-multi-versioning" title="15.2.12. Implementation of Multi-Versioning">15.2.12½ڣ¬¡°ʵЖ¶౦±¾»¯”£©¡£

15.2.13.3. ˊӦµĹ��

ɧ¹�±º�«ƤºЖ�棬՚Ǥʏִѐ²ꑯخ¿춄·½·¨¾ΊȊ¹ԃ¹��oDBԐһ¸�¯»�̼¼ዓ¶Վªһ¸�¨ӥµŋ�ŋ�ҋ�纻InnoDBעӢµ½²ꑯ»ᵓ½¨bһ¸�£̷ӽא»򓦣¬̼»☔¶¯µٕヴض¡£

עӢ£¬¹���ʏӑ´畚µÂ˷̷ӽ4½¨b¡£¸�noDB¶ӂ˷̷ӽ¹۲춄̷̑·½ʽ£¬InnoDB»╚Ϊ¸‚˷¶¨ӥµňκ㤶ȵ ¼��ºʏ½¨b¹��ϣ̷ӽ¿ʒՊDz¿·ֵģº̼²»Ҫȳֻ¸�̷ӽ±»»º´畚»º³崘¡£InnoDB¸�Ҫ¶Ա»¾­³£·Ďʵŋ�ńȐ©ҳĦ½¨b¹��:p>

՚ijזӢӥʏ£¬InnoDBͨ¹�ḻ׷Ś´涄ˊӦµĹ��´¼�Լº£¬¸��狽¾ݿⶄ¼ܹ¹¡£

15.2.13.4. ϯm¼Ȃ¼½ṹ

InnoDB±µļȂ¼ԐɧЂַ͘£º

·         InnoDBאÿ¸����½ڵō·¡£֢¸�»ԃ4½«lѸµļȂ¼l½Ԕے»ǰ£¬²¢ȒҲԃ՚row-level̸¶¨א¡£

·         ¼¯˸̷ӽאµļȂ¼°��¶¨ӥµœ򡣴̍⣬Ԑһ¸�½ڵœ򹹊Î腒Լ°һ¸�½ڵœ򹸹�¸֫¡£

·         ɧ¹�Ϊһ¸�¨ӥ³����¼Ȃ¼Ҳ°��½ڵŐωDԲ¡£

·         ÿ¸��Ȃ¼Ҳ°�¯˸̷ӽ¼�ŋ�¡£

·         һ¸�¼Ҳ°��򹃼Ȃ¼ÿһ¸�Ŗ¸֫£¬ɧ¹�¸�¼אԲµŗܳ¤¶ɐ¡Ԛ128ؖ½ڣ¬¸Ė¸֫ʱһ¸�ڣ»·򕲾ΊŲؖ½ڡ£֢Щָ֫µŕ􂐱»³ǎª¼Ȃ¼Ŀ¼¡£֢Щָָ֫вµŇ�³ǎª¼Ȃ¼µŊ�֡£

·         ڲ¿µأ¬InnoDBӔ¹̶¨³¤¶ȸ򊽴洢¹̶¨³¤¶ɗַ�±Ɉ悈AR(10)¡£InnoDB´ҖARCHAR½ض̸�¼䡣עӢ£¬MySQL¿ʒՄڲ¿µذЃHARת»»ΪVARCHAR¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#silent-column-changes" title="13.1.5.1. Silent Column Specification Changes">13.1.5.1½ڣ¬¡°°²¾²µŁй湱¸ı⥲dquo;¡£

·         һ¸�µÎULLֵ՚¼Ȃ¼Ŀ¼o±£´1»𳘖½ڡ£´̍⣬SQLµÎULLֵɧ¹�´畚¿ɱ䳤¶ɁУ¬ղ՚¼Ȃ¼˽¾ݲ¿·ֱ£´£ؖ½ڡ£՚һ¸�¨³¤¶ɁУ¬̼՚¼Ȃ¼µŊ�ֱ£´¸āеĹ̶¨³¤¶ȡ£ΪNULLֵ±£´¹̶¨¿ռ䱳º󶄶¯»�º󹁍 ´ҎULLֵµ½·ƎULLֵµĸ�Ծ͵ٍ괉£¬Ȓ²»»ᵼ̷ׂӽҳµŋꆬ¡£

15.2.14.τ¼�݀´ƅˉ/O

15.2.14.1. ´ƅʍ I/O

InnoDBʹԃģŢӬ²½´ƅˉ/O£ºInnoDB´´½¨ѭ¶ᐟ³̀´´¦mI/O²ڗ�Ɉ汥ad-ahead.

՚InnoDBאԐ}¸�pan>read-ahead˔̽£º

·         ՚lѸread-aheadא£¬ɧ¹�DBעӢµ½՚±¼嗐¶Ւ»¸�ϵķĎʷ½ʽˇlѸµģ¬̼¾Δ¤Ј²¼׃һƺ ˽¾ݿ㒳µĶ�¸�µͳ¡£

·         ՚̦»�-aheadא£¬ɧ¹�DBעӢµ½±¼嗐µŒ»ЩȸԲ¿´ǰ4½�ȫ¶}�³ٖеĴ¦mא£¬̼¾Ͳ¼׃ʣԠµĶu½I/Oϵͳ¡£

InnoDBʹԃһ¸�ǎªdoublewriteµŐÓ±µŎļ�¼¼˵¡£̼¸�ͥͳ±@£»򶴵绳µĻָ´ͭ¼ԁ˰²ȫ£¬²¢Ȓͨ¹�Ӧsync()²ڗ�钪£¬̼՚¶ዽUnix±嗖ʏ¸ʼnǁ̐Մܡ£.

DoublewriteӢΪ՚вһ¸�ގļ�®ǰ£¬InnoDB˗Ј°ҋ�½һ¸�ڵı¼券Բ£¬³ǎªdoublewrite»º³塣½�´Ȼº񋋋¢тµ½doublewriteӑ¾­Ϊ³ʖ®ǰ£¬InnoDBдҳĦµ½̼ć՚±¼嗐ǡµ±µŎ»׃¡£ɧ¹�ϵͳ՚дҳĦµŖм䲀#£¬՚»ָ´¹�¬InnoDB¿ʒՔۋ滳´Ҥoublewrite»º³旐֒µ½ҳĦµŒ»¸�ø´׆¡£

15.2.14.2. Ϊ±¼効ԃԭʼʨ±¸

ţҲ¿ʒՊ¹ԃԭʼ´ƅ̷ׇ�±¼勽¾ގļ��­ʼ´ƅ̣¬ţ¿ʒՔٗindowsºΒ»ЩUnixϵͳʏִѐnon-buffered I/O ¶�τ¼�ª֧£¬֢ҹ¿ʒԸʼnǐՄڠ

µ±ţ´´½¨һ¸���¬ţ±ِ앚innodb_data_file_patho½�Ɗ��®º󸆖M ¹ؼ�raw¡£·ׇ�ׁʙº΄䖸¶¨µijߴ蒻ҹ´󣭗¢Ӣ£¬՚InnoDBא£¬1MBˇ1024x1024ؖ½ڣ¬ µ«ˇ՚´ƅ̹湱א£¬1MBͨ³£ӢΪ1,000,000ؖ½ڡ£

[mysqld]
innodb_data_home_dir=
innodb_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:2Gnewraw

Ђ´τ䇴¶¯·�®ʱ£¬InnoDBעӢµ½¹ؼ�raw²¢³�¯т·ׇ�ˇɔȻ²¢²»´´½¨»򹄱剎º͉nnoDB±­΢£¬µ±ţטǴ·�®ʱ£¬InnoDBטт³�¯·ׇ�µĸı伡¶ªʧ¡££¨´Ѽst1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">3.23.44Ǵ¶¯£¬طΪһ¸�«´슩£¬ µ±ԃnewrawָ¶¨Ɏºηׇ�£¬InnoDBبֹԃ»§ў¸Ŋ�£

InnoDB³�¯т·ׇ�£¬ֹͣ·�¬՚¶ՐеŊ��иı㭥wraw£º

[mysqld]
innodb_data_home_dir=
innodb_data_file_path=/dev/hdd1:5Graw;/dev/hdd2:2Graw

Ȼº���¬²¢ȒInnoDBՊѭض¸ı䡣

՚Windowsʏ£¬ţ¿ʒՏ��´ƅ̷ׇ�¸�ގļ�:p>

[mysqld]
innodb_data_home_dir=
innodb_data_file_path=//./D::10Gnewraw

¶ՓڷĎˎ𐁭Ƚ¶¯Ƿ£¬//./ Рµ±ԚWindowsԯ·¨µÜ\.\ ¡£

µ±ţʹԃԭʼ´ƅ̷ׇ�£¬ȷх̼ćԐՊѭ±»ԃ4ՋѐMySQL·�ŕʺŶzΐ´·ĎʵŐ¡£

15.2.14.3.τ¼�݀뻯:p>

ţ՚Ƥ׃τ¼�嶄˽¾ގļ�nnoDBµı¼䡣τ¼�¥µف¬ǰ4Ӕю³ɱ¼䡣ûԐ͵φ՚ʹԃ¡£µ±ǰţ²»Ŝ¶¨ӥţµı·ׅ䵽±¼嗐µŎ»׃¡£µ«ˇ£¬՚һ¸�´½¨µı¼嗐£¬InnoDB ´ӵے»¸�ގļ�ׅ倕¼䡣

±¼䱼º¬˽¾ݿ㒳£¬Ĭɏ´�ű6KB¡£֢Щҳ±»·ח鴉64¸��·¶Χ¡£±¼党µŎļ�oDBא±»³ǎªƬ¶ϡ£˵ԯ“rollback segment”ԐһЩ»퐽£¬ӲΪ̼ȷȐµذ�ಭ¿ռ冬¶ϡ£

՚InnoDBא£¬ÿ¸��½¸�ϡ£һ¸��ķȊ�ڵ㶄£¬­һ¸��½ڵ㶄¡£՚֢o£¬mЫµŊȎª°�ݵŊ�ڵ㵯µ½¸�ѐ󑔡£

µ±һ¸�Дڱ¼党³¤´󣫉nnoDBµ¥¶5طׅ嘮Јµ³2ҳ¸�´˺򈭮oDB¿ªʼ·ׅ喻¸�§¸�¶ϡ£InnoDB¿ʒՒ»´θ�´􆬶Ќ¶൯4¸�§Ӕȷ±£˽¾ށ¼ºõ٬Ѹє¡£

՚±¼嗐µŒ»Щҳ°��»ͼ£¬Ӳ´̔ے»¸�oDB±¼嗐µŒ»Щ·¶Χ²»Ŝ±»ֻ¸�ׅ乸Ƭ¶ϣ¬ֻŜطΪµ¥¸�»·ׅ䡣

µ±ţ·¢³�W TABLE STATUSѯϊ±¼偯¿ʓõŗՓɿռ單ʱ£¬InnoDB±¨¸畚±¼嗐Ϊȫؔԉµķ¶Χ¡£InnoDB؜ˇΪɨ³��¿µı£´һЩ·¶Χ£¬֢Щ±£´µķ¶Χ²»°�Փɿռ偯¡£

µ±ţ´Ԓ»¸�щ¾³�®ʱ£¬InnoDBjϵРӦµÂ˷̷ӽ¡£ˇ·򋍷ŵ¥¶R³»󋇷¶Χµ½±¼刡¾��½£¬Ӳ´˱»ˍ·ŵĿռ䲤³ɶՆ匼ԃ»§¿ʓ㬵«ˇ¼ȗ¡£¬ӑɾ³��Đв»ՙ±»˂ϱ »ع�א�ѨҪ֮º󶅒»¸�Զ¯£©¾»»¯²ڗ�»ϯmɾ³�:p>

15.2.14.4. ֻm±Ƭ

ɧ¹�»�µ½±̷ӽ»򵓱̷ӽ̦»�£¬̷ӽ¿ʄܱ䴉̩Ƭµġ£̩ƬӢ˼ˇ̷ӽҳ՚´ƅ͉ϵŎ𐁭ƅѲ²¢²»½ӽ�Ȃ¼µŋ�Ɛ򣬻󖠔ڷׅ乸̷ӽµ¶4ҳ¿ꊏԐѭ¶჻Ԑ±»ʹԃµŒ³¡£

̩ƬµŒ»¸�quo;ͬӥ´Ȧrdquo;ˇһ¸�¼¾ݵĿռ䳬¹�ĕ¼¾ݵĿռ䶄´񋋐¡¡£ȷȐˇ¶ኙ£¬֢ˇº݄҈¥ȷ¶¨µġ£̹ԐInnoDB˽¾ݺ΋�»´畚B˷א£¬²¢Ȓ̼ćµŌӲؓ¿ʄܴѵ0%µ½100%¡£̩ƬµŁ¸�quo;ͬ ӥ´Ȧrdquo;ˇһ¸�¨Ĩ}ɧ£º

SELECT COUNT(*) FROM t WHERE a_non_indexed_column <> 12345;

»¨‹³¬¹�û¨µŊ±¼䡣£¨՚ʏĦµIJꑯאϒć“Ǜƭ”SQLԅ»¯Ƿ4ɨĨ¼¯˸̷ӽ£¬¶�һ¸�� £©¡£¶ዽ´ƅ̿ʒԶ�0MB/sµ½50MB/s£¬֢¿ʒԱ»ԃ4ǀ¹R»¸�¨Ĩ¿ʒԶာµٔ̐С£

ɧ¹�ǚµٖ´ѐ“null” ALTER TABLE²ڗ��Լԋڋ�¨Ĩ£º 

ALTER TABLE tbl_name ENGINE=INNODB

֢µ¼ׂMySQLט½¨±­һ¸�ыꆬֻm²ڗ�취ˇʹԃmysqldump4ת´¢һ¸�½һ¸�¾τ¼��¢טт´ԗª´¢τ¼�ً�:p>

ɧ¹�¸��옜ˇʽѲµģ¬²¢Ȓ¼Ȃ¼½�©β±»ɾ³�oDBτ¼�֤݀՚̷ӽאµŋꆬ²»»ᷢʺ¡£

15.2.15. InnoDB´´¦m

՚InnoDBא´´¦m²»бSQL±뗼אָ¶¨µŒ»ҹ¡£°´֕±뗼£¬՚SQLԯ¾亽³͖еňκδӦ¸õ¼ׂ¸ē¦µ »ع�nnoDBԐʱ½��ד¦£¬»󖠕�ϱ¡£Ђ͵ĿѰ˶InnoDBɧºϖ´ѐ´´¦m£º

·         ɧ¹�¾¡±¼嗐µŎļ�¬ţʹµySQL±ȫ´£¬²¢ȒInnoDB·µ»דQLԯ¾䡣

·         һ¸�򌁋�InnoDB»ع��񣭔ۋ�´�Ňꀶ£¬InnoDB½���ԯ¾䡣

µ±һ¸�񼘹�ª̸̀»󌸶¨µȴ��£¬̼՚˂ϱא³·кԯ¾䶄طԃ¡£µ«ˇɧ¹�ˇԃSTART TRANSACTION»񁄇INԯ¾俪ʼµģ¬̼¾Ͳ»³·к¸ē¦¡£½�£¬SQLԯ¾䲤³ʊÎ񶅒»²¿·ז±µ½COMMIT, ROLLBACK»󖟵¼ׂ°µµٌύµÓQLԯ¾䷢ʺ¡£

·         ɧ¹�Ԑ՚ԯ¾嗐ָ¶¨IGNOREѡЮ£¬ט¸´¼�ع�ԯ¾䡣

·         ѐ̫³¤´»ع�ԯ¾䡣

·         Ǥ̼´׷Ҫ±»´�MySQL²㣨՚InnoDB´洢ӽȦ¼¶±񓕉ϣ©̽²⣬̼ć»ع�¦µÓQLԯ¾䡣՚µ¥¸�ԯ¾嗐µĻع��±»ˍ·š£

՚°µµػع�͖У¬¾Ώ򕛒»¸�·µÒOLLBACK SQL﮵Ŗ´ѐ¹�»ҹ£¬SHOW PROCESSLIST՚StateΪԐ¹ص٬½ԏՊ¾Rolling back¡£

15.2.15.1. InnoDB´´�span>

ЂĦµŕ⹶²»Ϊȫ±ţ¿ʄݓ�ij£¼�noDBרԐ´£¬´�ʲô·¢ʺµŔ­ӲӔ¼°ɧºθý⿶ϊ͢µŏຘхϢ

·         1005 (ER_CANT_CREATE_TABLE)

²»Ŝ´´½¨±ɧ¹�хϢؖ·�вerrno 150£¬ӲΪ ΢¼�»²»ֽȷµِγɣ¬̹Ӕ±½¨ʧ°ܡ£

·         1016 (ER_CANT_OPEN_FILE)

̤Ȼ¶Մ³±.frmτ¼�¬µ«²»Ŝ´҉nnoDB˽¾ގļ�‰nnoDB±ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-troubleshooting-datadict" title="15.2.17.1. Troubleshooting InnoDB Data Dictionary Operations">15.2.17.1½ڣ¬¡°InnoDB˽¾ݴʵ䳙ط ¹˕Е﷏º΅ų�>¡£

·         1114 (ER_RECORD_FILE_FULL)

InnoDBºľ¡±¼嗐µĿʓÿռ䣬ţӦ¸ĖِÅ嗃±¼倴ͭ¼Ԓ»¸���:p>

·         1205 (ER_LOCK_WAIT_TIMEOUT)

̸¶¨µȴ��Î񱻻ع�

·         1213 (ER_LOCK_DEADLOCK)

˂ϱ̸̀¡£ţӦ¸Ėٔ̐ъÎ񡡠

·         1216 (ER_NO_REFERENCED_ROW)

ţֽ˔؅ͭ¼Ԓ»ѐ£¬µ«ûԐ¸¸ѐ£¬²¢Ȓһ¸��§°ܡ£ţӦ¸ďɌ¸¸ѐ¡£

·         1217 (ER_ROW_IS_REFERENCED)

ţֽ˔ͼɾ³�їԐеĸ¸ѐ£¬²¢Ȓһ¸��§°ܡ£ţӦ¸ďɉ¾³�£

15.2.15.2. ²ڗ�³´´�span>

Ҫ´󓢒»¸��³´ºŵŒ㋼£¬ȫʹԃMySQL·ַ¢°亯st1:state>oµ¼strong>perror³͐򡡠

ЂĦ±¹©һЩ³£ԃLinuxϵͳ´´�¸�Łб²ϔ¼a href="http://www.iglu.org.il/lxr/source/include/asm-i386/errno.h" target="_top">Linux source code¡£

·         1 (EPERM)

²ڗ�»Պѭ

·         2 (ENOENT)

Ϟ´̎ļ�¼

·         3 (ESRCH)

Ϟ´˽�o:p>

·         4 (EINTR)

א¶ϵŏµͳµ�

·         5 (EIO)

I/O ´

·         6 (ENXIO)

Ϟ´̉豸»򶙖·

·         7 (E2BIG)

Arg±³¤

·         8 (ENOEXEC)

ExecºЊʴ

·         9 (EBADF)

»µτ¼�:p>

·         10 (ECHILD) 

Ϟؓ½�o:p>

·         11 (EAGAIN)

ՙ˔һ´̠

·         12 (ENOMEM)

Ś´滄¾¡

·         13 (EACCES)

ѭ¿ɱ»·񶦠

·         14 (EFAULT)

»µµٖ·

·         15 (ENOTBLK)

بֹѨȳµʼn豸

·         16 (EBUSY)

ʨ±¸»󘋔´æ

·         17 (EEXIST)

τ¼�

·         18 (EXDEV)

½»²犨±¸l½Ѡ

·         19 (ENODEV)

Ϟ´̉豸

·         20 (ENOTDIR)

²»ˇһ¸�¼

·         21 (EISDIR)

ˇһ¸�¼£¿

·         22 (EINVAL)

·Ƿ¨²ρ¿

·         23 (ENFILE)

τ¼��:p>

·         24 (EMFILE)

´򿪵Ŏļ�

·         25 (ENOTTY)

ʨ±¸²»ˊºϵéoctl

·         26 (ETXTBSY)

τ±¾τ¼�:p>

·         27 (EFBIG)

τ¼�

·         28 (ENOSPC)

ʨ±¸ʏû¿ռ傋

·         29 (ESPIPE)

·Ƿ¨²ꖒ

·         30 (EROFS)

ֻ¶Žļ�

·         31 (EMLINK)

̫¶ၬ½Ѡ

Ђ±¹©һ³£ԃWindowsϵͳ´´�Ϊֻ±·Ďȼa href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/system_error_codes.asp" target="_top">Microsoft website¡£

·         1 (ERROR_INVALID_FUNCTION)

²»ֽȷº¯˽¡£

·         2 (ERROR_FILE_NOT_FOUND)

ϵͳ²»Ŝ֒µ½ָ¶¨µŎļ�:p>

·         3 (ERROR_PATH_NOT_FOUND)

ϵͳ²»Ŝ֒µ½ָ¶¨µł·¾¶¡£

·         4 (ERROR_TOO_MANY_OPEN_FILES)

ϵͳ²»Ŝ´򿫎ļ�:p>

·         5 (ERROR_ACCESS_DENIED)

·Ďʱ»¾ܾ�o:p>

·         6 (ERROR_INVALID_HANDLE)

¾䲺·Ƿ¨¡£

·         7 (ERROR_ARENA_TRASHED)

´洢¿ٖƿ鱻dž»µ¡£

·         8 (ERROR_NOT_ENOUGH_MEMORY)

Ϟأ¹»´洢4´¦m֢¸�

·         9 (ERROR_INVALID_BLOCK)

´洢¿ٖƿ鶘ַ·Ƿ¨¡£

·         10 (ERROR_BAD_ENVIRONMENT)

»·¾³²»ֽȷ¡£

·         11 (ERROR_BAD_FORMAT)

˔ͼԃ²»ֽȷµĸ򊾗°՘һ¸�򡡠

·         12 (ERROR_INVALID_ACCESS)

·Ďʴ�ºϷ¨¡£

·         13 (ERROR_INVALID_DATA)

˽¾ݲ»ºϷ¨¡£

·         14 (ERROR_OUTOFMEMORY)

Ϟأ¹»µĴ洢4Ϊ³ʕ⹶²ڗ�

·         15 (ERROR_INVALID_DRIVE)

ϵͳ²»Ŝ֒µ½ָ¶¨µŇ�£

·         16 (ERROR_CURRENT_DIRECTORY)

Ŀ¼²»Ŝ±»ɾ³�:p>

·         17 (ERROR_NOT_SAME_DEVICE)

ϵͳ²»Ŝӆ¶¯´̎ļ��¬µĴƅ͇�£

·         18 (ERROR_NO_MORE_FILES)

ûԐ¸��:p>

·         19 (ERROR_WRITE_PROTECT)

ý׊д±£»¤¡£

·         20 (ERROR_BAD_UNIT)

ϵͳ²»Ŝ֒µ½ָ¶¨µʼn豸¡£

·         21 (ERROR_NOT_READY)

ʨ±¸δ׼±¸ºá£

·         22 (ERROR_BAD_COMMAND)

ʨ±¸²»Ŝʶ±𵌃�

·         23 (ERROR_CRC)

˽¾ݴ(ѭ»·ɟԠëУҩ).

·         24 (ERROR_BAD_LENGTH)

³͐򷢳��µ«ˇļ®³¤¶Ȳ»ֽȷ¡£

·         25 (ERROR_SEEK)

Ƚ¶¯Ƿ²»Ŝ՚´ƅ͉϶¨λָ¶¨ȸԲ»򵅵!£

·         26 (ERROR_NOT_DOS_DISK)

ָ¶¨µĴƅ̻󉮅̲»Ŝ±»·Ďʡ£

·         27 (ERROR_SECTOR_NOT_FOUND)

Ƚ¶¯Ƿ²»Ŝ֒µ½ȫȳµʼnɇ�o:p>

·         28 (ERROR_OUT_OF_PAPER)

´󓡻�¡£

·         29 (ERROR_WRITE_FAULT)

ϵͳ²»Ŝдָ¶¨ʨ±¸¡£

·         30 (ERROR_READ_FAULT)

ϵͳ²»Ŝ´Ԗ¸¶¨ʨ±¸¶a£

·         31 (ERROR_GEN_FAILURE)

¸½¼ӵ½ϵͳµʼn豸²»ǰطԃ¡£

·         32 (ERROR_SHARING_VIOLATION)

½�Ŝ·Ďˎļ�ªֽ̼±»­һ¸�͊¹ԃ¡£

·         33 (ERROR_LOCK_VIOLATION)

½�Ŝ·Ďˎļ�ª­һ¸�͒Ѿ­̸¶¨τ¼�¿·֡£

·         34 (ERROR_WRONG_DISK)

Ƚ¶¯ǷµĵĴƅ̲»ֽȷ£¬ȫ²扫 %2 (¾ºú %3) µ½Ƚ¶¯Ƿ %1.

·         36 (ERROR_SHARING_BUFFER_EXCEEDED)

̫¶Ꮔ¼�ªӔ¹²Э¡£

·         38 (ERROR_HANDLE_EOF)

µ½´𐏄¼�²¡£

·         39 (ERROR_HANDLE_DISK_FULL)

´ƅ͒҂�o:p>

·         87 (ERROR_INVALID_PARAMETER)

²ϊ�·¡££¨ɧ¹�Windowsאµõ½֢¸�󣬲¢Ȓӑ¾­՚my.cnf»񬷮iniτ¼�©nnodb_file_per_table£¬ղͭ¼ҩnnodb_flush_method=unbufferedµ½ţµíy.cnf»񬷮iniτ¼�

·         112 (ERROR_DISK_FULL)

´ƅ͒҂�o:p>

·         123 (ERROR_INVALID_NAME)

τ¼�¿¼Ļ»󖟾ԯ·¨²»ֽȷ¡£

·         1450 (ERROR_NO_SYSTEM_RESOURCES)

´畚ϵͳ؊Դ²»¹»Ϊ³ʇ숳µķ�

15.2.16¶ӉnnoDB±О׆

·         һ¸�»Ŝ°��С£

·         ڲ¿خ´󽼳¤¶Ɋų500ؖ½ڣ¬µ«MySQLؔ¼ºО׆֢¸�024ؖ½ڡ£

·         ³�CHAR, BLOBº̔EXT£¬خ´�¤¶ɉՎ¢СԚ˽¾ݿ㒳µŒ»°롣¼´£¬خ´�¤¶ȴ�000ؖ½ڡ£LONGBLOBº̌ONGTEXT±ِ쐡Ԛ4GB, ؜µŐ㤶ȣ¬ҳ°�Bº̔EXT£¬±ِ쐡Ԛ4GB¡£InnoDB՚ѐא´洢VARCHAR£¬BLOB»񓄘TµŇ°768ؖ½ڣ¬ԠЂµĴ洢µķ׉¢µŒ³Ħא¡£

·         ̤ȻInnoDBڲ¿µٖ§³אгߴ絳Ԛ65535£¬ţ²»Ŝ¶¨ӥһ¸�¬VARCHARµģ¬ºϲ¢³ߴ絳Ԛ65535µŐС£

·                mysql> CREATE TABLE t (a VARCHAR(8000), b VARCHAR(10000),
·                    -> c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
·                    -> f VARCHAR(10000), g VARCHAR(10000));
·                ERROR 1118 (42000): Row size too large. The maximum row size for the
·                used table type, not counting BLOBs, is 65535. You have to change some
·                columns to TEXT or BLOBs

·         ՚һЩ¸�ڗ�³ʏ£¬˽¾ގļ�¡Ԛ2GB¡£

·         InnoDBɕ־τ¼�¢³ߴ粘ѫСԚ4GB¡£

·         خСµı¼䴟´苇10MB¡£خ´󶄱¼䴟´苇4,000,000,000¸�ݿ㒳£¨64TB£©¡£֢Ҳˇһ¸�ŗ³ߴ硣

·         InnoDB±֧³Լ/span>FULLTEXT̷ӽ¡£

·         ANALYZE TABLE ͨ¹���˴ϋ漺ʮɫ²¢РӦµظ��µ£¬֢ҹ4¼NJ�¢Ӣ£¬ӲΪ֢ˇ½�ĹVµ£¬·´¸´ՋѐANALYZE TABLE»ᳺʺ²»ͬ˽¡£֢ʹµ`ANALYZE TABLE ՚ InnoDB ±ºܿ죬²»ˇ°ٷְڗ¼ȷ£¬ӲΪ̼ûԐ¿¼Ç̹ԐµŐС£

MySQL ²»½�㻏ԅ»¯אʹԃ̷ӽ¼¯¹Vµ¡£ɧ¹�»㻏ûԐӔֽȷµķ½ʽԅ»¯£¬ţ¿ʒՊՒ»Ђ ANALYZE TABLE ¡£º݉ړчꀶ£¬ANALYZE TABLE ûԐ²�ţ͘¶¨µı¹»ºõŖµ£¬ţ¿ʒՊ¹ԃ FORCE INDEX ՚ţ²ꑯא4ǿ׆ʹԃ͘¶¨̷ӽ£¬»󖠉闃 max_seeks_for_key 4ȷ±£MySQL՚±Ĩ֮ʏՋѐ̷ӽ²ꖒ¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#server-system-variables" title="5.3.3. Server System Variables">5.3.3½ڣ¬¡°·�µͳ±偿”¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/problems.html#optimizer-issues" title="A.6. Optimizer-Related Issues">A.6½ڣ¬¡°ԅ»¯ǷР¹صŎˌॲdquo;¡£

·         ՚Windowsʏ£¬InnoDB؜ˇŚ²¿µٓĐ¡дؖĸ´洢˽¾ݿ⻍±ؖ¡£Ҫ°Ҋ�Զ�ϊ½´ҕnix ӆµ½Windows£¬»󖟴җindowsӆµ½Unix£¬ţӦ¸Ĉċ�¾ݿ⻍±Ļؖ¶¼ˇСд¡£

·         ¾¯¸丼/span> ²»Ҫ՚MySQL˽¾ݿㅚµİЍySQLϵͳ±MyISAMתΪInnoDB±֢ˇһ¸�»֧³ֵIJڗ�纻ţ֢ôض‹£¬MySQLֱµ½ţ´ӱ¸·ݻָ´¾ʏµͳ±»󔁼strong>mysql_install_db½ű¾ט½¨ϵͳ±טǴ¶¯¡£

·         InnoDB՚±²»±£´ѐµńڲ¿¼NJ�󎪶౦±¾»¯£¬֢¿ʄ݈·ʵԐЩ¸´Փ £©¡£Ҫ´¦mһ¸�ECT COUNT(*) FROM tԯ¾䣬InnoDB±ِ쉨Ĩ±һ¸���̷ӽ²»՚»º³崘א£¬ɨĨѨҪ»¨һЩʱ¼䡣Ҫ»񶃿팙¼NJ�»µò»ʹԃһ¸�º´´½¨µļNJ�¬²¢Ƀţµœ¦ԃ°´̼֕ضµIJ扫ºΉ¾³�Ë��±²»¾­³£¸ı䣬ʹԃMySQL²ꑯ»º´犱һ¸�Ľ⿶·½°¸¡£ɧ¹�µŐъ�»‹£¬ղSHOW TABLE STATUSҲ¿ɱ»ʹԃ¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/storage-engines.html#innodb-tuning" title="15.2.11. InnoDB Performance Tuning Tips">15.2.11½ڣ¬¡°InnoDBєŜµ�⊾”¡£

·         ¶ՓفUTO_INCREMENT£¬ţ±ِ옜ˇΪ±ӥһ¸��Ӌ�ِ뱼º¬AUTO_INCREMENT¡£՚MyISAM±£¬AUTO_INCREMENT¿ʄ݊±¶�̷ӽµŒ»²¿·֡£

·         µ±ţטǴMySQL·�®ʱ£¬InnoDB¿ʄݎªһ¸�O_INCREMENTטʹԃһ¸�µ£¨¼´£¬һ¸�³¸�OµŒύ »ع�Î񶅖µ£©¡£

·         µ±һ¸�O_INCREMENTԃΪֵ£¬InnoDBО׆һ¸�INTµ½£­9223372036854775808Ӕ¼°BIGINT UNSIGNEDµ½1¡£¾¡¹݈絋£¬BIGINTֵԐԉ64룬̹ӔעӢµ½£¬ɧ¹�һīˤɫ100β¸�¬՚BIGINTµ½´𐌼ʏО֮ǰ£¬¿ʄܻ¹ѨҪ½«½�ꡣԃ̹ԐǤֻ̼˽`э £¬²�¸�´¼�£֢`̆ԚMyISAMɧºι¤طµģ¬ӲΪ̼׷Ҫˇһ°⌹SQLѐΪ£¬²¢²»͘±𺙓ۈκδ洢ӽȦ¡£

·         DELETE FROM tbl_name²»טтʺ³ɱµ«ȡ¶�µى¾³�У¬һ¸�»¸�¾³�:p>

·         TRUNCATE tbl_nameΪInnoDB¶�ʤµ½DELETE FROM tbl_name ²¢Ȓ²»ט׃AUTO_INCREMENT¼NJ�

·         SHOW TABLE STATUS²»Ŝ¸�ԚInnoDB±ȷµō³¼NJ��´µŎ𐁭³ߴ硣ѐ¼NJ�ٓQLԅ»¯א´ׂԵĹ<ơ£

·         ՚MySQL 5.1א£¬ɧ¹�db_table_locks=1(1ˇĬɏֵ£© MySQL LOCK TABLES²ڗ�¿һ¸�ϻ򈢁½¸�¨¡£³�ySQL²㶄±¶¨£¬̼Ҳ»񶄒»¸�oDB±¶¨¡£¾ɰ涄MySQL²»»򈠉nnoDB±¶¨£¬¾ʐюª¿ʒՍ¨¹�nnodb_table_locks=0 4ѡձ¡£ɧ¹�InnoDB±¶¨±»»񶃣¬¼´ʹ±һЩ¼Ȃ¼±»Ǥ̼˂ϱ̸¶¨£¬LOCK TABLESΪ³ɡ£ 

·         ̹Ԑ±»һ¸�񴗓еÉnnoDB̸¶¨՚¸ĊÎ񱼌ύ»󗑖¹֮ʱ±»ˍ·š£Ӳ´̔فUTOCOMMIT=1ģʽ£¬՚InnoDB±µ�ȃ»Ԑ̫¶ᓢӥµģ¬ӲΪ±»ѨȳµÉnnoDB±¶¨¿ʄܻᱻb¼´ˍ·š£

·         Ԑʱ£¬՚˂ϱµĹ��¶඄±ŜˇԐԃµġ£²»ђµأ¬MySQLאµÌOCK TABLESִѐһ¸�صÃOMMITº̕NLOCK TABLES¡£LOCK TABLESµŒ»¸�oDB±偿ӑ¾­±»¼ƻ®£¬ ¸üƻ®՚˂ϱµŖм䱻ִѐ¡£

·         Ϊ½¨b¸´׆´ӷ�ÌOAD TABLE FROM MASTERԯ¾䷔InnoDB±ǰطԃ¡£һ¸��ۖ�򇸉ϸ�ªMyISAMµģ¬Ȼº�º՘£¬֮º󹼻»׷·�µ½InnoDBא¡£

·         ՚InnoDBאĬɏ˽¾ݿ㒳µĴ�ű6KB¡£ͨ¹��ţ¿ʒՔظKBµ½64KB֮¼倴ʨ׃֢¸�£ţ²»µò»¸�niv.iԴτ¼�NIV_PAGE_SIZEº̕NIV_PAGE_SIZE_SHIFTµŖµ¡£

·         ՚MySQL 5.1א£¬´¥·¢Ƿ²»±»¼¶jµō⽼ѐΪ¼¤»

15.2.17InnoDB¹˕Е﷏º΅ų�

·         һ¸�Ĺ畲ˇ£¬µ±һ¸��ܻ󖣄㻳ӉԐһ¸�ݡ£ţӦ¸ò鿴MySQL·�Ĵɕ־£¬¸Ĉ֖¾µ呍µٓђ»¸�©гhostname.err֢ҹµŃ�»󖠔ٗindowsʏˇmysql.err֢ҹµġ£

·         ¹˕Е﷏ԫƅ³�¬ͨ³£خºôԃ�¾·�MySQL·�¬¶�´Ѽstrong>mysqld_safe°�¬»򲼗�»¸�dows·�̐С£ţ¿ʒԿ´mysqld´󓡵½¿ٖnj¨ʏµńۈݣ¬Ӳ´˸�շ¢ʺ‹ʲô¡£՚Windowsʏ£¬ţ±ِ씃--consoleѡЮǴ¶¯·�«ˤ³�򵽿ٖnj¨´°¿ؠ

·         ʹԃInnoDB Monitors»򈡹ٓۄ³ϊ͢µŐƏ¢¡£ɧ¹�ˇєŜР¹ص쬻󖠄㶄·�´ǰ4±»¹ӆ𣭄䓦¸Ċ¹ԃinnodb_monitor4´󓠉nnoDBڲ¿״̬µŐƏ¢£¬ɧ¹�ˇ¹ٓۋ�ղʹԃinnodb_lock_monitor¡£ɧ¹�ˇ՚±´´½¨»󇥋�ʵ䳙ط£¬ʹԃinnodb_table_monitor4´󓠉nnoDBڲ¿˽¾ݴʵ䶄Śɝ¡£

·         ɧ¹�²㒻¸�»dž»µ£¬ղ՚¸ñՋѐCHECK TABLE¡£

15.2.17.1. InnoDB˽¾ݴʵ䳙ط´֯¶Ϻ΅ų�

±һ¸�㏊͢ˇMySQL·�Үfrmτ¼�狽¾ݴʵ呅Ϣ£¬̼±»·Ɣۊ�¿¼£¬Ȼ¶�DBҲ´洢хϢµ½±¼叄¼�ԼºµŊ�偯¡£ɧ¹�.frmτ¼�Lj¥ £»»󖟣¬ɧ¹�Ƿ՚˽¾ݴʵ䳙طµŖм䲀#£¬.frmτ¼�⋸ԫInnoDBڲ¿˽¾ݴʵ䶄ͬ²½¡£

һ¸�¬²½µŊ�䶄֢״ˇCREATE TABLEԯ¾劧°ܡ£ɧ¹�֢זȩ¿�䓦¸ò鿴·�Ĵɕ־¡£ɧ¹�˵±¾­´畚ԚInnoDBڲ¿˽¾ݴʵ䵱א£¬ţ՚InnoDB±¼叄¼�»¸�̼ûԐ¶Փ¦µ®frmτ¼��¢¿´ǰ4гɧЂµģº

InnoDB: Error: table test/parent already exists in InnoDB internal
InnoDB: data dictionary. Have you deleted the .frm file
InnoDB: and not used DROP TABLE? Have you used DROP DATABASE
InnoDB: for InnoDB tables in MySQL version <= 3.23.43?
InnoDB: See the Restrictions section of the InnoDB manual.
InnoDB: You can drop the orphaned table inside InnoDB by
InnoDB: creating an InnoDB table with the same name in another
InnoDB: database and moving the .frm file to the current database.
InnoDB: Then MySQL thinks the table exists, and DROP TABLE will
InnoDB: succeed.

ţ¿ʒ԰´֕´ɕ־o¸�ʾӆ³�±ɧ¹�²»Ŝ³ɹ¦µي¹ԃDROP TABLE£¬ϊ͢¿ʄ݊Ȓ󎫔ؼstrong>mysql¿ͻ§¶̀ﶄĻؖΪ³ɡ£Ҫ½⿶֢¸�⣬ԃ--disable-auto-rehashѡЮ4Ǵ¶¯mysql¿ͻ§¶˲¢ՙ´γ¢˔DROP TABLE ¡££¨ԐĻؖΪ³ɴ򿫗ţ¬mysql˔؅¹¹½¨¸��±µ±һ¸�脨˶µŎˌⵦ՚֮ʱ£¬֢¸�²»ǰطԃ£©¡£

²»ͬ²½˽¾ݴʵ䶄­һ¸�quo;ͬӥ´Ȧrdquo;ˇMySQL´󓢒»¸�ܴ򿨮InnoDBτ¼�󣸠

ERROR 1016: Can't open file: 'child2.InnoDB'. (errno: 1)

՚´ɕ־ţ¿ʒԷ¢Жһ¸�Ǔڴ˵ŐƏ¢£º

InnoDB: Cannot find table test/child2 from the internal data dictionary
InnoDB: of InnoDB though the .frm file for the table exists. Maybe you
InnoDB: have deleted and recreated InnoDB data files but have forgotten
InnoDB: to delete the corresponding .frm files of InnoDB tables?

֢Ӣζ֢Ԑһ¸�¥µ®frmτ¼�nnoDBŚûԐР¶Փ¦µıţ¿ʒՍ¨¹�¾³��µ¥µ®frmτ¼�:p>

ɧ¹�L՚һ¸�TER TABLE²ڗ�м䲀#£¬ţ¿ʒՓ‰nnoDB±¼党™ʱ¹±½⋸¡£ţ¿ʒՓ©nnodb_table_monitor¿´һ¸��ĻΪ#sql-...¡£ɧ¹�±Ļؖ°�pan>`(backticks)o£¬ţ¿ʒՔۃ�º¬“#”ؖ·�ʏִѐSQLԯ¾䡣Ӳ´ˣ¬ţ¿ʒՓć°˶µĵķ½·¨гӆ³�±ҹӆ³�»¸�עӢ£¬Ҫ՚Unix΢¿Ȁ︴׆»󗙃����ϰ�ؖ·�ѨҪ°Ҏļ�ۋ«ӽºƀ

15.3. MERGE´洢ӽȦ

MERGE´洢ӽȦ£¬Ҳ±»ɏʶΪMRG_MyISAMӽȦ£¬ˇһ¸�¬µĿʒԱ»µ±طһ¸�õÍyISAM±¼¯ºϡ£“Рͬ”Ӣζ؅̹Ԑ±ҹµ º΋�Ə¢¡£ţ²»Ŝºϲ¢±»Ӕ²»ͬ˳ѲԚǤאµıûԐǡºč¬ҹµı»󔐲»ͬ˳Ѳ̷ӽµı¶�Ɏºλ󖠋�±Ӕԃmyisampack4ѹ̵¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/client-side-scripts.html#myisampack" title="8.2. myisampack — Generate Compressed, Read-Only MyISAM Tables">8.2½ڣ¬¡°myisampack — ʺ³ʑ¹̵µŖ»¶ yISAM±륲dquo;¡£±ЮµIJ£¬±Ɉ怖G_ROW_LENGTH, MAX_ROWS»񏀃K_KEYS¶¼²»טҪ¡£

µ±ţ´´½¨һ¸�GE±ʱ£¬MySQL՚´ƅ͉ϴ´½¨}¸���Ļؖ¿ªʼ£¬²¢ȒԐһ¸�¹Ļ4ָķτ¼�£һ¸�mτ¼�ӥ£¬һ¸�Gτ¼�»µ±طһ¸�õıĻؖ¡£֢Щ±ΪMERGE±ʭ£¬²»±ْª՚ͬһ¸�ݿ㗐¡£

ţ¿ʒԶԱ¼¯ºГ“ELECT, DELETE, UPDATEº̉NSERT¡£ţ±ِ뷔ţӳʤµ½һ¸�GE±֢Щ±SELECT, UPDATEº̄ELETE µň¨О¡£

ɧ¹�OP MERGE±ţ½�Ƴ�¹湱¡£µײ㲭ûԐ˜ӰЬ¡£

µ±ţ´´½¨һ¸�GE±ʱ£¬ţ±ِ언¶¨һ¸�ON=(list-of-tables)ؓ¾䣬̼˵ķţҪ°҄Ő©±طһ¸�á£ɧ¹�Ҫ¶ӍERGE±²扫·¢ʺ՚UNION±µĵے»¸�һ¸�ϣ¬ţ¿ʒՑ¡ձµٖ¸¶¨һ¸�ERT_METHODѡЮ¡£ʹԃFIRST»񋀓Tֵʹµò扫±»РӦµٗ�ے»»󘮺��ϡ£ɧ¹�Ԑָ¶¨INSERT_METHODѡЮ£¬»󅤓Ē»¸�µָ¶¨¸đ¡Ю¡£ιMERGE±ɫ¼Ȃ¼µŊՍ¼µ¼ׂ´¡£

ЂĦ}ؓ˵ķɧºδ´½¨һ¸�GE±

mysql> CREATE TABLE t1 (
    ->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->    message CHAR(20));
mysql> CREATE TABLE t2 (
    ->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->    message CHAR(20));
mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
mysql> CREATE TABLE total (
    ->    a INT NOT NULL AUTO_INCREMENT,
    ->    message CHAR(20), INDEX(a))
    ->    TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

עӢ£¬һ¸�ٍERGEN±±»̷ӽ£¬µ«ûԐ±»ѻ¸玪һ¸�MARY KEY£¬ӲΪ̼ˇ՚¸�ÍyISAM±¡£֢ˇ±ْªµģ¬ӲΪMERGE±¸�ıµʼn闃ʏǿ׆·Ȏ¨һє¡£

´´½¨MERGE±º󣭄䀉Ӕ·¢³�»ة±طһͥ4²ڗ�ꑯ£º

mysql> SELECT * FROM total;
+---+---------+
| a | message |
+---+---------+
| 1 | Testing |
| 2 | table   |
| 3 | t1      |
| 1 | Testing |
| 2 | table   |
| 3 | t2      |
+---+---------+

עӢ£¬ţҲ¿ʒՖ±½ӴҍySQL֮΢ֱ½Ѽ/span>²ڗ�pan>.MRGτ¼�:p>

shell> cd /mysql-data-directory/current-database
shell> ls -1 t1 t2 > total.MRG
shell> mysqladmin flush-tables

Ҫטӳʤһ¸�GE±һ¸�¬µÍyISAM±£¬ţ¿ʒՖ´ѐЂ֮һ£º

·         DROP MERGE±Ȓט½¨̼¡£

·         ʹԃALTER TABLE tbl_name UNION=(...)4¸ı䶗²㲭µŁб

·         ¸ı⭍RGτ¼�ӍERGE±̹֟Ԑµײ㲭·¢³��SH TABLEԯ¾倴ǿ׆´洢ӽȦȥ¶µĶ¨ӥτ¼�:p>

MERGE±Ӕ°𐅣½⿶ӔЂϊ͢£º

·         ɝӗµع݀͗ɕ־±±Ɉ磬ţ¿ʒ԰Ѳ»ͬՂµŊ��µı£¬ԃmyisampackѹ̵ǤאµŒ»Щ£¬²¢̦º󴴽¨һ¸�GE±°ҋ���¹ԃ¡£

·         »񶃸�ٶȡ£ţ¿ʒՒՒ»Щ±뗼4·ָµŖ»¶qȻº󸅽�´ƅ͉ϵĵ¥¸�С£»�µŒ»¸�GE±±Ɋ¹ԃ´󲮒ª¿춃¶ࡣ

·         ִѐ¸�ŋҋ�纻ţȷȐ֪µRª̷̑ʲô£¬¶Ւ»Щ²ꑯţ¿ʒՖ»՚±»·ָ±Ǥא֮һ4̷̑£¬²¢Ȓ¶Ն匼ʹԃMERGE¡£ţʵׁԐѭ¶಻ͬµÍERGE±̼ćʹԃԐטµ�ס£

·         ִѐ¸�Ő޲¹¡£ў²¹±»ӳʤµ½һ¸�GE±µĵ¥¸�ɐ޲¹µ¥¸�ͱ¸�£

·         ¼´¿͓³ʤѭ¶ಭ³ʒ»¸�ERGE±ѨҪά»¤̼ؔ¼ºµŋ�¬ӲΪ̼ʹԃ´󹧱̹ԃ¡£Ӳ´ˣ¬MERGE±ºЊǷdz£¿鶘´´½¨»󗙓³ʤ¡££¨עӢ£¬µ±ţ´´½¨һ¸�GE±ʱ£¬¼´ʹûԐ̷ӽ±»´´½¨£¬ţ±ِ쉔Ȼָ¶¨̷ӽ¶¨ӥ£©¡£

·         ɧ¹�ѨҪ»򰵕օ�ţԐһةҪºІ񀵗�»¸�±ţӦ¸ø�Ҫ¶Ջ�¨һ¸�GE±ͦ´�¡£֢ҹҪ¿춃¶෸Ȓ½۔¼´􁿵Ĵƅ̿ռ䡣

·         ³¬¹�µͳµŎļ�ߖơ£ÿ¸�SAM±˜׆Ԛ֢¸�ƣ¬µ«ˇһ¸�SAM±¼¯ºД򲼈»¡£

·         ţ¿ʒՍ¨¹�»¸�䵽µ¥¸�ÍERGE±Ϊһ¸�SAM±½¨һ¸��dquo;ͬϯӬĻ”¡£֢ҹضӦ¸ă»Ԑ֦ʵµĿɲ쿵µŐՄݓ°Ь £¨¶Ճ¿¸�»ԐһЩ¼侓µ�̭emcpy()µ�©¡£

MERGE±ȱµ㣺

·         ţ¿ʒԶӍERGE±ԃ½�¬µÍyISAM±

·         ţ²»Ŝ՚MERGE±ʹԃºܶ�ISAM¹¦Ŝ¡£±Ɉ磬ţ²»Ŝ՚MERGE±´´½¨FULLTEXT̷ӽ¡££¨µ±Ȼ£¬ţ¿ʒՔڵײ⌅RGE ±´´½¨FULLTEXT̷ӽ£¬µ«ˇţ²»Ŝԃȫτ̷̑4̷̑MERGE±¡£

·         ɧ¹�E±·ȁڊ±µģ¬̹Ԑµײ⌹ISAM±±ِ싇Ԁ¾õġ£ɧ¹�E±™ʱµģ¬MyISAM±ӔˇɎºρڊ±£¦·ȁڊ±µĻ컏¡£

·         MERGE±ԃ¸�ļ��¹�¿ͻ§¶̕�»¸�䵽10¸�ÍERGE±·�¹ԃ(10*10)+10¸���10¸�ގļ��¸�§¶̃¿ɋһ¸�¢Ȓ՚¿ͻ§¶̖®¼乲Э10¸��鋶·�

· ¼�span>¸�±ţ¶’»¸�Ŋ±º򣫍ERGE´洢ӽȦѨҪ՚̹Ԑ µײ㲭ʏ·¢³��Լ쳩ńһ¸���¼��º�̒»¸�d-next£¬MERGE´洢ӽȦѨҪ̷̑¶{º³怴֒³�»¸�£ֻԐµ±һ¸�º³屻ºľ¡£¬´洢ӽȦ²Ɛ钪¶Ò»¸􋊼�㊹µERGE¼�ref̷̑א·dz£ý£¬µ«՚ref̷̑א²»ˇ̫ý¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/optimization.html#explain" title="7.2.1. EXPLAIN Syntax (Get Information About a SELECT)">7.2.1½ڣ¬¡°EXPLAIN ԯ·¨(»򈠓ELECTР¹ِƏ¢)” Ӕ»񶃸�٥q_refº̲efµŐƏ¢¡£

15.3.1MERGE±닊·½ĦµŎˌຯspan>

Ђˇӑ֪¹ٍٓERGE±ϊ͢£º

·         ɧ¹�ԃALTER TABLE 4°ЍERGE±ΪǤ̼±э£¬µ½ µײ㲭µœ³ʤ¾ͱ»¶ªʧ‹¡£ȡ¶�µģ¬4ؔµײ⌹ISAM±ѐ±»¸´׆µ½ӑ¸�£¬¸ñº󱼖¸¶¨т`э¡£

·         REPLACE²»ǰطԃ¡£

·         ûԐWHEREؓ¾䣬»󖠔ۈκα»ӳʤµ½һ¸�ªµÍERGE±µňκϒ»¸�ϵÒEPAIR TABLE£¬TRUNCATE TABLE, OPTIMIZE TABLE»񀍁LYZE TABLE£¬ţ²»ŜʹԃDROP TABLE, ALTER TABLE, DELETE FROM¡£ɧ¹�ôض‹£¬MERGE±ɔ¾ʖ¸вԭʼ±֢ҹ²�΢½ẻ¡£½⿶֢¸�䘮¼򵥵İ취ˇ՚ִѐɎºϒ»¸�©²ڗ�°·¢³��SH TABLESԯ¾倴ȷ±£ûԐMERGE±¾ɱ£³ִ򿪡£

·         һ¸�GE±Ŝ՚ֻ¸�Ў¬³ՕNIQUEԼ˸¡£µ±ţִѐһ¸�ERT, ˽¾ݽ�һ¸�ࠗһ¸�SAM±ȡ¾�NSERT_METHODѡЮµŖµ£©¡£MySQLȷ±£Ψһ ¼�Ǹ�SAM±±£³׎¨һ£¬µ«²»ˇ¿缯ºЀ𐌹Ԑµı

·         µ±ţ´´½¨һ¸�GE±ʱ£¬ûԐ¼쳩ȥȷ±£µײ㲭µĴ畚Ӕ¼°ԐРͬµĻ�µ±MERGE±ʹԃ֮ʱ£¬MySQL¼쳩ÿ¸�³ʤµı¼Ȃ¼³¤¶ɊǷ򐠵ȣ¬µ«֢²¢²»ʮ·ֿɿ¿¡£ɧ¹�²»Р̆µÍyISAM±½¨һ¸�GE±ţ·dz£Ԑ¿ʄݗ²¼�µŎˌ⡣

·         ՚MERGE±µŋ�ŋ³Ѳº΋�ײ㲭אµŋ�¦¸Ē»ҹ¡£ɧ¹�ԃALTER TABLE¸�±»ԃ՚MERGE±µı¼Ԓ»¸�QUE̷ӽ£¬Ȼº􊺓LTER TABLE՚MERGE±ͭ¼Ԓ»¸�¨һ̷ӽ£¬ɧ¹�µײ㲭ʏӑ¾­Ԑһ¸�¨һ̷ӽ£¬¶Ա̷ӽƅѲˇ²»ͬµġ££¨֢ˇӲΪALTER TABLE°ЕNIQUE̷ӽ·ƔڷȎ¨һ̷ӽ֮ǰӔ{Ԛט¸´¼�ټ쳢 £©¡£Ӳ´˶Պ¹ԃ֢ҹ̷ӽµı²ꑯ¿ʄܷµ»ز»ǚλµĽẻ¡£

·         ՚Windowsא£¬՚һ¸�/span>MERGE±ԃµıDROP TABLE²»ǰطԃ£¬ӲΪMERGEӽȦµıʤ¶ӍySQLµĸ��󎩗indows²»Պѭӑ´򿫎ļ��؏ȱِ鋊ˢт̹ԐMERGE±ʹԃFLUSH TABLES£©»󕛒Ƴ�®ǰӆ³�±

¶ՓٍERGE´洢ӽȦ£¬՚http://forums.mysql.com/list.php?93ʏԐһ¸�ŵł܌³¡£

15.4. MEMORY (HEAP)´洢ӽȦ

MEMORY´洢ӽȦԃ´畚Ś´痐µńۈހ´´´½¨±֢Щ՚Ӕǰ±»ɏʶΪHEAP±MEMORYˇһ¸�¡µŊ�¬̤ȻΪвЂ¼牝£¬HEAPӀ¾ɱ»֧³֡£

ÿ¸�ORY±һ¸�͎ļ�񀴡£τ¼�Ļؖ¿ªʼ£¬²¢Ȓԉһ¸�mµŀ©չĻ4ָķ̼´洢µıӥ¡£

Ҫķȷָ³�쒪һ¸�ORY±¿ʊ¹ԃENGINEѡЮ4ָ¶¨£º

CREATE TABLE t (i INT) ENGINE = MEMORY;

ɧ̼ćĻָ̹ؖķµģ¬MEMORY±´洢՚Ś´痐£¬ȒĬɏʹԃ¹��¹µċ�£¿죬²¢Ȓ¶Դ´½¨™ʱ±³£Ԑԃ¡£¿ʊǣ¬µ±·�ر֖®ʱ£¬̹Ԑ´洢՚MEMORY±µŊ�ªʧ¡£ӲΪ±¶¨ӥ±»´畚´ƅ͉ϵ®frmτ¼��ؔʭ¼͐�£¬՚·�ن�±̼ćˇ¿յġ£

֢¸�ԏՊ¾ţɧºοʒԴ´½¨£¬ʹԃ²¢ɾ³�EMORY±

mysql> CREATE TABLE test ENGINE=MEMORY
    ->     SELECT ip,SUM(downloads) AS down
    ->     FROM log_table GROUP BY ip;
mysql> SELECT COUNT(ip),AVG(down) FROM test;
mysql> DROP TABLE test;

MEMORY±Ђַ͘£º

·         ¸�RY±¿ռ䱻ӔС¿ꀴ·ׅ䡣±²扫ʹԃ100%¶¯̬¹�£²»ѨҪӧ³�򷯍⽼¿ռ䡣ؔԉ±¶µĿռ周ȳ¡£ӑɾ³�»·Ɣے»¸�´½ӵŁб£¬²¢Ȓ՚ţι±²扫т˽¾ޖ®ʱ±»טтʹԃ¡£MEMORY±ûԐͨ³£ԫ՚¹�щ¾³�쐠¹صŎˌ⡣

·         MEMORY±ӔԐ¶൯ÿ¸�2¸����¬Ӕ¼°500ؖ½ڵŗ ¼�£

·         MEMORY´洢ӽȦִѐHASHº̂TREE̷ӽ¡£ţ¿ʒՍ¨¹�»¸�Ë�USINGؓ¾厪¸�̷ӽָ¶¨һ¸�¸�

·                CREATE TABLE lookup
·                    (id INT, INDEX USING HASH (id))
·                    ENGINE = MEMORY;
·                CREATE TABLE lookup
·                    (id INT, INDEX USING BTREE (id))
·                    ENGINE = MEMORY;

B˷µŒ»°䍘ַº͹��href="http://book.chinaz.com/mysql5/optimization.html#mysql-indexes" title="7.4.5. How MySQL Uses Indexes">7.4.5½ڣ¬¡°MySQLɧºϊ¹ԃ̷ӽ”oĨ˶¡£

·         ţ¿ʒՔے»¸�ORY±Ԑ·Ȏ¨һ¼�Թ��֣¬֢ˇһ¸�£ԃµĹ¦Ŝ£©¡£

·         ţҳ¿ʒԶӍEMORY±ԃINSERT DELAYED¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#insert-delayed" title="13.2.4.2. INSERT DELAYED Syntax">13.2.4.2½ڣ¬¡°INSERT DELAYEDԯ·¨”

·         ɧ¹�һ¸�߶ȼ�ģ¨ѭ¶ጷӽ͵Ŀ°�»¸�©MEMORY±Ԑһ¸�£̷ӽ£¬¶Փ°Ь¼�¸��³��ق�⹶±僽µij̶ȱɀ�´µij̶ȣ¨»󖟷´±ɓۋ�ardinality£©¡£ţ¿ʒՊ¹ԃһ¸�̷ӽ4±݃㖢¸�⡣

·         MEMORY±ԃһ¸�¨µļȂ¼³¤¶ȸ򊽡£

·         MEMORY²»֧³Լ/span>BLOB»񓄘T¡£

·         MEMORY֧³Լ/span>AUTO_INCREMENTºͶԿɰ�Lֵµ µŋ�£

·         MEMORY±̹Ԑ¿ͻ§¶̖®¼乲Э£¨¾Ώ򇥋�ż/span>TEMPORARY±¡£

·         MEMORY±ɝ±»´畚Ś´痐£¬Ś´狇MEMORY±·�ڲꑯ´¦m֮ʱµĿ֏ід´½¨µńڲ¿±Э¡£¿ʊǣ¬}¸�͵ıͬ՚ԚMEMORY±»┶µ½´洢ת»»£¬¶�±£º

-        ɧ¹�ڲ¿±µČ«´󣬷�Զ¯°ҋ�ªһ¸�̱³ߴ萞׆ԉtmp_table_sizeϵͳ±偿µŖµ4ȷ¶¨¡£

-        MEMORY±²»»◪»»³ɴƅ̱Ҫȷ±£ţ²»»ⅼ¶�ɵ˂£¬ţ¿ʒՉ闃max_heap_table_sizeϵͳ±偿¸�RY±Ӕخ´󴟴硣¶Փڵ¥¸�ţҲ¿ʒՔكREATE TABLEԯ¾嗐ָ¶¨һ¸�_ROWS±Ю¡£

·         ·�钪أ¹»Ś´瀴ά³׋�ͬһʱ¼効ԃµÍEMORY±

·         µ±ţ²»ՙѨҪMEMORY±Śɝ֮ʱ£¬Ҫˍ·ű»MEMORY±ԃµńڴ棬ţӦ¸Ė´ѐDELETE FROM»񓑕NCATE TABLE£¬»󖠕�ɾ³�¹ԃDROP TABLE£©¡£

·         µ±MySQL·��±£¬ɧ¹�¿ªΘMEMORY±ţ¿ʒՊ¹ԃ--init-fileѡЮ¡£}ɧ£¬ţ¿ʒ԰ЉNSERT INTO ... SELECT »񋎁D DATA INFILE֢ҹµœ¦·ƈ얢¸��㵓³־Ďȹ̵ĵŊ�°՘±ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#server-options" title="5.3.1. mysqld Command-Line Options">5.3.1½ڣ¬¡°mysqld ļ®ѐѡЮ” and 13.2.5½ڣ¬¡°LOAD DATA INFILE ԯ·¨”¡£

·         ɧ¹�ʹԃ¸´׆£¬µ±׷·�»¹رևӖن�®ʱ£¬׷·�ÍEMORY±¿ա£¿ʊǴӷ�㊶²»µ½֢Щ±¾­±倕£¬̹Ӕɧ¹�̼ćѡձ˽¾ݣ¬̼¾ͷµ»ع�ۈݡ£ؔ´ӷ��󣬵±һ¸�ORY±׷·�ϵے»´α»ʹԃ֮ʱ£¬һ¸�ETE FROMԯ¾䱻ؔ¶¯д½�ϱǷµĶ�֖¾£¬Ӳ´̔ٴψôӷ�엷·�¬²½¡£עӢ£¬¼´ʹʹԃ֢¸�ԣ¬՚׷·�Ŗن��ϊ¹ԃ¸ñ¼䶄¼乴א£¬´ӷ�ԾʔڱԐ¹�ݡ£¿ʊǣ¬ɧ¹�ԃ--init-fileѡЮԚ׷·��®ʱ՚ǤʏΆѐMEMORY±̼ȷ±£֢¸�佤¸�㡣

·         ՚MEMORY±£¬һѐѨҪµńڴ犹ԃЂ±ʽ4¼Nj㣺

·                SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char*) * 4)
·                + SUM_OVER_ALL_HASH_KEYS(sizeof(char*) * 2)
·                + ALIGN(length_of_row+1, sizeof(char*))

ALIGN()´�und-upӲؓ£¬̼ʹµĐеij¤¶Ɏªcharָ֫´�ň·Ȑ±¶˽¡£sizeof(char*)՚32λ»�ˇ4£¬՚64λ»�ˇ8¡£

¶ՓٍEMORY´洢ӽȦ£¬՚http://forums.mysql.com/list.php?92ʏԐһ¸�ŵł܌³¡£

15.5. BDB (BerkeleyDB)´洢ӽȦ

Sleepycat Software¸�L͡¹©Berkeley DB˂ϱє´洢ӽȦ¡£֢¸�¢ӽȦµ呍±»¼򴇎ªBDB¡£¶ӂDB´洢ӽȦµŖ§³ְ�ySQLԴë·ַ¢°亯st1:state>o£¬՚MySQL-Max¶�/span>·ַ¢°亯st1:state>o±»¼¤»

BDB±ŜԐһ¸�󶄱@£ђ´漺»ᣬ²¢ȒҲ¾ࠓжՊÎ⎍MITº̒OLLBACK²ڗ�݁¦¡£MySQLԴë·ַ¢°亯st1:state>ºͱ»²¹¶¡¹�ꌹSQLһǰ¹¤طµÂDB·ַ¢°亯st1:state>һǰ͡¹©¡£ţ²»Ŝʹԃһ¸�¹¶¡¹�°汾ԫMySQLһǰ¹¤ط¡£¡£

ϒć՚MySQL ABʏԫSleepycat½�З��£³ՍySQL/BDB½ӿڵŖˁ¿՚¸ࠋ®ƽ¡££¨¼´ʹBerkeley DBǤ±¾ʭˇ·dz£Ŝ¾­˜¿¼ҩºͷdz£¿ɿ¿µġ£MySQL½ӿۈՈ»±»ɏΪˇµۈ�¿µġ£ϒ㽫¼͐�ºΓݝ̼£©¡£

µ±̼´ﵽ¶Ջ�¼°BDB±ϊ͢µŖ§³ז®ʱ£¬ϒć´񓦸ºհ°𐗺ϒćµœû§¶¨λϊ͢²¢´´½¨¿ʖظ´²�²㋔°¸}¡£Ɏºϕ㒹µIJ㋔°¸}±»ת½»¸�pycat£¬̼·´¹��֒µ½²¢½⿶ϊ͢¡£ӲΪ֢ˇһ¸�׶εIJڗ�κιٓقDB±ϊ͢ϒć¿ʄݒª»¨±ȶՆ匼´洢ӽȦʔ΢¸�㶄ʱ¼倴½⿶̼¡£¿ʊǣ¬ϒćǚλ֢¸�̓»ԐД׸µŀ§ő£¬ӲΪBerkeley DB ´�ʭ±»ԃ՚MySQL֮΢ѭ¶඄Ӧԃא¡£

Ҫ»񶃹ٓقerkeley DBµŒ»°䑅Ϣ£¬ȫ·Ďɓleepycatθվ£¬http://www.sleepycat.com/¡£

15.5.1BDB֧³ֵIJڗ�³

µ±ǰ£¬ϒć֪µ�DB´洢ӽȦ֧³׏Áвڗ�³£º

·         Linux 2.x Intel

·         Sun Solaris (SPARC and x86)

·         FreeBSD 4.x/5.x (x86, sparc64)

·         IBM AIX 4.3.x

·         SCO OpenServer

·         SCO UnixWare 7.1.x

·         Windows NT/2000/XP

BDB²»֧³׏Áвڗ�³£º

·         Linux 2.x Alpha

·         Linux 2.x AMD64

·         Linux 2.x IA-64

·         Linux 2.x s390

·         Mac OS X

עˍ£ºǰһ¸�²»Ϊȫ£¬ϒć˕µ½¸�¢ʱϒć»Ṽт̼¡£

ɧ¹�֧³ՂDB±Դ뽨bµÍySQL£¬µ«ˇ£¬µ±ţǴ¶¯mysqld֮ʱ£¬·¢ʺЂ´£¬֢Ӣζ؅¶Մ㶄¼ܹ¹BDB²»±»֧³֣º

bdb: architecture lacks fast mutexes: applications cannot be threaded
Can't init databases

՚֢זȩ¿�¬ţ±ِ엘½¨MySQL²»´�³ֻ󔁭-skip-bdbѡЮǴ¶¯·�£

15.5.2. °²װBDB

ɧ¹�¾­Ђ՘һ¸�¨¶ӂerkeley DB֧³ֵĵĶ�涄MySQL£¬ ֻҪ¼򵥵ذ´֕ͨ³£µĶ�/span>·ַ¢°亯st1:state>°²װָ®¡££¨MySQL-Max ·ַ¢°汼(BDB֧³֣©¡£

ɧ¹�Դ뽨bMySQL£¬ţ¿ʒՔۆ匼Ɏºγ£ԃѡЮ֮΢ԃ--with-berkeley-dbѡЮՋѐconfigure4Պѭ֧³ՂDB¡£Ђ՘һ¸�QL 5.1·ַ¢°棬¸ı去׃µ½̼µŗ²䄿¼£¬Ȼº�яÃ焼®£º

shell> ./configure --with-berkeley-db [other-options]

¸�¢£¬ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/installing.html#installing-binary" title="2.7. Installing MySQL on Other Unix-Like Systems">2.7½ڣ¬¡°՚Ǥ̼`̆Unixϵͳʏ°²װMySQL”, 5.1.2½ڣ¬¡°mysqld-max)չMySQL·�rdquo;, º˼a href="http://book.chinaz.com/mysql5/installing.html#installing-source" title="2.8. MySQL Installation Using a Source Distribution">2.8½ڣ¬¡°ʹԃԴë·ַ¢°汦°²װMySQL”¡£

15.5.3BDBǴ¶¯ѡЮ

Ђ¶Ҽstrong>mysqldµő¡Ю¿ɱ»ԃ4¸ıいB´洢ӽȦµŐюª£º

·         --bdb-home=path

BDB±»�¼¡£֢Ӧ¸ú΄䎪--datadirʹԃµń¿¼Рͬ¡£

·         --bdb-lock-detect=method

BDB ̸¶¨¼쳢·½ʽ¡£ѡЮֵӦ¸ĎªDEFAULT, OLDEST, RANDOM»񘎕NGEST¡£

·         --bdb-logdir=path

BDBɕ־τ¼�£

·         --bdb-no-recover

²»՚»ָ´ģʽǴ¶¯Berkeley DB¡£

·         --bdb-no-sync

²»ͬ²½ˢтBDBɕ־¡£֢¸�±»՞³ɣ¬ȡ¶�µي¹ԃ--skip-sync-bdb-logs£¨ȫ²ϔĶҭ-sync-bdb-logsµŃ鋶)¡£

·         --bdb-shared-data

Ӕ¶ദmģʽǴ¶¯Berkeley DB¡££¨³�¯Berkeley DB֮ʱ£¬²»ҪʹԃDB_PRIVATE£©¡£

·         --bdb-tmpdir=path

BDB™ʱτ¼�£

·         --skip-bdb

½�B´洢ӽȦ¡£

·         --sync-bdb-logs

ͬ²½ˢтBDBɕ־¡£֢¸�ɏ±»Պѭ£¬ȫʹԃ--skip-sync-bdb-logs4½�¡£

ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#server-options" title="5.3.1. mysqld Command-Line Options">5.3.1½ڣ¬¡°mysqldļ®ѐѡЮ”¡£

ɧ¹�ԃ--skip-bdbѡЮ£¬MySQL²»³�¯Berkeley DB¿⣬¶�ҹ½ۊ¡´􁿵ńڴ档¾¡¹݈絋£¬ɧ¹�ԃ֢¸�ţ²»ŜʹԃBDB±ɧ¹�؅´´½¨һ¸�±MySQLȡ¶�µش´½¨һ¸�SAM¡£

ͨ³££¬ɧ¹�ʹԃBDB±ţӦ¸ò»ԃ--bdb-no-recoverѡЮǴ¶¯mysqld¡£¿ʊǣ¬ɧ¹�֖¾±»dž»µղµ±ţ˔؅Ǵ¶¯mysqldʱ£¬ʏ˶°취Ǵ¶¯·�ʄܵ¼ׂϊ͢¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/installing.html#starting-server" title="2.9.2.3. Starting and Troubleshooting the MySQL Server">2.9.2.3½ڣ¬¡°MySQL·�ņ�͹˕Е﷏ƅ³�o;¡£

ʹԃbdb_max_lock ±偿£¬ţ¿ʒՖ¸¶¨՚BDB±±»¼¤»̸¶¨µŗ˽Ŀ¡£Ĭɏֵˇ10,000¡£µ±ţִѐ³¤˂ϱ»򵯼strong>mysqld²»µò»¼쳩ѭ¶ᑐ4ִѐһ¸�¯֮ʱ£¬ɧ¹�ɧЂ´£¬ţӦ¸Ĕ�⹶˽Ŀ£º

bdb: Lock table is out of available locks
Got error 12 from ...

ɧ¹�ʹԃ´�ᔯ¾勂ϱ£¬ţ¿ʄݒ²Ы¸ı㡩nlog_cache_sizeº̭ax_binlog_cache_size±偿¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#binary-log" title="5.11.3. The Binary Log">5.11.3½ڣ¬¡°¶�֖¾”¡£

Ҳȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#server-system-variables" title="5.3.3. Server System Variables">5.3.3½ڣ¬¡°·�µͳ±偿”¡£

15.5.4BDB±ַ͘

ÿ¸�±}¸��ڴƅ͉ϡ£τ¼�דñĻؖض¿ªͷ£¬²¢ȒԐһ¸�¹Ļ4ָķτ¼�£һ¸�mτ¼�ӥ£¬һ¸�τ¼�¾ݺ΋�£

Ҫķȷָ³�쒪һ¸�±ԃENGINE»񓘐E±Ю4ָķ£º

CREATE TABLE t (i INT) ENGINE = BDB;
CREATE TABLE t (i INT) TYPE = BDB;

BerkeleyDBˇԃENGINE»󖞔YPEѡЮµÂDB´洢ӽȦµ¦ldquo;ͬӥ´Ȧrdquo;¡£

BDB´洢ӽȦ͡¹©˂ϱє±ţʹԃ֢Щ±·½·¨ȡ¾�utocommitģʽ£º

·         ɧ¹�Ջѐ؅£¬ͬʱ̦؅autocommitµı»Պѭ£¨֢ˇĬɏµģ©£¬¶ӂDB±¸ı䱻b¼´͡½»²¢Ȓ²»Ŝ±» »ع�

·         ɧ¹�Ջѐ؅£¬ͬʱ̦؅autocommitµı»½�¸ı䲻±䴉Ԁ¾õŖ±µ½ţִѐһ¸�MITԯ¾䡣طΪ͡½»µŌ浺£¬ţ¿ʒՖ´ѐROLLBACK4μ¼Ǹı䡣

ţ¿ʒՓ‚EGIN WORKԯ¾俪ʼһ¸�򀴹ӆ�ocommit£¬»󖠓“ET AUTOCOMMIT=04ķȷ½�tocommit¡£

ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#commit" title="13.4.1. START TRANSACTION, COMMIT, and ROLLBACK Syntax">13.4.1½ڣ¬¡°START TRANSACTION, COMMITº̒OLLBACKԯ·¨”¡£

BDB´洢ӽȦԐЂַ͘£º

·         BDB±ӔԐ¶൯ÿ±뱱¸����¬²¢Ȓ1024ؖ½ڵŗ ¼�£

·         MySQL՚ÿ¸�±ѨҪһ¸�MARY KEYӔ±䃿һѐ¿ʒԱ»Ψһµي¶±𡤈纻ţ²»ķȷ´´½¨һ¸�ySQLΪţ´´½¨²¢ά³ג»¸�صÐRIMARY KEY¡£Ӿ²ص ¼��½ڵij¤¶ȣ¬²¢ȒΪÿ¸�분dzͼ¶�¼ӡ£֢¸�»³�ٓHOW CREATE TABLE»񃄓CRIBEµŊ䴶֮א¡£

·         PRIMARY KEY±Ɉκφ匼̷ӽ¶¼Ҫ¿죬ӲΪPRIMARY KEY±»ԫѐµŊ�𵦴¢¡£Ǥ̷̼ӽ±»´洢Ϊ¼�«PRIMARY KEY£¬̹Ӕ±£³ՐRIMARY KEY¾¡¿ʄܵض͒Խ۔¼´ƅ̿ռ䲢»񶃸�ɊȖْªµġ£

֢¸�ª`̆ԚInnoDBµģ¬՚Ǥא½϶̵ðrimary keys²»½���ڶ�۔¼¿ռ⠡£

·         ɧ¹�B±£¬ţ·Ďʵŋ�ˇͬһ̷ӽµŒ»²¿·ֻ󗷼�¿·֣¬MySQL¿ʒՖ´ѐ²ꑯ¶�ϊȷʵµŐС£՚һ¸�SAM±£¬ֻԐ ˇͬһ̷ӽµŒ»²¿·ז®ʱ£¬²ſʒՕヴض¡£

·         lѸɨĨ±ȶӍyISAM±ɨĨ¸�󎫔قDB±µŊ�洢՚B˷¶�՚·׀분˽¾ގļ�

·        ¼�n>ֵгMyISAM±µ ¼��ǰ׺»򻴗ºѹ̵µġ£»»¾仰˵£¬՚BDB±¼�»±ɔٍyISAM±ʔ΢¶ᕼ¾ޒ»µ䀕¼䡣

·         ՚BDB±¾­³£Ԑ¶´Պѭţ՚̷ӽ˷µŖм䳥ɫтѐ¡£֢¸�‚DB±MyISAM±΢´�©

·         SELECT COUNT(*) FROM tbl_name¶ӂDB±ý£¬ӲΪ՚¸ñûԐѐ¼NJ�֡£

·         ԅ»¯ǷѨҪ֪µ1µĴ󹆐ъ�QLͨ¹�扫Ӕ¼°՚ÿ¸�±µĵ¥¶F¬¶Єێ¬³׋��ˌ⡣ɧ¹�·¢³�¿µÄELETE»񑎌LBACKԯ¾䣬֢¸�ӍySQLԅ»¯Ƿ4˵ˇأ¹»¾«ȷ‹¡£¿ʊǣ¬MySQL½�رյŊ±º򳅴洢֢¸�¬̹Ӕ£¬ɧ¹�Ƿ±»Ӣ΢µٖ֖¹£¬֢¸�ʄ݊Dz»ֽȷµġ£¼´ʹ˽²»ˇ100%ֽȷ£¬̼²»ˇ ķȷµġ£ţ¿ʒՊ¹ԃANALYZE TABLE»󖝠OPTIMIZE TABLEԯ¾倴¸�NJ�ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#analyze-table" title="13.5.2.1. ANALYZE TABLE Syntax">13.5.2.1½ڣ¬¡°ANALYZE TABLEԯ·¨” º˼a href="http://book.chinaz.com/mysql5/sql-syntax.html#optimize-table" title="13.5.2.5. OPTIMIZE TABLE Syntax">13.5.2.5½ڣ¬¡°OPTIMIZE TABLEԯ·¨”¡£

·         BDB±µńڲ¿̸¶¨՚ҳĦ¼¶±񊐗�

·         LOCK TABLES՚BDB±¾Ώ앚Ǥ̼±һҹ¹¤ط¡£ɧ¹�ʹԃLOCK TABLES£¬MySQL¶Ըñ³��¿¶ᗘд̸¶¨ £¨һ¸�閹Ǥ̼ط֟µŋ�4ȷ±£¼´ʹ­һ¸�̷¢³���¸ñ±»ǡµ±µً�¡£

·         ҪŜ¹»»ع��񣫂DB´洢ӽȦά»¤ɕ־τ¼�µЖخ¸ࠐՄܣ¬ţ¿ʒՊ¹ԃ--bdb-logdirѡЮ4°ЂDBɕ־·Ɣڲ»ͬµĴƅ͉ϣ¬¶�·Ɣۊ�»·ƖõńǸ�̡£

·         ÿ´ϐBDBɕ־τ¼�¯֮ʱ£¬MySQLִѐһ¸�鶣£¬²¢Ȓɾµ�°˂ϱ²»ѨҪµňκ͂DBɕ־τ¼�²¿ʒՔۈκϊ±º󊺓†LUSH LOGS4¸�eley DB±׃¼쳩µ㡣

¶Քׄѻָ´£¬ţӦ¸Ċ¹ԃ±·ݼҍySQLµĶ�֖¾£¬ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/database-administration.html#backup" title="5.9.1. Database Backups">5.9.1½ڣ¬¡°˽¾ݿⱸ·ۦrdquo;¡£

¾¯¸棺ɧ¹�³�¹ԃאµľʈ֖¾τ¼�¸�Ŝض»ָ´£¬²¢Ȓɧ¹�˂²»¶ԣ¬ţ¿ʄܻᶪʧ˽¾ݡ£

·         Ӧԃ³͐򲙐옜ˇ±»׼±¸4´¦mȩ¿�´BDB±ºεĸı倉Ŝµ¼ׂһ¸�¯»ع�ӈκζʄܻᵸ؅һ¸��¶�¡£

·         ɧ¹�BDB±Զµ½´ƅ͂�µõ½һ¸�󣨿ʄ݊Ǵ28£©£¬²¢Ȓ˂ϱӦ¸ûع�㔫MyISAM±·´£¬¶ՓٍyISAM ±mysqld՚¼͐�µȴ�ŗՓɴƅ̿ռ䡣

15.5.5. ў¸¼/span>BDB̹Ѩµ ˂Ӌ

·         ͬʱ´򿫐BDB±Ŝˇ·dz£ýµġ£ɧ¹�ʹԃBDB±ţ²»Ӧʹԃ·dz£´󶄱´棨}ɧ£¬´�56£©²¢Ȓµ±ţʹԃmysql¿ͻ§¶̖®ʱ£¬ţӦ¸Ċ¹ԃ--no-auto-rehashѡЮ¡£

·         SHOW TABLE STATUS ²»ΪBDB±¹©һЩхϢ£º

·                mysql> SHOW TABLE STATUS LIKE 'bdbtest'\G
·                *************************** 1. row ***************************
·                           Name: bdbtest
·                         Engine: BerkeleyDB
·                        Version: 10
·                     Row_format: Dynamic
·                           Rows: 154
·                 Avg_row_length: 0
·                    Data_length: 0
·                Max_data_length: 0
·                   Index_length: 0
·                      Data_free: 0
·                 Auto_increment: NULL
·                    Create_time: NULL
·                    Update_time: NULL
·                     Check_time: NULL
·                      Collation: latin1_swedish_ci
·                       Checksum: NULL
·                 Create_options:
·                        Comment:

·         ԅ»¯єŜ¡£

·         ¸ı厪¶ԱĨ²ڗ�Ďߒ³Ħ̸¶¨¡£

15.5.6¶ӂDB±О׆

Ђ±ķʹԃBDB±ʱţ±ِ쒪ر´ӵŏߖƣº

·         ÿ¸�±.dbτ¼�¢τ¼�¨֮ʱµ½¸Ďļ�¶¡£֢¸��ː֧³ճymlinksµĶᔃ»§»·¾³o¼쳢̸¶¨¡£Ӳ´ˣ¬´Ԓ»¸�ݿㄿ¼ι­һ¸�¼ӆ¶¯BDB±²»Ŝµġ£

·         µ±׆طBDB±±¸·ޖ®ʱ£¬ţ±ِ쒪ôʹԃmysqldumpҪôضһ¸�¬¶Ճ¿¸�±τ¼�mºˮdbτ¼�DBɕ־τ¼�ݡ£BDB´洢ӽȦ՚̼µň֖¾τ¼�´Ϊ³ɵŊÎ򓔼°Ҫȳ̼ć՚mysqldǴ¶¯µŊ±º򱻳ʳ�£BDBɕ־՚˽¾ބ¿¼o£¬¾ࠓϬog.XXXXXXXXXX£¨10λ˽ؖ£©юʽĻؖµŎļ�:p>

·         ɧ¹�NULLֵµŁѓю¨һµŋ�¬ֻԐµ¥¸�Lֵˇ±»Պѭµġ£֢²»ͬԚǤ̼´洢ӽȦ¡£

15.5.7. ʹԃBDB±¿ʄܷ¢ʺµĴ

·         ɧ¹�¼¶֮º􇴶¯mysqldʱ·¢ʺЂ´£¬̼Ӣζ؅тBDB°汾²»֧³־ʈ֖¾τ¼�º

·                bdb:  Ignoring log file: .../log.XXXXXXXXXX:
·                unsupported log version #

՚֢זȩ¿�¬ţ±ِ쉾³�ބ¿¼̹ԐBDBɕ־£¨ĻؖΪlog.XXXXXXXXXX֢ҹ¸򊽵Ŏļ�ِÆ�/span>mysqld¡£ϒćҲΆ¼�滳ԃmysqldump --opt4ת´¢ţµÂDB±ӆ³�¢Ȓ´ԗª´¢τ¼��

·         ɧ¹�commitģʽ±»½�ţӆ³�»¸�򗐱»²ο¼µÂDB±ţ»ᵓţµÍySQL´ɕ־µõ½ɧЂµĴхϢ£º

·                001119 23:43:56  bdb:  Missing log fileid entry
·                001119 23:43:56  bdb:  txn_abort: Log undo failed for LSN:
·                                       1 3644744: Invalid

֢²»ˇһ¸��¬µ«ˇ֪µNˌⱻ½⿶£¬ϒćΆ¼�»Ҫӆ³�£¬³�ocommitģʽ±»Պѭ֮ʱ¡££¨ў¸´²»ˇ΢²»أµ5ģ©¡£

15.6. EXAMPLE´洢ӽȦ

EXAMPLE´洢ӽȦˇһ¸��ϊÇ鶄´湹ӽȦ¡£̼µń¿µŊȗ�ySQLԴ´�µŒ»¸�ӣ¬ԃ4ҝʾɧºοªʼ±ᐴһ¸�洢ӽȦ¡£ ͬҹ£¬̼µŖ�̈¤ˇ¶Կª·¢֟¡£

Ҫ¶ӅXAMPLEӽȦ¼쳩Դ 룬ȫ²鿴MySQLԴë·ַ¢°涄sql/examplesĿ¼¡£

ҪՊѭ֢¸�¢ӽȦ£¬ʹԃ՚½¨bMySQL֮ʱʹԃ--with-example-storage-engineѡЮ4configure¡£

µ±ţ´´½¨һ¸�MPLE֮ʱ£¬·�´½¨՚˽¾ݿㄿ¼´´½¨һ¸�¨ӥτ¼���ʼ£¬²¢ԉһ¸�mµŀ©չĻ¡£ûԐǤ̼τ¼�¨¡£ûԐ˽¾ݱ»´洢½�֟´Ԗш¡»ء£

mysql> CREATE TABLE test (i INT) ENGINE = EXAMPLE;
Query OK, 0 rows affected (0.78 sec)
 
mysql> INSERT INTO test VALUES(1),(2),(3);
ERROR 1031 (HY000): Table storage engine for 'test' doesn't have this option
 
mysql> SELECT * FROM test;
Empty set (0.31 sec)

EXAMPLE´洢ӽȦ²»֧³ֱጷӽ¡£

15.7. FEDERATED´洢ӽȦ

FEDERATED´洢ӽȦ·Ď˔۔¶³͊�ıµŊ��±¾µصı

FEDERATED´洢ӽȦ½�­MAX°涄MySQLʏ¿ʓá£

ҪΪFEDERATEDӽȦ¼쳩 Դ룬ȫ²鿴MySQLԴë·ַ¢°涄sqlĿ¼¡£

¶ՓنEDERATED´洢ӽȦ£¬՚http://forums.mysql.com/list.php?105ʏԐһ¸�ŵł܌³¡£

15.7.1. °²װFEDERATED´洢ӽȦ

ҪՊѭ֢¸�¢ӽȦ£¬µ±ţ¹¹½¨MySQLʱȫʹԃ--with-federated-storage-engine4configure¡£

15.7.2FEDERATED´洢ӽȦµŃ鋶

µ±ţ´´½¨һ¸�ERATED±ʱº򣬷�ۊ�¿¼´´½¨һ¸�¨ӥτ¼��Ń�ʼ£¬²¢Ԑһ¸�m)չĻ¡£ϞǤ̼±´´½¨£¬ӲΪʵ¼ʵŊ�»¸�͊�ϡ£֢²»ͬԚΪ±¾µرطµĴ洢ӽȦµķ½ʽ¡£

¶Փڱ¾µصŊ�˽¾ގļ�صġ£}ɧ£¬ɧ¹�½¨һ¸�ªuserµÍyISAM±MyISAM´¦mǷ´´½¨һ¸�ªusers.MYDµŊ��¾µر£¬²扫£¬ɾ³�Ôڱ¾µي���¦mǷºͼȂ¼±»Ӕ¶Դ¦mǷµŌض¨¸򊽴洢¡£ Ϊ‹¶|Ȃ¼£¬´¦mǷ±ِ뱑˽¾ݷֽ⾸¡£Ϊ‹д¼Ȃ¼£¬ֵ±ِ뱻ת»»µ½±»´¦mǷʹԃµŐи򊽲¢Ȓ±»д½�µŊ��:p>

ʹԃMySQL FEDERATED´洢ӽȦ£¬ûԐ¶Ա±¾µي��磬ûԐ.MYDτ¼�¡¶�µأ¬һ¸�͊�洢ŇЩֽ³£µٓ¦¸ĔڱµŊ�㊹µySQL¿ͻ§¶ʁPI4¶c¬ɾ³�ºͲ扫˽¾ݵŊ¹ԃ³ʎª±ْª¡£˽¾ވ¡»ر»ͨ¹�T * FROM tbl_name SQLԯ¾倴³�¯¡£Ҫ¶•⹶½ẻ£¬ͨ¹�ysql_fetch_row() C APIº¯˽£¬ѐ±»һ´ψ¡һ¸�»º󵒓ELECT½ẻ°�їª»»³ȆEDERATED´¦mǷǚλµĸ򊽡£

»�³͈萂£º

1.    SQLµ�»±¾µط¢²¼

2.    MySQL´¦mǷAPI £¨˽¾ޒԴ¦mǷ¸򊽣©

3.    MySQL¿ͻ§¶ʁPI £¨˽¾ݱ»ת»»³ȓQLµ�©

4.    Զ³͊�> MySQL¿ͻ§¶ʁPI

5.    ת»»½ẻ°��»°£©µ½´¦mǷ¸򊻠

6.    ´¦mǷ API -> ½ẻѐ»󋝐ѓ°ЬµĶԱ¾µصļNJ�>

15.7.3. ɧºϊ¹ԃFEDERATED±뻯:p>

ʹԃFEDERATED±²½רˇ·dz£¼򵥵ġ£ͨ³££¬ţՋѐ}¸�򇷣¬Ҫô՚ͬһ¸��Ҫô՚²»ͬ׷»�£¨һ¸�ERATED±ԃǤ̼±»ͬһ·�݀±ˇ¿ʄܵġ£̤ȻֻԐ¼«ʙµĵ䒪֢ôض£©¡£

˗Ј£¬ţ±ِ앚ţЫҪԃFEDERATED±ϊµŔ¶³̷�Гђ»¸�£¼ډ裬Զ³̵ıFEDERATED˽¾ݿ㗐²¢Ȓ±»ɧЂ¶¨ӥ£º

CREATE TABLE test_table (
    id     int(20) NOT NULL auto_increment,
    name   varchar(32) NOT NULL default '',
    other  int(20) NOT NULL default '0',
    PRIMARY KEY  (id),
    KEY name (name),
    KEY other_key (other)
)
ENGINE=MyISAM
DEFAULT CHARSET=latin1;

ENGINE±Ю¿ʄ݃�δ洢ӽȦ£¬¸ñҪ²»ˇһ¸�SAM±

½ԗţ¬՚±¾µط�Ўª·Ď˔¶³̱½¨һ¸�ERATED±

CREATE TABLE federated_table (
    id     int(20) NOT NULL auto_increment,
    name   varchar(32) NOT NULL default '',
    other  int(20) NOT NULL default '0',
    PRIMARY KEY  (id),
    KEY name (name),
    KEY other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://root@remote_host:9306/federated/test_table';

£¨עӢ: CONNECTION ͦ´�ۏɇ°°汾µÍySQLoµÃOMMENT£©¡£

³�INE±ЮӦ¸ĊƆEDERATED£¬²¢ȒCONNECTION±Юˇ¸�RATEDָķɧºρ¬½ӵ½Զ³̷�ϵ٬½ԗַ�΢£¬ ֢¸�Ľṹ±ِ쎪ȫԫԶ³̱½ṹРͬ¡£

FEDERATEDӽȦ½�¨՚ӑjċ˽¾ݿ㗐µôest_table.frmτ¼�:p>

Զ³͖�Ə¢ָķ±¾µط�ªl½ӵ½µŔ¶³̷�¬˽¾ݿ⻍±Ϣָķńһ¸�̱±»طΪ˽¾ގļ�£՚֢¸�ԖС£Զ³̷�»ָ¶¨4طΪԶ³͖�ع306¶˿ۉД̐У¬̹ӔţҪǴ¶¯·�¬Ƀ̼¼፽9306¶˿ڡ£

՚CONNECTIONѡЮאµŁ¬½ԗַ�һ°䑎ʽɧЂ£º

scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name

ֻԐmysql՚֢һµ㱻֧³׎ªscheme£¬ĜëºͶ˿ںƊ±¿ʑ¡µġ£

֢oԐһЩl½ԗַ�}ؓ£º

CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'

Ϊָ¶¨l½ԗַ�ԃCONNECTIONˇ·ǿʑ¡£¬²¢Ȓ՚½«4¿ʄܻṄ±䡣µ±ţʹԃFEDERATED±ʱº򣭒ª¼ǵĕ⹶£¬ӲΪ֢Ӣζ؅µ±½«4·¢ʺŇז¸ı單ʱ£¬¿ʄܱ»Ҫȳ¡£

ӲΪɎºα»ԃµŃ݂옷Ϊ´¿τ±¾±»´畚l½ԗַ�£¬̼¿ʒԱ»Ɏºϊ¹¶ӆEDERATED±ԃSHOW CREATE TABLE»񒇏W TABLE STATUSµœû§£¬»󖠔ىNFORMATION_SCHEMA˽¾ݿ㗐²ꑯTABLES±ԃ»§¿´¼�o:p>

¶ՓنEDERATED´洢ӽȦ£¬՚http://forums.mysql.com/list.php?105ʏԐһ¸�ŵł܌³¡£

15.7.4FEDERATED´洢ӽȦµľ׏܍ є

FEDERATED֧³ּ°²»֧³ֵň萂£º

·         ՚µے»¸�¾א£¬Զ³̷�ِ싇һ¸�QL·�£FEDERATED¶Ն匼˽¾ݿ㓽ȦµŖ§³ֿʄܻ╚½«4±»ͭ¼ӡ£

·         FEDERATED±вµŔ¶³̱ţͨ¹�ATED±ϊ̼֮ǰ±ِ뵦՚¡£

·         һ¸�ERATED±в­һ¸�ERATED±¿ʄܵ쬵«ˇţ±ِ쐡ф²»Ҫ´´½¨һ¸�·¡£

·         ûԐ¶ՊÎ񶅖§³֡£

·         ɧ¹�±¾­¸ı䣬¶ӆEDERATEDӽȦ¶�ûԐ°취֪µ5ġ£֢¸�­ӲˇӲΪ֢¸�ِ쐳˽¾ގļ�¤ط£¬³�ݿ㇤̼Ɏºζ¼²»»ᱻдɫ¡£ɧ¹�ºζՔ¶³͊�ĸı䣬±¾µر˽¾ݵō떻є¿ʄܻᱻdž»µ¡£

·         FEDERATED´洢ӽȦ֧³ՓELECT, INSERT, UPDATE, DELETEº΋�£̼²»֧³ՁLTER TABLE, DROP TABLE»󉎺φ匼µŊ�支Ҕԯ¾䡣µ±ǰµŊµЖ²»ʹԃԤЈ׼±¸ºõœ¦¡£

·         ִѐʹԃSELECT, INSERT, UPDATEº̄ELETE£¬µ«²»ԃHANDLER¡£

·         FEDERATED±Ŝ¶Բꑯ»º´治ǰطԃ¡£

֢ЩО׆אµŒ»Щ՚FEDERATED´¦m»�4°汾¿ʄܱ»л³�:p>

15.8. ARCHIVE´洢ӽȦ

ARCHIVE´洢ӽȦ±»ԃ4Ӕ·dz£Сµĸ²¸ȇ�´􂀎ߋ��nbsp;

ҪՊѭ֢¸�¢ӽȦ£¬՚½¨bMySQL֮ʱʹԃ--with-archive-storage-engineѡЮ4configure¡£ɧ¹�´洢ӽȦ¿ɴ�ԯ¾効ԃ£¬ţ¿ʒԿ´¼�o:p>

mysql> SHOW VARIABLES LIKE 'have_archive';

µ±Ū´´½¨һ¸�HIVE±·�ۊ�¿¼´´½¨һ¸�¨ӥτ¼��Ń�ʼ£¬²¢ԉһ¸�mµŀ©չĻ¡£´洢ӽȦ´´½¨Ǥ̼τ¼�ж¼Ԑԉ±ؖ¿ªͷµŃ�˽¾ݺΔª˽¾ގļ�¹Ļ.ARZºˮARM¡£һ¸�Nτ¼�ۓݝ²ڗ��£

ARCHIVEӽȦ½�ՉNSERTº̓ELEC£¨Ϟɾ³�»»򹽐£©¡£̼֧³ՏRDER BY²ڗ�LOB Բ£¬Ӕ¼°»�̹Ԑ˽¾ހᑍ£¬³�ϊ�ͣ¨ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/spatial-extensions-in-mysql.html#mysql-spatial-datatypes" title="19.4.1. MySQL Spatial Data Types">19.4.1½ڣ¬¡°MySQL ¿ռ勽¾ހᑍ”£©¡£ARCHIVEӽȦʹԃѐ¼¶̸¶¨¡£

´洢: µ±¼Ȃ¼±»²扫ʱ£¬̼ć±»ѹ̵¡£ARCHIVEӽȦʹԃzlibϞ̰˽¾ޑ¹̵¡£OPTIMIZE TABLEµŊ¹ԃ¿ʒԷ׎�¬²¢°ҋ�ª¸�򊽣¨ ʹԃOPTIMIZE TABLEµŔ­Ӳ£¬ιЂ¿´£©¡£ӽȦҳ֧³ՃHECK TABLE¡£Ԑ˽ז±»ʹԃµIJ扫`э£º

·         ֱ½Ӳ扫INSERT֮ʱ°Ғ»ѐΆ½��壬²¢Ȓ»º³敚̼ѨҪµŊ±º󋣐¡£µ½»º³嶄²扫±»̸¶¨±£»¤¡£һ¸�ECTǿ׆һ¸􋋋¢т·¢ʺ£¬³�´µŎ¨һ²扫ˇINSERT DELAYED£¨ŇЩˢтɧͬѨҪһҹ£©¡£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#insert-delayed" title="13.2.4.2. INSERT DELAYED Syntax">13.2.4.2½ڣ¬¡°INSERT DELAYED ԯ·¨”¡£

·         ¿鳥ɫּ՚̼Ϊ³ɺ􀉼�·Ȇ匼²扫՚ͬһʱ¼䷢ʺ£¬՚֢זȩ¿�¬¿鳥ɫ¿ʒԱ»²¿·ֿ´¼�¸�ECT²»»ᵼׂһ¸�扫µ ˢт£¬³�ECT՚±»װ՘ʱ·¢ʺһ¸�£²扫¡£

ȡ»أº ՚ȡ»ي±£¬¼Ȃ¼¸�Ҫ±»½㑹̵£¬ûԐѐ»º´档һ¸�ECT²ڗ�э눫±ɨĨ£ºµ±һ¸�pan>SELECT·¢ʺ֮ʱ£¬̼֒³�°Ԑ¶ኙѐ¿ʓ㬲¢¶еŊ�/span>SELECT±»µ±ط³א�ִѐ¡£עӢ£¬ѭ¶�LECTԯ¾啚²扫¹�⌰»µѹ̵£¬³�扫»󖠑ӳٵIJ扫±»ʹԃ¡£Ҫў¸´Ɏºϒѷ¢ʺѹ̵ϊ͢£¬ţ¿ʒ՗݊ȗ�IMIZE TABLE£¨Ҳ֧³ՒEPAIR TABLE£©¡£±»SHOW TABLE STATUS±¨¸涄ѐ˽؜ˇֽȷµġ£ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/sql-syntax.html#repair-table" title="13.5.2.6. REPAIR TABLE Syntax">13.5.2.6½ڣ¬¡°REPAIR TABLEԯ·¨”£¬13.5.2.5½ڣ¬¡°OPTIMIZE TABLEԯ·¨”£¬13.5.4.18½؍ £¬“SHOW TABLE STATUS ԯ·¨”¡£

¶ՓفRCHIVE´洢ӽȦ£¬՚ http://forums.mysql.com/list.php?112 ʏԐרąÛ̳¡£

15.9. CSV´洢ӽȦ

CSV´洢ӽȦʹԃ¶ººŷָ�򊽵Ŏı¾τ¼��

ҪՊѭʹԃ֢¸�¢ӽȦ£¬µ±ţ½¨bMySQL֮ʱ£¬ʹԃ--with-csv-storage-engineѡЮ4configure¡£

µ±ţ´´½¨һ¸�±ʱ£¬·�ۊ�¿¼´´½¨һ¸�¨ӥτ¼��Ń�ʼ£¬²¢Ȓԉһ¸�mµŀ©չĻ¡£´洢ӽȦҲ´´½¨һ¸�ގļ�Ń�±Ļؖ¿ªʼ£¬²¢ȒԐһ¸�Vµŀ©չĻ¡£˽¾ގļ�򊾎ı¾τ¼�㱑˽¾ݴ洢½�£¬´洢ӽȦԃCSV¸򊽰ҋ���:p>

mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = CSV;
Query OK, 0 rows affected (0.12 sec)
 
mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM test;
+------+------------+
| i    | c          |
+------+------------+
|    1 | record one |
|    2 | record two |
+------+------------+
2 rows in set (0.00 sec)

ɧ¹�²ꕚִѐǰ˶ԯ¾匹´´½¨µŊ�¿¼oµôest.CSVτ¼�ńۈޓ¦¸ÿ´ǰ4гɧЂ̹ʾ£º

"1","record one"
"2","record two"

CSV´洢ӽȦ²»֧³׋�£

15.10. BLACKHOLE´洢ӽȦ

BLACKHOLE´洢ӽȦ¾Ώ�quo;ºڶ´”һҹ£¬̼½Ԋ֊�ªǺ̼¶�´洢̼¡£ȡ»ٗ݊Ƿµ»ؿռ¯£º

mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE;
Query OK, 0 rows affected (0.03 sec)
 
mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM test;
Empty set (0.00 sec)

µ±ţ´´½¨һ¸�CKHOLE±ʱº򣬷�ۊ�¿¼´´½¨һ¸�¨ӥτ¼��Ń�ͷ£¬²¢ȒԐһ¸�m)չĻ¡£ûԐǤ̼τ¼�½֢¸�񡡠

BLACKHOLE´洢ӽȦ֧³׋�`µŋ�£

ҪՊѭ֢¸�¢ӽȦ£¬՚ţ½¨bMySQL֮ʱʹԃ--with-blackhole-storage-engineѡЮ4configure¡£BLACKHOLE´洢ӽȦ՚MySQ¹©Ӧµķ��灯¿ʒՕҵ½£»ͨ¹�HOW ENGINES»񒇏W VARIABLES LIKE 'have%'µŊ䴶£¬ţ¿ʒՈ·¶¨ţµİ汾ˇ·򖧳ו⹶ӽȦ¡£

µ½BLACKHOLE±²扫²»´洢Ɏºϊ�«ɧ¹�׆ɕ־±»Պѭ£¬SQLԯ¾䱻дɫɕ־£¨²¢±»¸´׆µ½´ӷ�©¡£֢¿ʒՓѓð𐗺µٗ�ظ´Ƿ»򺾂̆�ơ£}ɧ£¬¼ډ酣µœ¦ԃѨҪ´ӷ�඄¹�򣬵«´«ˤ̹Ԑ¶�֖¾˽¾ݵ½´ӷ�؏ȵ¼ׂ¹�¨µĽẻ¡£՚֢זȩ¿�¬՚׷·��Ͻ¨bһ¸�ӷ��̼µĴ洢ӽȦˇBLACKHOLE£¬Ĩ˶ɧЂ£º

Replication using BLACKHOLE
        for filtering

׷·�´̼µĶ�֖¾¡£αmysqld½�Ϊ´ӷ�¬Ӧԃǚλµòeplicate-doº̲eplicate-ignore¹畲µĺϲ¢£¬²¢Ȓдһ¸�쬱»¹���Ķ�֖¾ ¡££¨ȫ²ϔ¼a href="http://book.chinaz.com/mysql5/replication.html#replication-options" title="6.8. Replication Startup Options">6.8½ڣ¬¡°¸´׆Ǵ¶¯ѡЮ”£©¡£֢¸��¾±»͡¹©¸�ϱǷ¡£

¼Ɉ»α½�ȷʵµش洢Ɏºϊ�»Ԑºݐ¡µœʔڸ´׆׷·��϶µíysqld½�ׂµĴ¦m¿ª֧¡£֢¸�͵Ľ¨b¿ʒՓö¸´׆´ӷ�´ט¸´¡£

Ǥ̼¿ʄܶӂLACKHOLE´洢ӽȦµŊ¹ԃ°�

·         ת´¢τ¼�őꖤ¡£

·         4ؔ¶�֖¾¼Ȃ¼µĿªк²み£¬ͨ¹�ː½�־¹¦ŜµÂLACKHOLEµŐՄݓ뾻ֹ¶�֖¾¹¦ŜµÂLACKHOLEµŐՄܡ£

·         ӲΪBLACKHOLE±¾׊ʏˇһ¸�quo;no-op” ´洢ӽȦ£¬̼¿ʄܱ»ԃ4²ꖒԫ´洢ӽȦؔʭ²»Р¹صŐՄ݆¿¾±¡£


֢ˇMySQL²ο¼˖²ᶄ·­ӫ°汾£¬¹ٍٓySQL²ο¼˖²ᣬȫ·Ďȼa href="http://dev.mysql.com/doc/mysql/en" target="_top">dev.mysql.com¡£ ԭʼ²ο¼˖²⎪Ӣτ°棬ԫӢτ°泎¿¼˖²␠±ȣ¬±¾·­ӫ°瀉Ŝ²»ˇخтµġ£