mysql error 1286_MySQL:ERROR 1286 (42000): Unknown storage engine 'MyISAM'
原标题:MySQL:ERROR 1286 (42000): Unknown storage engine 'MyISAM'作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列的作者。系列链接:https://www.jianshu.com/nb/43148932一、错误演示如下:root @localhost:test :09:49:03>create table ttt(id
原标题:MySQL:ERROR 1286 (42000): Unknown storage engine 'MyISAM'
作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列的作者。
系列链接:https://www.jianshu.com/nb/43148932
一、错误演示
如下:
root @localhost:test :09:49:03>create table ttt(id int)engine =myisam ;
ERROR1286(42000):Unknownstorage engine 'MyISAM'
二、相关参数
enforce_storage_engine:建表进行引擎检查,是否满足设置的引擎值。
sql_mode(NO_ENGINE_SUBSTITUTION):根据前面的检查值进行综合判断,如果设置了NO_ENGINE_SUBSTITUTION则进行报错,如果没有设置则进行,且将新建表的引擎转为enforce_storage_engine设置的引擎。
我们环境中设置enforce_storage_engine为Innodb,sql_mode中设置了NO_ENGINE_SUBSTITUTION。
三、相关函数
check_engine
->ha_enforce_handlerton
部分逻辑如下:
根据ha_enforce_handlerton函数进行引擎检查,主要检查enforce_storage_engine参数设置的值是否为已知的引擎。否则报错 Unknown storage engine ,返回值为enforce_storage_engine指定的引擎(比如Innodb)。
根据上面的返回值进行判断
如果建表指定的引擎(比如这里的MyISAM)和enforce_storage_engine设置的引擎(比如这里的Innodb)不同,同时sql_mode设置了NO_ENGINE_SUBSTITUTION。则报错ERROR 1286 (42000): Unknown storage engine 'MyISAM',这也是当前的报错。
如果没有设置sql_mode NO_ENGINE_SUBSTITUTION,那么使用enforce_storage_engine指定的值代替建表语句的指定的引擎值(比如用Innodb代替MyISAM),同时报出警告,ER_WARN_USING_OTHER_HANDLER,输出为新的引擎值。四、修改
注销掉enforce_storage_engine参数即可。
五、栈 # 0check_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
# 10x000000000155d81eincreate_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
# 20x000000000155f352inmysql_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
# 30x000000000155f47ainmysql_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
# 40x00000000014cc36dinmysql_execute_command (thd =0x7fffe400a8a0,first_level =true )at /cdh /mysqldebug /percona -server -5.7.29-32/sql /sql_parse .cc :3510
# 50x00000000014d2e1binmysql_parse (thd =0x7fffe400a8a0,parser_state =0x7fffe8ece4a0,update_userstat =false )at /cdh /mysqldebug /percona -server -5.7.29-32/sql /sql_parse .cc :5927
# 60x00000000014c7a55indispatch_command (thd =0x7fffe400a8a0,com_data =0x7fffe8ecec90,command =COM_QUERY )at /cdh /mysqldebug /percona -server -5.7.29-32/sql /sql_parse .cc :1539
# 70x00000000014c688aindo_command (thd =0x7fffe400a8a0)at /cdh /mysqldebug /percona -server -5.7.29-32/sql /sql_parse .cc :1060
# 80x00000000015fab28inhandle_connection (arg =0x3c4f150)at /cdh /mysqldebug /percona -server -5.7.29-32/sql /conn_handler /connection_handler_per_thread .cc :325
# 90x00000000018cad34inpfs_spawn_thread (arg =0x3c568b0)at /cdh /mysqldebug /percona -server -5.7.29-32/storage /perfschema /pfs .cc :2198
# 100x00007ffff7bc6e65instart_thread ()from /lib64 /libpthread .so .0
# 110x00007ffff5fa088dinclone ()from /lib64 /libc .so .作者:高鹏(网名八怪),《深入理解MySQL主从原理 32讲》系列文的作者。系列链接:https://www.jianshu.com/nb/43148932全文完。 返回搜狐,查看更多
责任编辑:
更多推荐

所有评论(0)