提取碼:5j7t 下載後,用Vmware workstation打開,即可以使用。
MySQL Proxy處於客戶端應用程序和MySQL服務器之間,通過截斷、改變並轉發客戶端和後端數據庫之間的通信來實現其功能。代理服務器是和TCP/IP協議打交道,而要理解MySQL Proxy的工作機制,同樣要清楚MySQL客戶端和服務器之間的通信協議,MySQL Protocol 包括認證和查詢兩個基本過程:.................................認證過程包括:1)客戶端向服務器發起連接請求2)服務器向客戶端發送握手信息3)客戶端向服務器發送認證請求4)服務器向客戶端發送認證結果................................如果認證通過,則進入查詢過程:1)客戶端向服務器發起查詢請求2)服務器向客戶端返回查詢結果當然,這只是一個粗略的描述,每個過程中發送的包都是有固定格式的。MySQL Proxy要做的,就是介入協議的各個過程。首先MySQL Proxy以服務器的身份接受客戶端請求,根據配置對這些請求進行分析處理,然後以客戶端的身份轉發給相應的後端數據庫服務器,再接受服務器的信息,返回給客戶端。所以MySQL Proxy需要同時實現客戶端和服務器的協議。由於要對客戶端發送過來的SQL語句進行分析,還需要包含一個SQL解析器。可以說MySQL Proxy相當於一個輕量級的MySQL了,實際上,MySQL Proxy的admin server是可以接受SQL來查詢狀態信息的。MySQL Proxy通過lua 腳本來控制連接轉發的機制。主要的函數都是配合MySQL Protocol各個過程的,這一點從函數名上就能看出來:connect_server()read_handshake()read_auth()read_auth_result()read_query()read_query_result()至於為什麼採用lua 腳本語言,大概是因為MySQL Proxy中採用了wormhole 存儲引擎 的關係吧,這個蟲洞存儲引擎很有意思,數據的存儲格式就是一段lua腳本。ProxySQL配置系統分為三層的目的:
1) 自動更新;
2) 儘可能的不重啟proxysql就可以修改配置;
3) 方便回滾錯誤配置;
簡單說就是配置proxysql分為三個級別,RUNTIME是即時生效的,MEMORY是保存在內存中但並不立即生效的,DISK|CONFIG FILE是持久化或寫在配置文件中的。
這三個級別的配置文件互不干擾,在某個層級修改了配置文件,想要加載或保存到另一個層級,需要額外的LOAD或SAVE操作:”LOAD xx_config FROM xx_level | LOAD xx_config TO xx_level | SAVE xx_config TO xx_level | SAVE xx_config FROM xx_level”,達到加載配置或者持久化配置的目的。這三層中每層的功能與含義如下:
– RUNTIME層
代表的是ProxySQL當前生效的配置,包括 global_variables, mysql_servers, mysql_users, mysql_query_rules。無法直接修改這裡的配置,必須要從下一層load進來。該層級的配置時在proxysql管理庫(sqlite)的main庫中以runtime_開頭的表,這些表的數據庫無法直接修改,只能從其他層級加載;該層代表的是ProxySQL當前生效的正在使用的配置,包括global_variables, mysql_servers, mysql_users, mysql_query_rules表。無法直接修改這裡的配置,必須要從下一層load進來。也就是說RUNTIME這個頂級層,是proxysql運行過程中實際使用的那一份配置,這一份配置會直接影響到生產環境的,所以要將配置加載進RUNTIME層時需要三思而行。本博主配置好的Centos7 安裝ProxySQL和Mysql57實現讀寫分離集群環境(四節點)虛擬機下載,鏈接:https://pan.baidu.com/s/1zhgNSW-VC1sPeIq4UfsOhw
提取碼:5j7t 下載後,用Vmware workstation打開,即可以使用。
– MEMORY層
是平時在mysql命令行修改的 main 裡頭配置,可以認為是SQLite數據庫在內存的鏡像。該層級的配置在main庫中以mysql_開頭的表以及global_variables表,這些表的數據可以直接修改;用戶可以通過MySQL客戶端連接到此接口(admin接口),然後可以在mysql命令行查詢不同的表和數據庫,並修改各種配置,可以認為是SQLite數據庫在內存的鏡像。也就是說MEMORY這個中間層,上面接着生產環境層RUNTIME,下面接着持久化層DISK和CONFIG FILE。MEMORY層是我們修改proxysql的唯一正常入口。一般來說在修改一個配置時,首先修改Memory層,確認無誤後再接入RUNTIME層,最後持久化到DISK和CONFIG FILE層。也就是說memeory層裏面的配置隨便改,不影響生產,也不影響磁盤中保存的數據。通過admin接口可以修改mysql_servers、mysql_users、mysql_query_rules、global_variables等表的數據。
– DISK|CONFIG FILR層
持久存儲的那份配置,一般在$(DATADIR)/proxysql.db,在重啟的時候會從硬盤裡加載。 /etc/proxysql.cnf文件只在第一次初始化的時候用到,完了後,如果要修改監聽端口,還是需要在管理命令行里修改,再 save 到硬盤。該層級的配置在磁盤上的sqlite庫或配置文件里。DISK/CONFIG FILE層表示持久存儲的那份配置,持久層對應的磁盤文件是$(DATADIR)/proxysql.db,在重啟ProxySQL的時候,會從proxysql.db文件中加載信息。而 /etc/proxysql.cnf文件只在第一次初始化的時候使用,之後如果要修改配置,就需要在管理端口的SQL命令行里進行修改,然後再save到硬盤。 也就是說DISK和CONFIG FILE這一層是持久化層,我們做的任何配置更改,如果不持久化下來,重啟後,配置都將丟失。
需要注意
1) ProxySQL每一個配置項在三層中都存在,但是這三層是互相獨立的,也就是說proxysql可以同時擁有三份配置,每層都是獨立的,可能三份配置都不一樣,也可能三份都一樣。
2) RUNTIME層代表 ProxySQL 當前生效的正在使用的配置,無法直接修改這裡的配置,必須要從下一層 “load” 進來。
3) MEMORY這一層上面連接 RUNTIME 層,下面連接持久化層。在這層可以正常操作 ProxySQL 配置,隨便修改,不會影響生產環境。修改一個配置一般都是先在 MEMORY 層完成,然後確認正常之後再加載到 RUNTIME 和持久化到磁盤上。
4) DISK 和 CONFIG FILE層持久化配置信息,重啟後內存中的配置信息會丟失,所以需要將配置信息保留在磁盤中。重啟時,可以從磁盤快速加載回來。
ProxySQL配置文件的修改流程一般是:
– 啟動時:先修改必要的CONFIG FILE配置,比如管理端口,然後啟動;
– 其他配置:修改MEMORY中的表,然後加載到RUNTIME並持久化。
ProxySQL具有一個複雜但易於使用的配置系統,可以滿足以下需求:
– 允許輕鬆動態更新配置(這是為了讓ProxySQL用戶可以在需要零宕機時間配置的大型基礎架構中使用它)。與MySQL兼容的管理界面可用於此目的。
– 允許儘可能多的配置項目動態修改,而不需要重新啟動ProxySQL進程
– 可以毫不費力地回滾無效配置
– 這是通過多級配置系統實現的,其中設置從運行時移到內存,並根據需要持久保存到磁盤。
一般,修改的配置都是在memory層。可以load到runtime,使配置在不用重啟proxysql的情況下也可以生效,也可以save到disk,將對配置的修改持久化!
Mysql Proxy的原理圖

順便貼下Mysql Proxy的工作拓撲圖

本博主配置好的Centos7 安裝ProxySQL和Mysql57實現讀寫分離集群環境(四節點)虛擬機下載,鏈接:https://pan.baidu.com/s/1zhgNSW-VC1sPeIq4UfsOhw
提取碼:5j7t 下載後,用Vmware workstation打開,即可以使用。
以下文章點擊率最高
Loading…