MySQL復(fù)制出錯(cuò) Last_SQL_Errno:1146的解決方法
背景:我們?cè)谧鰯?shù)據(jù)遷移或者拆分的時(shí)候,使用Tablespace transcation 這種解決方案時(shí),很有可能就會(huì)遇到 從庫(kù)復(fù)制出錯(cuò),報(bào): Last_SQL_Errno: 1146
那么具體錯(cuò)誤內(nèi)容可能會(huì)有如下:
Last_SQL_Error: Error 'Table 'spider.tb_city_population_rank' doesn't exist' on query. Default database: 'spider'. Query: 'alter table tb_city_population_rank discard tablespace'
Last_SQL_Error: Error 'Table 'spider.tb_city_population_rank' doesn't exist' on query. Default database: 'spider'. Query: 'alter table tb_city_population_rank import tablespace'
那么我們遇到這樣的問(wèn)題的時(shí)候該如何恰當(dāng)?shù)奶幚砟??考慮如下幾點(diǎn):
1. 我們整個(gè)庫(kù)的容量有多大?
2. 業(yè)務(wù)容忍的最大延遲時(shí)間多久?
3. 我們恢復(fù)需要多久?恢復(fù)的難易程度如何?
通過(guò)考慮到以上幾點(diǎn), 我們就可以根據(jù)實(shí)際情況做出抉擇,采用什么樣的辦法盡快的恢復(fù)從庫(kù);對(duì)于這樣的問(wèn)題,簡(jiǎn)單粗暴的方案就是重建從庫(kù),當(dāng)然還有別的辦法, 且聽(tīng)我慢慢道來(lái):
首先我們先看看我們是如何通過(guò)Transport tablespace 遷移數(shù)據(jù)的,大概步驟如下:
1.庫(kù)A執(zhí)行: show create table xxx1; 拿到簡(jiǎn)表語(yǔ)句;
2.庫(kù)B執(zhí)行: create table xxx1; 在從庫(kù)上建立基本的表結(jié)構(gòu);
3.庫(kù)B執(zhí)行: alter table xxx1 discard tablespace; 讓mysql自己刪掉ibd文件;
4.庫(kù)A執(zhí)行: flush tables xxxx1,xxxx2 for export;把內(nèi)存的臟數(shù)據(jù)刷到磁盤(pán),使得ibd文件數(shù)據(jù)一致;
5.庫(kù)A執(zhí)行: scp xxxx1.ibd xxx2.ibd xxxx1.cfg xxx2.cfg slave_host:/data/ 把ibd文件拷貝到從庫(kù);
6.庫(kù)B執(zhí)行: alter table xxx1 import tablespace 導(dǎo)入數(shù)據(jù)文件。
好了我們知道了整個(gè)遷移的具體步驟,那么我們就可以輕松的應(yīng)對(duì)在遷移過(guò)程中復(fù)制出錯(cuò)的問(wèn)題了。
那么我們首先來(lái)看一下:
Last_SQL_Errno: 1146
Last_SQL_Error: Error 'Table 'spider.tb_city_population_rank' doesn't exist' on query. Default database: 'spider'. Query: 'alter table tb_city_population_rank discard tablespace'
其大概的意思就是我們?cè)趶膸?kù)上沒(méi)有找到 這個(gè)表的完整定義信息,觀察一下磁盤(pán)上的文件我們就明白了:
[root@GZ_NF_DB_RP_002 spider]# ls -lhrt |grep tb_city_population_rank
-rw-r----- 1 mysql mysql 8.3G Mar 31 20:03 tb_city_population_rank.ibd
果然沒(méi)有 這個(gè)表的 frm 文件, 那么怎么辦呢?由于是 slave 的sql_thread 線程報(bào)錯(cuò), 那么我們可采取取巧的辦法:
用超級(jí)用戶(hù)登錄從庫(kù),先備份一下 這個(gè)ibd 文件:[root@GZ_NF_DB_RP_002 spider]# mv tb_city_population_rank.ibd tb_city_population_rank.ibd.bak
然后拿到這個(gè)文件的表結(jié)構(gòu), 在從庫(kù)上執(zhí)行建表語(yǔ)句,這樣一樣來(lái), 我們從庫(kù)就有了 ibd frm 文件, 那么 此時(shí)我們開(kāi)啟slave sql_thread,這時(shí)就會(huì)執(zhí)行時(shí)主庫(kù)傳過(guò)來(lái)的 語(yǔ)句:
alter table tb_city_population_rank discard tablespace ; 那么當(dāng)我們?cè)僖淮蔚挠^看此盤(pán)數(shù)據(jù)文件的時(shí)候,ibd 文件又不見(jiàn)了,此時(shí)slave 也就已經(jīng)出錯(cuò)了,其錯(cuò)誤信息如下:
Last_SQL_Errno: 1146
Last_SQL_Error: Error 'Table 'spider.tb_city_population_rank' doesn't exist' on query. Default database: 'spider'. Query: 'alter table tb_city_population_rank import tablespace'
那么我們此時(shí)需要做的就是: 把剛才mv 的文件 再 mv 回去, 也就是說(shuō):[root@GZ_NF_DB_RP_002 spider]# mv tb_city_population_rank.ibd.bak tb_city_population_rank.ibd ; 完成這個(gè)命令后我們?cè)賵?zhí)行 start slave sql_thread ; 此時(shí)這個(gè)表就正常了, 我們可以執(zhí)行select * from tb_city_population_rank limit 100; 來(lái)驗(yàn)證一下是否可讀。
那么此時(shí),我們算完整的解決了因一個(gè)表導(dǎo)致的復(fù)制出錯(cuò)的問(wèn)題, 那么如果遷移了多張表(經(jīng)常是) , 那么我們就可以按照這個(gè)解決方案,一步一步的來(lái)解決復(fù)制出錯(cuò)。其大概的思路就是, 缺什么我們補(bǔ)什么,多了什么我們?nèi)サ羰裁础?/p>
下面是其它網(wǎng)友的補(bǔ)充,根據(jù)返回的錯(cuò)誤信息進(jìn)行調(diào)整即可。
mysql 主主復(fù)制(雙主復(fù)制)報(bào)錯(cuò)Last_SQL_Errno: 1146
錯(cuò)誤信息:
Last_Errno: 1146
Last_Error: Error 'Table 'test.user' doesn't exist' on query. Default database: 'test'. Query: 'insert into user values(20,'在庫(kù)')'
解決方法:
mysql> set global sql_slave_skip_counter=20; mysql> STOP SLAVE; mysql> START SLAVE;
問(wèn)題解決
相關(guān)文章
Mysql?InnoDB聚簇索引二級(jí)索引聯(lián)合索引特點(diǎn)
這篇文章主要為大家介紹了Mysql?InnoDB聚簇索引二級(jí)索引聯(lián)合索引特點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05MySQL中Bit數(shù)據(jù)類(lèi)型的使用方式
這篇文章主要介紹了MySQL中Bit數(shù)據(jù)類(lèi)型的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09MySQL5.6主從復(fù)制(mysql數(shù)據(jù)同步配置)
這篇文章主要介紹了MySQL5.6主從復(fù)制也就是mysql數(shù)據(jù)同步配置方法,需要的朋友可以參考下2016-11-11mysql如何查詢(xún)某一時(shí)間段內(nèi)沒(méi)有賣(mài)出的商品
室友拿來(lái)一道關(guān)于mysql查詢(xún)的問(wèn)題,利用mysql查詢(xún)某一時(shí)間段內(nèi)沒(méi)有賣(mài)出的商品,需要的朋友可以參考下2014-02-02MySQL數(shù)據(jù)庫(kù)char與varchar的區(qū)別分析及使用建議
本文主要介紹了mysql中VARCHAR與CHAR字符型數(shù)據(jù)的差異以及這兩種字符型數(shù)據(jù)在項(xiàng)目中的使用建議,真心不錯(cuò)。值得一看。小編有種受益匪淺的感覺(jué)。2014-09-09mysql 服務(wù)意外停止1067錯(cuò)誤解決辦法小結(jié)
今天在配置服務(wù)器時(shí)安裝mysql5.5總是無(wú)法安裝,查看日志錯(cuò)誤提示為1067錯(cuò)誤,下面來(lái)看我的解決辦法2012-11-11