包含标签:ProxySQL 的文章
  • MySQL中间件之ProxySQL(5):线程、线程池、连接池

    1.ProxySQL的线程 ProxySQL由多个模块组成,是一个多线程的daemon类程序。每个模块都有一个或多个线程去执行任务。 例如,以下是刚启动ProxySQL时的进程情况,一个main进程,一个主线程,21个线程。 [root@s1 ~]# pstree | grep proxy |-proxysql---proxysql---21*[{proxysql}] 下面是正常运行时使用的线程列表: 1.1 Main thread 这其实是一个进程,该进程只负责引导、启动核心模块以及启动其它核心线程。 1.2 Admin thread 该线程负责以下几件事: 初始化并引导启动Admin接口。 从磁盘数据库或配置文件中加载配置,为ProxySQL的运行提供环境。 启动一个监听者,让其负责监听并接受到Admin接口的新连接,并为每个这样的连接创建一个新线程。 所以,每连接一次admin接口,就会新生成一个线程。每次退出admin接口时,减去一个线程。 1.3 MySQL workers mysql-threads线程负责处理MySQL流量,包括所有来自客户端的连接以及所有到后端服务器节点的连接。也就是:用少量线程处理任意多数量的连接。 MySQL workers线程在相同的端口上进行监听。当新客户端发起连接请求,其中一个MySQL worker线程将成功接受该连接,并创建一个MySQL会话(session):客户端和会话绑定在该worker线程上,直到连接断开。换句话说,在断开连接之前,某客户端的所有连接总是被同一个worker线程处理。 默认情况下,MySQL worker的线程数量为4。 mysql> select @@mysql-threads; +-----------------+ | @@mysql-threads | +-----------------+ | 4 | +-----------------+ mysql-threads变量修改后,必须重启ProxySQL才能生效,这是少有的需要重启的变量之一(另一个是mysql-stacksize)。例如,修改为8个mysql worker线程。 set mysql-threads=8; save mysql variables to disk; select * from ru……

    SE_You 2024-03-19
    31 0 0
  • MySQL中间件之ProxySQL(4):多层配置系统

    1.ProxySQL中的库 使用ProxySQL的Admin管理接口连上ProxySQL,可查看ProxySQL拥有的库。 mysql -uadmin -padmin -h127.0.0.1 -P6032 --prompt 'admin> ' admin> show databases; +-----+---------------+-------------------------------------+ | 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库是ProxySQL最主要的库,是需要修改配置时使用的库,它其实是一个内存数据库系统。所以,修改main库中的配置后,必须将其持久化到disk上才能永久保存。 disk库是磁盘数据库,该数据库结构和内存数据库完全一致。当持久化内存数据库中的配置时,其实就是写入到disk库中。磁盘数据库的默认路径为$DATADIR/proxysql.db。 stats库是统计信息库。这个库中的数据一般是在检索其内数据时临时填充的,它保存在内存中。因为没有相关的配置项,所以无需持久化。 monitor库是监控后端MySQL节点相关的库,该库中只有几个log类的表,监控模块收集到的监控信息全都存放到对应的log表中。 stats_history库是1.4.4版新增的库,用于存放历史统计数据。默认路径为$DATADIR/proxysql_stats.db。 ProxySQL内部使用的是SQLite3数据库,无论是内存数据库还是磁盘数据库,都是通过SQLite3引擎进行解析、操作的。它和MySQL……

    SE_You 2024-03-18
    17 0 0
  • MySQL中间件之ProxySQL(3):Admin管理接口

    1.ProxySQL的Admin管理接口 当ProxySQL启动后,将监听两个端口: (1).admin管理接口,默认端口为6032。该端口用于查看、配置ProxySQL。 (2).接收SQL语句的接口,默认端口为6033,这个接口类似于MySQL的3306端口。 ProxySQL的admin管理接口是一个使用MySQL协议的接口,所以,可以直接使用mysql客户端、navicat等工具去连接这个管理接口。 例如,使用mysql客户端去连接ProxySQL的管理接口。下面使用的是管理接口的默认用户名和密码admin:admin。 mysql -uadmin -padmin -h127.0.0.1 -P6032 --prompt 'admin> ' mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 30 Server version: 5.5.30 (ProxySQL Admin Module) Copyright (c) 2000, 2018, 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. admin> 由于ProxySQL的配置全部保存在几个自带的库中,所以通过管理接口,可以非常方便地通过发送一些SQL命令去修改ProxySQL的配置。ProxySQL会解析通过该接口发送的某些对ProxySQL有效的特定命令,并将其合理转换后发送给内嵌的SQLite3数据库引擎去运行。 例如,查看库、库中的表。 admin> show databases; +-----+---------------+-------------------------------------+ | seq | name | file | +-----+---------------+-------------------------------------+ | 0 | ma……

    SE_You 2024-03-15
    20 0 0
  • MySQL中间件之ProxySQL(2):初试读写分离

    1.实现一个简单的读写分离 这里通过一个简单的示例实现ProxySQL的读写分离功能,算是ProxySQL的快速入门。即使是快速入门,需要配置的内容也很多,包括:后端MySQL配置、监控配置、发送SQL语句的用户、SQL语句的路由规则。所以,想要实现一个ProxySQL+MySQL,即使只实现最基本的功能,步骤也是挺多的,不过配置的逻辑都很简单。 实验环境: 角色 主机IP server_id 数据状态 Proxysql 192.168.100.21 null 无 Master 192.168.100.22 110 刚安装的全新MySQL实例 Slave1 192.168.100.23 120 刚安装的全新MySQL实例 Slave2 192.168.100.24 130 刚安装的全新MySQL实例 为了演示完整的过程,这里把后端MySQL主从复制的基本配置步骤也列出来了。如了解配置过程,可跳过主从配置的部分。 注意点:slave节点需要设置read_only=1。如果后端是PXC/MGR/MariaDB Galera,则无需手动设置,因为会自动设置。   1.1 配置后端的主从复制 提供3个MySQL节点的配置文件。 # 以下是Master的配置文件 [mysqld] datadir=/data socket=/data/mysql.sock server-id=110 log-bin=/data/master-bin sync-binlog=1 log-error=/data/error.log pid-file=/data/mysqld.pid # 以下是slave1的配置文件 [mysqld] datadir=/data socket=/data/mysql.sock server-id=120 relay_log=/data/relay-log log-error=/data/error.log pid-file=/data/mysqld.pid read_only=1 # 以下是slave2的配置文件 [mysqld] datadir=/data socket=/data/mysql.sock server-id=130 relay_log=/data/relay-log log-error=/data/error.log pid-file=/data/mysqld.pid read_only=1 为3个MySQL节点提供数据目录/data mkdir /data chown -R mysql.mysql /dat……

    SE_You 2024-03-14
    45 0 0