分庫分表

分庫分表

  1. 為什么要分庫分表?
  • 超大容量問題
  • 性能問題
  1. 如何去做到
  • 垂直切分
    ①垂直分庫; 解決的是表過多的問題
    ②垂直分表; 解決單表列過多的問題
  • 水平切分
    大數據表拆成小表
  1. 常見的拆分策略
  • 垂直切分
    分片技術
  • 水平切分
    ①一致性hash
    ②范圍切分 可以按照ID
    ③日期拆分
  1. 拆分以后帶來的問題
  • 跨庫join的問題
    ①設計的時候考慮到應用層的join問題。
    ②在服務層去做調用;
    A服務里查詢到一個list
    bservice.select(list);
    ③全局表
    數據變更比較少的基于全局應用的表
    ④做字段冗余(空間換時間的做法)
    訂單表。 商家id 商家名稱
    商家名稱變更- 定時任務、任務通知
  • 唯一主鍵問題
    ①用自增id做主鍵
    ②UUID 性能比較低
    ③snowflake
    ④mongoDB
    ⑤zookeeper
    ⑥數據庫表
  • 分布式事務問題
    多個數據庫表之間保證原子性 性能問題; 互聯網公司用強一致性分布式事務比較少

Mysql的主從

  • 數據庫的版本5.7版本
  • 安裝以后文件對應的目錄
    mysql的數據文件和二進制文件: /var/lib/mysql/
    mysql的配置文件: /etc/my.cnf
    mysql的日志文件: /var/log/mysql.log
  • 152 為master
    ①創建一個用戶’repl’,并且允許其他服務器可以通過該用戶遠程訪問master,通過該用戶去讀取二進制數據,實現數據同步
    Create user repl identified by ‘repl; repl用戶必須具有REPLICATION SLAVE權限,除此之外其他權限都不需要
    GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’ IDENTIFIED BY ‘repl’;
    ②修改140 my.cnf配置文件,在[mysqld] 下添加如下配置
    log-bin=mysql-bin //啟用二進制日志文件
    server-id=130 //服務器唯一ID
    ③重啟數據庫 systemctl restart mysqld
    ④登錄到數據庫,通過show master status 查看master的狀態信息
  • 153 為slave
    ①修改142 my.cnf配置文件, 在[mysqld]下增加如下配置
    server-id=132 //服務器id,唯一
    relay-log=slave-relay-bin
    relay-log-index=slave-relay-bin.index
    read_only=1
    ②重啟數據庫: systemctl restart mysqld
    ③連接到數據庫客戶端,通過如下命令建立同步連接
    change master to master_host=’192.168.100.152’, master_port=3306,master_user=’repl’,master_password=’repl’,master_log_file=’mysql-bin.000001’,master_log_pos=0;
    master_log_filemaster_log_pos從master的show master status可以找到對應的值,不能隨便寫。
    ④執行 start slave
    ⑤show slave status\G;查看slave服務器狀態,當如下兩個線程狀態為yes,表示主從復制配置成功
    Slave_IO_Running=Yes
    Slave_SQL_Running=Yes

主從同步的原理

①master記錄二進制日志。在每個事務更新數據完成之前,master在二日志記錄這些改變。MySQL將事務串行的寫入二進制日志,即使事務中的語句都是交叉執行的。在事件寫入二進制日志完成后,master通知存儲引擎提交事務
②slave將master的binary log拷貝到它自己的中繼日志。首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接,然后開始binlog dump process。Binlog dump process從master的二進制日志中讀取事件,如果已經跟上master,它會睡眠并等待master產生新的事件。I/O線程將這些事件寫入中繼日志
③SQL線程從中繼日志讀取事件,并重放其中的事件而更新slave的數據,使其與master中的數據一致

  • binlog
    用來記錄mysql的數據更新或者潛在更新(update xxx where id=x effect row 0);
    文件內容存儲:/var/lib/mysql
    mysqlbinlog --base64-output=decode-rows -v mysql-bin.000001 //查看binlog的內容
  • binlog的格式
    ①statement : 基于sql語句的模式。update table set name =””; effect row 1000; uuid、now() other function
    ②row: 基于行模式; 存在1000條數據變更; 記錄修改以后每一條記錄變化的值
    ③mixed: 混合模式,由mysql自動判斷處理
    修改binlog_formater,通過在mysql客戶端輸入如下命令可以修改
    set global binlog_format=’row/mixed/statement’;
    或者在vim /etc/my.cnf 的[mysqld]下增加binlog_format=‘mixed’
  • 主從同步的延時問題
    ①當master庫tps比較高的時候,產生的DDL數量超過slave一個sql線程所能承受的范圍,或者slave的大型query語句產生鎖等待
    ②網絡傳輸: bin文件的傳輸延遲
    ③磁盤的讀寫耗時:文件通知更新、磁盤讀取延遲、磁盤寫入延遲
  • 解決方案
    ①在數據庫和應用層增加緩存處理,優先從緩存中讀取數據
    ②減少slave同步延遲,可以修改slave庫sync_binlog屬性;
    sync_binlog=0 文件系統來調度把binlog_cache刷新到磁盤
    sync_binlog=n
    ③增加延時監控
    Nagios做網絡監控
    mk-heartbeat
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容