proxysql读写分离的部署

关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

设置主机名称

hostnamectl set-hostname zhangyijia-host71.database.com && bash
hostnamectl set-hostname zhangyijia-host72.database.com && bash

两台主机安装mysql

mkdir packages
cd packages
rz mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar
tar -xf mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar
yum remove mariadb-server-5.5.68-1.el7.x86_64 -y
rm -rf mysql-community-server-minimal-5.7.22-1.el7.x86_64.rpm
yum install ./*.rpm -y
systemctl start mysqld
cat /var/log/mysqld.log | grep pass
2024-12-14T12:58:27.564569Z 1 [Note] A temporary password is generated for root@localhost: qohD0Qa&dsST
mysqladmin -u root -p"qohD0Qa&dsST" password aaA...111
systemctl restart mysqld

主从配置

主节点

vim /etc/my.cnf
[client]
#客户端字符集
default-character-set=UTF8MB4
[mysqld]
#设置server_id,同一局域网中需要唯一
server_id=1
#服务端字符集
character-set-server=UTF8MB4
#开启二进制日志功能
log-bin=master-mysql-bin  
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
#设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
#二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

从节点

vim /etc/my.cnf
[client]
#客户端字符集
default-character-set=UTF8MB4
[mysqld]
#设置server_id,同一局域网中需要唯一
server_id=2
#服务端字符集
character-set-server=UTF8MB4
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=slave-1011-mysql-bin
#relay_log配置中继日志
relay_log=slave-1011-mysql-relay-bin
#log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
#slave设置为只读(具有super权限的用户除外)
read_only=1
#设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
#设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
#二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

重启两台mysql服务

service mysqld restart

主数据库

mysql -uroot -paaA...111

CREATE USER 'slaveusr'@'%' IDENTIFIED with mysql_native_password BY 'slavepwD...123';
GRANT REPLICATION SLAVE ON *.* TO 'slaveusr'@'%';

show master status;

在这里插入图片描述

从数据指向主数据库

mysql -uroot -paaA...111

CHANGE MASTER TO MASTER_HOST="192.168.3.71",MASTER_USER="slaveusr",MASTER_PASSWORD="slavepwD...123", MASTER_LOG_FILE="master-mysql-bin.000001",MASTER_LOG_POS=154;

查看从节点状态

start slave;
show slave status\G

在这里插入图片描述

主从复制验证

create database mytestdb;

从库查看

show databases;

使用proxysql 2.6软件,实现读写分离

cat > /etc/yum.repos.d/proxysql.repo << EOF
[proxysql]
name=ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.6.x/centos/\$releasever
gpgcheck=0
gpgkey=https://repo.proxysql.com/ProxySQL/proxysql-2.6.x/repo_pub_key
EOF

安装ProxySQL

yum -y install proxysql-2.6.6

在这里插入图片描述

启动ProxySQL

systemctl enable --now proxysql

查看占用的端口

ss -antl

在这里插入图片描述

连接proxysql

mysql -uadmin -padmin -h 127.0.0.1 -P6032 --ssl-mode=DISABLED

在这里插入图片描述

添加 mysql 主机master 到 mysql_servers 表中

insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) 
values(10,'192.168.3.71',3306,1,'Write Group');

添加 mysql 从机slave 到 mysql_servers 表中

insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) 
values(20,'192.168.3.72',3306,1,'Read Group');

其中:hostgroup_id 10 表示写组,20表示读组

select * from mysql_servers \G

在这里插入图片描述

保存配置
修改后,需要加载到RUNTIME,并保存到disk

load mysql servers to runtime;
save mysql servers to disk;

在这里插入图片描述

在原有的MySQL主机和从机上创建proxysql的账号密码

mysql -uroot -paaA...111

CREATE USER 'proxysql'@'%' IDENTIFIED BY 'aaA...111';
alter user 'proxysql'@'%' identified with mysql_native_password by 'aaA...111';
grant all on *.* to 'proxysql'@'%';
flush privileges;

在这里插入图片描述

在proxysql主机的mysql_users表中添加刚才在写库上创建的账号
proxysql,proxysql客户端需要使用这个账号来访问数据库
default_hostgroup 默认组设置为写组,也就是10;
当读写分离的路由规则不符合时,会访问默认组的数据库;

登录admin

mysql -uadmin -padmin -h127.0.0.1 -P6032 --ssl-mode=DISABLED
insert into mysql_users(username,password,default_hostgroup,transaction_persistent)
values('proxysql','aaA...111',10,1);
select * from mysql_users \G
# 保存配置
load mysql users to runtime;
save mysql users to disk;

在这里插入图片描述

添加健康检测的帐号

在mysql的端添加属于proxysql的只读账号

CREATE USER 'monitor'@'%' IDENTIFIED BY 'aaA...111';
alter user 'monitor'@'%' identified with mysql_native_password by 'aaA...111';
GRANT SELECT ON *.* TO 'monitor'@'%';
flush privileges;

在这里插入图片描述

在proxysql主机端修改变量设置健康检测的账号

mysql -uadmin -padmin -h127.0.0.1 -P6032 --ssl-mode=DISABLED

set mysql-monitor_username='monitor';
set mysql-monitor_password='aaA...111';
load mysql variables to runtime;
save mysql variables to disk;

在这里插入图片描述

在proxysql主机端添加读写分离的路由规则需求:
1)将 select 查询语句全部路由至 hostgroup_id=20 的组(也就是读组)
2)但是 select * from tb for update 这样的语句是会修改数据的,所以需要单独定义,将它路由至 hostgroup_id=10 的组(也就是写组)
3)其他没有被规则匹配到的组将会被路由至用户默认的组(mysql_users 表中的 default_hostgroup)

登录admin

mysql -uadmin -padmin -h127.0.0.1 -P6032 --ssl-mode=DISABLED

insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)
values(1,1,'^SELECT.*FOR UPDATE$',10,1);
 
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)
values(2,1,'^SELECT',20,1);
 
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)
values(3,1,'^SHOW',20,1);

select rule_id,active,match_digest,destination_hostgroup,apply from mysql_query_rules;   #查看规则

rule_id:规则的唯一标识符,这里是1。
active:规则是否激活,1表示激活。
match_digest:用于匹配查询的正则表达式。这里’^SELECT.*FOR UPDATE$'表示匹配所有以SELECT开头,后面跟着任意字符,并以FOR UPDATE结尾的查询。
destination_hostgroup:查询应该被路由到的主机组的ID,这里是10。
apply:是否应用此规则,1表示应用。
持久化,保存规则到disk

在这里插入图片描述

load mysql query rules to runtime;
load admin variables to runtime;
save mysql query rules to disk;
save admin variables to disk;

验证读写分离

登录 proxysql 客户端 登录用户是刚才我们在 mysql_user 表中创建的用户,端口为6033 在proxysql主机的proxysql账户下尝试对数据库进行操作

验证读写分离是否成功
proxysql有个类似审计的功能,可以查看各类SQL的执行情况,其需要在proxysql管理端执行

mysql -uproxysql -paaA...111 -h127.0.0.1 -P6033 --ssl-mode=DISABLED

SHOW DATABASES;

在proxysql主机的proxysql账户下尝试对数据库进行操作

create database xiaowang;         #写操作
create database xiaozhou;          #写操作
select user,host from mysql.user;     #读操作

验证读写分离是否成功

proxysql有个类似审计的功能,可以查看各类SQL的执行情况,其需要在proxysql管理端执登录admin

mysql -uadmin -padmin -h127.0.0.1 -P6032 --ssl-mode=DISABLED
select * from stats_mysql_query_digest \G

在这里插入图片描述

  • 注意事项

1、本环境系统使用的为CentOS7。

2、集群搭建要求的版本软件,否则无法正常使用。

3、MySQL同步故障:“ Slave_SQL_Running:No“ 两种解决办法。

解决办法一

Slave_SQL_Running: No
(1)程序可能在slave上进行了写操作

(2)也可能是slave机器重起后,[事务回滚]造成的

一般是事务回滚造成的:
解决办法:

mysql>stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql>start slave ;

解决办法二

首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录File和Position对应的值

进入master

mysql> show master status;然后到slave服务器上执行手动同步:

mysql>stop slave ;

mysql>change master to master_host='192.168.219.142',master_port=3306,

master_log_file='master-mysql-bin.000001',master_log_pos=536,

master_connect_retry=30,master_user='root',master_password='123456';

mysql>start slave ;

决办法二

首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录File和Position对应的值

进入master

mysql> show master status;然后到slave服务器上执行手动同步:

mysql>stop slave ;

mysql>change master to master_host='192.168.219.142',master_port=3306,

master_log_file='master-mysql-bin.000001',master_log_pos=536,

master_connect_retry=30,master_user='root',master_password='123456';

mysql>start slave ;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android各个版本存储权限适配

一、Android6.0-9.0 1、动态权限申请&#xff1a; private static String[] arrPermissions {android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE,android.Manifest.permission.ACCESS_FINE_LOCATION,android.Manifest.…

【xcode 16.2】升级xcode后mac端flutter版的sentry报错

sentry_flutter 7.11.0 报错 3 errors in SentryCrashMonitor_CPPException with the errors No type named terminate_handler in namespace std (line 60) and No member named set_terminate in namespace std 替换sentry_flutter版本为&#xff1a; 8.3.0 从而保证oc的…

ASP.NET Core 6.0 如何处理丢失的 Startup.cs 文件

介绍 .NET 6.0 已经发布&#xff0c;ASP.NET Core 6.0 也已发布。其中有不少变化让很多人感到困惑。例如&#xff0c;“谁动了我的奶酪”&#xff0c;它在哪里Startup.cs&#xff1f;在这篇文章中&#xff0c;我将深入研究这个问题&#xff0c;看看它移动到了哪里以及其他变化。…

idea plugin插件开发——入门级教程(IntelliJ IDEA Plugin)

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;idea plugin插件开发——入门级教程&#xff08;IntelliJ IDEA Plugin&#xff09;-CSDN博客 目录 前言 官方 官方文档 代码示例 开发前必读 Intellij、Gradle、JDK 版本关系 plu…

概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础

对于连续型随机变量&#xff0c;分布函数&#xff08;Cumulative Distribution Function, CDF&#xff09;是概率密度函数&#xff08;Probability Density Function, PDF&#xff09;的变上限积分&#xff0c;概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…

三分钟简单了解一些HTML的标签和语法_02

1.a标签演示 点击然后跳转 代码加入title 2.图片链接 3.锚点链接 点击就会跳转的当前位置 4.a标签小知识补充 该实例会跳转到顶,锚点链接则会跳转到相应的锚点 5. 结果:直接跳转到该页面的锚点处 6. 在 HTML 中&#xff0c;<tr>标签表示表格中的行&#xff08;TableRow&…

mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看数据库,删除数据库,使用数据库;

SQL通用语法 SQL语句分类 DDL data definition language : 用来创建数据库&#xff0c;创建表&#xff0c;创建表中的字段&#xff0c;创建索引。因此成为 数据定义语言 DML data manipulation language 有了数据库和表以及字段后&#xff0c;那么我们就需要给这个表中 添加数…

基于ollama,langchain,springboot从零搭建知识库三【解析文档并存储到向量数据库】

安装环境 安装pgvector&#xff0c;先设置docker镜像源&#xff1a; vim /etc/docker/daemon.json {"registry-mirrors": ["https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com","https://mirror.ccs.tencentyun.com",&…

C# OpenCV机器视觉:红外体温检测

在一个骄阳似火的夏日&#xff0c;全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇&#xff0c;平日里熙熙攘攘的街道变得冷冷清清&#xff0c;人们戴着口罩&#xff0c;行色匆匆&#xff0c;眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人&#xff0c;看着这一…

计算机视觉算法实战——无人机检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​ 1. 引言✨✨ 随着无人机技术的快速发展&#xff0c;无人机在农业、物流、监控等领域的应用越来越广泛。然而&#xff0c;无人机的滥用也带…

日志收集Day004

1.filebeat安装 基于二进制安装filebeat (1)下载filebeat软件包 (2)解压软件包 tar xf filebeat-7.17.5-linux-x86_64.tar.gz -C /app/softwares/ (3)验证filebeat安装是否成功 cd /app/softwares/filebeat-7.17.5-linux-x86_64/ ln -svf pwd/filebeat /usr/local/sbin/ f…

Vue入门(Vue基本语法、axios、组件、事件分发)

Vue入门 Vue概述 Vue (读音/vju/&#xff0c;类似于view)是一套用于构建用户界面的渐进式框架&#xff0c;发布于2014年2月。与其它大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三…

缓存商品、购物车(day07)

缓存菜品 问题说明 问题说明&#xff1a;用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大。 结果&#xff1a; 系统响应慢、用户体验差 实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询…

数据结构测试题2

一、单选题&#xff08;每题 2 分&#xff0c;共20分&#xff09; 1. 栈和队列的共同特点是( A )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 2. 用链接方式存储的队列&#xff0c;在进行插入运算时( C ) A. 仅修改头指针 B. 头…

qml Settings详解

1、概述 QML中的Settings类提供了一种便捷的方式来保存和恢复应用程序的配置信息&#xff0c;如用户名、密码、窗口位置和大小等。它简化了配置数据的存储过程&#xff0c;无需使用像SQLite这样的数据库系统。通过使用Settings&#xff0c;开发者可以轻松实现应用程序设置的持…

认识Django项目模版文件——Django学习日志(二)

1.默认文件介绍 └── djangoproject1/├── djangoproject1/│ ├── urls.py [URL和函数的对应关系]【常用文件】│ ├── settings.py [项目配置文件]【常用文件】│ ├── _init_.py│ ├── wsgi.py [接受网络请求] 【不要动】│ └──…

Qt实践:一个简单的丝滑侧滑栏实现

Qt实践&#xff1a;一个简单的丝滑侧滑栏实现 笔者前段时间突然看到了侧滑栏&#xff0c;觉得这个抽屉式的侧滑栏非常的有趣&#xff0c;打算这里首先尝试实现一个简单的丝滑侧滑栏。 首先是上效果图 &#xff08;C&#xff0c;GIF帧率砍到毛都不剩了&#xff09; QProperty…

【Linux网络编程】传输层协议

目录 一&#xff0c;传输层的介绍 二&#xff0c;UDP协议 2-1&#xff0c;UDP的特点 2-2&#xff0c;UDP协议端格式 三&#xff0c;TCP协议 3-1&#xff0c;TCP报文格式 3-2&#xff0c;TCP三次握手 3-3&#xff0c;TCP四次挥手 3-4&#xff0c;滑动窗口 3-5&#xf…

[C]基础8.详解操作符

博客主页&#xff1a;算法歌者本篇专栏&#xff1a;[C]您的支持&#xff0c;是我的创作动力。 文章目录 0、总结1、操作符的分类2、二进制和进制转换2.1、2进制转10进制2.2、10进制转2进制2.3、2进制转8进制和16进制 3、原码、反码、补码4、移位操作符4.1 左移操作符4.2 右移操…

基于Springboot用axiospost请求接收字符串参数为null的解决方案

问题 ​ 今天在用前端 post 请求后端时发现&#xff0c;由于是以 Json对象的形式传输的&#xff0c;后端用两个字符串形参无法获取到对应的参数值 前端代码如下&#xff1a; axios.post(http://localhost:8083/test/postParams,{a: 1, b:2} ,{Content-Type: application/jso…