欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中使用ProxySql實(shí)現(xiàn)讀寫分離

 更新時(shí)間:2025年08月07日 09:48:31   作者:會(huì)飛的灰大狼  
ProxySQL是一款高性能、開源的MySQL數(shù)據(jù)庫(kù)中間件,通過安裝ProxySQL并配置主從服務(wù)器、用戶及路由規(guī)則,實(shí)現(xiàn)MySQL讀寫分離,提升負(fù)載均衡與高可用性,本文給大家介紹MySQL中使用ProxySql實(shí)現(xiàn)讀寫分離,感興趣的朋友一起看看吧

使用ProxySql實(shí)現(xiàn)MySQL的讀寫分離

前言

ProxySQL 是一款高性能、開源的 MySQL 數(shù)據(jù)庫(kù)中間件,主要作用是在應(yīng)用程序與 MySQL 數(shù)據(jù)庫(kù)之間搭建一層代理,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的負(fù)載均衡、讀寫分離、連接池管理、查詢路由、故障轉(zhuǎn)移等功能,從而提升數(shù)據(jù)庫(kù)集群的可用性、穩(wěn)定性和性能。

核心功能與作用

  1. 讀寫分離
    自動(dòng)將 SQL 查詢請(qǐng)求分發(fā)到不同的數(shù)據(jù)庫(kù)節(jié)點(diǎn):
    • 寫操作(如 INSERT、UPDATE)路由到主庫(kù)(Master)。
    • 讀操作(如 SELECT)分發(fā)到從庫(kù)(Slave),減輕主庫(kù)壓力,提高查詢效率。
      支持自定義規(guī)則(如基于 SQL 語(yǔ)句、用戶、表名等)靈活分配請(qǐng)求。
  2. 負(fù)載均衡
    對(duì)于多個(gè)從庫(kù)(或主庫(kù)集群),ProxySQL 可通過輪詢、權(quán)重分配等策略,將讀請(qǐng)求均勻分發(fā)到各節(jié)點(diǎn),避免單節(jié)點(diǎn)過載,提升集群整體吞吐量。
  3. 連接池管理
    數(shù)據(jù)庫(kù)連接的創(chuàng)建和銷毀成本較高,ProxySQL 維護(hù)一個(gè)連接池,復(fù)用已建立的連接,減少連接開銷,同時(shí)限制連接總數(shù),防止數(shù)據(jù)庫(kù)被過多連接壓垮。
  4. 故障檢測(cè)與自動(dòng)切換
    持續(xù)監(jiān)控?cái)?shù)據(jù)庫(kù)節(jié)點(diǎn)的健康狀態(tài)(如通過心跳檢測(cè)),當(dāng)主庫(kù)或從庫(kù)故障時(shí),自動(dòng)將請(qǐng)求切換到正常節(jié)點(diǎn),減少人工干預(yù),提高系統(tǒng)可用性。
  5. 查詢緩存與過濾
    緩存高頻查詢結(jié)果,減少重復(fù)計(jì)算;同時(shí)可過濾危險(xiǎn) SQL(如 DROPTRUNCATE),增強(qiáng)數(shù)據(jù)庫(kù)安全性。
  6. 動(dòng)態(tài)配置與無感知重啟
    支持在線修改配置(如路由規(guī)則、節(jié)點(diǎn)權(quán)重),無需重啟服務(wù),避免業(yè)務(wù)中斷,適合高可用場(chǎng)景。

適用場(chǎng)景

  • 中小型 MySQL 集群的讀寫分離和負(fù)載均衡。
  • 需要高可用、低延遲的在線業(yè)務(wù)(如電商、金融)。
  • 希望簡(jiǎn)化數(shù)據(jù)庫(kù)集群管理,減少開發(fā)層對(duì)數(shù)據(jù)庫(kù)架構(gòu)依賴的場(chǎng)景。

與同類工具對(duì)比

  • MySQL Router:官方工具,配置簡(jiǎn)單,但功能較少(如無連接池、高級(jí)路由)。
  • MaxScale:功能豐富,但性能略遜于 ProxySQL,配置相對(duì)復(fù)雜。
  • MyCat:支持多數(shù)據(jù)庫(kù)類型,但更側(cè)重分庫(kù)分表,MySQL 適配性不如 ProxySQL。

ProxySQL 憑借輕量、高性能、靈活的特性,成為 MySQL 中間件的主流選擇之一。

安裝配置

安裝MySQL

懶得安裝 隨便寫了個(gè)腳本

mysql.sh

下載Proxysql包

https://github.com/sysown/proxysql/releases
#我使用的是Centos7系統(tǒng) 并且架構(gòu)是x86虛擬機(jī) 可以通過uname -u 查看自己的系統(tǒng)架構(gòu)根據(jù)自己的系統(tǒng)和版本適配下載

安裝Proxysql

安裝依賴環(huán)境

yum install perl-DBD-mysql perl-DBI mysql-community-libs-compat bzip2 -y
  • ??perl-DBD-mysql?:Perl Database Driver for MySQL,是 Perl 語(yǔ)言訪問 MySQL 數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序,ProxySQL 安裝和運(yùn)行過程中可能需要通過 Perl 腳本與 MySQL 進(jìn)行交互
  • ??perl-DBI? :Database Interface(數(shù)據(jù)庫(kù)接口)模塊,為 Perl 程序提供了一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)訪問接口。ProxySQL 的部分功能可能依賴于 Perl 的 DBI 模塊來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作
  • ??mysql-community-libs-compat? :當(dāng)使用 rpm 包方式安裝 ProxySQL 時(shí),可能需要安裝mysql-community-libs-compat ,否則可能會(huì)報(bào)錯(cuò)。它提供了與 MySQL 相關(guān)的兼容庫(kù)文件,確保 ProxySQL 與 MySQL 之間的兼容性
  • 此外,系統(tǒng)中還應(yīng)確保安裝了bzip2 ,雖然它不是 ProxySQL 直接的功能依賴,但在處理一些壓縮文件等操作時(shí)可能會(huì)用到。同時(shí),也需要安裝一個(gè) MySQL 客戶端 ,方便后續(xù)連接 ProxySQL 進(jìn)行配置和測(cè)試等操作
  • PS:安裝前創(chuàng)建一個(gè)Proxysql用戶和組

安裝Proxysql

rpm -ivh proxysql-2.6.3-1-centos7.x86_64.rpm

查看是否啟動(dòng)

netstat -anput | grep proxysql
tcp        0      0 0.0.0.0:6032            0.0.0.0:*               LISTEN      7698/proxysql       
tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN      7698/proxysql       

啟動(dòng)proxysql服務(wù)并加入開機(jī)自啟

systemctl start proxysql
systemctl enable proxysql

二、連接 ProxySQL 管理界面

mysql -uadmin -padmin -h127.0.0.1 -P6032
  • 參數(shù)解釋
    • ?-uadmin:使用用戶名admin登錄
    • ?-padmin:密碼是admin?
    • ?-h127.0.0.1:連接本地服務(wù)器(ProxySQL 管理界面默認(rèn)只允許本地訪問)
    • ?-P6032:連接 ProxySQL 的管理端口(6032 是 ProxySQL 管理界面的默認(rèn)端口)
  • 作用:登錄到 ProxySQL 的管理界面,后續(xù)所有配置都在這里完成。

三、ProxySQL 管理員賬戶配置

1. 查看當(dāng)前管理員賬戶

Admin> select @@admin-admin_credentials;
  • 作用:查看 ProxySQL 當(dāng)前的管理員賬戶列表(默認(rèn)只有admin:admin)。
2. 添加新管理員賬戶
Admin> set admin-admin_credentials='admin:admin;root:root123';
  • 作用:添加一個(gè)新的管理員賬戶root,密碼root123(分號(hào)分隔多個(gè)賬戶)。
  • 用途:默認(rèn)賬戶只能本地登錄,新增賬戶可用于遠(yuǎn)程管理(如用 Navicat 連接)。

3. 生效并保存管理員賬戶配置

Admin> load admin variables to runtime;  # 讓配置立即生效(臨時(shí)生效)
Admin> save admin variables to disk;   # 保存到磁盤(永久生效,重啟不丟失)
  • 作用:ProxySQL 的配置需要先加載到內(nèi)存(runtime)才能生效,再保存到磁盤(disk)才能永久保留。

四、配置監(jiān)控賬號(hào)

1. 在 MySQL 主庫(kù)創(chuàng)建監(jiān)控用戶

CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT USAGE, REPLICATION CLIENT ON *.* TO 'monitor'@'%';
  • 作用:創(chuàng)建一個(gè)專門用于監(jiān)控的 MySQL 用戶monitor,權(quán)限限制為:
    • ?USAGE:允許登錄但無實(shí)際操作權(quán)限
    • ?REPLICATION CLIENT:允許查詢主從復(fù)制狀態(tài)(用于 ProxySQL 檢測(cè)主從是否正常)

2. 在 ProxySQL 中配置監(jiān)控用戶

UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_password';
  • 作用:告訴 ProxySQL“用monitor這個(gè)用戶去監(jiān)控后端 MySQL 服務(wù)器的健康狀態(tài)”。

五、添加 MySQL 服務(wù)器到 ProxySQL

1. 注冊(cè)主從服務(wù)器

-- 添加主服務(wù)器(寫操作專用)
INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,comment) VALUES (1,'192.168.8.100',3306,1,'Write group');

-- 添加從服務(wù)器(讀操作專用)
INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,comment) VALUES (2,'192.168.8.101',3306,1,'Read group');
  • 參數(shù)解釋
    • ?hostgroup_id:服務(wù)器組 ID(1 = 寫組,2 = 讀組,用于區(qū)分主從)
    • ?hostname:MySQL 服務(wù)器的 IP 地址
    • ?port:MySQL 端口(默認(rèn) 3306)
    • ?weight:權(quán)重(數(shù)值越大,分配的請(qǐng)求越多,默認(rèn) 1 即可)
  • 作用:告訴 ProxySQL“有這兩臺(tái) MySQL 服務(wù)器可用,1 號(hào)是主庫(kù)(寫),2 號(hào)是從庫(kù)(讀)”。

2. 生效并保存服務(wù)器配置

LOAD MYSQL SERVERS TO RUNTIME;  # 臨時(shí)生效
SAVE MYSQL SERVERS TO DISK;    # 永久保存
  • 作用:讓 ProxySQL 加載剛才添加的 MySQL 服務(wù)器信息。

六、配置數(shù)據(jù)庫(kù)訪問用戶

1. 在 MySQL 主從庫(kù)創(chuàng)建訪問用戶

-- 創(chuàng)建管理員用戶(有寫權(quán)限)
CREATE USER 'adm'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'adm'@'%';
-- 創(chuàng)建只讀用戶(只有讀權(quán)限)
CREATE USER 'read'@'%' IDENTIFIED BY '123456';
GRANT SELECT ON *.* TO 'read'@'%';
FLUSH PRIVILEGES;  # 刷新權(quán)限使配置生效
  • 作用:創(chuàng)建兩個(gè)用戶:
    • ?adm:有所有權(quán)限(用于執(zhí)行寫操作,如新增 / 修改數(shù)據(jù))
    • ?read:只有查詢權(quán)限(用于執(zhí)行讀操作,如查詢數(shù)據(jù))
  • 注意:主從庫(kù)都要?jiǎng)?chuàng)建這兩個(gè)用戶(因?yàn)?ProxySQL 可能會(huì)連接任意一臺(tái))。

2. 在 ProxySQL 中注冊(cè)用戶

INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('adm','123456',1);  -- adm用戶默認(rèn)用寫組(1)
INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('read','123456',2);  -- read用戶默認(rèn)用讀組(2)
  • 作用:告訴 ProxySQL“有這兩個(gè)用戶會(huì)通過你訪問 MySQL,adm默認(rèn)走主庫(kù),read默認(rèn)走從庫(kù)”。

3. 生效并保存用戶配置

LOAD MYSQL USERS TO RUNTIME;  # 臨時(shí)生效
SAVE MYSQL USERS TO DISK;    # 永久保存
  • 作用:讓 ProxySQL 加載用戶信息,允許這些用戶通過 ProxySQL 訪問 MySQL。

七、配置讀寫分離規(guī)則

1. 添加路由規(guī)則

-- 規(guī)則1:特殊SELECT語(yǔ)句走主庫(kù)(例如包含UPDATE的查詢)
INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply) VALUES (1,1,'^SELECT.*FROM UPDATE$',1,1);
-- 規(guī)則2:普通SELECT語(yǔ)句走從庫(kù)
INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply) VALUES (2,1,'^SELECT',2,1);
-- 規(guī)則3:SHOW語(yǔ)句走從庫(kù)
INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply) VALUES (3,1,'^SHOW',2,1);
  • 參數(shù)解釋
    • ?rule_id:規(guī)則 ID(唯一,用于區(qū)分)
    • ?active=1:?jiǎn)⒂迷撘?guī)則
    • ?match_digest:匹配 SQL 語(yǔ)句的正則表達(dá)式(^SELECT表示以 SELECT 開頭的語(yǔ)句)
    • ?destination_hostgroup:匹配后路由到的服務(wù)器組(1 = 主庫(kù),2 = 從庫(kù))
    • ?apply=1:匹配后立即應(yīng)用,不再檢查后續(xù)規(guī)則
  • 作用:定義 “哪些 SQL 語(yǔ)句走主庫(kù),哪些走從庫(kù)”,實(shí)現(xiàn)自動(dòng)路由。

2. 生效并保存規(guī)則

LOAD MYSQL QUERY RULES TO RUNTIME;  # 臨時(shí)生效
SAVE MYSQL QUERY RULES TO DISK;    # 永久保存
  • 作用:讓 ProxySQL 加載剛才設(shè)置的路由規(guī)則。

八、測(cè)試讀寫分離

1. 測(cè)試讀操作(通過 read 用戶)

mysql -uread -p123456 -h 127.0.0.1 -P6033 -e "SELECT @@hostname,@@port"
  • 參數(shù)解釋
    • ?-uread:用只讀用戶read登錄
    • ?-P6033:連接 ProxySQL 的數(shù)據(jù)庫(kù)訪問端口(6033 是 ProxySQL 對(duì)外提供數(shù)據(jù)庫(kù)服務(wù)的端口)
    • ?-e:直接執(zhí)行后面的 SQL 語(yǔ)句(查詢當(dāng)前連接的服務(wù)器主機(jī)名和端口)
  • 預(yù)期結(jié)果:返回從庫(kù)(192.168.8.101)的信息,說明讀操作走了從庫(kù)。

2. 測(cè)試寫操作(通過 adm 用戶)

mysql -uadm -p123456 -h 127.0.0.1 -P6033 -e "create database test2;"
  • 作用:創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)(寫操作),預(yù)期會(huì)路由到主庫(kù)(192.168.8.100)。

3. 查看 ProxySQL 的路由記錄

mysql -uadmin -padmin -h127.0.0.1 -P6032  # 登錄管理界面
select hostgroup,digest_text from stats_mysql_query_digest\G;  # 查看SQL語(yǔ)句的路由記錄
  • 作用:檢查 ProxySQL 是否按規(guī)則路由:
    • ?hostgroup=1:表示語(yǔ)句走了主庫(kù)
    • ?hostgroup=2:表示語(yǔ)句走了從庫(kù)

九、保存所有配置(防止丟失)

-- 服務(wù)器配置
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
-- 查詢規(guī)則配置
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
-- 用戶配置
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
-- 變量配置
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
  • 作用:ProxySQL 的配置默認(rèn)只在內(nèi)存中,重啟后會(huì)丟失。這組命令用于將所有配置永久保存到磁盤,確保服務(wù)器重啟后配置仍然有效。

總結(jié)

整個(gè)流程的核心是:

  1. 安裝 ProxySQL 并啟動(dòng)
  2. 告訴 ProxySQL“有哪些 MySQL 服務(wù)器(主從)”
  3. 告訴 ProxySQL “用什么用戶監(jiān)控這些服務(wù)器”
  4. 告訴 ProxySQL “允許哪些用戶通過你訪問 MySQL”
  5. 告訴 ProxySQL“哪些 SQL 語(yǔ)句走主庫(kù),哪些走從庫(kù)”
  6. 測(cè)試并保存配置

通過這些步驟,ProxySQL 就能自動(dòng)實(shí)現(xiàn) “寫操作走主庫(kù),讀操作走從庫(kù)” 的讀寫分離,減輕單臺(tái)數(shù)據(jù)庫(kù)的壓力。

到此這篇關(guān)于MySQL中使用ProxySql實(shí)現(xiàn)讀寫分離的文章就介紹到這了,更多相關(guān)ProxySql mysql讀寫分離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解

    DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解

    DQL(Data?Query?Language,數(shù)據(jù)查詢語(yǔ)言),查詢數(shù)據(jù)庫(kù)數(shù)據(jù),如SELECT語(yǔ)句,簡(jiǎn)單的單表查詢或多表的復(fù)雜查詢和嵌套查詢,數(shù)據(jù)庫(kù)語(yǔ)言中最核心、最重要的語(yǔ)句,使用頻率最高的語(yǔ)句
    2022-09-09
  • select?into?from和insert?into?select的區(qū)別舉例詳解

    select?into?from和insert?into?select的區(qū)別舉例詳解

    這篇文章主要介紹了SQL中的SELECT?INTO和INSERT?INTO?SELECT兩種語(yǔ)句的區(qū)別和用法,SELECT?INTO用于創(chuàng)建新表并復(fù)制數(shù)據(jù)到新表中,而INSERT?INTO?SELECT用于將數(shù)據(jù)從一個(gè)表插入到已存在的另一個(gè)表中,需要的朋友可以參考下
    2025-03-03
  • Mysql的列修改成行并顯示數(shù)據(jù)的簡(jiǎn)單實(shí)現(xiàn)

    Mysql的列修改成行并顯示數(shù)據(jù)的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了Mysql的列修改成行并顯示數(shù)據(jù)的簡(jiǎn)單實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-10-10
  • MySQL模糊查詢用法大全(正則、通配符、內(nèi)置函數(shù))

    MySQL模糊查詢用法大全(正則、通配符、內(nèi)置函數(shù))

    這篇文章主要介紹了MySQL模糊查詢用法大全(正則、通配符、內(nèi)置函數(shù)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL報(bào)錯(cuò)ERROR?2002?(HY000):?Canot?connect?to?local?MySQL?server?through?socket

    MySQL報(bào)錯(cuò)ERROR?2002?(HY000):?Canot?connect?to?local?MyS

    ERROR?2002是一個(gè)常見的錯(cuò)誤,這可能會(huì)阻礙數(shù)據(jù)庫(kù)的正常使用,本文就來介紹一下該錯(cuò)誤的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • mysql 加了 skip-name-resolve不能鏈接數(shù)據(jù)庫(kù)問題的解決方法

    mysql 加了 skip-name-resolve不能鏈接數(shù)據(jù)庫(kù)問題的解決方法

    這篇文章主要介紹了mysql 加了 skip-name-resolve不能鏈接數(shù)據(jù)庫(kù)問題的解決方法,需要的朋友可以參考下
    2016-04-04
  • MySQL 觸發(fā)器的使用及需要注意的地方

    MySQL 觸發(fā)器的使用及需要注意的地方

    這篇文章主要介紹了MySQL 觸發(fā)器的使用及需要注意的地方,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2021-01-01
  • Mysql聯(lián)合查詢UNION和UNION ALL的使用介紹

    Mysql聯(lián)合查詢UNION和UNION ALL的使用介紹

    本文詳細(xì)介紹了Mysql的聯(lián)合查詢命令UNION和UNION ALL,總結(jié)了使用語(yǔ)法和注意事項(xiàng),以及學(xué)習(xí)例子和項(xiàng)目例子,需要的朋友可以參考下
    2014-04-04
  • Mysql雙主搭建的方法步驟

    Mysql雙主搭建的方法步驟

    本文主要介紹了Mysql雙主搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • mysql中全連接full join...on...的用法說明

    mysql中全連接full join...on...的用法說明

    這篇文章主要介紹了mysql中全連接full join...on...的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論