ProxySQL 的一些内容

官方文档地址:
https://github.com/sysown/proxysql/wiki/ProxySQL-Cluster

ProxySQL中配置后端Mysql服务器
mysql_servers
mysql_replication_hostgroups
更改这两张表,将视为编辑配置文件而不保存,只有使用save mysql servers to disk 保存到磁盘才行
load mysql servers to runtime:此语句执行时才会生效
save mysql servers to disk:此语局执行后才会被保存到配置文件中
下面这两条语句暂时无用
SAVE MYSQL SERVERS TO MEMORY
LOAD MYSQL SERVERS FROM MEMORY

将mysql服务从memory中复制到runtime

Admin> LOAD MYSQL SERVERS TO RUNTIME;

其它写法:

LOAD MYSQL SERVERS TO RUN
LOAD MYSQL SERVERS FROM MEM
LOAD MYSQL SERVERS FROM MEMORY

将mysql服务从memory中复制到disk

Admin> SAVE MYSQL SERVERS TO DISK;

其它写法:
SAVE MYSQL SERVERS FROM MEM
SAVE MYSQL SERVERS FROM MEMORY

将mysql服务从runtime中复制到 memory

Admin> SAVE MYSQL SERVERS TO MEMORY;

其它写法:
SAVE MYSQL SERVERS TO MEM
SAVE MYSQL SERVERS FROM RUN
SAVE MYSQL SERVERS FROM RUNTIME

将mysql服务从disk中复制到memory
Admin> LOAD MYSQL SERVERS TO MEMORY;

其它方法:
LOAD MYSQL SERVERS TO MEM
LOAD MYSQL SERVERS FROM DISK

添加新服务器跟添加到主机组:必须在mysql_servers 表中插入新行。
限制与后端的链接数:max_connections
权重仅与主机组相关:weight (改变权重来确定流量的优先级,值越大,则负载越大)
对特定的后端使用SSL连接:SSL
自动避开具有复制滞后的从站:max_replication_lag(非零值时,Monitor模块会定期检查复制延迟)
当max_replication设置为30时,表明30秒检查一次!此值仅适用于slave
在后端服务器上启用压缩:compression。启用非零值则启用压缩。但是注意只有在新连接加载到runtime时进行压缩。
status状态:
OFFLINE_SOFT状态:任然会继续进行活动事务的连接,但是不会再向该节点发送新流量!
OFFLINE_HARD状态:将会立即停止流量,也不会再有新流量被发送!
online状态:更改为online状态后,可以重新启用此状态

用户配置:
用户在mysql_users中配置
在mysql_users中进行更改后,执行LOAD MYSQL USERS TO RUNTIME才会生效!
而且:SAVE MYSQL USERS TO DISK没有执行,重启/崩溃后,mysql_users表中的更改将会失效!

将mysql USERS 从 memory中复制到runtime
Admin> load mysql user to runtime;

其它方法:
LOAD MYSQL USERS TO RUN
LOAD MYSQL USERS FROM MEM
LOAD MYSQL USERS FROM MEMORY

将mysql Users 从 memory中复制到 disk
Admin> SAVE MYSQL USERS TO DISK

其它方法:
SAVE MYSQL USERS FROM MEM
SAVE MYSQL USERS FROM MEMORY

将mysql USERS 从RUNTIME中复制到MEMORY
Admin> SAVE MYSQL USERS TO MEMORY

其它方法:
SAVE MYSQL USERS TO MEM
SAVE MYSQL USERS FROM RUN
SAVE MYSQL USERS FROM RUNTIME

将mysql users 从disk 中复制到memory中
Admin> LOAD MYSQL USERS TO MEMORY;

其它方法:
LOAD MYSQL USERS TO MEM
LOAD MYSQL USERS FROM DISK

总结:
所有的数据加载写入的轨迹为:
RUNTIME 》 MEMORY 》 DISK
语句:SAVE … FROM … 解释为从上一个结构中将数据加载到下一个结构中
语句:SAVE … TO … 解释为将数据加载到一个结构中
语句:LOAD … FROM … 解释为从下层结构中将数据加载到上一层结构中
语句:LOAD … TO … 解释为将数据加载到一个结构中

mysql_user表的默认值
max_connections :限制用户创建proxysql的连接数
transaction_persistent:启动事务后,可能会根据查询规则将某些查询发送到其他主机组,为了防止这总情况发生,可以启用transaction_persistent.
将值设置为 1 表示启用此规则!

散列密码和身份验证:
select SHA1(‘password’)
select password(‘password’)

在mysql 和Proxysql中,哈希密码是SHA1(SHA1(‘password’));
从散列密码无法获取纯文本密码;

ProxySQL的Admin界面没有任何PASSWORD()功能:
可以使用select password(‘password’)在Mysql服务器中运行并复制粘贴结果!

新方式:
变量admin-hash_passwords
此变量可以在执行完成load mysql users to runtime
然后执行:save mysql user to disk 密码便会变成SHA1类型!
然后保存到磁盘上运行:save mysql users to disk!

日志:
需要先运行globally 日志:
SET mysql-eventslog_filename=‘queries.log’;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

记录所有的查询
INSERT INTO mysql_query_rules (rule_id, active, match_digest, log,apply) VALUES (1,1,’.’,1,0);
记录所有的BLOB的查询
INSERT INTO mysql_query_rules (rule_id, active, username, match_pattern, log,apply) VALUES (1, 1, ‘Bob’, ‘.’, 1, 0);
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

可以通过工具eventslog_reader_sample 对日志进行转化为纯文本以便查看
https://github.com/sysown/proxysql/tree/v1.4.4/tools 可以下载此工具!

此外,使用两种类型的用户使用这些默认凭据完成对admin数据库的访问:

user:admin / password:admin - 具有对所有表的读写访问权限
user:stats / password:stats - 具有对统计表的只读访问权限。

多组复制 的表
SHOW CREATE TABLE mysql_servers \G

show create table mysql_group_replication_hostgroups\G

writer_hostgroup:将写的数据分化到这个组,且read_only = 0的状态下

backup_writer_hostgroup:将超过msx_writes并且read_only = 0的主机存入到备用写入标记组!

reader_hostgroup:只读的组,read_only = 1的状态下!

offline_hostgroup:状态在离线状态

active:启用后,ProxySQL监视主机组并在适当的主机组之间移动节点

max_writers:组复制最大的写入数量!

writer_is_also_reader - determines if a node should be added to the reader_hostgroup as well as the writer_hostgroup after it is promoted.

max_transactions_behind 确定最大的回避,在事件写完之前的事务数,以防止过脏写脏读!

mysql_galera_hostgroups
表mysql_galera_hostgroups定义了与Galera Cluster / Percona XtraDB Cluster一起使用的主机组

mysql_users中:
frontend
backend
都需要将其设置为1!

其中传统MASTER/SLAVE复制:
show create table mysql_replication_hostgroups\G

ProxySQL 配置:
连接方式:
$mysql -u admin -padmin -h127.0.0.1 -P6032

首先,让我们验证没有配置任何内容,
mysql> \R Admin >
进入到Admin模式
Admin>
UPDATE global_variables SET variable_value=‘monitor’ WHERE variable_name=‘mysql-monitor_username’;
UPDATE global_variables SET variable_value=‘monitor’ WHERE variable_name=‘mysql-monitor_password’;
UPDATE global_variables SET variable_value=‘2000’ WHERE variable_name IN (‘mysql-monitor_connect_interval’,‘mysql-monitor_ping_interval’,‘mysql-monitor_read_only_interval’);

当表中:mysql_replication_hostgorups设置插入字段(writer_hostgroup,reader_hostgroup)(1,2)的时候。
Admin> LOAD MYSQL SERVERS TO RUNTIME;
那么在monitor.mysql_server_read_only_log 的read_only字段中会显示便会区分出谁为写,哪两个为读主机!

   Admin>SAVE MYSQL SERVERS TO DISK;
   Admin>SAVE MYSQL VARIABLES TO DISK;

对于定制查询语句可以通过 mysql_query_rules表定义是通过写组进行查询,还是通过读组进行查询!

然后Admin> LOAD MYSQL QUERY RULES TO RUNTIME;
LOAD MYSQL QUERY RULES TO DISK;

可以通过stats_mysql_query_digest 表来检查规则是否正确的应用了!并能显示聚合的结果!

PRoxySQL可以充当查询缓存,默认情况下,查询不会被缓存,但可以启用它cache_ttl = 5000(毫秒)5000也就是5秒钟!
在mysql_query_rules中进行设置!
例如:UPDATE mysql_query_rules set cache_ttl = 5000 WHERE active = 1 AND destination_hostgroup = 2 ;

Admin> LOAD MYSQL QUERY RULES TO RUNTIME;

mysql_query_rules中的
match_digest:它指定将要匹配的查询规则!
match_pattern:它将再次匹配表达式查询的原始文本(速度比match_digest慢)!
注意:查询重写,就必须要与match_pattern同时使用!

*********Query Rewrite *********
看不懂??????????????

基于端口的读/写分割限制

最好的读写分离部署的方式遵循以下几点:
1,将PRoxySQL所产生的所有流量数据发送到MYSQL node中。也就是MASTER中(both writes and reads)!
2,然后在stats_mysql_query_digest中查看哪条SELECT语句时最消耗时间的!
3,确定这些最消耗时间的SELECT语句运行在那个组ID 的主机上面!
4,然后再进行mysql_query_rules规则的制定!

通过stats_mysql_query_digest表查询消耗资源的语句!
根据表中sum_time字段进行排序查看做靠前的语句。

PROXYSQL 线程
主线程:该线程仅负责引导核心模块并启动其他核心线程
libmicrohttpd的内置HTTP服务器。
MHD_USE_INTERNAL_POLLING_THREAD,因此可以使用多个线程!

WatchDog
:使用来监视Mysql线程和Mysql辅助线程(如果启用)的监视程序,如果监视程序检测到任何这些线程都丢失了心跳

WatchDog默认是启用的:
线程组撒 超过mysql-poll_timeout 单位:毫秒(2000/2秒),
它是用来检查心跳的,如果restart_on_missing_hearbeats缺少心跳,则watchdog将会触发断连接

restart_on_missing_heartbeats只能在配置文件的全局部分配置,其默认值为10.
如果restart_on_missing_heartbeats设置为0,则Watchdog会检查并在错误日志中生成条目,但不会产生断开,也不会重启proxysql!

生成环境需要设置为0

Multiplex 多路复用的作用:是用来分化表查询路径?,还是根路由有关?

ProxySQL存在在线上缓存:
因为mysql的机制,使用查询缓存时可能导致写负载问题。
需要外面的缓存机制进行优化,当前ProxySQL 有线上(wire)缓存的机制!

注意:mysql_query_rules表中的cache_ttl表示缓存多少毫秒的查询数据,用来分化查询的负载!
相当于实现了ProxySQL外面缓存机制的步骤! 而当stats_mysql_query_digest表中的hostgroup = -1时。则表示是线上缓存是正在运行的!

stats_mysql_global中查看到缓存的大小 :‘Query_Cache%’

查询缓存的调整:
mysql> SHOW VARIABLES LIKE ‘mysql-query_cache%’;

mysql> SET mysql-query_cache_size_MB=128; LOAD MYSQL VARIABLES TO RUNTIME;

相关限制:
与查询缓存不严格相关但影响其行为的变量是mysql-threshold_resultset_size。
mysql-threshold_resultset_size定义ProxySQL在开始将其发送到客户端之前将缓冲的最大结果集大小。
将此变量设置得太低将阻止在从后端检索结果集时重试查询失败。
将此变量设置得太高可能会增加内存占用,因为ProxySQL将尝试缓冲更多数据。
因为mysql-threshold_resultset_size定义了可以缓冲的最大结果集大小,所以它还定义了可以存储在查询缓存中的最大结果集大小。

线程的清除是由系统自动进行的!

查询缓存不支持预准备语句!

read_only=1表示只读!

内存泄漏检测:

–enable-prof:默认情况下是禁用内存分析的
配置环境变量:
MALLOC_CONF=“xmalloc:true,lg_tcache_max:16,purge:decay,prof:true,prof_leak:true,lg_prof_sample:18,lg_prof_interval:30”

可以通过init脚本:
/etc/init.d/proxysql来进行启动PRoxySQL,运行内存分析检测!
export MALLOC_CONF=“xmalloc:true,lg_tcache_max:16,purge:decay,prof:true,prof_leak:true,lg_prof_sample:18,lg_prof_interval:30”

如果没有init脚本:则需要使用如下语句:
MALLOC_CONF=“xmalloc:true,lg_tcache_max:16,purge:decay,prof:true,prof_leak:true,lg_prof_sample:18,lg_prof_interval:30” proxysql -f -c /etc/proxysql.cnf

内存溢出检测问题会出现在/var/lib/proxysql中!

取消profiling 检查,需要在没有malloc_conf中进行设置!

ProxySQL 的集群问题?

单机多实例中,启动proxysql需要以-r或启动–reuseport
这样就可以使用SO_REUSEPORT套接字选项。默认情况下,此项目前处于禁用状态!
为避免在同一个主机上运行的两个(或多个)proxysql实例之间发生干扰,建议使用不同的配置文件(使用-c标志)和不同的datadir(使用-D标志)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值