MYSQL分庫分表和不停機更改表結構

2022-09-06 05:45:07 字數 950 閱讀 9470

在mysql分庫分表中我們一般是基於資料量比較大的時間對mysql資料庫一種優化的做法,下面我簡單的介紹一下mysql分表與分庫的簡單做法。

1、分庫分表

很明顯,乙個主表(也就是很重要的表,例如使用者表)無限制的增長勢必嚴重影響效能,分庫與分表是乙個很不錯的解決途徑,也就是效能優化途徑,現在的案例是我們有乙個1000多萬條記錄的使用者表members,查詢起來非常之慢,同事的做法是將其雜湊到100個表中,分別從members0到members99,然後根據mid分發記錄到這些表中,牛逼的**大概是這樣子:

**如下 複製**

<?php

for($i=0;$i< 100; $i++ ) like db1.members

";echo "insert into members select * from members where mid%100=";}

?>

2、不停機修改mysql表結構

同樣還是members表,前期設計的表結構不盡合理,隨著資料庫不斷執行,其冗餘資料也是增長巨大,同事使用了下面的方法來處理:

先建立乙個臨時表:

**如下 複製**

/*建立臨時表*/

create table members_tmp like members

然後修改members_tmp的表結構為新結構,接著使用上面那個for迴圈來匯出資料,因為1000萬的資料一次性匯出是不對的,mid是主鍵,乙個區間乙個區間的導,基本是一次匯出5萬條吧,這裡略去了

接著重新命名將新錶替換上去:

**如下 複製**

/*這是個頗為經典的語句哈*/

rename table members to members_bak,members_tmp to members;

另外還講到了mysql中float欄位型別的時候出現的詭異現象,就是在pma中看到的數字根本不能作為條件來查詢.感謝zj同學的新鮮分享。

43 如何把系統不停機遷移到分庫分表的?

1 面試題 現在有乙個未分庫分表的系統,未來要分庫分表,如何設計才可以讓系統從未分庫分表動態切換到分庫分表上?2 面試官心裡分析 你看看,你現在已經明白為啥要分庫分表了,你也知道常用的分庫分表中介軟體了,你也設計好你們如何分庫分表的方案了 水平拆分 垂直拆分 分表 那問題來了,你接下來該怎麼把你那個...

面試官 如何做到不停機分庫分表遷移?

類似訂單表,使用者表這種未來規模上億甚至上十億百億的海量資料表,在專案初期為了快速上線,一般只是單錶設計,不需要考慮分庫分表。隨著業務的發展,單錶容量超過千萬甚至達到億級別以上,這時候就需要考慮分庫分表這個問題了,而不停機分庫分表遷移,這應該是分庫分表最基本的需求,畢竟網際網路專案不可能掛個廣告牌 ...

mysql分表分庫實現 MySql分表分庫思路

一.資料庫瓶頸 1.1io瓶頸 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫快取放不下,每次查詢時會產生大量的io 分庫和垂直分表 第二種 網路io瓶頸,請求的資料太多,網路頻寬不夠 分庫 1.2cpu瓶頸 第一種 sql問題,如sql中包含join,group by,order by,非索引字段條...