MySQL
常用语句
用户相关\管理相关\数据相关
视图\事件\存储过程\函数\游标\触发器
事务\分区
常用工具
管理优化
锁问题
MySQL日志
异步复制
半同步复制
复制管理
5.7开启并行复制
双主备份
故障问题
索引
时区
mysql_random_data_load 数据生成
表的导出导入
MySQLdump逻辑备份
XtraBackup全备
XtraBackup增备
XtraBackup原表数据恢复
安装MySQL
ProxySQL中间件
Atlas中间件
keepalived安装
MHA安装
MHA恢复
mha复制检查报错及解决过程
集群Cluster安装
维护Cluster
开启审计功能
本文档使用MrDoc发布
返回首页
-
+
ProxySQL中间件
2021年8月27日 08:59
admin
#下载地址 https://www.proxysql.com/documentation/installing-proxysql/ #安装 yum -y install perl-DBD-mysql gnutls wget https://github.com/sysown/proxysql/releases/download/v2.2.0/proxysql-2.2.0-1-centos67.x86_64.rpm rpm -iUvh proxysql-2.2.0-1-centos7.x86_64.rpm ####注意:安装完成后,会自动在/usr/bin/增加服务管理脚本,系统可直接执行proxysql命令 --- >####ProxySQL目录:/var/lib/proxysql --- #配置 ####配置文件/etc/proxysql.cnf ####配置数据库文件/var/lib/proxysql/proxysql.db --- ##注意:如果存在 “proxysql.db”文件,则启动过程不解析proxysql.cnf文件;配置文件只在第一次启动的时候读取  --- #启动与停止 /usr/bin/proxysql #启动 kill <proxysql的进程id> #停止 ---  ####6032 是 ProxySQL 的管理端口号,6033是对外服务的端口号 --- #操作 ####连接管理端 mysql -uadmin -padmin -h 127.0.0.1 -P 6032  >####可见有五个库: main、disk、stats 、monitor 和 stats_history ##main: ####内存配置数据库,即 MEMORY,表里存放后端 db 实例、用户验证、路由规则等信息 show tables from main;  ####库下的主要表: global_variables:此表用来设置变量,如监听的端口、管理账号等 mysql_replication_hostgroups:此表用来监视指定组中所有服务器的read_only值 mysql_servers: 后端可以连接 MySQL 服务器的列表 mysql_users: 配置后端数据库的账号和监控的账号。 mysql_query_rules: 指定 Query 路由到后端不同服务器的规则列表。 scheduler:调度表,类似于cron的功能实现。 ####注: 表名以 runtime_开头的表示 ProxySQL 当前运行的配置内容,不能通过 DML 语句修改。 ####只能修改对应的不以 runtime 开头的表,然后 “LOAD” 使其生效,“SAVE” 使其存到硬盘以供下次重启加载。 --- ##stats: ####统计信息的汇总 show tables from 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 stats_mysql_query_rules:统计路由命中次数 --- ##monitor: ####一些监控的收集信息,比如数据库的健康状态等 show tables from monitor;  ####库下的主要表: mysql_server_connect_log:通过连接到所有MYSQL服务器已检查它们是否可用,此表用来存放检查连接的日志 mysql_server_ping_log:通过mysql_ping来ping后端MYSQL服务器,从而检查它们是否可用,此表用来存放ping的日志 mysql_server_replication_lag_log:此表用来存放对后端MYSQL服务器进行主从延迟检测的日志 --- ##disk:持久化的磁盘的配置 --- ##stats_history: 这个库是 ProxySQL 收集的有关其内部功能的历史指标 --- #多层配置系统  #####整套配置系统分为三层:顶层为 RUNTIME ,中间层为 MEMORY , 底层也就是持久层 DISK 和 CONFIG FILE 。 #####RUNTIME : 代表 ProxySQL 当前生效的正在使用的配置,无法直接修改这里的配置,必须要从下一层 “load” 进来。 #####MEMORY: MEMORY 层上面连接 RUNTIME 层,下面连接持久层。这层可以正常操作 ProxySQL 配置,随便修改,不会影响生产环境。修改一个配置一般都是现在 MEMORY 层完成的,确认正常之后在加载达到 RUNTIME 和 持久化的磁盘上。 #####DISK 和 CONFIG FILE:持久化配置信息,重启后内存中的配置信息会丢失,所需要将配置信息保留在磁盘中。重启时,可以从磁盘快速加载回来。 --- ##配置 MySQL 用户(main:mysql_users) LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME #将内存数据库中的配置加载到 runtime 数据结构,反之亦然。 SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME #将 MySQL 用户从 runtime 持久化到内存数据库。 LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK #从磁盘数据库中加载 MySQL 用户到内存数据库中。 SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK #将内存数据库中的 MySQL 用户持久化到磁盘数据库中。 LOAD MYSQL USERS FROM CONFIG #从配置文件中加载 MySQL 用户到内存数据库中。 --- ##配置 MySQL server(main:mysql_servers) LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME #将 MySQL server 从内存数据库中加载到 runtime。 SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME #将 MySQL server 从 runtime 持久化到内存数据库中。 LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK #从磁盘数据库中加载 MySQL server 到内存数据库。 SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK #从内存数据库中将 MySQL server 持久化到磁盘数据库中。 LOAD MYSQL SERVERS FROM CONFIG #从配置文件中加载 MySQL server 到内存数据库中 --- ##配置 MySQL 的查询规则(main:mysql_query_rules) LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME #将 MySQL query rules 从内存数据库加载到 runtime 数据结构。 SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME #将 MySQL query rules 从 runtime 数据结构中持久化到内存数据库。 LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK #从磁盘数据库中加载 MySQL query rules 到内存数据库中。 SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK #将 MySQL query rules 从内存数据库中持久化到磁盘数据库中。 LOAD MYSQL QUERY RULES FROM CONFIG #从配置文件中加载 MySQL query rules 到内存数据库中。 --- ##配置 MySQL 变量(main:global_variables) LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME #将 MySQL variables 从内存数据库加载到 runtime 数据结构。 SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME #将 MySQL variables 从 runtime 数据结构中持久化到内存数据中。 LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK #从磁盘数据库中加载 MySQL variables 到内存数据库中。 SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK #将 MySQL variables 从内存数据库中持久化到磁盘数据库中。 LOAD MYSQL VARIABLES FROM CONFIG #从配置文件中加载 MySQL variables 到内存数据库中。 --- ##配置 MySQL 管理变量(main:global_variables) LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME #将 admin variables 从内存数据库加载到 runtime 数据结构。 SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME #将 admin variables 从 runtime 持久化到内存数据库中。 LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK #从磁盘数据库中加载 admin variables 到内存数据库中。 SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK #将 admin variables 从内存数据库中持久化到磁盘数据库。 LOAD ADMIN VARIABLES FROM CONFIG #从配置文件中加载 admin variables 到内存数据库中。 --- #配置 ProxySQL 主从分组信息 ####添加组 insert into mysql_replication_hostgroups ( writer_hostgroup, reader_hostgroup, comment) values (10,20,'proxy'); load mysql servers to runtime; #生效配置 save mysql servers to disk; #保存配置 ####添加主从服务器节点 insert into mysql_servers(hostgroup_id,hostname,port) values (10,'10.0.0.160',3306); insert into mysql_servers(hostgroup_id,hostname,port) values (20,'10.0.0.161',3306); load mysql servers to runtime; #生效配置 save mysql servers to disk; #保存配置 --- #配置监控账号 ####ProxySQL端: #修改监控账号与密码 set mysql-monitor_username='monitor'; set mysql-monitor_password='123456'; #上面这两句是修改变量的方式还可以在main库下面用sql语句方式修改 UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username'; UPDATE global_variables SET variable_value='monitor' WHERE variable_name='123456'; #生效配置 load mysql variables to runtime; #保存配置 save mysql variables to disk; #查看连接日志 select * from monitor.mysql_server_connect_log; #查看ping日志 select * from monitor.mysql_server_ping_log;  ####监控服务器: #需要创建监控账号 grant replication client on *.* to monitor@'172.16.60.%' identified by '123456'; --- #配置对外访问账号 ##注意:SQL 请求所使用的用户配置,都需要在 MySQL 节点创建上 --- ####ProxySQL端: insert into mysql_users (username,password,default_hostgroup) values ('proxysql','123456',10); #10为默认写组 load mysql users to runtime; save mysql users to disk; ####监控服务器: GRANT ALL ON *.* TO 'proxysql'@'%' IDENTIFIED BY '123456'; --- #配置读写分离 #select..limit..的语句,会被路由到10号组 insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) VALUES (1,1,'^SELECT.*LIMIT.*',10,1); #select..的语句,会被路由到20号组 insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) VALUES (2,1,'^SELECT',20,1); #配置生效 load mysql query rules to runtime; #保存配置 save mysql query rules to disk; ##测试 mysql -uproxysql -p123456 -P6033 -h127.0.0.1 -e "select * from mysql.user limit 10;" #看是否路由到10组内的机器中 mysql -uproxysql -p123456 -P6033 -h127.0.0.1 -e "select * from mysql.user;" #看是否路由到20组内的机器中 --- #参考资料: https://www.cnblogs.com/keme/p/12290977.html https://www.cnblogs.com/kevingrace/p/10329714.html
分享到: