table map id 溢出,5.5.28
知识点
RBR中的Table_ID 和Innodb中的table_id 没有关系,且和物理文件没有对应关系。
Flush Table 可以重置RBR中的Table_ID,一般是递增
解决办法:
修改源码:sql/table.h中table_map_id的定义 uint 改为ulong
table id的分配在函数assign_new_table_id()(sql\sql_base.cc:3598)中分配
ulong tid= ++last_table_id; /* get next id */
影响参数:
table_definition_cache?
table_open_cache
在cache中找到表定义,在返回之前,会判断table_def_cache中是否太大,如果太大将清理cache中最久没用的表定义
现象:
(1) SLAVE丢失master的数据
(2) 当一个DML同时操作多个表,且其中2个表的mapid相同时(通常为0或溢出时),会导致slave执行这个event时crash,并重启mysqld实例
参考:
BUG
MySQL Binlog中TABLE ID源码分析 http://blog.chinaunix.net/uid-26896862-id-3329896.html
Binlog中table_map_id 的探究 http://www.cnblogs.com/cenalulu/archive/2012/09/24/2699907.html
http://blog.csdn.net/zbszhangbosen/article/details/8134571