青蛙學Linux—MySQL中間件ProxySQL

ProxySQL是一款高性能和高可用的MySQL中間件,Percona也推薦使用ProxySQL。它有如下優勢:html

  • 幾乎全部的配置都可在線更改(其配置數據基於SQLite存儲),無需重啓proxysql
  • 強大的規則路由引擎,支持讀寫分離、查詢重寫、sql流量鏡像
  • 詳細的狀態統計,至關於有了統一的查看sql性能和sql語句統計的入口
  • 自動重連和從新執行機制,若一個請求在連接或執行過程當中意外中斷,proxysql會根據其內部機制從新執行該操做
  • query cache功能:比mysql自帶QC更靈活,可多維度控制哪類語句能夠緩存
  • 支持鏈接池(connection pool)
  • 支持分庫、分表
  • 支持負載均衡
  • 自動下線後端DB,根據延遲超過閥值、ping 延遲超過閥值、網絡不通或宕機都會自動下線節點

ProxySQL的官方網站:https://proxysql.com/mysql

一、安裝ProxySQL

ProxySQL能夠從官方提供的GitHub地址下載,也能夠在Percona官網上下載。官方提供了源碼、RPM包和DEB包的下載。sql

這裏咱們經過RPM包進行安裝,下載最新版本2.0.1。shell

經過YUM安裝依賴包:數據庫

[root@localhost apps]# yum install perl-DBD-mysql

安裝ProxySQL:後端

[root@localhost apps]# rpm -ivh proxysql-2.0.1-1-centos7.x86_64.rpm

二、ProxySQL目錄結構

經過RPM包安裝的ProxySQL,其數據存儲在/var/lib/proxysql目錄下,靜態配置文件爲/etc/proxysql.cnf,啓動腳本爲/etc/init.d/proxysqlcentos

數據存儲目錄/var/lib/proxysql在安裝完成後是不存在的,只有在ProxySQL啓動後纔會創建,在該目錄下有如下三個文件重要文件:緩存

  • proxysql.db:SQLite數據文件,ProxySQL的配置如帳號、密碼、路由等信息存儲在該文件中
  • proxysql.log:ProxySQL的日誌文件
  • proxysql.pid:ProxySQL的PID文件

ProxySQL的靜態配置文件/etc/proxysql.cnf僅用於配置一些啓動選項、SQLite數據目錄等。ProxySQL只在第一次啓動時讀取該配置文件進行初始化,之後只讀取proxysql.db。網絡

三、ProxySQL的端口

ProxySQL在啓動後,會啓動一個管理端口和一個客戶端端口。默認的管理端口爲6032,帳號密碼均爲admin,供管理ProxySQL使用,僅容許本地登陸;默認客戶端端口爲6033,提供對後端DB的訪問,帳號密碼經過管理端設置。app

四、ProxySQL服務管理與鏈接ProxySQL管理端

使用如下命令能夠啓動|中止|重啓動ProxySQL:

/etc/init.d/proxysql start|stop|restart

鏈接ProxySQL可使用MySQL提供的鏈接工具mysql,執行如下命令:

[root@localhost bin]# ./mysql -h 127.0.0.1 -P 6032 -u admin -p

輸入密碼後即進入ProxySQL的交互式命令行界面:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

五、ProxySQL的庫表功能介紹

5.一、ProxySQL中的數據庫

登陸ProxySQL管理端後,執行show databases;能夠看到ProxySQL中有如下幾個數據庫:

+-----+---------------+-------------------------------------+
| seq | name          | file                                |
+-----+---------------+-------------------------------------+
| 0   | main          |                                     |
| 2   | disk          | /var/lib/proxysql/proxysql.db       |
| 3   | stats         |                                     |
| 4   | monitor       |                                     |
| 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
  • main:內存配置數據庫,表裏存放後端DB實例、用戶驗證、路由規則等信息。表名以runtime_開頭的表示當前運行的配置,不能經過dml語句修改,只能修改對應的不以rumtime_開頭的表,而後load使其生效,save使其保存到硬盤
  • disk:持久化到硬盤的配置,對應ProxySQL讀取的SQLite數據文件/var/lib/proxysql/proxysql.db
  • stats:ProxySQL在運行時抓取的統計信息,包括後端命令執行的次數、流量、processlist、查詢種類彙總/執行時間等
  • monitor:monitor模塊收集的信息,主要是後端DB的健康狀態、延遲檢查
  • stats_history:統計信息的歷史記錄

5.二、main庫中的經常使用表

  • global_variables:設置變量,包括監聽的端口、管理帳號等
  • mysql_replication_hostgroups:監視指定主機組中全部MySQL的read-only值,並根據read-only值將主機分配給寫入器或讀取器主機組;ProxySQL的monitor模塊會監控全部組中MySQL的read-only值,若是發現read-only值發生改變,會自動改寫mysql_servers表裏的hostgroup關係,以達到自動Failover效果
  • mysql_servers:設置後端MySQL主機
  • mysql_user:設置後端MySQL的程序帳號和監控帳號
  • scheduler:ProxySQL的任務計劃

5.三、stats庫中的經常使用表

  • stats_mysql_commands_counters:統計各類SQL類型的執行次數和時間,經過參數mysql-commands_stats控制,默認爲true
  • stats_mysql_connection_pool:後端MySQL的鏈接信息
  • stats_mysql_processlist:相似MySQL的show processlist命令,查看各線程的狀態
  • stats_mysql_query_digest:統計各種SQL的執行次數、時間消耗等。經過變量mysql-query_digests控制,默認爲true
  • tats_mysql_query_rules:路由命中次數統計

5.四、monitor庫中的經常使用表

  • mysql_server_connect_log:對後端MySQL進行鏈接測試的日誌
  • mysql_server_ping_log:存放使用mysql ping API ping後端MySQL以檢測是否可用的日誌
  • mysql_server_replication_lag_log:後端MySQL主從複製延遲的檢測日誌
相關文章
相關標籤/搜索