有關(guān)mysql的一些小技巧
1. 大批量亂序數(shù)據(jù)導(dǎo)入InnoDB很慢如何解決?
InnoDB因為主鍵聚集索引的關(guān)系,如果沒有主鍵或者主鍵非序列的情況下,導(dǎo)入會越來越慢,如何快速的遷移數(shù)據(jù)到InnoDB?借助MyISAM的力量 是很靠譜的,先關(guān)閉InnoDB的Buffer Pool,把內(nèi)存空出來,建一張沒有任何索引的MyISAM表,然后只管插入吧,concurrent_insert=2,在文件末尾并發(fā)插入,速度剛剛 的,插入完成后,ALTER TABLE把索引加上,記得還有ENGINE=InnoDB,就把MyISAM轉(zhuǎn)到InnoDB了,這樣的速度遠(yuǎn)比直接往InnoDB里插亂序數(shù)據(jù)來得快。
2. 在基于ROW的雙Master復(fù)制下,如何快速大批量訂正?
在A<->B的雙Master結(jié)構(gòu)下,假設(shè)只有一臺提供服務(wù),這是我們常用的架構(gòu),需要大批量訂正數(shù)據(jù),如何做最快?用存儲過程一批批提交?這有很多的限制,有時候并不可以把一條或多條SQL拆成幾段,怎么辦呢?binlog不是很好的工具嘛?! ROW格式的binlog,Slave在應(yīng)用時是直接使用Handler API,并沒有走SQL解析,速度非???,基本上是IO操作了,那么我們可以在備庫上直接執(zhí)行訂正SQL,產(chǎn)生的ROW binlog傳到主機(jī),就會很快訂正完,基本上都比寫存儲過程快。
3. ROW格式Replication如何實現(xiàn)不帶庫名的replicate-do-db?
雖然MySQL有replicate-do-db這個參數(shù),但是在ROW格式的binlog下必須使用”db.table”的方式才能生效,USE對ROW格式是無效的?,F(xiàn)在我有一個Instance,只需要復(fù)制Master的某幾個庫,但是是ROW格式,SQL都 沒有使用db前綴,怎么辦?可以這么做,把主庫需要的庫導(dǎo)出來,不需要的庫導(dǎo)出結(jié)構(gòu)即可,在Slave導(dǎo)入這些數(shù)據(jù)及結(jié)構(gòu),配置skip-slave- errors=all,這樣Master復(fù)制過來的binlog,只要發(fā)現(xiàn)有庫有表結(jié)構(gòu),就不會報找不到表,就不會阻塞復(fù)制,但是 UPDATE/DELETE過來沒有數(shù)據(jù)也會被跳過錯誤,間接的實現(xiàn)了replicate-do-db。
4. A<–>B–>C–>D結(jié)構(gòu)切換到A<–>B, C<–>D結(jié)構(gòu)出現(xiàn)Slave_lag一直增常如何避免?
這種情況常見與一個雙Master集群分離出一套雙Master集群,例如從原集群分離一部分庫。過快的切換B–>C到C<–>D容易導(dǎo)致主備出現(xiàn)slave_lag,并且一直增長,原因在于A<–>B集群產(chǎn)生的SQL,隨同server_id帶到了C–>D這個M-S中,當(dāng)A,B產(chǎn)生的SQL在C,D還沒消化完成就CHANGE MASTER為C<–>D時,會導(dǎo)致這寫SQL在C,D之間來回傳輸,因為C,D都認(rèn)為這個SQL不是自己產(chǎn)生的,因而不銷毀,自己執(zhí)行后寫入binlog,于是Slave_Lag就一直增長。
避免的方法很簡單,部分寫切到C后,先斷開B–>C的復(fù)制,等一會,看D上已經(jīng)沒有Slave_Lag了,再CHANGE MASTER為C<–>D,這樣A,B傳過來的SQL都消化完了。
5. 表中存在很多重復(fù)數(shù)據(jù)時,如何刪除這些重復(fù)數(shù)據(jù)最快?
在需要給表中某些字段加唯一索引時,而字段中又存在需要重復(fù)清理數(shù)據(jù)的問題,不少DBA都應(yīng)該遇到過。一般在處理時總是想在數(shù)據(jù)庫中只保留一條,其他的刪除,但是這樣的SQL寫出來總是效率不高,怎么辦?其實可以轉(zhuǎn)換思路,把重復(fù)的都選出一條出來,存到一張臨時表,然后刪除原表中所有存在重復(fù)的,再把臨時表的數(shù)據(jù)庫全部插入原庫,這是比較通用并且高效的做法。
相關(guān)文章
LEFT JOIN關(guān)聯(lián)表中ON,WHERE后面跟條件的區(qū)別
本文主要介紹了LEFT JOIN關(guān)聯(lián)表中ON,WHERE后面跟條件的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01MySQL性能優(yōu)化之max_connections配置參數(shù)淺析
這篇文章主要介紹了MySQL性能優(yōu)化之max_connections配置參數(shù)淺析,本文著重講解了3種配置max_connections參數(shù)的方法,需要的朋友可以參考下2014-07-07MySQL服務(wù)器進(jìn)程CPU占用100%的解決方法
早上幫朋友一臺服務(wù)器解決了 Mysql cpu 占用 100% 的問題。稍整理了一下,將經(jīng)驗記錄在這篇文章里。2010-12-12命令行模式下備份、還原 MySQL 數(shù)據(jù)庫的語句小結(jié)
為了安全起見,需要經(jīng)常對數(shù)據(jù)庫作備份,或者還原,學(xué)會在命令行模式下備份、還原數(shù)據(jù)庫,還是很有必要2012-11-11