原创 沒想到,JDBC 驅動會偷偷修改 sql_mode 的會話值

最近碰到一個 case,值得分享一下。 現象就是一個 update 操作,在 mysql 客戶端中執行提示 warning,但在 java 程序中執行卻又報錯。 問題重現 mysql> create table test.t1(id int

原创 從源碼分析 MySQL 身份驗證插件的實現細節

最近在分析ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)這個報錯的常見原因。 在分析的過程中,不可避免會涉及到 MySQ

原创 什麼是 MySQL JDBC 連接池中最高效的連接檢測語句?

在回答這個問題之前,首先我們看看 MySQL 中有哪些常用的 JDBC 連接池: c3p0 DBCP Druid Tomcat JDBC Pool HikariCP 這些連接池中,c3p0 是一個老牌的連接池,很多流行框架,在其老版本中

原创 如何將 performance_schema 中的 TIMER 字段轉換爲日期時間

問題 最近有好幾個朋友問,如何將 performance_schema.events_statements_xxx 中的 TIMER 字段(主要是TIMER_START和TIMER_END)轉換爲日期時間。 因爲 TIMER 字段的單位是皮

原创 從源碼分析 Redis 異步刪除各個參數的具體作用

以前對異步刪除幾個參數的作用比較模糊,包括網上的很多資料都是一筆帶過,語焉不詳。 所以這次從源碼(基於 Redis 7.0.5)的角度來深入分析下這幾個參數的具體作用: lazyfree-lazy-user-del lazyfree-la

原创 MySQL 主從延遲的常見原因及解決方法

承蒙大家的支持,剛上市的《MySQL實戰》已經躍居京東自營數據庫圖書熱賣榜第 1 名,收到的反饋也普遍不錯。對該書感興趣的童鞋可通過右邊的鏈接購買。目前,京東自營有活動,只需 5 折。 主從延遲作爲 MySQL 的痛點已經存在很多年了,以至

原创 MySQL 並行複製方案演進歷史及原理分析

預告: 《MySQL實戰》即將出版,敬請關注! 有過線上 MySQL 維護經驗的童鞋都知道,主從延遲往往是一個讓人頭疼不已的問題。 不僅僅是其造成的潛在問題比較嚴重,而且主從延遲原因的定位尤其考量 DBA 的綜合能力:既要熟悉複製的內部原理

原创 MySQL 性能壓測工具-sysbench,從入門到自定義測試項

sysbench是一個開源的、基於LuaJIT(LuaJIT 是 Lua 的即時編譯器,可將代碼直接翻譯成機器碼,性能比原生 lua 要高) 的、可自定義腳本的多線程基準測試工具,也是目前用得最多的 MySQL 性能壓測工具。 基於 sys

原创 基於案例分析 MySQL Group Replication 的故障檢測流程

故障檢測(Failure Detection)是 Group Replication 的一個核心功能模塊,通過它可以及時識別集羣中的故障節點,並將故障節點從集羣中剔除掉。如果不將故障節點及時剔除的話,一方面會影響集羣的性能,另一方面還會阻止

原创 從源碼分析 MGR 的流控機制

Group Replication 是一種 Shared-Nothing 的架構,每個節點都會保留一份數據。 雖然支持多點寫入,但實際上系統的吞吐量是由處理能力最弱的那個節點決定的。 如果各個節點的處理能力參差不齊,那處理能力慢的節點就會出

原创 從源碼分析 MGR 的新主選舉算法

MGR 的新主選舉算法,在節點版本一致的情況下,其實也挺簡單的。 首先比較權重,權重越高,選爲新主的優先級越高。 如果權重一致,則會進一步比較節點的 server_uuid。server_uuid 越小,選爲新主的優先級越高。 所以,在節點

原创 XtraBackup 搭建從庫的一般步驟及 XtraBackup 8.0 的注意事項

搭建從庫,本質上需要的只是一個一致性備份集及這個備份集對應的位置點信息。之前介紹的幾個備份工具( MySQL中如何選擇合適的備份策略和備份工具 )均可滿足。 這裏,我們重點看看如何基於 XtraBackup 搭建從庫。 整個過程其實比較簡單

原创 不可不知的 MySQL 升級利器及 5.7 升級到 8.0 的注意事項

數據庫升級,是一項讓人喜憂參半的工程。喜的是,通過升級,可以享受新版本帶來的新特性及性能提升。憂的是,新版本可能與老的版本不兼容,不兼容主要體現在以下三方面: 語法不兼容。 語義不兼容。同一個SQL,在新老版本執行結果不一致。 新版本的查

原创 一文說透 MySQL JSON 數據類型(收藏)

JSON 數據類型是 MySQL 5.7.8 開始支持的。在此之前,只能通過字符類型(CHAR,VARCHAR 或 TEXT )來保存 JSON 文檔。 相對字符類型,原生的 JSON 類型具有以下優勢: 在插入時能自動校驗文檔是否滿足

原创 使用 LOAD DATA LOCAL INFILE,sysbench 導數速度提升30%

最近給 sysbench 提了一個 feature(https://github.com/akopytov/sysbench/pull/450),支持通過 LOAD DATA LOCAL INFILE 命令導入壓測數據。 下面我們來具體看看