mysql errno : 1146_MySQL_MySQL复制出错 Last_SQL_Errno:1146的解决方法,背景:我们在做数据迁移或者 - phpStudy...
MySQL復(fù)制出錯 Last_SQL_Errno:1146的解決方法
背景:我們在做數(shù)據(jù)遷移或者拆分的時候,使用Tablespace transcation 這種解決方案時,很有可能就會遇到 從庫復(fù)制出錯,報: Last_SQL_Errno: 1146
那么具體錯誤內(nèi)容可能會有如下:
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'
那么我們遇到這樣的問題的時候該如何恰當(dāng)?shù)奶幚砟?#xff1f;考慮如下幾點:
1. 我們整個庫的容量有多大?
2. 業(yè)務(wù)容忍的最大延遲時間多久?
3. 我們恢復(fù)需要多久?恢復(fù)的難易程度如何?
通過考慮到以上幾點, 我們就可以根據(jù)實際情況做出抉擇,采用什么樣的辦法盡快的恢復(fù)從庫;對于這樣的問題,簡單粗暴的方案就是重建從庫,當(dāng)然還有別的辦法, 且聽我慢慢道來:
首先我們先看看我們是如何通過Transport tablespace 遷移數(shù)據(jù)的,大概步驟如下:
1.庫A執(zhí)行: show create table xxx1; 拿到簡表語句;
2.庫B執(zhí)行: create table xxx1; 在從庫上建立基本的表結(jié)構(gòu);
3.庫B執(zhí)行: alter table xxx1 discard tablespace; 讓mysql自己刪掉ibd文件;
4.庫A執(zhí)行: flush tables xxxx1,xxxx2 for export;把內(nèi)存的臟數(shù)據(jù)刷到磁盤,使得ibd文件數(shù)據(jù)一致;
5.庫A執(zhí)行: scp xxxx1.ibd xxx2.ibd xxxx1.cfg xxx2.cfg slave_host:/data/ 把ibd文件拷貝到從庫;
6.庫B執(zhí)行: alter table xxx1 import tablespace 導(dǎo)入數(shù)據(jù)文件。
好了我們知道了整個遷移的具體步驟,那么我們就可以輕松的應(yīng)對在遷移過程中復(fù)制出錯的問題了。
那么我們首先來看一下:
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'
其大概的意思就是我們在從庫上沒有找到 這個表的完整定義信息,觀察一下磁盤上的文件我們就明白了:
[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
果然沒有 這個表的 frm 文件, 那么怎么辦呢?由于是 slave 的sql_thread 線程報錯, 那么我們可采取取巧的辦法:
用超級用戶登錄從庫,先備份一下 這個ibd 文件:[root@GZ_NF_DB_RP_002 spider]# mv tb_city_population_rank.ibd tb_city_population_rank.ibd.bak
然后拿到這個文件的表結(jié)構(gòu), 在從庫上執(zhí)行建表語句,這樣一樣來, 我們從庫就有了 ibd frm 文件, 那么 此時我們開啟slave sql_thread,這時就會執(zhí)行時主庫傳過來的 語句:
alter table tb_city_population_rank discard tablespace ; 那么當(dāng)我們再一次的觀看此盤數(shù)據(jù)文件的時候,ibd 文件又不見了,此時slave 也就已經(jīng)出錯了,其錯誤信息如下:
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'
那么我們此時需要做的就是: 把剛才mv 的文件 再 mv 回去, 也就是說:[root@GZ_NF_DB_RP_002 spider]# mv tb_city_population_rank.ibd.bak tb_city_population_rank.ibd ; 完成這個命令后我們再執(zhí)行 start slave sql_thread ; 此時這個表就正常了, 我們可以執(zhí)行select * from tb_city_population_rank limit 100; 來驗證一下是否可讀。
那么此時,我們算完整的解決了因一個表導(dǎo)致的復(fù)制出錯的問題, 那么如果遷移了多張表(經(jīng)常是) , 那么我們就可以按照這個解決方案,一步一步的來解決復(fù)制出錯。其大概的思路就是, 缺什么我們補什么,多了什么我們?nèi)サ羰裁础?/p>
下面是其它網(wǎng)友的補充,根據(jù)返回的錯誤信息進行調(diào)整即可。
mysql 主主復(fù)制(雙主復(fù)制)報錯Last_SQL_Errno: 1146
錯誤信息:
Last_Errno: 1146
Last_Error: Error 'Table 'test.user' doesn't exist' on query. Default database: 'test'. Query: 'insert into user values(20,'在庫')'
解決方法:
mysql> set global sql_slave_skip_counter=20;
mysql> STOP SLAVE;
mysql> START SLAVE;
問題解決相關(guān)閱讀:
基于JQuery打造無縫滾動新聞步驟詳解
aspx中的mysql操作類sqldatasource使用示例分享
基于JavaScript實現(xiàn)智能右鍵菜單
php中JSON的使用與轉(zhuǎn)換
php圖片縮放實現(xiàn)方法
CSS強制文本在一行內(nèi)顯示若有多余字符則使用省略號表示
基于JavaScript實現(xiàn)瀑布流布局
win10安裝中文補丁包后部分程序或文檔亂碼顯示怎么解決?
html5 Canvas畫圖教程(3)—canvas出現(xiàn)1像素線條模糊不清的原因
jQuery實現(xiàn)鼠標(biāo)點擊彈出漸變層的方法
div style常用屬性介紹及使用示例
JS實現(xiàn)在網(wǎng)頁中彈出一個輸入框的方法
舉例講解PHP面對對象編程的多態(tài)
win10系統(tǒng)自帶紙牌游戲有哪些技巧?
總結(jié)
以上是生活随笔為你收集整理的mysql errno : 1146_MySQL_MySQL复制出错 Last_SQL_Errno:1146的解决方法,背景:我们在做数据迁移或者 - phpStudy...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 裁剪图像周围空白区域_零基础PS纠正倾斜
- 下一篇: mysql mysqlhotcopy_M