亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一、問題:

MySQL5.7.38主從架構,主節(jié)點唯一索引上(唯一索引不是主鍵)有重復值,全部從節(jié)點報1062,SQL線程狀態(tài)異常,根據(jù)SQL線程報的binlog位置點,insert 數(shù)據(jù)時有重復值,插入失敗

二、原因:

unique_checks=0時導致,在bug(106121)列表中官方解釋的原因:該參數(shù)關閉,維護唯一索引時,不會進行物理讀,只會進行內存讀,來確保唯一索引的唯一性,即如果內存中有沖突數(shù)據(jù)就報1062,如果內存中沒有沖突數(shù)據(jù)插入成功,不會進行io來將唯一索引相關的數(shù)據(jù)頁拉取到內存。

官方的回復“IMHO this is not a bug”,我理解的意思“不要你覺得,我要我覺得,我就是這么玩的”。

三、故障解決方案:

一、臨時解決方案

  • 恢復主從:在從節(jié)點開啟會話set sql_log_bin=0刪除表的唯一索引重新啟動復制線程

缺點是:不能夠解決數(shù)據(jù)重復的問題,切換主從后會面臨更多重復數(shù)據(jù)的問題,如果從節(jié)點接收查請求且使用到了原唯一索引的字段,那sql效率會嚴重下降,但是可以解決主從復制停止的問題

二、永久解決方案

  1. 業(yè)務自己去重,不要插入重復數(shù)據(jù)
  2. 參數(shù)unique_checks保持為1
  3. 關于重復的業(yè)務數(shù)據(jù):與業(yè)務交流,確定重復數(shù)據(jù)的處理方式

四、復現(xiàn)步驟:

1. 表結構:

mysql> create database wl;mysql> show create table wl.lgfG*************************** 1. row ***************************       Table: lgfCreate Table: CREATE TABLE `lgf` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `k` int(11) NOT NULL DEFAULT '0',  `c` char(120) NOT NULL DEFAULT '',  `pad` char(60) NOT NULL DEFAULT '',  PRIMARY KEY (`id`),  UNIQUE KEY `c` (`c`,`pad`)) ENGINE=InnoDB AUTO_INCREMENT=2147483647 DEFAULT CHARSET=utf8

Python/ target=_blank class=infotextkey>Python生成隨機數(shù)據(jù),插入表,并另起會話觀察總數(shù)據(jù)量約10w條左右(保證聚簇索引中的前邊的數(shù)據(jù)與后邊的數(shù)據(jù)所在的葉子節(jié)點的頁相差很遠):

rand.pyimport randomimport oswhile True:    i=str(random.randint(1000,8000000))    a=str(random.randint(1000000000000000,8000000000000000))    b=str(random.randint(1000000000000000,8000000000000000))    c=str(random.randint(100000,800000))    sql="insert ignore into lgf(id,k,c,pad) values(%s,%s,%s,%s) " % (i,c,a,b)    os.system('mysql -uroot -p123456 -h127.0.0.1 -P3306 -e "use wl;%s"' % (sql))

2. 查詢數(shù)據(jù):

查詢前10條數(shù)據(jù):mysql> select * from wl.lgf order by id limit 10;+------+--------+------------------+------------------+| id   | k      | c                | pad              |+------+--------+------------------+------------------+| 1058 | 162327 | 1693367460515515 | 4503256156555111 || 1072 | 581438 | 7079984640802065 | 3180334749170868 || 1139 | 160022 | 5072986485096872 | 4163430310554381 || 1193 | 780611 | 4790797228737408 | 2940698105313885 || 1234 | 395757 | 4904177529354516 | 4353197763651083 || 1243 | 725513 | 5525166443023382 | 5731401212245669 || 1262 | 749163 | 1132694876665847 | 5159069792931202 || 1280 | 415220 | 2770815803363126 | 3979264947141008 || 1316 | 329253 | 6088415865037450 | 6035685143204331 || 1360 | 403078 | 3344825394389018 | 7962994492618902 |+------+--------+------------------+------------------+10 rows in set (0.00 sec)id=1360 c=3344825394389018 pad=7962994492618902

3. 拼接SQL

c與pad的值與id=1360值相等,id=1000000000(表中無該id行)

insert into wl.lgf(id,c,pad) values(10000000,'3344825394389018','7962994492618902') ;

4. 重啟mysqld

目的是清除緩存 為了清空MySQL緩存容,還可結合以下幾個參數(shù) 修改my.cnf文件,重啟MySQL實例

  • innodb_buffer_pool_load_at_startup = 0
  • innodb_buffer_pool_dump_at_shutdown = 0

5. 重新插入重復唯一索引數(shù)據(jù):

mysql> set unique_checks=0;mysql> use wlmysql> insert into wl.lgf(id,c,pad) values(10000000,'3344825394389018','7962994492618902') ;Query OK, 1 row affected (0.00 sec)

6. 查詢:force index指定主鍵查詢數(shù)據(jù)

mysql> select * from wl.lgf force index(primary) where c='3344825394389018' and pad='7962994492618902';+----------+--------+------------------+------------------+| id       | k      | c                | pad              |+----------+--------+------------------+------------------+|     1360 | 403078 | 3344825394389018 | 7962994492618902 || 10000000 |      0 | 3344825394389018 | 7962994492618902 |+----------+--------+------------------+------------------+2 rows in set (0.37 sec)

分享到:
標簽:MySQL
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定