灵活强大的MySQL代理中间件ProxySQL应用实战(2)

一、ProxySQL的运行机制

ProxySQL有一个完备的配置系统,配置ProxySQL是基于sql命令的方式完成的。ProxySQL支持配置修改之后的在线保存、应用,不需要重启即可生效。整个配置系统分三层设计。
整个配置系统分为三层,如下图所示:

配置系统分为三层的目的有三个:
(1).自动更新
(2).尽可能的不重启proxysql就可以修改配置
(3).方便回滚错误配置

每层的功能与含义如下:

?   RUNTIME层
代表的是ProxySQL当前生效的正在使用的配置,包括global_variables, mysql_servers, mysql_users, mysql_query_rules表。无法直接修改这里的配置,必须要从下一层load进来。也就是说RUNTIME这个顶级层,是proxysql运行过程中实际使用的那一份配置,这一份配置会直接影响到生产环境的,所以要将配置加载进RUNTIME层时需要三思而行。
?   MEMORY层
用户可以通过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 FILE层
表示持久存储的那份配置,持久层对应的磁盘文件是$(DATADIR)/proxysql.db,在重启ProxySQL的时候,会从proxysql.db文件中加载信息。而 /etc/proxysql.cnf文件只在第一次初始化的时候使用,之后如果要修改配置,就需要在管理端口的SQL命令行里进行修改,然后再save到硬盘。 也就是说DISK和CONFIG FILE这一层是持久化层,我们做的任何配置更改,如果不持久化下来,重启后,配置都将丢失。

需要注意的是:proxysql的每一个配置项在三层中都存在,但是这三层是互相独立的,也就是说,proxysql可以同时拥有三份配置,每层都是独立的,可能三份配置都不一样,也可能三份都一样。

下面总结下proxysql的启动过程:

当proxysql启动时,首先读取配置文件CONFIG FILE(/etc/proxysql.cnf),然后从该配置文件中获取datadir,datadir中配置的是sqlite的数据目录。如果该目录存在,且sqlite数据文件存在,那么正常启动,将sqlite中的配置项读进内存,并且加载进RUNTIME,用于初始化proxysql的运行。如果datadir目录下没有sqlite的数据文件,proxysql就会使用config file中的配置来初始化proxysql,并且将这些配置保存至数据库。sqlite数据文件可以不存在,/etc/proxysql.cnf文件也可以为空,但/etc/proxysql.cnf配置文件必须存在,否则,proxysql无法启动。

二、ProxySQL下添加与修改配置

1、添加配置

需要添加配置时,直接操作的是MEMORAY,例如:添加一个程序用户,在mysql_users表中执行一个插入操作:

MySQL [(none)]> insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values(‘myadmin‘,‘mypass‘,1,0,1);

这样就完成了一个用户的添加。要让这个insert生效,还需要执行如下操作:

MySQL [(none)]>load mysql users to runtime;
表示将修改后的配置(MEMORY层)用到实际生产环境(RUNTIME层)

如果想保存这个设置永久生效,还需要执行如下操作:

MySQL [(none)]>save mysql users to disk;
表示将memoery中的配置保存到磁盘中去。

除了上面两个操作,还可以执行如下操作:

MySQL [(none)]>load mysql users to memory;
表示将磁盘中持久化的配置拉一份到memory中来。

MySQL [(none)]>load mysql users from config;
表示将配置文件中的配置加载到memeory中。

2、持久化配置

以上SQL命令是对mysql_users进行的操作,同理,还可以对mysql_servers表、mysql_query_rules表、global_variables表等执行类似的操作。
如对mysql_servers表插入完成数据后,要执行保存和加载操作,可执行如下SQL命令:

MySQL [(none)]> load mysql servers to runtime;
MySQL [(none)]> save mysql servers to disk;

对mysql_query_rules表插入完成数据后,要执行保存和加载操作,可执行如下SQL命令:

MySQL [(none)]> load mysql query rules to runtime;
MySQL [(none)]> save mysql query rules to disk;

对global_variables表插入完成数据后,要执行保存和加载操作,可执行如下SQL命令:

以下命令加载或保存mysql variables(global_variables):

MySQL [(none)]>load mysql variables to runtime
MySQL [(none)]>save mysql variables to disk

以下命令加载或保存admin variables(select * from global_variables where variable_name like ‘admin-%‘):

MySQL [(none)]> load admin variables to runtime
MySQL [(none)]>save admin variables to disk

待续!

觉得不过瘾,后续还有一些列文章在等着呢:

原新浪网、阿里云(原万网)系统架构师,Linux畅销书《循序渐进linux》作者、51CTO博客博客专家博主、51CTO特级讲师,我的最新专栏: 轻松玩转ELK海量可视化日志分析系统,连载更新中,猛戳查看:
《轻松玩转ELK海量可视化日志分析系统》

原文地址:http://blog.51cto.com/ixdba/2159031

时间: 2024-10-12 02:36:52

灵活强大的MySQL代理中间件ProxySQL应用实战(2)的相关文章

灵活强大的MySQL代理中间件ProxySQL应用实战(1)

一.常见的Mysql中间件介绍 很多人都会把中间件认为是读写分离,其实读写分离只是中间件可以提供的一种功能,最主要的功能还是在于他可以分库分表.下面介绍下常见的开源mysql中间件. DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层.它在奇虎360公司开源的Atlas基础上,修改了部分bug,并且添加了很多特性. Atlas是由奇虎360公发的基于MySQL协议的数据库中间件产品,它在MySQL官方推出的MySQL-Proxy 0.8.2版本

Mysql中间件Proxysql实现mysql主从架构读写分离

实验主机 Master: 192.168.0.17 Slave: 192.168.0.20 Proxysql:192.168.0.30建议关闭防火墙建立Master: 192.168.0.17与Slave: 192.168.0.20的MySQL主从复制架构 Proxysql:192.168.0.30主机上基于yum安装proxysql [[email protected] ~ 20:21:05]#cat <<EOF | tee /etc/yum.repos.d/proxysql.repo &g

MySQL开源中间件cetus

git地址:https://github.com/Lede-Inc/cetus/blob/master/doc/cetus-quick-try.md==介绍Cetus简介Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能.Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用.主要功能特性Cetus分为读写分离和分库(分表是分库的一种特殊形式)两个版本.针对读写分离版本: 多进程无锁

MySQL读写分离(ProxySQL)

MySQL读写分离(ProxySQL) 读写分离原理 读写分离就是用户在发送请求时,请求经过中间件,中间件将请求中的读和写操作分辨出来将读请求发送给后端的从服务器,将写请求发送给后端的主服务器,再又主服务器通过主从复制将数据复制给其他从服务器 常见MySQL中间件 名称 公司 站点地址 mysql-proxy Oracle https://downloads.mysql.com/archives/proxy Atlas Qihoo https://github.com/Qihoo360/Atla

Navicat for MySQL Windows下强大的MySQL管理工具

作者:zhanhailiang 日期:2015-01-21 介绍 Navicat for MySQL[是一款强大的 MySQL 数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具.Navicat for MySQL 基于Windows平台,为 MySQL 量身订作,提供类似于 phpMyAdmin 的用户管理界面工具. 使用说明 下载并安装,Navicat for MySQL: 连接数据库:  连接成功后即可对该DB做所有有权限的操作: 更多阅读 http://www.navic

【MySQL】【ProxySQL】浅析mysql_users表

[MySQL][ProxySQL]浅析mysql_users表 1.表定义与字段说明 表的DDL定义: CREATE TABLE mysql_users ( username VARCHAR NOT NULL, #用户名 password VARCHAR, #密码 active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1, #是否启用 use_ssl INT CHECK (use_ssl IN (0,1)) NOT NULL DEFAULT 0,

数据库中间件ProxySQL读写自动分离实践

参考文档 https://github.com/sysown/proxysql http://www.fordba.com/mysql_proxysql_rw_split.html https://www.cnblogs.com/zhoujinyi/p/6829983.html 腾讯云cdb可以提供主库VIP+只读从库VIP的形式,这样开发使用时需要维护2个VIP而且不能自动读写分离,基于现状计划使用proxysql结合clb及cdb来实现读写自动分离.架构如下:app--clb四层--prox

MySQL 5.7.17主从复制实战(一主多从)

MySQL 5.7.17主从复制实战(一主多从) 主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制. 复制的基本过程如下: 1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容: 2).Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程.返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master

企业中MySQL主流高可用架构实战三部曲之MHA

老张最近两天有些忙,一些老铁一直问,啥时更新博文,我可能做不到天天更新啊,但保证以后一有空就写一些干货知识分享给大家. 我们如果想要做好技术这项工作,一定要做到理论与实践先结合.我一个曾经被数据库虐得体无完肤的过来人给大家一些建议:就是只看书,背理论真的行不通,到时遇到棘手的问题,你还是一样抓瞎.一定要在理论理清的基础上多做实验. 给自己定个目标,3个月做够100-500个实验.然后整理在做实验过程中的各种报错,认真解读分析报错原理,做好笔记.最后再拿起书,重新阅读之前有些可能理解不了的理论知识