MySQL 8.x配置MGR高可用+ProxySQL讀寫分離(二):ProxySQL配置MySQL代理及讀寫分離

#作者:stackofumbrella

文章目錄

  • ProxySQL簡介
  • ProxySQL架構
  • ProxySQL的安裝與配置
    • 在不同層次間移動配置

ProxySQL簡介

ProxySQL是基于MySQL的一款開源的中間件的產品,是一個靈活的MySQL代理層,可以實現讀寫分離,支持Query路由功能,支持動態指定某個SQL進行緩存,支持動態加載(無需重啟 ProxySQL 服務),故障切換和一些 SQL 的過濾功能。

具有以下優點和特性:

  • 支持動態加載配置,可以在線修改配置。
  • 支持query cache。
  • 支持對query的路由,可以針對某個語句進行分配執行實例。
  • 監控后端節點,包括:ProxySQL和后端的心跳信息,后端節點的read-only/read-write,slave和master的數據同步延遲性 (replication lag)。
    能處理千億級的數據。
  • 最基本的讀/寫分離,且方式有多種。
  • 可定制基于用戶、基于schema、基于語句的規則對SQL語句進行路由。
  • 理解MySQL協議,具有高級連接處理能力。
  • 具有數據庫防火墻功能,保護數據和流量免受惡意活動的侵害。

官方地址:https://www.proxysql.com/
Github倉庫:https://github.com/sysown/proxysql/wiki
軟件下載:https://github.com/sysown/proxysql/releases

ProxySQL架構

在這里插入圖片描述
ProxySQL 2.0.x版本以后開始支持MGR高可用,這樣結合MGR,使得MySQL主從集群具有更加完備的對外訪問能力。

ProxySQL的安裝與配置

環境準備
在這里插入圖片描述
首先需要安裝MySQL主從集群,即一主兩從集群,過程比較簡單,這里不再詳述。
ProxySQL安裝

$ sudo apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates
$ wget https://github.com/sysown/proxysql/releases/download/v2.7.3/proxysql_2.7.3-ubuntu22_amd64.deb
$ sudo dpkg -i proxysql_2.7.3-ubuntu22_amd64.deb

啟動ProxySQL

$ sudo systemctl start proxysql
$ ss -tnl

在這里插入圖片描述
6032是ProxySQL的管理端口號,6033是對外服務的端口號
連接ProxySQL

$ sudo apt install mysql-client-core-8.0

登錄proxysql,proxysql的用戶名和密碼都是默認的admin

$ mysql -uadmin -padmin -h 127.0.0.1 -P 6032
mysql> show databases;

在這里插入圖片描述
可見有五個庫:main、disk、stats、monitor和stats_history
main:內存配置數據庫,即MEMORY,表里存放后端db 實例、用戶驗證、路由規則等信息。main庫中有如下信息:
mysql> use main;
mysql> show tables;
在這里插入圖片描述
main庫下的主要表
mysql_servers:后端可以連接MySQL服務器的列表
mysql_users:配置后端數據庫的賬號和監控的賬號
mysql_query_rules:指定Query路由到后端不同服務器的規則列表
注: 表名以runtime_開頭的表示ProxySQL當前運行的配置內容,不能通過DML語句修改。只能修改對應的不以 runtime開頭的表,然后“LOAD”使其生效,“SAVE”使其存到硬盤以供下次重啟加載。
disk庫下的主要表
主要是一些持久化磁盤的配置
在這里插入圖片描述
stats庫下的主要表
主要是統計信息的匯總
在這里插入圖片描述
stats_mysql_connection_pool表
hostgroup:后端服務器所屬的主機組,單個后端服務器可以屬于多個主機組
srv_host,srv_port:mysql后端服務器正在偵聽連接的TCP端點的IP和Port
status:后端服務器的狀態。可以有ONLINE,SHUNNED,OFFLINE_SOFT,OFFLINE_HARD
ConnUsed:ProxySQL當前使用多少個連接來向后端服務器發送查詢
ConnFree:目前有多少個連接是空閑
ConnOK:成功建立了多少個連接
ConnERR:失敗的連接數
Queries:路由到此特定后端服務器的查詢數
Bytes_data_sent:發送到后端的數據量
Bytes_data_recv:從后端接收的數據量
Latency_ms:從Monitor報告的當前ping以毫秒為單位的延遲時間
monitor庫下的主要表
主要是一些監控的收集信息,比如數據庫的健康狀態等
在這里插入圖片描述
stats_history庫下的主要表
這個庫是ProxySQL收集有關其內部功能的歷史指標
在這里插入圖片描述
配置ProxySQL所需賬戶
請在MySQL的主庫執行
注意:MySQL 8.0.x用戶認證的方式需要修改為mysql_native_password,需要在MySQL的配置文件中加上這個用戶認證方式,再來創建用戶
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
default_authentication_plugin=mysql_native_password
mysql> select User,Host,plugin from mysql.user;
在這里插入圖片描述
然后執行創建用戶

#proxysql的監控賬戶
create user 'monitor'@'192.168.1.%' identified by '123456';
grant all privileges on *.* to 'monitor'@'192.168.1.%';
#proxysql的對外訪問賬戶
create user 'proxysql'@'192.168.1.%' identified by '123456';
grant all privileges on *.* to 'proxysql'@'192.168.1.%';
flush privileges;

mysql> select User,Host,plugin from mysql.user;
在這里插入圖片描述
ProxySQL的多層架構
在這里插入圖片描述
整套配置系統分為三層:頂層為RUNTIME,中間層為MEMORY,底層也就是持久層DISK和CONFIG FILE。RUNTIME :代表ProxySQL當前正在使用的配置,無法直接修改這里的配置,必須要從下一層LOAD進來。
MEMORY:MEMORY層上面連接RUNTIME層,下面連接持久層。這層可以正常操作ProxySQL配置,隨便修改,不會影響生產環境。修改一個配置一般都是在MEMORY層完成的,確認正常之后在加載達到RUNTIME和持久化的磁盤上。
DISK和CONFIG FILE:持久化配置信息,重啟后內存中的配置信息會丟失,所需要將配置信息保留在磁盤中。重啟時,可以從磁盤快速加載回來。

在不同層次間移動配置

重新配置MySQL用戶
為了將配置持久化到磁盤或者應用到runtime,在管理接口下有一系列管理命令來實現它們。 要重新配置MySQL用戶,可執行下面的其中一個命令:

  1. LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME
    將內存數據庫中的配置加載到runtime數據結構,反之亦然。
  2. SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME
    將MySQL用戶從runtime持久化到內存數據庫。
  3. LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK
    從磁盤數據庫中加載MySQL用戶到內存數據庫中。
  4. SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK
    將內存數據庫中的MySQL用戶持久化到磁盤數據庫中。
  5. LOAD MYSQL USERS FROM CONFIG
    從配置文件中加載MySQL用戶到內存數據庫中。

處理MySQL Server

  1. LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME
    將MySQL server從內存數據庫中加載到runtime。
  2. SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME
    將MySQL server從runtime持久化到內存數據庫中。
  3. LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK
    從磁盤數據庫中加載MySQL server到內存數據庫。
  4. SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK
    從內存數據庫中將MySQL server持久化到磁盤數據庫中。
  5. LOAD MYSQL SERVERS FROM CONFIG
    從配置文件中加載MySQL server到內存數據庫中

處理MySQL的查詢規則

  1. LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME
    將MySQL query rules從內存數據庫加載到runtime數據結構。
  2. SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME
    將MySQL query rules從runtime數據結構中持久化到內存數據庫。
  3. LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK
    從磁盤數據庫中加載MySQL query rules到內存數據庫中。
  4. SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK
    將MySQL query rules從內存數據庫中持久化到磁盤數據庫中。
  5. LOAD MYSQL QUERY RULES FROM CONFIG
    從配置文件中加載MySQL query rules到內存數據庫中。

處理MySQL變量

  1. LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME
    將MySQL variables從內存數據庫加載到runtime數據結構。
  2. SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME
    將MySQL variables從runtime數據結構中持久化到內存中。
  3. LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK
    從磁盤數據庫中加載MySQL variables到內存數據庫中。
  4. SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK
    將MySQL variables從內存數據庫中持久化到磁盤數據庫中。
  5. LOAD MYSQL VARIABLES FROM CONFIG
    從配置文件中加載MySQL variables到內存數據庫中。

處理管理變量

  1. LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME
    將admin variables從內存數據庫加載到runtime數據結構。
  2. SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME
    將admin variables從runtime持久化到內存數據庫中。
  3. LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK
    從磁盤數據庫中加載admin variables到內存數據庫中。
  4. SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK
    將admin variables從內存數據庫中持久化到磁盤數據庫。
  5. LOAD ADMIN VARIABLES FROM CONFIG
    從配置文件中加載admin variables到內存數據庫中。

說明
修改配置的步驟一般是在MEMORY層進行修改,然后保存到RUNTIME和DISK
管理配置
disk是sqlite3數據庫,默認位置是$DATADIR/proxysql.db( /var/lib/proxysql/proxysql.db),config file是一個傳統配置文件一般不需要更改,在內存中動態更改配置,如果重啟,沒進行持久化(save) 則會丟失。
三者之間的關系

proxysql啟動時,首先去找/etc/proxysql.cnf找到它的datadir,如果datadir下有proxysql.db就加載proxysql.db的配置,如果啟動proxysql時帶有–init標志,會用/etc/proxsql.cnf的配置,把Runtime,disk全部初始化一下,在調用是調用–reload 會把/etc/proxysql.cnf 和disk 中配置進行合并。如果沖突需要用戶干預。disk會覆蓋config file。

傳統配置文件默認路徑為/etc/proxysql.cnf,也可以在二進制程序proxysql上使用-c或–config來手動指定配置文件。默認情況下,幾乎不需要手動去配置proxysql.cnf。記住,只要不是加載到runtime,修改的配置就不會生效。
只有加載到runtime狀態時才會去做最后的有效性驗證。在保存到內存數據庫或持久化到磁盤上時,都不會發生任何警告或錯誤。當加載到runtime時,如果出現錯誤,將恢復為之前保存得狀態,這時可以去檢查錯誤日志。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85958.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于 Python Flask 的 B/S 架構項目的軟件設計思路

文章目錄 基于 Python Flask 的 B/S 架構項目的軟件設計思路1. 引言2. B/S架構概述2.1 什么是B/S架構2.2 B/S架構的組成層次2.3 B/S vs C/S架構對比2.4 現代B/S架構的發展趨勢 3. Flask在B/S架構中的定位3.1 Flask作為B/S架構的后端框架3.2 Flask的架構優勢3.3 Flask在不同B/S架…

AntV F2入門教程

以下教程將系統地介紹 AntV?F2(移動端可視化引擎)的核心 組件 API,包含安裝與引入、畫布與圖表、數據映射、幾何標記、坐標軸、圖例、提示、標注和滾動條等,每個 API 都附帶完整示例代碼,幫助你快速掌握 F2 用法。 一…

退休時醫療保險補繳的基數影響什么

退休時醫療保險的補繳基數主要影響補繳金額、醫保個人賬戶劃入待遇、終身醫保待遇的享受條件等關鍵方面。以下是具體分析: 1. 影響補繳金額的多少 補繳基數通常以退休時上年度全省/市職工月平均工資或本人退休前繳費基數為基準(各地政策不同&#xff09…

conda導出環境文件requirements.txt

conda導出的幾種方式 方式一:使用pip freeze(推薦) 如果你主要使用 pip 安裝包,且環境中的包都兼容 PyPI,可以直接用 pip 導出: conda activate your_env_name # 激活環境(若未激活&#xf…

華為云 Flexus+DeepSeek 征文|增值稅發票智能提取小工具:基于大模型的自動化信息解析實踐

華為云 FlexusDeepSeek 征文|增值稅發票智能提取小工具:基于大模型的自動化信息解析實踐 前言背景 企業財務處理中,增值稅發票信息手動提取存在效率低、易出錯等痛點,華為云 Flexus 彈性算力聯合 DeepSeek 大模型,通過…

亞馬遜選品 家具或藝術?指紋技術重構兩者

58%毛利!生物識別首飾盒代理 奢侈品零售的隱藏金礦:安防產品的毛利是普通家居的3倍! 核心數據 零售價 4,900 | 代理價 1,990 → 毛利58% 零庫存風險:90天寄售周期 72小時售罄:貝弗利山莊快閃店賣出47臺 首批10家特權…

面試150 加油站

思路 此題,我們從貪心算法的角度進行思考。通過計算凈消耗,如果總的凈消耗小于0,說明無論如何都不能環路行駛一周。我們通過定義一個start起點,通過遍歷數組計算凈消耗,如果凈消耗小于0,重新置0&#xff0…

2025年滲透測試面試題總結-滲透測試工程師(題目+回答)

安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 滲透測試工程師 1. 自我介紹 2. 印象深刻的滲透案例:電商平臺供應鏈攻擊 3. 滲透測試標準化流…

Vulkan 學習筆記15—Mipmap 與多重采樣

一、Mipmap 生成總結 一、Mipmap 基礎概念 定義:Mipmap 是圖像預先計算的縮小版本,每個層級寬高為前一層的一半,用作細節級別(LOD)。作用: 遠離相機的對象使用較小層級采樣,提升渲染速度。避免…

HarmonyOS隱私保護全攻略:從入門到精通

📱 HarmonyOS隱私保護全攻略:從入門到精通 🛡? 大家好呀!今天咱們來聊聊移動互聯網時代最讓人頭疼的問題之一 —— 隱私保護!隨著HarmonyOS生態越來越豐富,這個問題也變得格外重要啦!? &…

《使用IDEA插件部署Spring Boot項目到Docker》

準備工作 確保已安裝Docker并已啟動/本地也需要安裝Docker IDEA中已安裝Docker插件(通常已預裝) 項目是基于Spring Boot的Maven或Gradle項目 1. 配置Docker連接 打開IDEA設置(File > Settings)導航到Build, Execution, Deployment > Docker點擊…

植物神經小知識

在消化系統方面,患者可能長期飽受胃痛、胃脹、食欲不振、惡心嘔吐、腹瀉或便秘交替的折磨。吃任何食物都味同嚼蠟,體重也會在短時間內大幅波動。在心血管系統,持續性的心悸、胸悶、胸痛讓人仿佛時刻處于 “心臟病發作” 的恐懼之中&#xff0…

mysql replace into學習

drop table rm_ic.test_replace; create table rm_ic.test_replace(id int(11) auto_increment primary key,name varchar(100) ,uid varchar(100) comment 身份證 unique key ) ; insert into rm_ic.test_replace values(1,張三,111),(2,李四,222),(3,王五,333),(4,趙六,444);…

ProtoBuf:通訊錄4.0實現 序列化能?對?驗證

🌈 個人主頁:Zfox_ 🔥 系列專欄:ProtoBuf 🔥 ProtoBuf:通訊錄4.0實現 Protobuf還常?于通訊協議、服務端數據交換場景。那么在這個?例中,我們將實現?個?絡版本的通訊錄,模擬實現…

界面控件DevExpress WPF v24.2新版亮點:電子表格組件全新升級

DevExpress WPF擁有120個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 DevExpress WPF控件近…

EcoVadis提升評估得分的策略,EcoVadis常見挑戰與解決方案

EcoVadis評估概述 EcoVadis是全球領先的企業社會責任(CSR)評級平臺,為全球供應鏈提供可持續性評估服務。該評估體系通過對環境、勞工與人權、商業道德和可持續采購四大主題的全面評估,幫助企業衡量和改進其CSR表現。 評估核心內容 EcoVadis評估涵蓋以…

深入理解指針(五)

1. 回調函數是什么? 2. qsort使用舉例 3. qsort函數的模擬實現 1. 回調函數是什么? 回調函數就是?個通過函數指針調用的函數。 如果你把函數的指針(地址)作為參數傳遞給另?個函數,當這個指針被用來調用其所指向的…

Docker 日志

Docker 日志是排查容器故障、監控運行狀態的重要工具。下面從 日志查看命令、詳解字段、日志驅動、最佳實踐 四個方面給你詳細解析。 一、最常用日志命令 1. 查看容器日志&#xff08;默認 stdout、stderr&#xff09; docker logs <container_name|container_id>2. 實…

SAP生產環境修改程序

1. 關鍵的兩個標準函數 TRINT_CORR_INSERT TRINT_CORR_CHECK 2. 自定義SAP生產環境修改程序 *data:begin of itab occurs 0, * lines(150), * end of itab. DATA itab TYPE TABLE OF string. PARAMETERS:program LIKE rs38m-programm. READ REPORT program INT…

構建高性能網絡服務:從Reactor模式到現代服務器架構設計

在當今高并發、低延遲的應用場景下&#xff0c;如何設計高效穩定的網絡服務成為后端開發的核心挑戰。本文將深入探討網絡服務的演進路徑&#xff0c;結合Reactor模式、one thread one loop思想等關鍵技術&#xff0c;揭示高性能服務器架構的設計精髓。 一、網絡通信的核心問題與…