您好,登錄后才能下訂單哦!
如何理解ERROR中的Unknown storage engine 'MyISAM',相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問題。
如下:
root@localhost:test:09:49:03>create table ttt(id int) engine=myisam ; ERROR 1286 (42000): Unknown storage engine 'MyISAM'
enforce_storage_engine:建表進(jìn)行引擎檢查,是否滿足設(shè)置的引擎值。
sql_mode(NO_ENGINE_SUBSTITUTION):根據(jù)前面的檢查值進(jìn)行綜合判斷,如果設(shè)置了NO_ENGINE_SUBSTITUTION則進(jìn)行報(bào)錯(cuò),如果沒有設(shè)置則進(jìn)行,且將新建表的引擎轉(zhuǎn)為enforce_storage_engine設(shè)置的引擎。
我們環(huán)境中設(shè)置enforce_storage_engine為Innodb,sql_mode中設(shè)置了NO_ENGINE_SUBSTITUTION。
check_engine
->ha_enforce_handlerton
部分邏輯如下:
根據(jù)ha_enforce_handlerton函數(shù)進(jìn)行引擎檢查,主要檢查enforce_storage_engine參數(shù)設(shè)置的值是否為已知的引擎。否則報(bào)錯(cuò) Unknown storage engine ,返回值為enforce_storage_engine指定的引擎(比如Innodb)。
根據(jù)上面的返回值進(jìn)行判斷
如果建表指定的引擎(比如這里的MyISAM)和enforce_storage_engine設(shè)置的引擎(比如這里的Innodb)不同,同時(shí)sql_mode設(shè)置了NO_ENGINE_SUBSTITUTION。則報(bào)錯(cuò)ERROR 1286 (42000): Unknown storage engine ‘MyISAM’,這也是當(dāng)前的報(bào)錯(cuò)。
如果沒有設(shè)置sql_mode NO_ENGINE_SUBSTITUTION,那么使用enforce_storage_engine指定的值代替建表語(yǔ)句的指定的引擎值(比如用Innodb代替MyISAM),同時(shí)報(bào)出警告,ER_WARN_USING_OTHER_HANDLER,輸出為新的引擎值。
注銷掉enforce_storage_engine參數(shù)即可。
#0 check_engine (thd=0x7fffe400a8a0, db_name=0x7fffe40108f0 "test", table_name=0x7fffe4010328 "ttt", create_info=0x7fffe8ecd890, alter_info=0x7fffe8ecd300) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/sql_table.cc:11318 #1 0x000000000155d81e in create_table_impl (thd=0x7fffe400a8a0, db=0x7fffe40108f0 "test", table_name=0x7fffe4010328 "ttt", error_table_name=0x7fffe4010328 "ttt", path=0x7fffe8eccf60 "./test/ttt", create_info=0x7fffe8ecd890, alter_info=0x7fffe8ecd300, internal_tmp_table=false, select_field_count=0, no_ha_table=false, is_trans=0x7fffe8ecd1ee, key_info=0x7fffe8ecd170, key_count=0x7fffe8ecd16c) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/sql_table.cc:5138 #2 0x000000000155f352 in mysql_create_table_no_lock (thd=0x7fffe400a8a0, db=0x7fffe40108f0 "test", table_name=0x7fffe4010328 "ttt", create_info=0x7fffe8ecd890, alter_info=0x7fffe8ecd300, select_field_count=0, is_trans=0x7fffe8ecd1ee) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/sql_table.cc:5753 #3 0x000000000155f47a in mysql_create_table (thd=0x7fffe400a8a0, create_table=0x7fffe4010368, create_info=0x7fffe8ecd890, alter_info=0x7fffe8ecd300) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/sql_table.cc:5801 #4 0x00000000014cc36d in mysql_execute_command (thd=0x7fffe400a8a0, first_level=true) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/sql_parse.cc:3510 #5 0x00000000014d2e1b in mysql_parse (thd=0x7fffe400a8a0, parser_state=0x7fffe8ece4a0, update_userstat=false) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/sql_parse.cc:5927 #6 0x00000000014c7a55 in dispatch_command (thd=0x7fffe400a8a0, com_data=0x7fffe8ecec90, command=COM_QUERY) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/sql_parse.cc:1539 #7 0x00000000014c688a in do_command (thd=0x7fffe400a8a0) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/sql_parse.cc:1060 #8 0x00000000015fab28 in handle_connection (arg=0x3c4f150) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/conn_handler/connection_handler_per_thread.cc:325 #9 0x00000000018cad34 in pfs_spawn_thread (arg=0x3c568b0) at /cdh/mysqldebug/percona-server-5.7.29-32/storage/perfschema/pfs.cc:2198 #10 0x00007ffff7bc6e65 in start_thread () from /lib64/libpthread.so.0 #11 0x00007ffff5fa088d in clone () from /lib64/libc.so.6
看完上述內(nèi)容,你們掌握如何理解ERROR中的Unknown storage engine 'MyISAM'的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。