• 青蛙学Linux—MySQL中间件ProxySQL


    ProxySQL是一款高性能和高可用的MySQL中间件,Percona也推荐使用ProxySQL。它有以下优点:

    • 几乎所有的配置均可在线更改(其配置数据基于SQLite存储),无需重启proxysql
    • 强大的规则路由引擎,支持读写分离、查询重写、sql流量镜像
    • 详细的状态统计,相当于有了统一的查看sql性能和sql语句统计的入口
    • 自动重连和重新执行机制,若一个请求在链接或执行过程中意外中断,proxysql会根据其内部机制重新执行该操作
    • query cache功能:比mysql自带QC更灵活,可多维度控制哪类语句可以缓存
    • 支持连接池(connection pool)
    • 支持分库、分表
    • 支持负载均衡
    • 自动下线后端DB,根据延迟超过阀值、ping 延迟超过阀值、网络不通或宕机都会自动下线节点

    ProxySQL的官方网站:https://proxysql.com/

    1、安装ProxySQL

    ProxySQL可以从官方提供的GitHub地址下载,也可以在Percona官网上下载。官方提供了源码、RPM包和DEB包的下载。

    这里我们通过RPM包进行安装,下载最新版本2.0.1。

    通过YUM安装依赖包:

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

    安装ProxySQL:

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

    2、ProxySQL目录结构

    通过RPM包安装的ProxySQL,其数据存储在/var/lib/proxysql目录下,静态配置文件为/etc/proxysql.cnf,启动脚本为/etc/init.d/proxysql

    数据存储目录/var/lib/proxysql在安装完成后是不存在的,只有在ProxySQL启动后才会建立,在该目录下有以下三个文件重要文件:

    • proxysql.db:SQLite数据文件,ProxySQL的配置如账号、密码、路由等信息存储在该文件中
    • proxysql.log:ProxySQL的日志文件
    • proxysql.pid:ProxySQL的PID文件

    ProxySQL的静态配置文件/etc/proxysql.cnf仅用于配置一些启动选项、SQLite数据目录等。ProxySQL只在第一次启动时读取该配置文件进行初始化,以后只读取proxysql.db。

    3、ProxySQL的端口

    ProxySQL在启动后,会启动一个管理端口和一个客户端端口。默认的管理端口为6032,账号密码均为admin,供管理ProxySQL使用,仅允许本地登录;默认客户端端口为6033,提供对后端DB的访问,账号密码通过管理端设置。

    4、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> 

    5、ProxySQL的库表功能介绍

    5.1、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.2、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.3、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.4、monitor库中的常用表

    • mysql_server_connect_log:对后端MySQL进行连接测试的日志
    • mysql_server_ping_log:存放使用mysql ping API ping后端MySQL以检测是否可用的日志
    • mysql_server_replication_lag_log:后端MySQL主从复制延迟的检测日志
  • 相关阅读:
    博客作业04--树
    博客作业03--栈和队列
    博客作业2---线性表
    博客作业01-抽象数据类型
    C语言最后一次作业--总结报告
    CSAPP(8):系统级IO
    CSAPP(7):虚拟存储器
    CSAPP(6):异常控制流
    CASPP(5):链接
    CSAPP(4):存储器层次结构
  • 原文地址:https://www.cnblogs.com/yu2006070-01/p/10338258.html
Copyright © 2020-2023  润新知