现在有一套主主复制的mysql数据库,其中有个表pvlogs是成员引擎的内存表,主库(就是贵宾所在的那个库)一切正常,但是从库报错:表“pvlogs”已满,
经过询问这个问题已经持续好长时间了,我们这个表是每天都要先把数据插入进另一个表,然后截断掉。每天都是到这111848个数量就会报错:表pvlogs充满。
立马想到了控制内存表大小的两个参数:
tmp_table_size=671088640
max_heap_table_size=671088640
在主从库查看得知设置是一样的,如下所示:
主库查看:
MariaDB[记录]比;显示变量如“% max_heap_table_size %”;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
| | Variable_name |值
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
| max_heap_table_size | 2271087616 |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
1行集(0.00秒)
MariaDB[记录]比;显示变量如“% tmp_table_size %”; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | | Variable_name |值 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | tmp_table_size | 527108864 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1行集(0.00秒)
从库查看: MariaDB[记录]比;显示变量如“% max_heap_table_size %”; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | | Variable_name |值 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | max_heap_table_size | 2271087616 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 1行集(0.00秒)
MariaDB[记录]比;显示变量如“% tmp_table_size %”; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | | Variable_name |值 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | tmp_table_size | 527108864 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1行集(0.00秒)
很显然不是这两个参数导致的,还想到了MAX_ROWS=1000000000,表的属性,经查看两边还是一样的,靠,这就蛋疼了,如下所示: 主库: MariaDB[记录]比;显示创建表pvlogs;
| |表创建表 | pvlogs |创建表“pvlogs”( “id”bigint (20) NOT NULL AUTO_INCREMENT, “member_id”int(11)默认为空, jsession的bigint(20)默认为空, “知识产权”的bigint(20)默认为空, search_id的bigint(20)默认为空, info_id的bigint(20)默认为空, “lastmodify”默认时间戳NOT NULL CURRENT_TIMESTAMP> <李> 假如我们在AB都建立一张测试表,表中有一个汽车增量的字段 李> <李> 停掉一个的同步,在B上对数据表测试(存在自增长ID)执行插入操作,返回插入ID为1 李> <李> 然后停掉B的同步,在一个上对数据表测试(存在自增长ID)执行插入操作,返回的插入ID也是1 李> <李> 然后同时启动A、B就会出现主键ID重复 李> 解决方法: 我们只要保证两台服务器上插入的自增长数据不同就可以了 如:插入奇数ID、B插入偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了 在这里我们在A、B上加入参数,以实现奇偶插入 上一个:my . cnf中所做加入参数
MariaDB[记录]比;显示变量如“% tmp_table_size %”; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | | Variable_name |值 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | tmp_table_size | 527108864 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1行集(0.00秒)
从库查看: MariaDB[记录]比;显示变量如“% max_heap_table_size %”; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | | Variable_name |值 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | max_heap_table_size | 2271087616 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 1行集(0.00秒)
MariaDB[记录]比;显示变量如“% tmp_table_size %”; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | | Variable_name |值 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | tmp_table_size | 527108864 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1行集(0.00秒)
很显然不是这两个参数导致的,还想到了MAX_ROWS=1000000000,表的属性,经查看两边还是一样的,靠,这就蛋疼了,如下所示: 主库: MariaDB[记录]比;显示创建表pvlogs;
| |表创建表 | pvlogs |创建表“pvlogs”( “id”bigint (20) NOT NULL AUTO_INCREMENT, “member_id”int(11)默认为空, jsession的bigint(20)默认为空, “知识产权”的bigint(20)默认为空, search_id的bigint(20)默认为空, info_id的bigint(20)默认为空, “lastmodify”默认时间戳NOT NULL CURRENT_TIMESTAMP> <李> 假如我们在AB都建立一张测试表,表中有一个汽车增量的字段 李> <李> 停掉一个的同步,在B上对数据表测试(存在自增长ID)执行插入操作,返回插入ID为1 李> <李> 然后停掉B的同步,在一个上对数据表测试(存在自增长ID)执行插入操作,返回的插入ID也是1 李> <李> 然后同时启动A、B就会出现主键ID重复 李> 解决方法: 我们只要保证两台服务器上插入的自增长数据不同就可以了 如:插入奇数ID、B插入偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了 在这里我们在A、B上加入参数,以实现奇偶插入 上一个:my . cnf中所做加入参数
-
<李>
auto_increment_increment=2,,
李>
<李>
auto_increment_offset=1,,
李>