學習記錄 MySQL實戰45講 27 29

2022-06-28 12:39:13 字數 1277 閱讀 3181

一主多從,一般用於讀寫分離,主庫負責所有的寫入和一部分讀,其他的讀請求則由從庫分擔,a 和 a』互為主備

主備切換

基於位點的主備切換,從庫需要change master到主庫並提供對應的檔名和日誌偏移量,等待新主庫 a』把中轉日誌(relay log)全部同步完成;在 a』上執行 show master status 命令,得到當前 a』上最新的 file 和 position;取原主庫 a 故障的時刻 t;用 mysqlbinlog 工具解析 a』的 file,得到 t 時刻的位點,

mysqlbinlog file

--stop-datetime=t --start-datetime=t

基於 gtid 的主備切換

gtid 的全稱是 global transaction identifier,也就是全域性事務 id,是乙個事務在提交的時候生成的,是這個事務的唯一標識,在 mysql 裡面我們說 transaction_id 就是指事務 id,事務 id 是在事務執行過程中分配的,如果這個事務回滾了,事務 id 也會遞增,而 gno 是在事務提交的時候才會分配

讀寫分離的主要目標就是分攤主庫的壓力,可能導致資料不一致:

客戶端(client)主動做負載均衡,這種模式下一般會把資料庫的連線資訊放在客戶端的連線層。也就是說,由客戶端來選擇後端資料庫進行查詢

中間**層 proxy,客戶端只連線 proxy, 由 proxy 根據請求型別和上下文決定請求的分發路由

強制走主庫方案;sleep 方案;判斷主備無延遲方案;配合 semi-sync 方案(事務提交的時候,主庫把 binlog 發給從庫;從庫收到 binlog 以後,發回給主庫乙個 ack,表示收到了;主庫收到這個 ack 以後,才能給客戶端返回「事務完成」的確認,在一主多從場景中,主庫只要等到乙個從庫的 ack,就開始給客戶端返回確認);等主庫位點方案;等 gtid 方案。

select 1 成功返回,只能說明這個庫的程序還在,並不能說明主庫沒問題

innodb_thread_concurrency 引數的目的是,控制 innodb 的併發執行緒上限。也就是說,一旦併發執行緒數達到這個值,innodb 在接收到新請求的時候,就會進入等待狀態,直到有執行緒退出

show processlist 的結果裡,看到的幾千個連線,指的就是併發連線(記憶體消耗)。而「當前正在執行」的語句,才是我們所說的併發查詢(消耗cpu),鎖等待不佔cpu,所以不算在併發執行緒的計數裡

查表判斷/更新判斷/內部統計

學習記錄 MySQL實戰45講 16 20

extra 這個欄位中的 using filesort 表示的就是需要排序,mysql 會給每個執行緒分配一塊記憶體用於排序,稱為 sort buffer select city,name,age from t where city 杭州 order by name limit 1000 從普通索引...

學習記錄 MySQL實戰45講 31 33

傳統的高可用架構是不能預防誤刪資料的,因為主庫的乙個 drop table 命令,會通過 binlog 傳給所有從庫和級聯從庫,進而導致整個集群的例項都會執行這個命令 a.誤刪行 flashback 工具通過閃回把資料恢復回來 修改 binlog 的內容,拿回原庫重放,insert delete,u...

實戰mysql45講 MySQL實戰45講

作者簡介 林曉斌,網名 丁奇 前阿里資深技術專家,曾負責阿里雲rds核心開發團隊和運維團隊,並推動了alisql分支開源。作為活躍的mysql社群貢獻者,丁奇專注於資料儲存系統 mysql原始碼研究和改進 mysql效能優化和功能改進,熱衷於解決mysql疑難問題。課程亮點 你將獲得 前阿里資深技術...