主主复制的mysql从库 内存表The table 'pvlogs' is full问题处理
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,现在有一套主主复制的mysql数据库,其中有个表pvlogs是member引擎的内存表,主库(就是vip所在的那个库)一切正常,但是从库报错:The table 'pvlogs' is full, 经
千家信息网最后更新 2025年01月21日主主复制的mysql从库 内存表The table 'pvlogs' is full问题处理现在有一套主主复制的mysql数据库,其中有个表pvlogs是member引擎的内存表,主库(就是vip所在的那个库)一切正常,但是从库报错:The table 'pvlogs' is full, 经过询问这个问题已经持续好长时间了,我们这个表是每天都要先把数据insert 进另一个表,然后truncate掉。每天都是到111848这个数量就会报错:The table 'pvlogs' is full。 立马想到了控制内存表大小的两个参数: tmp_table_size = 671088640 max_heap_table_size = 671088640 在主从库查看得知设置是一样的,如下所示: 主库查看: MariaDB [log]> show VARIABLES like '%max_heap_table_size%'; +---------------------+------------+ | Variable_name | Value | +---------------------+------------+ | max_heap_table_size | 2271087616 | +---------------------+------------+ 1 row in set (0.00 sec)
MariaDB [log]> show VARIABLES like '%tmp_table_size%'; +----------------+-----------+ | Variable_name | Value | +----------------+-----------+ | tmp_table_size | 527108864 | +----------------+-----------+ 1 row in set (0.00 sec)
从库查看: MariaDB [log]> show VARIABLES like '%max_heap_table_size%'; +---------------------+------------+ | Variable_name | Value | +---------------------+------------+ | max_heap_table_size | 2271087616 | +---------------------+------------+ 1 row in set (0.00 sec)
MariaDB [log]> show VARIABLES like '%tmp_table_size%'; +----------------+-----------+ | Variable_name | Value | +----------------+-----------+ | tmp_table_size | 527108864 | +----------------+-----------+ 1 row in set (0.00 sec)
很显然不是这两个参数导致的,还想到了MAX_ROWS=1000000000,表的属性,经查看两边还是一样的,靠,这就蛋疼了,如下所示: 主库: MariaDB [log]> show create table pvlogs;
| Table | Create Table | pvlogs | CREATE TABLE `pvlogs` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `member_id` int(11) DEFAULT NULL, `jsession` bigint(20) DEFAULT NULL, `ip` bigint(20) DEFAULT NULL, `search_id` bigint(20) DEFAULT NULL, `info_id` bigint(20) DEFAULT NULL, `lastmodify` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disc` int(11) NOT NULL, `status` int(11) NOT NULL DEFAULT '0' COMMENT 'When the page(html) is open ,this attribute will set 1', PRIMARY KEY (`id`), KEY `info_id` (`info_id`), KEY `member_id` (`member_id`), KEY `ip` (`ip`) ) ENGINE=MEMORY AUTO_INCREMENT=831382377522705486 DEFAULT CHARSET=utf8 MAX_ROWS=2000000000 |
1 row in set (0.00 sec)
从库: MariaDB [log]> show create table pvlogs; | Table | Create Table | pvlogs | CREATE TABLE `pvlogs` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `member_id` int(11) DEFAULT NULL, `jsession` int(11) DEFAULT NULL, `ip` bigint(20) DEFAULT NULL, `search_id` bigint(20) DEFAULT NULL, `info_id` bigint(20) DEFAULT NULL, `lastmodify` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disc` int(11) NOT NULL, `status` int(11) NOT NULL DEFAULT '0' COMMENT 'When the page(html) is open ,this attribute will set 1', PRIMARY KEY (`id`), KEY `info_id` (`info_id`), KEY `member_id` (`member_id`), KEY `ip` (`ip`) ) ENGINE=MEMORY AUTO_INCREMENT=223696 DEFAULT CHARSET=utf8 MAX_ROWS=2000000000 | +--------+--------------------------------------------------------------------------------------
细心的朋友可能已经发现,这两边的创建表语句中的参数AUTO_INCREMENT是不一样的,我们知道这个参数代表自增的当前值加上自增步长(auto_increment_increment控制列中的值的增量值,也就是步长),这个是某个表特有的属性,会随着自增列id的增大而增大。
查看从库总数据量: MariaDB [log]> select count(*) from pvlogs; +----------+ | count(*) | +----------+ | 111848 | +----------+ 1 row in set (0.00 sec)
于是我尝试着改成一样,在改之前,我想到了另一个问题,就是主主复制的结构中,自增列 多主自增长ID重复
于是我修改从库的pvlogs表的AUTO_INCREMENT大小:改成了一个比目前大的一个值。 MariaDB [log]> alter table pvlogs AUTO_INCREMENT=831331632;
从库正常了,不再报错,开始正常插入数据库。。。。。
MariaDB [log]> show VARIABLES like '%tmp_table_size%'; +----------------+-----------+ | Variable_name | Value | +----------------+-----------+ | tmp_table_size | 527108864 | +----------------+-----------+ 1 row in set (0.00 sec)
从库查看: MariaDB [log]> show VARIABLES like '%max_heap_table_size%'; +---------------------+------------+ | Variable_name | Value | +---------------------+------------+ | max_heap_table_size | 2271087616 | +---------------------+------------+ 1 row in set (0.00 sec)
MariaDB [log]> show VARIABLES like '%tmp_table_size%'; +----------------+-----------+ | Variable_name | Value | +----------------+-----------+ | tmp_table_size | 527108864 | +----------------+-----------+ 1 row in set (0.00 sec)
很显然不是这两个参数导致的,还想到了MAX_ROWS=1000000000,表的属性,经查看两边还是一样的,靠,这就蛋疼了,如下所示: 主库: MariaDB [log]> show create table pvlogs;
| Table | Create Table | pvlogs | CREATE TABLE `pvlogs` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `member_id` int(11) DEFAULT NULL, `jsession` bigint(20) DEFAULT NULL, `ip` bigint(20) DEFAULT NULL, `search_id` bigint(20) DEFAULT NULL, `info_id` bigint(20) DEFAULT NULL, `lastmodify` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disc` int(11) NOT NULL, `status` int(11) NOT NULL DEFAULT '0' COMMENT 'When the page(html) is open ,this attribute will set 1', PRIMARY KEY (`id`), KEY `info_id` (`info_id`), KEY `member_id` (`member_id`), KEY `ip` (`ip`) ) ENGINE=MEMORY AUTO_INCREMENT=831382377522705486 DEFAULT CHARSET=utf8 MAX_ROWS=2000000000 |
1 row in set (0.00 sec)
从库: MariaDB [log]> show create table pvlogs; | Table | Create Table | pvlogs | CREATE TABLE `pvlogs` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `member_id` int(11) DEFAULT NULL, `jsession` int(11) DEFAULT NULL, `ip` bigint(20) DEFAULT NULL, `search_id` bigint(20) DEFAULT NULL, `info_id` bigint(20) DEFAULT NULL, `lastmodify` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disc` int(11) NOT NULL, `status` int(11) NOT NULL DEFAULT '0' COMMENT 'When the page(html) is open ,this attribute will set 1', PRIMARY KEY (`id`), KEY `info_id` (`info_id`), KEY `member_id` (`member_id`), KEY `ip` (`ip`) ) ENGINE=MEMORY AUTO_INCREMENT=223696 DEFAULT CHARSET=utf8 MAX_ROWS=2000000000 | +--------+--------------------------------------------------------------------------------------
细心的朋友可能已经发现,这两边的创建表语句中的参数AUTO_INCREMENT是不一样的,我们知道这个参数代表自增的当前值加上自增步长(auto_increment_increment控制列中的值的增量值,也就是步长),这个是某个表特有的属性,会随着自增列id的增大而增大。
查看从库总数据量: MariaDB [log]> select count(*) from pvlogs; +----------+ | count(*) | +----------+ | 111848 | +----------+ 1 row in set (0.00 sec)
于是我尝试着改成一样,在改之前,我想到了另一个问题,就是主主复制的结构中,自增列 多主自增长ID重复
- 假如我们在AB都建立一张test表,表中有一个auto increment的字段
- 停掉A的同步,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1
- 然后停掉B的同步,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1
- 然后同时启动A,B,就会出现主键ID重复
- auto_increment_increment=2
- auto_increment_offset=1
- auto_increment_increment=2
- auto_increment_offset=2
于是我修改从库的pvlogs表的AUTO_INCREMENT大小:改成了一个比目前大的一个值。 MariaDB [log]> alter table pvlogs AUTO_INCREMENT=831331632;
从库正常了,不再报错,开始正常插入数据库。。。。。
参数
数据
增长
控制
内存
问题
不同
两个
大小
奇数
字段
就是
属性
数据库
数据表
服务器
天都
步长
同步
服务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
公安局特聘网络安全专家
nfv网络技术
网络安全工作日的目标
药学书籍数据库
数据库搜索 源码
余姚机械刀片服务器售后服务
讯飞软件开发公司在哪
百度在线网络技术杭州
社会舆情和网络安全工作方案
mt4哪个服务器快
c wpf连接数据库
宿州ibm服务器阵列卡实时报价
什么是非全文数据库检索引擎
礼佛软件开发
多重结合数据库
连云港网络安全审计系统咨询机构
网络安全行业竞赛
廊坊网络安全宣传活动
为啥显示未连接服务器打不通电话
怎么查手游的服务器
7天数据库
信号通路数据库
基于git的软件开发
网络安全 专题党课
中专网络安全手抄报文字内容
集群数据库需要开启哪些防火墙
网络安全电影你你影视
idea数据库编程
宿城区自动网络技术多少钱
如何做网络安全线上知识竞答