Proxysql读写分离

news2024/11/24 5:18:44

Proxysql读写分离

主从配置

# /etc/my.cnf
主节点
[mysqld]
log-bin=mysql-bin
server-id=1

从节点
[mysqld]
server-id=2
read_only=1
#初始化以及创建主从复制用户
mysql> alter user 'root'@'localhost' identified  with mysql_native_password by 'Jianren@123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> create user 'slave'@'%' identified with mysql_native_password by 'Jianren@123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication  slave  on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

主从复制部署文档参考

#创建proxysql用户及监控用户
mysql> create user 'proxy'@'%' identified with mysql_native_password by 'Jianren@123';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on  *.* to proxy;
Query OK, 0 rows affected (0.00 sec)

mysql> create user 'monitor'@'%' identified with mysql_native_password by 'Jianren@123' ;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to monitor ;
Query OK, 0 rows affected (0.00 sec)

安装proxysql

# 配置源
cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL
baseurl=http://repo.proxysql.com/ProxySQL/proxysql-2.5.x/centos/\$releasever
gpgcheck=0
gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
EOF

# 安装
yum -y install proxysql

# 安装mysql客户端proxysql使用
wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
rpm -ivh mysql80-community-release-el7-11.noarch.rpm
yum -y install mysql-community-client

# 启动proxysql
systemctl enable --now proxysql

加入节点

# 登录管理
mysql -uadmin -padmin -P6032 -h127.0.0.1 --prompt='Admin>'

# 加入主节点,可以称为写节点
Admin> INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,comment) VALUES (1,'10.10.10.10',3306,1,'主');

# 加入从节点,可以称为读节点
Admin> INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,comment) VALUES (2,'10.10.10.11',3306,1,'备');

Admin> SELECT hostgroup_id, hostname, port,weight,comment,status FROM mysql_servers;
+--------------+-------------+------+--------+---------+--------+
| hostgroup_id | hostname    | port | weight | comment | status |
+--------------+-------------+------+--------+---------+--------+
| 1            | 10.10.10.10 | 3306 | 1      | 主      | ONLINE |
| 2            | 10.10.10.11 | 3306 | 1      | 备      | ONLINE |
+--------------+-------------+------+--------+---------+--------+
2 rows in set (0.00 sec)

注: hostgroup_id区分读写组、hostname为节点IP、portMySQL端口、weight默认1、comment备注区分作用
# 查询监控配置
Admin> select * from global_variables where variable_name like "mysql-monitor%";

# 配置监控用户名
Admin> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
Query OK, 1 row affected (0.00 sec)

# 配置密码
Admin> UPDATE global_variables SET variable_value='Jianren@123' WHERE variable_name='mysql-monitor_password';
Query OK, 1 row affected (0.00 sec)

# 查询监控配置
Admin> select * from global_variables where variable_name like "mysql-monitor%";

#载入使用当前配置
Admin> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

# 持久化到磁盘,重启配置依然还在
Admin> SAVE MYSQL VARIABLES TO DISK;
Query OK, 158 rows affected (0.01 sec)

Admin> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

Admin> SAVE MYSQL SERVERS TO DISK;
Query OK, 0 rows affected (0.01 sec)

# 监视和分析 ProxySQL 中 MySQL 服务器的性能和可用性
Admin> SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 4;
+-------------+------+------------------+----------------------+------------+
| hostname    | port | time_start_us    | ping_success_time_us | ping_error |
+-------------+------+------------------+----------------------+------------+
| 10.10.10.10 | 3306 | 1698902922196895 | 427                  | NULL       |
| 10.10.10.11 | 3306 | 1698902922196793 | 508                  | NULL       |
| 10.10.10.10 | 3306 | 1698902912195542 | 324                  | NULL       |
| 10.10.10.11 | 3306 | 1698902912195448 | 398                  | NULL       |
+-------------+------+------------------+----------------------+------------+
注: error表中 null为正常 有error为异常

# 监视和分析 ProxySQL 与 MySQL 服务器之间的连接事件和活动
Admin> SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 4;
+-------------+------+------------------+-------------------------+---------------+
| hostname    | port | time_start_us    | connect_success_time_us | connect_error |
+-------------+------+------------------+-------------------------+---------------+
| 10.10.10.11 | 3306 | 1698902932300587 | 1438                    | NULL          |
| 10.10.10.10 | 3306 | 1698902931312451 | 1337                    | NULL          |
| 10.10.10.10 | 3306 | 1698902872353367 | 1380                    | NULL          |
| 10.10.10.11 | 3306 | 1698902871311131 | 2046                    | NULL          |
+-------------+------+------------------+-------------------------+---------------+
# 将一个新的用户记录插入到 mysql_users 表中 用于创建数据库用户 并连接到数据库服务器。
Admin> INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('proxy','Jianren@123',1);
Query OK, 1 row affected (0.00 sec)

Admin> INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('monitor','Jianren@123',2);
Query OK, 1 row affected (0.01 sec)

Admin> LOAD MYSQL USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

Admin> SAVE MYSQL USERS TO DISK;
Query OK, 0 rows affected (0.01 sec)

# 查询用户
Admin> select username, password, active, default_hostgroup from mysql_users;
+----------+-------------+--------+-------------------+
| username | password    | active | default_hostgroup |
+----------+-------------+--------+-------------------+
| proxy    | Jianren@123 | 1      | 1                 |
| monitor  | Jianren@123 | 1      | 2                 |
+----------+-------------+--------+-------------------+
2 rows in set (0.00 sec)

Admin> select * from mysql_users \G 
*************************** 1. row ***************************
              username: proxy
              password: Jianren@123
                active: 1
               use_ssl: 0
     default_hostgroup: 1
        default_schema: NULL
         schema_locked: 0
transaction_persistent: 1
          fast_forward: 0
               backend: 1
              frontend: 1
       max_connections: 10000
            attributes: 
               comment: 
*************************** 2. row ***************************
              username: monitor
              password: Jianren@123
                active: 1
               use_ssl: 0
     default_hostgroup: 2
        default_schema: NULL
         schema_locked: 0
transaction_persistent: 1
          fast_forward: 0
               backend: 1
              frontend: 1
       max_connections: 10000
            attributes: 
               comment: 
2 rows in set (0.00 sec)

创建规则

# 创建规则写入,更新操作使用主节点
Admin> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) values(1,1,'^select.*from update$',1,1);
Query OK, 1 row affected (0.00 sec)

#创建规则查询数据使用从节点
Admin> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) values(2,1,'^select',2,1);
Query OK, 1 row affected (0.00 sec)

#创建规则查询库使用从节点
Admin> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) values(3,1,'^show',2,1);
Query OK, 1 row affected (0.00 sec)

# 查看规则
Admin> select rule_id,active,match_digest,destination_hostgroup,apply from mysql_query_rules;
+---------+--------+-----------------------+-----------------------+-------+
| rule_id | active | match_digest          | destination_hostgroup | apply |
+---------+--------+-----------------------+-----------------------+-------+
| 1       | 1      | ^select.*from update$ | 1                     | 1     |
| 2       | 1      | ^select               | 2                     | 1     |
| 3       | 1      | ^show                 | 2                     | 1     |
+---------+--------+-----------------------+-----------------------+-------+
3 rows in set (0.00 sec)

# 载入使用并持久化到磁盘
Admin> load mysql query rules to runtime;
Query OK, 0 rows affected (0.00 sec)

Admin> load admin variables to runtime;
Query OK, 0 rows affected (0.00 sec)

Admin> save mysql query rules to disk ;
Query OK, 0 rows affected (0.02 sec)

Admin> save admin variables to disk ;
Query OK, 49 rows affected (0.00 sec)

插入数据,查询数据

# 切换proxy用户
[root@localhost ~]# mysql -uproxy -pJianren@123 -P6033 -h127.0.0.1 
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 2
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> create database db1;
Query OK, 1 row affected (0.00 sec)

mysql> USE db1;
Database changed

mysql> CREATE TABLE test1 (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255));
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO test1 (id, name) VALUES(1, 'kk'),(2, 'nameqq');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

查询记录验证

# 切换管理 查询
mysql -uadmin -padmin -P6032 -h127.0.0.1 --prompt='Admin>'

Admin> select * from stats_mysql_query_digest \G
规则生效

image-20231102133848247

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1164806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT】基本的绘图操作和高级绘图

基本绘图 新建项目 重新绘图事件 画基本图形 #include "widget.h" #include "ui_widget.h" #include <QPainter>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }/…

Jetpack:027-Jetpack中的Switch

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中Slider相关的内容&#xff0c;本章回中 主要介绍Switch。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧&#xff01; 1. 概念介绍 我们在本章回…

Collction的List方法,list特有方法,遍历方式,迭代器选择

[to] list特有方法 //插入指定元素//list.add(1,"ddd");//System.out.println(list);//[aaa, ddd, bbb, ccc]//这个表示在一索引的位置插入ddd//他会把原来一索引位置的元素往后移动一位在添加//删除指定元素//String remove list.remove(1);//System.out.println(…

交换机基本配置

交换机基本配置 思科设备操作系统的3种模式 1.用户模式&#xff1a;标识符&#xff1a;> 默认处于的模式。 2.特权模式&#xff1a;标识符&#xff1a;# 在此模式中常常进行一些配置保存或配置查看。 3.全局模式&#xff1a;标识符&#xff1a;(config)# 在此模式中常…

Python自动化测试面试题总结

python有哪些数据类型怎么将两个字典合并python如何将json写到文件里&#xff1f;在except语句中return后还会不会执行finally中的代码&#xff1f;什么是可变、不可变类型&#xff1f;python函数调用时参数的传递是值传递还是引用传递&#xff1f;python深浅拷贝的区别python为…

assert断言与const修饰指针的妙用(模拟实现strcpy函数)

assert断言 目录 assert断言的妙用&#xff1a; 头文件&#xff1a; 使用方法&#xff1a; const修饰指针的妙用 主要用法 const在*左边 const在*右边 断言和const修饰指针的应用 模拟实现C语言strcpy函数 1、若字符串str1,str2有空指针怎么办&#xff1f; 2.str2改变…

【ML】线性回归

线性回归 以房价为例。 单因子线性回归 房价和面积建立回归模型。 多因子线性回归 房价和面积、收入、房龄、地区人口数建立回归模型。 线性回归模型评估 MSE 越小越好&#xff0c; R 2 R^2 R2越接近1越好 MSE&#xff08;预测值y 和实际值y’ 的均方误差&#xff09; …

Java值传递与引用传递的区别

我们先来看一下值传递和引用传递的定义&#xff1b;值传递&#xff1a;在调用函数时&#xff0c;将实际参数复制一份传递到函数中&#xff0c;这样在函数中对参数进行修改&#xff0c;就不会影响到原来的实际参数。引用传递:在调用函数时&#xff0c;将实际参数的地址直接传递到…

使用这些优秀的 iPad App 提升您的技术水平

还记得当年 iPad 隆重登场&#xff0c;每个人都对其改变游戏规则的潜力感到震惊吗&#xff1f;嗯&#xff0c;你猜怎么着&#xff1f;iPad 应用程序世界已经发展&#xff0c;我们为您精心挑选了最好的应用程序&#xff08;由 AVNation 提供&#xff09;。 1、Crestron Electro…

【CSDN 每日一练 ★★☆】【动态规划】最小路径和

【CSDN 每日一练 ★★☆】【动态规划】最小路径和 动态规划 题目 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 示例 1&#x…

java毕业设计基于ssm的招聘求职网站

项目介绍 本前途招聘求职网站是针对目前仓库的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的前途招聘求职网站存在的问题进行分析&#xff0c;完善用户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准确…

微服务架构之路1,服务如何拆分?使用微服务的注意事项?

目录 一、前言二、单体服务的弊端三、微服务化四、服务如何拆分&#xff1f;五、使用微服务的注意事项1、服务如何定义2、服务如何发布和订阅3、服务如何监控4、服务如何治理5、故障如何定位 大家好&#xff0c;我是哪吒。 一、前言 微服务已经是Java开发的必备技能&#xff…

Java--多线程--Thread类+Runnable接口

1.多进程与多线程 1.1多进程&#xff1a; 一个进程是一个包含自身地址的程序&#xff0c;每个独立执行的程序都称为进程&#xff0c;也就是正在执行的程序&#xff0c;系统可以分配给每个进程一段有限的使用CPU的时间&#xff08;CPU时间片&#xff09;&#xff0c;CPU在这个时…

数据库实验:SQL的多表数据查询

目录 实验目的实验内容实验要求实验过程实验代码结果示意 书接上文&#xff0c;但是感觉之前的形式不太好用&#xff0c;至少不是很方便观看&#xff0c;所以这篇尝试改变一下写法&#xff0c;希望可以提升一些观感 实验目的 (1) 掌握RDBMS的数据多表查询功能 (2) 掌握SQL语言…

Junit使用

一、Junit常用注释 Test 将一个普通的方法修饰成为一个测试方法。 Test&#xff08;exceptedXX.class&#xff09; Test(exceptedArithmeticException.class):预期被测方法是否抛出ArithmeticException异常Test&#xff08;timeout毫秒&#xff09;BeforeClass&#xff1a;它…

velero备份k8s集群

流程图 velero备份原理 本地 Velero 客户端发送备份指令。Kubernetes 集群内就会创建一个 Backup 对象。BackupController 监测 Backup 对象并开始备份过程。BackupController 会向 API Server 查询相关数据。BackupController 将查询到的数据备份到远端的对象存储。 velero的…

【深度学习】pytorch——Tensor(张量)详解

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ pytorch——Tensor 简介创建Tensortorch.Tensor( )和torch.tensor( )的区别torch.Tensor( )torch.tensor( ) tensor可以是一个数&#xff08;标量&#xff09;、一维数组&#xff08;向量&#xff09;、二维数组&…

EasyExcel动态复杂表头导出方法

目录 需求分析解决方案数据问题数据导入 需求分析 公司数据比较特殊有一部分数据需要动态修改导致信息导入时表头是不确定的&#xff0c;但其中又有一部分表头是固定的&#xff0c;如下图所示&#xff0c;如果表头全部是固定的话可以通过EasyExcel实体类的注解很轻松的解决&am…

Linux CentOS7.9安装OpenJDK17

Linux CentOS7.9安装OpenJDK17 一、OpenJDK下载 清华大学开源软件镜像站 国内的站点&#xff0c;下载速度贼快 二、上传解压 文件上传到服务器后&#xff0c;解压命令&#xff1a; tar -zxvf jdk-xxxx-linux-x64.tar.gz三、配置环境 export JAVA_HOME/home/local/java/j…

ffmpeg mp3截取命令,视频与mp3合成带音频视频命令

从00:00:03.500开始截取往后长度到结尾的mp3音频&#xff08;这个更有用&#xff0c;测试好用&#xff09; ffmpeg -i d:/c.mp3 -ss 00:00:03.500 d:/output.mp3 将两个音频合并成一个音频&#xff08;测试好用&#xff09; ffmpeg -i "concat:d:/c.mp3|d:/output.mp3&…