<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        MySQL多個(gè)Slave同一server_id的沖突原因分析

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 13:19:25
        文檔

        MySQL多個(gè)Slave同一server_id的沖突原因分析

        MySQL多個(gè)Slave同一server_id的沖突原因分析:本文內(nèi)容遵從CC版權(quán)協(xié)議, 可以隨意轉(zhuǎn)載, 但必須以超鏈接形式標(biāo)明文章原始出處和作者信息及版權(quán)聲明網(wǎng)址: http://www.penglixun.com/tech/database/mysql_multi_slave_same_serverid.html 今天分析一個(gè)詭異問題,一個(gè)模擬Slave線程的程序,不斷
        推薦度:
        導(dǎo)讀MySQL多個(gè)Slave同一server_id的沖突原因分析:本文內(nèi)容遵從CC版權(quán)協(xié)議, 可以隨意轉(zhuǎn)載, 但必須以超鏈接形式標(biāo)明文章原始出處和作者信息及版權(quán)聲明網(wǎng)址: http://www.penglixun.com/tech/database/mysql_multi_slave_same_serverid.html 今天分析一個(gè)詭異問題,一個(gè)模擬Slave線程的程序,不斷

        本文內(nèi)容遵從CC版權(quán)協(xié)議, 可以隨意轉(zhuǎn)載, 但必須以超鏈接形式標(biāo)明文章原始出處和作者信息及版權(quán)聲明網(wǎng)址: http://www.penglixun.com/tech/database/mysql_multi_slave_same_serverid.html 今天分析一個(gè)詭異問題,一個(gè)模擬Slave線程的程序,不斷的被Master Ser

        本文內(nèi)容遵從CC版權(quán)協(xié)議, 可以隨意轉(zhuǎn)載, 但必須以超鏈接形式標(biāo)明文章原始出處和作者信息及版權(quán)聲明網(wǎng)址: http://www.penglixun.com/tech/database/mysql_multi_slave_same_serverid.html

        今天分析一個(gè)詭異問題,一個(gè)模擬Slave線程的程序,不斷的被Master Server給kill掉,最終發(fā)現(xiàn)是因?yàn)橛袃蓚€(gè)Slave使用同樣一個(gè)server id去連接Master Server,為什么兩個(gè)Slave用同一個(gè)server id會(huì)被Master Server給Kill呢?分析了源碼,這源于MySQL Replication的重連機(jī)制。

        我們首先看看一個(gè)Slave注冊(cè)到Master會(huì)發(fā)生什么,首先Slave需要向Master發(fā)送一個(gè)COM_REGISTER_SLAVE類型的請(qǐng)求(sql_parse.cc)命令請(qǐng)求,這里Master會(huì)使用register_slave函數(shù)注冊(cè)一個(gè)Slave到slave_list。

         case COM_REGISTER_SLAVE:
         {
         if (!register_slave(thd, (uchar*)packet, packet_length))
         my_ok(thd);
         break;
         }

        在注冊(cè)Slave線程的時(shí)候會(huì)發(fā)生什么呢?我們略去無(wú)用的代碼直接看重點(diǎn):(repl_failsafe.cc)

        int register_slave(THD* thd, uchar* packet, uint packet_length)
        {
         int res;
         SLAVE_INFO *si;
         uchar *p= packet, *p_end= packet + packet_length;
        .... //省略
         if (!(si->master_id= uint4korr(p)))
         si->master_id= server_id;
         si->thd= thd;
         pthread_mutex_lock(&LOCK_slave_list);
         unregister_slave(thd,0,0); //關(guān)鍵在這里,先取消注冊(cè)server_id相同的Slave線程
         res= my_hash_insert(&slave_list, (uchar*) si); //把新的Slave線程注冊(cè)到slave_list
         pthread_mutex_unlock(&LOCK_slave_list);
         return res;
        .....
        }

        這是什么意思呢?這就是重連機(jī)制,slave_list是一個(gè)Hash表,server_id是Key,每一個(gè)線程注冊(cè)上來,需要?jiǎng)h掉同樣server_id的Slave線程,再把新的Slave線程加到slave_list表中。

        線程注冊(cè)上來后,請(qǐng)求Binlog,發(fā)送COM_BINLOG_DUMP請(qǐng)求,Master會(huì)發(fā)送binlog給Slave,代碼如下:

         case COM_BINLOG_DUMP:
         {
         ulong pos;
         ushort flags;
         uint32 slave_server_id;
         
         status_var_increment(thd->status_var.com_other);
         thd->enable_slow_log= opt_log_slow_admin_statements;
         if (check_global_access(thd, REPL_SLAVE_ACL))
         break;
         
         /* TODO: The following has to be changed to an 8 byte integer */
         pos = uint4korr(packet);
         flags = uint2korr(packet + 4);
         thd->server_id=0; /* avoid suicide */
         if ((slave_server_id= uint4korr(packet+6))) // mysqlbinlog.server_id==0
         kill_zombie_dump_threads(slave_server_id);
         thd->server_id = slave_server_id;
         
         general_log_print(thd, command, "Log: '%s' Pos: %ld", packet+10,
         (long) pos);
         mysql_binlog_send(thd, thd->strdup(packet + 10), (my_off_t) pos, flags); //不斷的發(fā)送日志給slave端
         unregister_slave(thd,1,1); //發(fā)送完成后清理Slave線程,因?yàn)閳?zhí)行到這一步肯定是binlog dump線程被kill了
         /* fake COM_QUIT -- if we get here, the thread needs to terminate */
         error = TRUE;
         break;
         }

        mysql_binlog_send函數(shù)在sql_repl.cc,里面是輪詢Master binlog,發(fā)送給Slave。

        再來簡(jiǎn)單看看unregister_slave做了什么(repl_failsafe.cc):

        void unregister_slave(THD* thd, bool only_mine, bool need_mutex)
        {
         if (thd->server_id)
         {
         if (need_mutex)
         pthread_mutex_lock(&LOCK_slave_list);
         
         SLAVE_INFO* old_si;
         if ((old_si = (SLAVE_INFO*)hash_search(&slave_list,
         (uchar*)&thd->server_id, 4)) &&
         (!only_mine || old_si->thd == thd)) //拿到slave值
         hash_delete(&slave_list, (uchar*)old_si); //從slave_list中拿掉
         
         if (need_mutex)
         pthread_mutex_unlock(&LOCK_slave_list);
         }
        }

        這就可以解釋同樣的server_id為什么會(huì)被kill,因?yàn)橐坏┳?cè)上去,就會(huì)現(xiàn)刪除相同server_id的Slave線程,然后把當(dāng)前的Slave加入,這是因?yàn)橛袝r(shí)Slave斷開了,重新請(qǐng)求上來,當(dāng)然需要踢掉原來的線程,這就是線程重連機(jī)制。

        切記,一個(gè)MySQL集群中,絕不可以出現(xiàn)相同server_id的實(shí)例,否則各種詭異的問題可是接踵而來。

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        MySQL多個(gè)Slave同一server_id的沖突原因分析

        MySQL多個(gè)Slave同一server_id的沖突原因分析:本文內(nèi)容遵從CC版權(quán)協(xié)議, 可以隨意轉(zhuǎn)載, 但必須以超鏈接形式標(biāo)明文章原始出處和作者信息及版權(quán)聲明網(wǎng)址: http://www.penglixun.com/tech/database/mysql_multi_slave_same_serverid.html 今天分析一個(gè)詭異問題,一個(gè)模擬Slave線程的程序,不斷
        推薦度:
        標(biāo)簽: id 原因 多個(gè)
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 韩国亚洲伊人久久综合影院| 高潮内射免费看片| 国产亚洲精品影视在线| 免费国产黄网站在线观看| 亚洲成A∨人片在线观看不卡| 亚洲黄色在线网站| 蜜桃成人无码区免费视频网站 | 在线观看免费成人| 亚洲一级片在线观看| 青娱乐免费在线视频| 亚洲AV无码久久久久网站蜜桃| 久久国产精品萌白酱免费| 国产亚洲精品无码成人| 国产午夜精品理论片免费观看| vvvv99日韩精品亚洲| 亚洲精品午夜在线观看| 91精品国产免费网站| 亚洲五月综合缴情婷婷| 免费黄色app网站| 一级做α爱过程免费视频| 亚洲无人区一区二区三区| 国产成人一区二区三区视频免费| 国产亚洲综合色就色| 亚洲视频在线观看免费视频| 亚洲18在线天美| 国产在线不卡免费播放| 两个人看的www免费高清| 久久亚洲熟女cc98cm| 成人黄软件网18免费下载成人黄18免费视频| 久久av无码专区亚洲av桃花岛| 免费成人福利视频| 亚洲av最新在线观看网址| 中文字幕人成人乱码亚洲电影| a毛片免费观看完整| 亚洲妇女水蜜桃av网网站| 国产一级淫片视频免费看| 免费看男人j放进女人j免费看| 亚洲第一永久在线观看| 国产一区视频在线免费观看| 暖暖在线视频免费视频| 亚洲精品成a人在线观看夫 |