近期討論過的一些MySQL問題

資料庫工作筆記發表於2023-12-29

來源:MySQL資料庫聯盟

討論了一些MySQL相關的問題,這裡就來總結一下,大家也可以一起在留言區討論。

1 Xtrabackup是不是一直都用的ftwrl,有沒有用到backup lock

先說答案:5.6+,是ftwrl(FLUSH TABLES WITH READ LOCK),8.0是LOCK INSTANCE FOR BACKUP

判斷這類問題,有兩個解決思路:

一個是檢視官方文件:

有下面截圖這一段:

近期討論過的一些MySQL問題


還有一個方法:

透過實驗驗證,備份過程開啟general log,看會執行哪些命令。


2 Orch切換主從拓撲之後,為什麼找不到複製使用者?

Orchestrator切換,某個從庫會報錯:


Fatal error: Invalid (empty) username when attempting to connect to the master server. Connection attempt terminated

查了Github的issues,發現也有人遇到同樣的問題


原因:

master_info_repository 沒設定成 'TABLE'

解決辦法:

master_info_repository設定成table


實際在Orch的文件中也提過:

近期討論過的一些MySQL問題

但也沒說不配置成table問題的嚴重性。

大家在使用Orch的時候,需要注意這個細節。


3 獲取慢查詢有哪些方案

方案一:ELK

Elasticsearch, Logstash, and Kibana

方案二:PMM

這個方案可以跳轉之前的一篇文章:

PMM 監控 MySQL

方案三:ClickTail+ClickHouse+Grafana

這個方案可以跳轉之前的兩篇文章:

ClickTail+CH 實現 MySQL 慢查詢實時展示

使用 Grafana 展示 ClickHouse 資料


4 線上有張表資料100多萬,700多M,但是磁碟碎片有4個T,這種能直接drop掉嗎 ?還是有什麼方式可以刪掉?

不能直接刪除,要當成4T的表處理,給資料檔案.ibd建立一個硬連結,這樣drop就很快了。

過程為:


ln table_name.ibd table_name.ibd.bak

在drop表


drop table table_name;

最後再刪除物理檔案:



for i in `seq 4096 -1 1 ` ;   do sleep 1;  truncate  -s  ${i}G  table_name.ibd.bak; done rm  -f  table_name.ibd.bak

然,如果是雲上RDS,就需要找雲廠商,研究怎麼安全的刪除,畢竟我們不能操作機器。


5 MySQL binlog裡面的時間,有些不是順序的。一般在什麼情況下發生?是因為主庫併發執行的事務原因嗎?

我做了一個這樣的實驗:

近期討論過的一些MySQL問題

最終解析之後,就出現了下圖這種情況:

近期討論過的一些MySQL問題

Binlog記錄位置靠後的,時間點還靠前。

從庫其實也一樣的。

近期討論過的一些MySQL問題

也就是併發事務,先執行SQL的,後面再提交(什麼時候提交,什麼時候記錄Binlog),可能會出現時間在前面的事務,Binlog位置在後面,看起來像亂序了。


6 keepalived+主從,如果發生了vip漂移,那老的主啟動,是不是不能同步資料了,這樣會不會導致資料不一致?

一般建議是keepalived+雙主,也就是兩套資料庫互為主備,這樣及時切換了,反向還是同步的,那原來的主還是一直同步新主資料的。

但是一般只建議用一個VIP,也就是隻在一個主上寫,另外,如果要避免主鍵衝突,建議是主從跳主鍵的形式,比如主的主鍵 1 3 5,從的主鍵 2 4 6。

當然,現在推薦使用其他兩款高可用方案:

InnoDB Cluster,可以參考之前寫的部署文件:InnoDB Cluster的部署;

Orchestrator,可以參考之前寫的部署文件:Orchestrator實現MySQL故障切換。

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70027826/viewspace-3002058/,如需轉載,請註明出處,否則將追究法律責任。

相關文章