真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

主主復(fù)制的mysql從庫內(nèi)存表Thetable'pvlogs'isfull問題處理

現(xiàn)在有一套主主復(fù)制的MySQL數(shù)據(jù)庫,其中有個(gè)表pvlogs是member引擎的內(nèi)存表,主庫(就是vip所在的那個(gè)庫)一切正常,但是從庫報(bào)錯(cuò):The table 'pvlogs' is full,
經(jīng)過詢問這個(gè)問題已經(jīng)持續(xù)好長時(shí)間了,我們這個(gè)表是每天都要先把數(shù)據(jù)insert 進(jìn)另一個(gè)表,然后truncate掉。每天都是到111848這個(gè)數(shù)量就會(huì)報(bào)錯(cuò):The table 'pvlogs' is full。
立馬想到了控制內(nèi)存表大小的兩個(gè)參數(shù):
tmp_table_size = 671088640
max_heap_table_size = 671088640
在主從庫查看得知設(shè)置是一樣的,如下所示:
主庫查看:
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)

很顯然不是這兩個(gè)參數(shù)導(dǎo)致的,還想到了MAX_ROWS=1000000000,表的屬性,經(jīng)查看兩邊還是一樣的,靠,這就蛋疼了,如下所示:
主庫:
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 |
+--------+--------------------------------------------------------------------------------------

細(xì)心的朋友可能已經(jīng)發(fā)現(xiàn),這兩邊的創(chuàng)建表語句中的參數(shù)AUTO_INCREMENT是不一樣的,我們知道這個(gè)參數(shù)代表自增的當(dāng)前值加上自增步長(auto_increment_increment控制列中的值的增量值,也就是步長),這個(gè)是某個(gè)表特有的屬性,會(huì)隨著自增列id的增大而增大。

查看從庫總數(shù)據(jù)量:
MariaDB [log]> select count(*) from pvlogs;
+----------+
| count(*) |
+----------+
| 111848 |
+----------+
1 row in set (0.00 sec)

于是我嘗試著改成一樣,在改之前,我想到了另一個(gè)問題,就是主主復(fù)制的結(jié)構(gòu)中,自增列
多主自增長ID重復(fù)
  • 假如我們?cè)贏B都建立一張test表,表中有一個(gè)auto increment的字段
  • 停掉A的同步,在B上對(duì)數(shù)據(jù)表test(存在自增長ID)執(zhí)行插入操作,返回插入ID為1
  • 然后停掉B的同步,在A上對(duì)數(shù)據(jù)表test(存在自增長ID)執(zhí)行插入操作,返回的插入ID也是1
  • 然后同時(shí)啟動(dòng)A,B,就會(huì)出現(xiàn)主鍵ID重復(fù)
解決方法:
我們只要保證兩臺(tái)服務(wù)器上插入的自增長數(shù)據(jù)不同就可以了
如:A插入奇數(shù)ID,B插入偶數(shù)ID,當(dāng)然如果服務(wù)器多的話,你可以定義算法,只要不同就可以了
在這里我們?cè)贏,B上加入?yún)?shù),以實(shí)現(xiàn)奇偶插入
A:my.cnf上加入?yún)?shù)
  1. auto_increment_increment=2  
  2. auto_increment_offset=1  
這樣A的auto_increment字段產(chǎn)生的數(shù)值是:1, 3, 5, 7, …等奇數(shù)ID了
B:my.cnf上加入?yún)?shù)
  1. auto_increment_increment=2  
  2. auto_increment_offset=2  
一定注意AUTO_INCREMENT可不是初始值,初始值是auto_increment_offset系統(tǒng)參數(shù)控制,

于是我修改從庫的pvlogs表的AUTO_INCREMENT大?。焊某闪艘粋€(gè)比目前大的一個(gè)值。
MariaDB [log]> alter table pvlogs AUTO_INCREMENT=831331632;

從庫正常了,不再報(bào)錯(cuò),開始正常插入數(shù)據(jù)庫。。。。。

當(dāng)前標(biāo)題:主主復(fù)制的mysql從庫內(nèi)存表Thetable'pvlogs'isfull問題處理
標(biāo)題鏈接:http://weahome.cn/article/gedojh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部